Index: feedapi_inherit/feedapi_inherit.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/feedapi/feedapi_inherit/Attic/feedapi_inherit.module,v retrieving revision 1.1.2.13 diff -r1.1.2.13 feedapi_inherit.module 33,36c33,38 < if ($node->feedapi->feed_nid) { < $feed_node = node_load($node->feedapi->feed_nid); < if (feedapi_enabled($feed_node->type, 'feedapi_inherit')) { < _feedapi_inherit_do_inherit($node, $feed_node); --- > if ($node->feedapi_node->feed_nids) { > foreach ($node->feedapi_node->feed_nids as $feed_nid) { > $feed_node = node_load($feed_nid); > if (feedapi_enabled($feed_node->type, 'feedapi_inherit')) { > _feedapi_inherit_do_inherit($node, $feed_node); > } Index: feedapi_node/feedapi_node.install =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/feedapi/feedapi_node/Attic/feedapi_node.install,v retrieving revision 1.1.2.7 diff -r1.1.2.7 feedapi_node.install 23c23,32 < ) DEFAULT CHARSET=latin1;"); --- > ) DEFAULT CHARSET=latin1; > "); > db_query("CREATE TABLE {feedapi_node_item_feed} ( > `feed_nid` int(10) unsigned NOT NULL default '0', > `feed_item_nid` int(10) unsigned NOT NULL default '0', > PRIMARY KEY (`feed_nid`,`feed_item_nid`), > KEY `feed_nid` (`feed_nid`), > KEY `feed_item_nid` (`feed_item_nid`) > ) DEFAULT CHARSET=latin1; > "); 34c43,44 < PRIMARY KEY(nid))"); --- > PRIMARY KEY(nid)) > "); 38a49,55 > db_query("CREATE TABLE {feedapi_node_item_feed} ( > feed_nid integer NOT NULL default '0', > feed_item_nid integer NOT NULL default '0', > PRIMARY KEY (feed_nid,feed_item_nid)) > "); > db_query("CREATE INDEX feed_nid_index on {feedapi_node_item_feed}(feed_nid)"); > db_query("CREATE INDEX feed_item_nid_index on {feedapi_node_item_feed}(feed_item_nid)"); 54c71 < $preset = unserialize('a:3:{s:7:"enabled";s:1:"1";s:12:"items_delete";s:1:"0";s:10:"processors";a:1:{s:12:"feedapi_node";a:7:{s:7:"enabled";s:1:"1";s:6:"weight";s:1:"0";s:12:"content_type";s:5:"story";s:9:"node_date";s:4:"feed";s:7:"promote";s:1:"3";s:9:"list_feed";s:1:"3";s:4:"user";s:5:"admin";}}}'); --- > $preset = unserialize('a:3:{s:7:"enabled";s:1:"1";s:12:"items_delete";s:1:"0";s:10:"processors";a:1:{s:12:"feedapi_node";a:7:{s:7:"enabled";s:1:"1";s:6:"weight";s:1:"0";s:12:"content_type";s:5:"story";s:9:"node_date";s:4:"feed";s:7:"promote";s:1:"0";s:9:"list_feed";s:1:"3";s:4:"user";s:5:"admin";}}}'); 109a127,159 > /** > * Create and populate feed_nid / feed_item_nid table. > * > */ > function feedapi_node_update_3() { > switch ($GLOBALS['db_type']) { > case 'mysqli': > case 'mysql': > $ret[] = update_sql("CREATE TABLE IF NOT EXISTS {feedapi_node_item_feed} ( > `feed_nid` int(10) unsigned NOT NULL default '0', > `feed_item_nid` int(10) unsigned NOT NULL default '0', > PRIMARY KEY (`feed_nid`,`feed_item_nid`), > KEY `feed_nid` (`feed_nid`), > KEY `feed_item_nid` (`feed_item_nid`) > ) DEFAULT CHARSET=latin1; > "); > $ret[] = update_sql("REPLACE INTO {feedapi_node_item_feed} (feed_nid, feed_item_nid) SELECT feed_nid, nid FROM feedapi_node_item"); > $ret[] = update_sql("ALTER TABLE {feedapi_node_item} DROP `feed_nid`"); > break; > case 'pgsql': > $ret[] = update_sql("CREATE TABLE {feedapi_node_item_feed} ( > feed_nid integer NOT NULL default '0', > feed_item_nid integer NOT NULL default '0', > PRIMARY KEY (feed_nid,feed_item_nid)) > "); > $ret[] = update_sql("CREATE INDEX feed_item_nid_index on {feedapi_node_item_feed}(feed_item_nid)"); > $ret[] = update_sql("INSERT INTO {feedapi_node_item_feed} (feed_nid, feed_item_nid) SELECT feed_nid, nid FROM {feedapi_node_item}"); > $ret[] = update_sql("ALTER TABLE {feedapi_node_item} DROP feed_nid"); > break; > } > return $ret; > } > 115a166 > db_query("DROP TABLE {feedapi_node_item_feed}"); 121c172 < } \ No newline at end of file --- > } Index: feedapi_node/feedapi_node.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/feedapi/feedapi_node/Attic/feedapi_node.module,v retrieving revision 1.1.2.15 diff -r1.1.2.15 feedapi_node.module 26a27,60 > case 'load': > $result = db_query('SELECT fi.*, ff.feed_nid FROM {feedapi_node_item} fi JOIN {feedapi_node_item_feed} ff ON fi.nid = ff.feed_item_nid WHERE fi.nid = %d', $node->nid); > while ($f = db_fetch_object($result)) { > $node->feedapi_node = $f; > $feed_nids[$f->feed_nid] = $f->feed_nid; > } > if ($node->feedapi_node) { > $node->feedapi_node->feed_nids = $feed_nids; > unset($node->feedapi_node->feed_nid); > } > break; > case 'insert': > if ($node->feedapi_node->feed_item) { > $node->feedapi_node->feed_item->nid = $node->nid; > foreach ($node->feedapi_node->feed_nids as $feed_nid) { > db_query("INSERT INTO {feedapi_node_item_feed} (feed_nid, feed_item_nid) VALUES (%d, %d)", $feed_nid, $node->nid); > } > $feed_item = $node->feedapi_node->feed_item; > $feed_item->fiid = db_next_id('{feedapi_node_item}_fiid'); > db_query("INSERT INTO {feedapi_node_item} (fiid, nid, url, timestamp, arrived, guid) VALUES (%d, %d, '%s', %d, %d, '%s')", $feed_item->fiid, $node->nid, $feed_item->options->original_url, $feed_item->options->timestamp, time(), $feed_item->options->guid); > } > break; > case 'update': > if ($node->feedapi_node) { > if ($node->feedapi_node->feed_item) { > $feed_item = $node->feedapi_node->feed_item; > db_query("UPDATE {feedapi_node_item} SET url = '%s', timestamp = %d, guid = '%s' WHERE fiid = %d", $feed_item->options->original_url, $feed_item->options->timestamp, $feed_item->options->guid, $feed_item->fiid); > } > db_query('DELETE FROM {feedapi_node_item_feed} WHERE feed_item_nid = %d', $node->nid); > foreach ($node->feedapi_node->feed_nids as $feed_nid) { > db_query("INSERT INTO {feedapi_node_item_feed} (feed_nid, feed_item_nid) VALUES (%d, %d)", $feed_nid, $node->nid); > } > } > break; 28,30c62,64 < $result = db_fetch_object(db_query("SELECT fiid FROM {feedapi_node_item} WHERE nid = %d", $node->nid)); < if (is_object($result)) { < _feedapi_node_delete($result); --- > if ($node->feedapi_node) { > db_query('DELETE FROM {feedapi_node_item} WHERE nid = %d', $node->nid); > db_query('DELETE FROM {feedapi_node_item_feed} WHERE feed_item_nid = %d', $node->nid); 41,49c75,80 < $result = db_fetch_array(db_query("SELECT feed_nid, fiid, url FROM {feedapi_node_item} WHERE nid = %d", $node->nid)); < if (is_numeric($result['feed_nid'])) { < $feed_item->fiid = $result['fiid']; < $item = _feedapi_node_load($feed_item); < $node = node_load($result['feed_nid']); < if ((isset($node->feed->url) || isset($node->feed->guid)) && isset($node->title)) { < $links['feedapi_article'] = array( < 'title' => t('Feed:') .' '. $node->title, < 'href' => 'node/'. $node->nid, --- > if ($node->feedapi_node) { > $result = db_query("SELECT n.title, n.nid FROM {node} n WHERE n.nid IN (%s) ORDER BY title DESC", implode(', ', $node->feedapi_node->feed_nids)); > while ($feed = db_fetch_object($result)) { > $links['feedapi_feed_'. $feed->nid] = array( > 'title' => t('Feed:') .' '. $feed->title, > 'href' => 'node/'. $feed->nid, 50a82,83 > } > if ($node->feedapi_node->url) { 53c86 < 'href' => $item->options->original_url, --- > 'href' => $node->feedapi_node->url, 55d87 < return $links; 56a89 > return $links; 95a129,135 > $form['x_dedupe'] = array( > '#type' => 'radios', > '#title' => t('Duplicates'), > '#description' => t('If you choose "check for duplicates on all feeds", a feed item will not be created if it already exists on *ANY* feed. Instead, the existing feed item will be linked to the feed. If you are not sure, choose the first option.'), > '#options' => array(0 => t('Check for duplicates only within feed'), 1 => t('Check for duplicates on all feeds')), > '#default_value' => 0, > ); 121,127c161,171 < $promote = is_numeric($feed->settings['processors']['feedapi_node']['promote']) ? $feed->settings['processors']['feedapi_node']['promote'] : 15; < $result = db_query("SELECT n.nid FROM {node} n JOIN {feedapi_node_item} fi ON fi.nid = n.nid WHERE fi.feed_nid = %d ORDER BY fi.timestamp DESC", $feed->nid); < $to_promote = array(); < $to_demote = array(); < while ($item = db_fetch_object($result)) { < if ($promote-- > 0) { < $to_promote[] = $item->nid; --- > if ($promote = $feed->settings['processors']['feedapi_node']['promote']) { > $result = db_query("SELECT n.nid FROM {node} n JOIN {feedapi_node_item_feed} ff ON ff.feed_item_nid = n.nid WHERE ff.feed_nid = %d ORDER BY n.created DESC", $feed->nid); > $to_promote = array(); > $to_demote = array(); > while ($item = db_fetch_object($result)) { > if ($promote-- > 0) { > $to_promote[] = $item->nid; > } > else { > $to_demote[] = $item->nid; > } 129,130c173,177 < else { < $to_demote[] = $item->nid; --- > if (count($to_promote) > 0) { > db_query("UPDATE {node} SET promote = 1 WHERE nid IN (%s)", implode(',', $to_promote)); > } > if (count($to_demote) > 0) { > db_query("UPDATE {node} SET promote = 0 WHERE nid IN (%s)", implode(',', $to_demote)); 132,137d178 < } < if (count($to_promote) > 0) { < db_query("UPDATE {node} SET promote = 1 WHERE nid IN (%s)", implode(',', $to_promote)); < } < if (count($to_demote) > 0) { < db_query("UPDATE {node} SET promote = 0 WHERE nid IN (%s)", implode(',', $to_demote)); 160c201 < $result = db_query("SELECT * FROM {feedapi_node_item} WHERE feed_nid = %d AND ( (timestamp > 0 AND timestamp < %d) OR (timestamp = 0 AND arrived > 0 AND arrived < %d) )", $feed->nid, $timexpire, $timexpire); --- > $result = db_query("SELECT * FROM {feedapi_node_item} fn JOIN {feedapi_node_item_feed} ff ON ff.feed_item_nid = fn.nid WHERE ff.feed_nid = %d AND ( (fn.timestamp > 0 AND fn.timestamp < %d) OR (fn.timestamp = 0 AND fn.arrived > 0 AND fn.arrived < %d) )", $feed->nid, $timexpire, $timexpire); 182a224,226 > if (isset($feed_item->nid)) { > $node->nid = $feed_item->nid; > } 203,204c247,250 < // Todo: find common format for this. < $node->feedapi->feed_item = $feed_item; --- > // A feed item can come in from more than one feed. > $node->feedapi_node->feed_nids[$feed_nid] = $feed_nid; > $node->feedapi_node->feed_item = $feed_item; > // For backwards compatibility - todo: move to using feedapi_node->feed_nids and feedapi_node->feed_item. 205a252 > $node->feedapi->feed_item = $feed_item; 207,211c254,265 < if (!isset($feed_item->nid)) { < node_save($node); < $feed_item->nid = $node->nid; < $feed_item->fiid = db_next_id('{feedapi_node_item}_fiid'); < db_query("INSERT INTO {feedapi_node_item} (fiid, feed_nid, nid, url, timestamp, arrived, guid) VALUES (%d, %d, %d, '%s', %d, %d, '%s')", $feed_item->fiid, $feed_nid, $feed_item->nid, $feed_item->options->original_url, $feed_item->options->timestamp, time(), $feed_item->options->guid); --- > > // If there are dupes on other feeds, don't create new feed item, but link this feed > // to existing feed item. > // Heads up: if there is a duplicate on the SAME feed, > // _feedapi_node_save() won't even be called. > if (isset($feed_item->feedapi_node->duplicates)) { > foreach ($feed_item->feedapi_node->duplicates as $fi_nid => $f_nids) { > $feed_item_node = node_load($fi_nid); > $feed_item_node->feedapi_node->feed_nids[$feed_nid] = $feed_nid; > node_object_prepare($feed_item_node); > node_save($feed_item_node); > } 214d267 < $node->nid = $feed_item->nid; 216d268 < db_query("UPDATE {feedapi_node_item} SET url = '%s', timestamp = %d, guid = '%s' WHERE fiid = %d", $feed_item->options->original_url, $feed_item->options->timestamp, $feed_item->options->guid, $feed_item->fiid); 241,260c293,298 < if (isset($feed_item->nid)) { < // It's the copy of node_delete(). it's needed because node_delete checks the permission < // and cron can be run anonymously and then the node is not deleted. < $node = node_load($feed_item->nid); < db_query('DELETE FROM {node} WHERE nid = %d', $node->nid); < db_query('DELETE FROM {node_revisions} WHERE nid = %d', $node->nid); < < // Call the node-specific callback (if any): < node_invoke($node, 'delete'); < node_invoke_nodeapi($node, 'delete'); < < // Clear the cache so an anonymous poster can see the node being deleted. < cache_clear_all(); < < // Remove this node from the search index if needed. < if (function_exists('search_wipe')) { < search_wipe($node->nid, 'node'); < } < drupal_set_message(t('%title has been deleted.', array('%title' => $node->title))); < watchdog('content', t('@type: deleted %title.', array('@type' => t($node->type), '%title' => $node->title))); --- > if (isset($feed_item->nid)) { > node_delete($feed_item->nid); > } > else { > // Let's throw an error on the off chance we land here. > watchdog('feedapi_node', t('No nid on feed item to delete.')); 262d299 < db_query("DELETE FROM {feedapi_node_item} WHERE fiid = %d", $feed_item->fiid); 292c329 < $result = db_query("SELECT nid, fiid, feed_nid, arrived, timestamp FROM {feedapi_node_item} WHERE feed_nid = %d ORDER BY timestamp DESC", $feed->nid); --- > $result = db_query("SELECT fni.nid, fni.fiid, ff.feed_nid, fni.arrived, fni.timestamp FROM {feedapi_node_item} fni JOIN {feedapi_node_item_feed} ff ON ff.feed_item_nid = fni.nid WHERE ff.feed_nid = %d ORDER BY fni.timestamp DESC", $feed->nid); 312c349 < function _feedapi_node_unique($feed_item, $feed_nid) { --- > function _feedapi_node_unique($feed_item, $feed_nid, $settings) { 315c352 < $count = db_result(db_query("SELECT fiid FROM {feedapi_node_item} WHERE url = '%s' AND feed_nid = %d", $feed_item->options->original_url, $feed_nid)); --- > $count = db_result(db_query("SELECT fni.nid FROM {feedapi_node_item} fni JOIN {feedapi_node_item_feed} ff ON ff.feed_item_nid = fni.nid WHERE fni.url = '%s' AND ff.feed_nid = %d", $feed_item->options->original_url, $feed_nid)); 321c358 < $count = db_result(db_query("SELECT fiid FROM {feedapi_node_item} WHERE guid = '%s' AND feed_nid = %d", $feed_item->options->guid, $feed_nid)); --- > $count = db_result(db_query("SELECT fni.nid FROM {feedapi_node_item} fni JOIN {feedapi_node_item_feed} ff ON ff.feed_item_nid = fni.nid WHERE fni.guid = '%s' AND ff.feed_nid = %d", $feed_item->options->guid, $feed_nid)); 325a363,384 > // If cross feed de-dupeing is enabled, check now whether there is a duplicate item on other feeds. > // If so, store duplicates in array. > // There is *usually* only one. However, there might be more than one. > // Todo: don't link to feed items whose feed is not x_dedupe enabled. > if ($settings['x_dedupe']) { > > if (isset($feed_item->options->original_url)) { > $result = db_query("SELECT fni.nid, ff.feed_nid FROM {feedapi_node_item} fni JOIN {feedapi_node_item_feed} ff ON ff.feed_item_nid = fni.nid WHERE ff.feed_nid != %d AND fni.url = '%s'", $feed_nid, $feed_item->options->original_url); > $i = 0; > while ($existing_feed_item = db_fetch_object($result)) { > $feed_item->feedapi_node->duplicates[$existing_feed_item->nid][] = $existing_feed_item->feed_nid; > } > } > if (!isset($feed_item->feedapi_node->duplicates) && isset($feed_item->options->guid)) { > $result = db_query("SELECT fni.nid, ff.feed_nid FROM {feedapi_node_item} fni JOIN {feedapi_node_item_feed} ff ON ff.feed_item_nid = fni.nid WHERE ff.feed_nid != %d AND fni.guid = '%s'", $feed_nid, $feed_item->options->guid); > $i = 0; > while ($existing_feed_item = db_fetch_object($result)) { > $feed_item->feedapi_node->duplicates[$existing_feed_item->nid][] = $existing_feed_item->feed_nid; > } > } > } > Index: feedapi_node/feedapi_node.module.test =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/feedapi/feedapi_node/Attic/feedapi_node.module.test,v retrieving revision 1.1.2.4 diff -r1.1.2.4 feedapi_node.module.test 62c62 < $result = db_query("SELECT nid FROM {feedapi_node_item} WHERE feed_nid = %d", $nid); --- > $result = db_query("SELECT fi.nid FROM {feedapi_node_item} fi JOIN {feedapi_node_item_feed} ff ON ff.feed_item_nid = fi.nid WHERE ff.feed_nid = %d", $nid); 91c91 < $item_remain = db_result(db_query("SELECT COUNT(*) FROM {feedapi_node_item} WHERE feed_nid = %d", $nid)); --- > $item_remain = db_result(db_query("SELECT COUNT(*) FROM {feedapi_node_item} fi JOIN {feedapi_node_item_feed} ff ON ff.feed_item_nid = fi.nid WHERE ff.feed_nid = %d", $nid)); Index: feedapi_node_views/feedapi_node_views.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/feedapi/feedapi_node_views/Attic/feedapi_node_views.module,v retrieving revision 1.1.2.2 diff -r1.1.2.2 feedapi_node_views.module 24,28d23 < 'fields' => array( < 'feed_nid' => array( < 'name' => t('Parent feed'), < ), < ), 35a31,47 > ) > ); > $tables['feedapi_node_item_feed'] = array( > 'name' => 'feedapi_node_item_feed', > 'join' => array( > 'left' => array( > 'table' => 'node', > 'field' => 'nid', > ), > 'right' => array( > 'field' => 'feed_nid' > ) > ), > 'fields' => array( > 'feed_nid' => array( > 'name' => t('Parent feed'), > ) 43c55 < ), --- > ) 46d57 < 83,88c94,98 < $join['right']['table'] = 'feedapi_node_item'; < $join['right']['field'] = 'nid'; < $query->add_table('feedapi_node_item', TRUE, 1, $join); < $query->add_field('nid', 'feedapi_node_item'); < $query->add_orderby('feedapi_node_item', 'timestamp', 'DESC'); < $query->add_where('feedapi_node_item.feed_nid = %d', $a2); --- > $join['right']['table'] = 'feedapi_node_item_feed'; > $join['right']['field'] = 'feed_item_nid'; > $query->add_table('feedapi_node_item_feed', TRUE, 1, $join); > $query->add_field('feed_item_nid', 'feedapi_node_item_feed'); > $query->add_where('feedapi_node_item_feed.feed_nid = %d', $a2);