[geeklog-cvs] geeklog: Fixed enabling/disabling feeds from the admin list (sam...

geeklog-cvs at lists.geeklog.net geeklog-cvs at lists.geeklog.net
Sat Feb 20 10:35:44 EST 2010


changeset 7736:e6e3f00d2e53
url:  http://project.geeklog.net/cgi-bin/hgwebdir.cgi/geeklog/rev/e6e3f00d2e53
user: Dirk Haun <dirk at haun-online.de>
date: Sat Feb 20 14:32:17 2010 +0100
description:
Fixed enabling/disabling feeds from the admin list (same issue as with blocks); also ensure newly enabled feeds are updated and disabled feeds display "N/A" as the "last updated" date

diffstat:

 public_html/admin/syndication.php |  71 +++++++++++++++++++++++------------
 system/lib-admin.php              |  10 +++-
 2 files changed, 54 insertions(+), 27 deletions(-)

diffs (139 lines):

diff -r ef9b20942a0b -r e6e3f00d2e53 public_html/admin/syndication.php
--- a/public_html/admin/syndication.php	Sat Feb 20 13:41:51 2010 +0100
+++ b/public_html/admin/syndication.php	Sat Feb 20 14:32:17 2010 +0100
@@ -77,36 +77,51 @@
 /**
 * Toggle status of a feed from enabled to disabled and back
 *
-* @param    int     $fid    ID of the feed
+* @param    array   $enabledfeeds   array containing ids of enabled feeds
+* @param    array   $visiblefeeds   array containing ids of visible feeds
 * @return   void
 *
 */
-function changeFeedStatus($fid_arr)
+function changeFeedStatus($enabledfeeds, $visiblefeeds)
 {
     global $_TABLES;
 
-    $changes = false;
+    $enabled_feed = 0;
 
-    // first disable all
-    DB_query("UPDATE {$_TABLES['syndication']} SET is_enabled = 0");
-    if (isset($fid_arr)) {
-        foreach ($fid_arr as $fid) {
-            $feed_id = addslashes(COM_applyFilter($fid, true));
-            if (!empty($fid)) {
-                // now enable those in the array
-                DB_query("UPDATE {$_TABLES['syndication']} SET is_enabled = 1 WHERE fid = '$fid'");
-                $changes = true;
-            }
-        }
+    $disabled = array_diff($visiblefeeds, $enabledfeeds);
+
+    // disable feeds
+    $in = implode(',', $disabled);
+    if (! empty($in)) {
+        $sql = "UPDATE {$_TABLES['syndication']} SET is_enabled = 0 WHERE fid IN ($in)";
+        DB_query($sql);
     }
 
-    if ($changes) {
-        $result = DB_query("SELECT filename FROM {$_TABLES['syndication']} WHERE is_enabled = 0");
-        $num_feeds_off = DB_numRows($result);
-        for ($i = 0; $i < $num_feeds_off; $i++) {
-            list($feedfile) = DB_fetchArray($result);
-            deleteFeedFile($feedfile);
+    // enable feeds
+    $in = implode(',', $enabledfeeds);
+    if (! empty($in)) {
+        // if we just enabled a feed, figure out which one it was
+        $sql = "SELECT fid FROM {$_TABLES['syndication']} WHERE fid IN ($in) AND is_enabled = 0";
+        $result = DB_query($sql);
+        if (DB_numRows($result) > 0) {
+            list($enabled_feed) = DB_fetchArray($result);
         }
+
+        $sql = "UPDATE {$_TABLES['syndication']} SET is_enabled = 1 WHERE fid IN ($in)";
+        DB_query($sql);
+    }
+
+    // ensure files for disabled feeds are deleted
+    $result = DB_query("SELECT filename FROM {$_TABLES['syndication']} WHERE is_enabled = 0");
+    $num_feeds_off = DB_numRows($result);
+    for ($i = 0; $i < $num_feeds_off; $i++) {
+        list($feedfile) = DB_fetchArray($result);
+        deleteFeedFile($feedfile);
+    }
+
+    // if we enabled a feed, update it
+    if ($enabled_feed > 0) {
+        SYND_updateFeed($enabled_feed);
     }
 }
 
@@ -271,7 +286,7 @@
             $A['is_enabled'] = 1;
             $A['updated'] = '';
             $A['update_info'] = '';
-            $A['date'] = time ();
+            $A['date'] = time();
         } else {
             return COM_refresh ($_CONF['site_admin_url'] . '/syndication.php');
         }
@@ -349,8 +364,12 @@
     $feed_template->set_var ('feed_charset', $A['charset']);
     $feed_template->set_var ('feed_language', $A['language']);
 
-    $nicedate = COM_getUserDateTimeFormat ($A['date']);
-    $feed_template->set_var ('feed_updated', $nicedate[0]);
+    if (($A['is_enabled'] == 1) && !empty($A['updated'])) {
+        $nicedate = COM_getUserDateTimeFormat($A['date']);
+        $feed_template->set_var('feed_updated', $nicedate[0]);
+    } else {
+        $feed_template->set_var('feed_updated', $LANG_ADMIN['na']);
+    }
 
     $formats = find_feedFormats ();
     $selection = '<select name="format">' . LB;
@@ -613,7 +632,11 @@
     if (isset($_POST['enabledfeeds'])) {
         $enabledfeeds = $_POST['enabledfeeds'];
     }
-    changeFeedStatus($enabledfeeds);
+    $visiblefeeds = array();
+    if (isset($_POST['visiblefeeds'])) {
+        $visiblefeeds = $_POST['visiblefeeds'];
+    }
+    changeFeedStatus($enabledfeeds, $visiblefeeds);
 }
 $mode = '';
 if (isset($_REQUEST['mode'])) {
diff -r ef9b20942a0b -r e6e3f00d2e53 system/lib-admin.php
--- a/system/lib-admin.php	Sat Feb 20 13:41:51 2010 +0100
+++ b/system/lib-admin.php	Sat Feb 20 14:32:17 2010 +0100
@@ -1036,7 +1036,11 @@
         break;
 
     case 'updated':
-        $retval = strftime($_CONF['daytime'], $A['date']);
+        if ($A['is_enabled'] == 1) {
+            $retval = strftime($_CONF['daytime'], $A['date']);
+        } else {
+            $retval = $LANG_ADMIN['na'];
+        }
         break;
 
     case 'is_enabled':
@@ -1045,8 +1049,8 @@
         } else {
             $switch = '';
         }
-        $retval = "<input type=\"checkbox\" name=\"enabledfeeds[]\" "
-            . "onclick=\"submit()\" value=\"{$A['fid']}\"$switch" . XHTML . ">";
+        $retval = '<input type="checkbox" name="enabledfeeds[]" onclick="submit()" value="' . $A['fid'] . '"' . $switch . XHTML . '>'
+                . '<input type="hidden" name="visiblefeeds[]" value="' . $A['fid'] . '"' . XHTML . '>';
         break;
 
     case 'header_tid':



More information about the geeklog-cvs mailing list