[geeklog-cvs] geeklog: Minor speedup of the story list by caching the results ...

geeklog-cvs at lists.geeklog.net geeklog-cvs at lists.geeklog.net
Sun Mar 22 16:57:21 EDT 2009


details:   http://project.geeklog.net/cgi-bin/hgweb.cgi/rev/5e8fb0521910
changeset: 6851:5e8fb0521910
user:      Dirk Haun <dirk at haun-online.de>
date:      Sun Mar 22 15:36:21 2009 +0100
description:
Minor speedup of the story list by caching the results of SEC_hasTopicAccess; plus some source code cosmetics

diffstat:

1 file changed, 91 insertions(+), 75 deletions(-)
system/lib-admin.php |  166 +++++++++++++++++++++++++++-----------------------

diffs (186 lines):

diff -r d734244b9ef5 -r 5e8fb0521910 system/lib-admin.php
--- a/system/lib-admin.php	Sun Mar 22 10:49:26 2009 +0100
+++ b/system/lib-admin.php	Sun Mar 22 15:36:21 2009 +0100
@@ -848,91 +848,107 @@
 {
     global $_CONF, $_TABLES, $LANG_ADMIN, $LANG24, $LANG_ACCESS, $_IMAGE_TYPE;
 
-    static $topics;
+    static $topics, $topic_access;
 
-    if (!isset ($topics)) {
-        $topics = array ();
+    if (!isset($topics)) {
+        $topics = array();
+    }
+    if (!isset($topic_access)) {
+        $topic_access = array();
     }
 
     $retval = '';
 
-    switch($fieldname) {
-        case "unixdate":
-            $curtime = COM_getUserDateTimeFormat ($A['unixdate']);
-            $retval = strftime($_CONF['daytime'], $curtime[1]);
-            break;
-        case "title":
-            $A['title'] = str_replace('$', '$', $A['title']);
-            $article_url = COM_buildUrl ($_CONF['site_url'] . '/article.php?story='
-                                  . $A['sid']);
-            $retval = COM_createLink(stripslashes($A['title']), $article_url);
-            break;
-        case "draft_flag":
-            if ($A['draft_flag'] == 1) {
-                $retval = $LANG24[35];
-            } else {
-                $retval = $LANG24[36];
+    switch ($fieldname) {
+    case 'unixdate':
+        $curtime = COM_getUserDateTimeFormat($A['unixdate']);
+        $retval = strftime($_CONF['daytime'], $curtime[1]);
+        break;
+
+    case 'title':
+        $A['title'] = str_replace('$', '$', $A['title']);
+        $article_url = COM_buildUrl($_CONF['site_url'] . '/article.php?story='
+                                    . $A['sid']);
+        $retval = COM_createLink(stripslashes($A['title']), $article_url);
+        break;
+
+    case 'draft_flag':
+        if ($A['draft_flag'] == 1) {
+            $retval = $LANG24[35];
+        } else {
+            $retval = $LANG24[36];
+        }
+        break;
+
+    case 'access':
+    case 'edit':
+    case 'edit_adv':
+        $access = SEC_hasAccess($A['owner_id'], $A['group_id'],
+                                $A['perm_owner'], $A['perm_group'],
+                                $A['perm_members'], $A['perm_anon']);
+        if ($access == 3) {
+            if (!isset($topic_access[$A['tid']])) {
+                $topic_access[$A['tid']] = SEC_hasTopicAccess($A['tid']);
             }
-            break;
-        case "access":
-        case "edit":
-        case "edit_adv":
-            $access = SEC_hasAccess ($A['owner_id'], $A['group_id'],
-                                     $A['perm_owner'], $A['perm_group'],
-                                     $A['perm_members'], $A['perm_anon']);
-            if ($access == 3) {
-                if (SEC_hasTopicAccess ($A['tid']) == 3) {
-                    $access = $LANG_ACCESS['edit'];
-                } else {
-                    $access = $LANG_ACCESS['readonly'];
-                }
+            if ($topic_access[$A['tid']] == 3) {
+                $access = $LANG_ACCESS['edit'];
             } else {
                 $access = $LANG_ACCESS['readonly'];
             }
-            if ($fieldname == 'access') {
-                $retval = $access;
-            } else if ($access == $LANG_ACCESS['edit']) {
-                if ($fieldname == 'edit_adv') {
-                    $retval = COM_createLink($icon_arr['edit'],
-                        "{$_CONF['site_admin_url']}/story.php?mode=edit&editor=adv&sid={$A['sid']}");
-                } else if ($fieldname == 'edit') {
-                    $retval = COM_createLink($icon_arr['edit'],
-                        "{$_CONF['site_admin_url']}/story.php?mode=edit&editor=std&sid={$A['sid']}");
-                }
+        } else {
+            $access = $LANG_ACCESS['readonly'];
+        }
+        if ($fieldname == 'access') {
+            $retval = $access;
+        } elseif ($access == $LANG_ACCESS['edit']) {
+            if ($fieldname == 'edit_adv') {
+                $editmode = 'adv';
+            } elseif ($fieldname == 'edit') {
+                $editmode = 'std';
             }
-            break;
-        case "featured":
-            if ($A['featured'] == 1) {
-                $retval = $LANG24[35];
-            } else {
-                $retval = $LANG24[36];
-            }
-            break;
-        case "ping":
-            $pingico = '<img src="' . $_CONF['layout_url'] . '/images/sendping.'
-                     . $_IMAGE_TYPE . '" alt="' . $LANG24[21] . '" title="'
-                     . $LANG24[21] . '"' . XHTML . '>';
-            if (($A['draft_flag'] == 0) && ($A['unixdate'] < time())) {
-                $url = $_CONF['site_admin_url']
-                     . '/trackback.php?mode=sendall&id=' . $A['sid'];
-                $retval = COM_createLink($pingico, $url);
-            } else {
-                $retval = '';
-            }
-            break;
-        case 'tid':
-            if (!isset ($topics[$A['tid']])) {
-                $topics[$A['tid']] = DB_getItem ($_TABLES['topics'], 'topic',
-                                                 "tid = '{$A['tid']}'");
-            }
-            $retval = $topics[$A['tid']];
-            break;
-        case 'username':
-            $retval = COM_getDisplayName ($A['uid'], $A['username'], $A['fullname']);
-            break;
-        default:
-            $retval = $fieldvalue;
-            break;
+            $editurl = $_CONF['site_admin_url']
+                     . '/story.php?mode=edit&editor=' . $editmode
+                     . '&sid=' . $A['sid'];
+            $retval = COM_createLink($icon_arr['edit'], $editurl);
+        }
+        break;
+
+    case 'featured':
+        if ($A['featured'] == 1) {
+            $retval = $LANG24[35];
+        } else {
+            $retval = $LANG24[36];
+        }
+        break;
+
+    case 'ping':
+        $pingico = '<img src="' . $_CONF['layout_url'] . '/images/sendping.'
+                 . $_IMAGE_TYPE . '" alt="' . $LANG24[21] . '" title="'
+                 . $LANG24[21] . '"' . XHTML . '>';
+        if (($A['draft_flag'] == 0) && ($A['unixdate'] < time())) {
+            $url = $_CONF['site_admin_url']
+                 . '/trackback.php?mode=sendall&id=' . $A['sid'];
+            $retval = COM_createLink($pingico, $url);
+        } else {
+            $retval = '';
+        }
+        break;
+
+    case 'tid':
+        if (!isset($topics[$A['tid']])) {
+            $topics[$A['tid']] = DB_getItem($_TABLES['topics'], 'topic',
+                                            "tid = '{$A['tid']}'");
+        }
+        $retval = $topics[$A['tid']];
+        break;
+
+    case 'username':
+        $retval = COM_getDisplayName($A['uid'], $A['username'], $A['fullname']);
+        break;
+
+    default:
+        $retval = $fieldvalue;
+        break;
     }
 
     return $retval;



More information about the geeklog-cvs mailing list