user_aggregator_site_feed); if (db_num_rows($feed_check)) { $feed = db_fetch_object($feed_check); return $feed->fid; } } function _user_aggregator_user_can_modify($user) { return $user->user_aggregator_isowner OR (!$user->user_aggregator_feed_fid); } function _user_aggregator_assign_feed($uid, $fid, $owner = 0) { db_query("REPLACE {user_feeds} (uid, fid, owner) VALUES (%d, %d, %d)", $uid, $fid, $owner); } function _user_aggregator_unassign_feed($uid, $fid) { db_query("DELETE FROM {user_feeds} WHERE uid = %d AND fid = %d", $uid, $fid); } function _user_aggregator_feed_save(&$user, $edit) { if ($edit['user_aggregator_site_feed']) { db_query(" INSERT INTO {user_aggregator_pending} (uid, site_name, site_url, site_feed, site_fid, user_data, site_data) VALUES (%d, '%s', '%s', '%s', %d, '%s', '%s')", $user->uid, db_escape_string($edit['user_aggregator_site_name']), db_escape_string($edit['user_aggregator_site_link']), db_escape_string($edit['user_aggregator_site_feed']), _user_aggregator_feed_exists($edit), serialize($user), serialize($edit) ); drupal_set_message('Your submission of ' . db_escape_string($edit['user_aggregator_site_name']) . ' to the site aggregator has been received. It will be approved as long as it is new and not vile.'); } else { _user_aggregator_unassign_feed($user->uid, $user->user_aggregator_feed_fid); } } function _user_aggregator_validation_form() { $edit_data = $_POST['edit']; $feeds_to_save = $edit_data['save_user']; if (count($feeds_to_save)) { $save_user_list = implode(',', $feeds_to_save); $feed_data = db_query(" SELECT uid, site_fid, user_data, site_data FROM {user_aggregator_pending} WHERE uid IN ($save_user_list) "); while ($the_feed = db_fetch_object($feed_data)) { $feeds_to_delete[$the_feed->uid] = $the_feed->uid; $user_data = unserialize($the_feed->user_data); $site_data = unserialize($the_feed->site_data); if (_user_aggregator_user_can_modify($user_data)) { _user_aggregator_update_feed($user_data, $site_data); } _user_aggregator_assign_feed( $user_data->uid, $the_feed->site_fid, $user_data->user_aggregator_isowner ); } } $feeds_to_delete = array_merge($feeds_to_delete, $edit_data['delete_user']); if (count($feeds_to_delete)) { $delete_user_list = implode(',', $feeds_to_delete); db_query("DELETE FROM {user_aggregator_pending} WHERE uid IN ($delete_user_list)"); } // get the pending items $pending_items = db_query(" SELECT u.uid, u.site_name, u.site_url, u.site_feed FROM {user_aggregator_pending} u "); // build a table with a link to each site, site feed and save or delete checkboxes $table_header = '
Site name: $user->user_aggregator_site_name
Feed url: $user->user_aggregator_site_feed
"; } return $output; } function user_aggregator_menu($may_cache) { global $user; if ($may_cache) { $items[] = array('path' => 'admin/user_aggregator', 'title' => t('approve user feeds'), 'callback' => '_user_aggregator_validation_form'); } return $items; } function user_aggregator_settings() { // Handling of categories: $available_categories = array(); $available_category_query = db_query('SELECT cid, title FROM {aggregator_category} ORDER BY title'); while($available_category = db_fetch_object($available_category_query)) { $available_categories[$available_category->title] = $available_category->title; } $default_categories = variable_get('user_aggregator_feed_default_categories', array()); $visible_categories = variable_get('user_aggregator_feed_visible_categories', array()); $output .= $form['user_aggregator_on_register'] = array( '#type' => 'radios', '#title' => 'Show on initial account setup', '#default_value' => variable_get('user_aggregator_on_register', 0), '#options' => array(0 => 'No', 1 => 'Yes')). $form['categorization'] = array( '#type' => 'fieldset', '#title' => t('Categorization'), '#collapsible' => TRUE, '#collapsed' => TRUE, ). $form['categorization']['user_aggregator_feed_multiple_categories'] = array( '#type' => 'radios', '#title' => t('Users can set multiple feed categories'), '#default_value' => variable_get('user_aggregator_feed_multiple_categories', 0), '#options' => array(0 => 'No', 1 => 'Yes')). $form['categorization']['user_aggregator_feed_multiple_categories'] = array( '#type' => 'radios', '#title' => t('Users can set multiple feed categories'), '#default_value' => variable_get('user_aggregator_feed_multiple_categories', 0), '#options' => array(0 => 'No', 1 => 'Yes')). $form['categorization']['user_aggregator_feed_default_categories'] = array( '#type' => 'checkboxes', '#title' => t('Default categories'), '#default_value' => $default_categories, '#options' => $available_categories, '#description' => t('User entered feeds will be assigned to the selected categories by default'), ). $form['categorization']['user_aggregator_feed_visible_categories'] = array( '#type' => 'checkboxes', '#title' => t('Visible categories'), '#default_value' => $visible_categories, '#options' => $available_categories, '#description' => t('The feed categories available for user feeds assignment.'), ); $period = drupal_map_assoc(array(900, 1800, 3600, 7200, 10800, 21600, 32400, 43200, 64800, 86400, 172800, 259200, 604800, 1209600, 2419200), 'format_interval'); $output = $form['user_aggregator_feed_refresh'] = array( '#type' => 'select', '#title' => t('Update interval'), '#default_value' => variable_get('user_aggregator_feed_refresh', 3600), '#options' => $$period, '#description' => t('The refresh interval indicating how often you want to update user entered feeds. Requires crontab.'),) . $output; return $output; } function user_aggregator_user($op, &$edit, &$user, $category = NULL) { switch ($op) { case 'insert': case 'update': if ($category == 'account') { _user_aggregator_feed_save($user, $edit); } break; case 'load': $query = db_query(" SELECT uf.uid, uf.owner, f.* FROM {user_feeds} uf JOIN {aggregator_feed} f on f.fid = uf.fid WHERE f.url='$user->user_aggregator_site_feed' AND uf.uid = $user->uid "); if(db_num_rows($query)) { $userfeed = db_fetch_object($query); $user->user_aggregator_feed_fid = $userfeed->fid; $user->user_aggregator_site_name = $userfeed->title; $user->user_aggregator_site_feed = $userfeed->url; $user->user_aggregator_site_link = $userfeed->link; $user->user_aggregator_feed_categories = array(); $user->user_aggregator_isowner = $userfeed->owner; $cat_query_str = "SELECT cf.fid, cf.cid, c.title FROM {aggregator_category_feed} cf " ."JOIN {aggregator_category} c ON c.cid = cf.cid " ."WHERE cf.cid = c.cid AND cf.fid = $userfeed->fid"; $cat_query = db_query($cat_query_str); if (db_num_rows($cat_query)) { while($cat = db_fetch_object($cat_query)) { $user->user_aggregator_feed_categories[] = $cat->title; } } } else { unset($user->user_aggregator_feed_fid); unset($user->user_aggregator_site_name); unset($user->user_aggregator_site_feed); unset($user->user_aggregator_feed_categories); unset($user->user_aggregator_site_link); unset($user->user_aggregator_isowner); } break; case 'form': if ($category == 'account') { return array(array('title' => 'Syndicate your site','data' => _user_aggregator_form($user, TRUE))); } break; case 'register': if (variable_get('user_aggregator_on_register', 0)) { return array(array('title' => 'Syndicate your site','data' => _user_aggregator_form($user, FALSE))); } break; case 'validate': if ($category == 'account') { if ($edit['user_aggregator_site_feed']) { $user->user_aggregator_feed_fid = _user_aggregator_feed_exists($edit); } else { $user->user_aggregator_isowner = 0; } } break; case 'view': if ($user->user_aggregator_feed_fid) { return array(t('Home page') => "user_aggregator_site_link\">" . "$user->user_aggregator_site_name " . theme('xml_icon', $user->user_aggregator_site_feed)); } break; } } ?>