=== modified file 'planet.module' --- planet.module 2009-03-08 19:00:05 +0000 +++ planet.module 2009-03-12 21:23:00 +0000 @@ -199,19 +213,27 @@ $output .= drupal_get_form('planet_feed_form', $edit, false, $user); - // $result = db_query('SELECT *, (UNIX_TIMESTAMP(NOW()) - checked) _checked FROM {planet_feeds}'); - $result = db_query('SELECT COUNT(f.fid) cnt, f.*, (UNIX_TIMESTAMP(NOW()) - checked) _checked FROM {planet_feeds} f LEFT OUTER JOIN {planet_items} i ON i.fid = f.fid WHERE f.uid = %d GROUP BY f.fid;', $user->uid); + $feeds = db_query('SELECT fid, title, checked FROM {planet_feeds}' + . 'WHERE f.uid = %d;', $user->uid); $rows = array(); $headers = array('Feed', 'Items', 'Edit', 'Last checked'); - while ($feed = db_fetch_object($result)) { - $checked = intval($feed->_checked / 60) .' minutes'; - if ($feed->_checked % 60 > 0) { + $now = time(); + $items_statement = 'SELECT count(*) FROM {planet_items}' + . ' WHERE fid=%d'; + // TODO: change this to prepared statement when support by drupal DB abastraction layer. + while ($feed = db_fetch_object($feeds)) { + $_checked = $now - $feed->checked; + $checked = intval($_checked / 60) .' minutes'; + if ($_checked % 60 > 0) { $checked .= ', '. $feed->_checked % 60 .' seconds'; } $checked .= ' ago'; + $items = db_query($items_statement, $feed->fid); + if (!$items) trigger_error('ERROR while counting feed items.'); + $cnt = db_result($items); array_push($rows, array( $feed->title, - $feed->cnt, + $cnt, l('edit', 'user/'. $user->uid .'/planet/'. intval($feed->fid)), $checked, ) @@ -225,6 +247,9 @@ } +/** + * Page callback for 'admin/settings/planet' ("Planet Settings") + */ function _planet_settings() { if ($_POST) { $edit = $_POST; @@ -243,7 +268,10 @@ } else { if (isset($edit['fid']) && intval($edit['fid']) == 0) { - db_query('INSERT INTO {planet_feeds} (uid, title, link, image, checked, frozen) VALUES(%d, "%s", "%s", "%s", 0, 0)', $edit['uid'], $edit['title'], $edit['link'], $edit['image']); + db_query('INSERT INTO {planet_feeds} (uid, title, link, image, checked, frozen) VALUES(%d, "%s", "%s", %s, 0, 0)', $edit['uid'], $edit['title'], + $edit['link'], + ($edit['image'] ? "\"${edit['image']}\"" : 'NULL') + ); $edit_r = db_fetch_array(db_query('SELECT fid FROM {planet_feeds} WHERE uid = %d AND title = "%s" AND link = "%s"', $edit['uid'], $edit['title'], $edit['link'])); $title = planet_refresh(intval($edit_r['fid'])); drupal_set_message('Added new feed: ' . $title); @@ -284,23 +312,31 @@ $output .= drupal_get_form('planet_feed_form', $edit); - // $result = db_query('SELECT *, (UNIX_TIMESTAMP(NOW()) - checked) _checked FROM {planet_feeds}'); - $result = db_query('SELECT COUNT(f.fid) cnt, f.*, (UNIX_TIMESTAMP(NOW()) - checked) _checked FROM {planet_feeds} f LEFT OUTER JOIN {planet_items} i ON i.fid = f.fid GROUP BY f.fid;'); + $feeds = db_query('SELECT fid, title, checked, frozen FROM {planet_feeds} f' + . ' WHERE f.uid = %d;', $user->uid); $rows = array(); $headers = array('Feed', 'Items', 'Edit', 'Last checked', 'Refresh', 'Freeze'); - while ($feed = db_fetch_object($result)) { - $checked = intval($feed->_checked / 60) .' minutes'; - if ($feed->_checked % 60 > 0) { + $now = time(); + $items_statement = 'SELECT count(*) FROM {planet_items}'; + // TODO: change this to prepared statement when support by drupal DB abastraction layer. + while ($feed = db_fetch_object($feeds)) { + $_checked = $now - $feed->checked; + $checked = intval($_checked / 60) .' minutes'; + if ($_checked % 60 > 0) { $checked .= ', '. $feed->_checked % 60 .' seconds'; } $checked .= ' ago'; + $items = db_query($items_statement, $feed->fid); + if (!$items) trigger_error('ERROR while counting feed items.'); + $cnt = db_result($items); + $fid = strval($feed->fid); array_push($rows, array( $feed->title, - $feed->cnt, - l('edit', 'admin/settings/planet/'. intval($feed->fid)), + $cnt, + l('edit', 'admin/settings/planet/'. $fid), $checked, - l('refresh', 'admin/settings/planet/refresh/'. intval($feed->fid)), - l($feed->frozen ? 'unfreeze' : 'freeze', 'admin/settings/planet/'. ($feed->frozen ? 'unfreeze/' : 'freeze/') . intval($feed->fid)) + l('refresh', 'admin/settings/planet/refresh/'. $fid), + l($feed->frozen ? 'unfreeze' : 'freeze', 'admin/settings/planet/'. ($feed->frozen ? 'unfreeze/' : 'freeze/') . $fid) ) ); }