[geeklog-cvs] geeklog: You can now specify one or more topics for a block. A n...

geeklog-cvs at lists.geeklog.net geeklog-cvs at lists.geeklog.net
Thu Sep 29 14:10:04 EDT 2011


changeset 8427:4257ae557e20
url:  http://project.geeklog.net/cgi-bin/hgwebdir.cgi/geeklog/rev/4257ae557e20
user: Tom <websitemaster at cogeco.net>
date: Thu Sep 29 13:52:16 2011 -0400
description:
You can now specify one or more topics for a block. A new table has been include called topic_assignments.
Stories, Blocks and Topics now take into account if a group has been deleted. Group Ids of objects will fall back to the objects own admin group and if that is not found it will fall back to the Root group.

diffstat:

 language/english.php                                                 |    7 +-
 language/english_utf-8.php                                           |    7 +-
 public_html/admin/block.php                                          |  167 ++++++++-
 public_html/admin/install/lib-upgrade.php                            |   12 +
 public_html/layout/professional/admin/block/blockeditor.thtml        |   11 +-
 public_html/layout/professional/admin/block/defaultblockeditor.thtml |   11 +-
 public_html/lib-common.php                                           |   44 +-
 sql/mssql_tableanddata.php                                           |   31 +-
 sql/mysql_tableanddata.php                                           |   32 +-
 sql/pgsql_tableanddata.php                                           |   33 +-
 sql/updates/mssql_1.8.1_to_1.9.0.php                                 |   39 ++
 sql/updates/mysql_1.8.1_to_1.9.0.php                                 |   39 ++
 sql/updates/pgsql_1.8.1_to_1.9.0.php                                 |   40 ++
 system/lib-admin.php                                                 |   27 +-
 system/lib-block.php                                                 |   74 ++++
 system/lib-database.php                                              |    1 +
 system/lib-plugins.php                                               |    6 +-
 system/lib-story.php                                                 |   35 ++
 system/lib-topic.php                                                 |  130 +++++++
 19 files changed, 659 insertions(+), 87 deletions(-)

diffs (truncated from 1187 to 300 lines):

diff -r e3c0f17985c9 -r 4257ae557e20 language/english.php
--- a/language/english.php	Tue Sep 06 11:22:25 2011 -0400
+++ b/language/english.php	Thu Sep 29 13:52:16 2011 -0400
@@ -725,12 +725,12 @@
     41 => 'Right',
     42 => 'You must enter the block title and block order for Geeklog default blocks.',
     43 => 'Homepage Only',
-    44 => '',
+    44 => 'Multiple',
     45 => "You are trying to access a block that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/block.php\">go back to the block administration screen</a>.",
     46 => 'Move',
     47 => '',
     48 => 'Block Name',
-    49 => ' (no spaces and must be unique)',
+    49 => '(no spaces)',
     50 => 'The Block Name can not be empty',
     51 => 'include http://',
     52 => 'If you leave this blank the help icon for this block will not be displayed',
@@ -884,7 +884,8 @@
     27 => 'Or Upload Topic Icon',
     28 => 'Maximum',
     29 => 'File Upload Errors',
-    30 => 'Stories in Topic'
+    30 => 'Stories in Topic', 
+    31 => 'You have used a restricted Topic ID. Please choose another one.'
 );
 
 ###############################################################################
diff -r e3c0f17985c9 -r 4257ae557e20 language/english_utf-8.php
--- a/language/english_utf-8.php	Tue Sep 06 11:22:25 2011 -0400
+++ b/language/english_utf-8.php	Thu Sep 29 13:52:16 2011 -0400
@@ -725,12 +725,12 @@
     41 => 'Right',
     42 => 'You must enter the block title and block order for Geeklog default blocks.',
     43 => 'Homepage Only',
-    44 => '',
+    44 => 'Multiple',
     45 => "You are trying to access a block that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/block.php\">go back to the block administration screen</a>.",
     46 => 'Move',
     47 => '',
     48 => 'Block Name',
-    49 => ' (no spaces and must be unique)',
+    49 => '(no spaces)',
     50 => 'The Block Name can not be empty',
     51 => 'include http://',
     52 => 'If you leave this blank the help icon for this block will not be displayed',
@@ -884,7 +884,8 @@
     27 => 'Or Upload Topic Icon',
     28 => 'Maximum',
     29 => 'File Upload Errors',
-    30 => 'Stories in Topic'
+    30 => 'Stories in Topic', 
+    31 => 'You have used a restricted Topic ID. Please choose another one.'
 );
 
 ###############################################################################
diff -r e3c0f17985c9 -r 4257ae557e20 public_html/admin/block.php
--- a/public_html/admin/block.php	Tue Sep 06 11:22:25 2011 -0400
+++ b/public_html/admin/block.php	Thu Sep 29 13:52:16 2011 -0400
@@ -70,23 +70,58 @@
 * Check for block topic access (need to handle 'all' and 'homeonly' as
 * special cases)
 *
-* @param    string  $tid    ID for topic to check on
-* @return   int             returns 3 for read/edit 2 for read only 0 for no access
+* @param    string/array    $id     ID of block or topic to check if block topic access
+* @param    boolean         $flag   True if topic id(s)
+* @return   int                     returns 3 for read/edit 2 for read only 0 for no access
 *
 */
-function hasBlockTopicAccess ($tid)
+function hasBlockMultiTopicAccess($id, $topic = false)
 {
+    global $_TABLES;
+    
     $access = 0;
-
-    if (($tid == 'all') || ($tid == 'homeonly')) {
+    
+    if ($topic) {
+        if (is_array($id)) {
+            $nrows = count($id);
+            $tid = $id[0];
+        } else {
+            $nrows = 1;
+            $tid = $id;
+        }
+    } else {
+        // Retrieve Topic options
+        $sql['mysql'] = "SELECT tid FROM {$_TABLES['topic_assignments']} WHERE type = 'block' AND id ='$id'";
+        $sql['mssql'] = "SELECT tid FROM {$_TABLES['topic_assignments']} WHERE type = 'block' AND id ='$id'";
+        $sql['pgsql'] = "SELECT tid FROM {$_TABLES['topic_assignments']} WHERE type = 'block' AND id ='$id'";
+    
+        $result = DB_query($sql);
+        $A = DB_fetchArray($result);
+        $nrows = DB_numRows($result);
+        $tid = $A['tid'];
+    }
+    if ($tid == TOPIC_ALL_OPTION || $tid == TOPIC_HOMEONLY_OPTION) {
         $access = 3;
     } else {
         $access = SEC_hasTopicAccess ($tid);
+        for ($i = 1; $i < $nrows; $i++) {
+            if ($topic) {
+                $tid = $id[$i];
+            } else {
+                $A = DB_fetchArray($result);
+                $tid = $A['tid'];
+            }
+            $current_access = SEC_hasTopicAccess ($tid);
+            if ($access > $current_access) {
+                $access = $current_access;
+            }
+        }
     }
-
+    
     return $access;
 }
 
+
 /**
 * Shows default block editor
 *
@@ -134,10 +169,18 @@
     $block_templates->set_var('block_name',$A['name']);
     $block_templates->set_var('lang_blockname', $LANG21[48]);
     $block_templates->set_var('lang_homeonly', $LANG21[43]);
-    if ($A['tid'] == 'all') {
-        $block_templates->set_var('all_selected', 'selected="selected"');
-    } elseif ($A['tid'] == 'homeonly') {
-        $block_templates->set_var('homeonly_selected', 'selected="selected"');
+    if ($A['topic_option'] == TOPIC_ALL_OPTION) {
+        $block_templates->set_var('all_checked', 'checked');
+        $block_templates->set_var('homeonly_checked', '');
+        $block_templates->set_var('selectedtopics_checked', '');
+    } elseif ($A['topic_option'] == TOPIC_HOMEONLY_OPTION) {
+        $block_templates->set_var('all_checked', '');
+        $block_templates->set_var('homeonly_checked', 'checked');
+        $block_templates->set_var('selectedtopics_checked', '');
+    } else{
+        $block_templates->set_var('all_checked', '');
+        $block_templates->set_var('homeonly_checked', '');
+        $block_templates->set_var('selectedtopics_checked', 'checked');
     }
     $block_templates->set_var('topic_options',
                               COM_topicList ('tid,topic', $A['tid'], 1, true));
@@ -204,7 +247,7 @@
     if (!empty($bid)) {
         $sql['mysql'] = "SELECT * FROM {$_TABLES['blocks']} WHERE bid ='$bid'";
 
-        $sql['mssql'] = "SELECT bid, is_enabled, name, type, title, tid, blockorder, cast(content as text) as content, rdfurl, ";
+        $sql['mssql'] = "SELECT bid, is_enabled, name, type, title, blockorder, cast(content as text) as content, rdfurl, ";
         $sql['mssql'] .= "rdfupdated, rdflimit, onleft, phpblockfn, help, owner_id,group_id, ";
         $sql['mssql'] .= "perm_owner, perm_group, perm_members, perm_anon, allow_autotags FROM {$_TABLES['blocks']} WHERE bid ='$bid'";
 
@@ -212,9 +255,29 @@
         
         $result = DB_query($sql);
         $A = DB_fetchArray($result);
+        
+        // Retrieve Topic options
+        $sql['mysql'] = "SELECT * FROM {$_TABLES['topic_assignments']} WHERE type = 'block' AND id ='$bid'";
+
+        $result = DB_query($sql);
+        $B = DB_fetchArray($result);
+        $nrows = DB_numRows($result);
+        if ($B['tid'] == TOPIC_ALL_OPTION || $B['tid'] == TOPIC_HOMEONLY_OPTION) {
+            $A['topic_option'] = $B['tid'];
+            $A['tid'] ='';
+        } else {
+            $A['topic_option'] = TOPIC_SELECTED_OPTION;
+            $A['tid'] = array();
+            $A['tid'][] = $B['tid'];
+            for ($i = 1; $i < $nrows; $i++) {
+                $B = DB_fetchArray($result);
+                $A['tid'][] = $B['tid'];
+            }
+        }
+        
         $access = SEC_hasAccess($A['owner_id'], $A['group_id'], $A['perm_owner'], $A['perm_group'], $A['perm_members'], $A['perm_anon']);
         if (($access == 2) || ($access == 0) ||
-                (hasBlockTopicAccess($A['tid']) < 3)) {
+                (hasBlockMultiTopicAccess($bid) < 3)) {
             $retval .= COM_showMessageText($LANG21[45],
                                            $LANG_ACCESS['accessdenied']);
             COM_accessLog("User {$_USER['username']} tried to illegally create or edit block $bid.");
@@ -231,7 +294,8 @@
         $A['name'] = '';
         $A['type'] = 'normal';
         $A['title'] = '';
-        $A['tid'] = 'All';
+        $A['topic_option'] = TOPIC_ALL_OPTION;
+        $A['tid'] = '';
         $A['blockorder'] = 0;
         $A['content'] = '';
         $A['allow_autotags'] = 0;
@@ -296,13 +360,21 @@
     $block_templates->set_var('lang_nospaces', $LANG21[49]);
     $block_templates->set_var('lang_all', $LANG21[7]);
     $block_templates->set_var('lang_homeonly', $LANG21[43]);
-    if ($A['tid'] == 'all') {
-        $block_templates->set_var('all_selected', 'selected="selected"');
-    } elseif ($A['tid'] == 'homeonly') {
-        $block_templates->set_var('homeonly_selected', 'selected="selected"');
+    if ($A['topic_option'] == TOPIC_ALL_OPTION) {
+        $block_templates->set_var('all_checked', 'checked');
+        $block_templates->set_var('homeonly_checked', '');
+        $block_templates->set_var('selectedtopics_checked', '');
+    } elseif ($A['topic_option'] == TOPIC_HOMEONLY_OPTION) {
+        $block_templates->set_var('all_checked', '');
+        $block_templates->set_var('homeonly_checked', 'checked');
+        $block_templates->set_var('selectedtopics_checked', '');
+    } else{
+        $block_templates->set_var('all_checked', '');
+        $block_templates->set_var('homeonly_checked', '');
+        $block_templates->set_var('selectedtopics_checked', 'checked');
     }
     $block_templates->set_var('topic_options',
-                              COM_topicList('tid,topic', $A['tid'], 1, true));
+                              COM_topicList ('tid,topic', $A['tid'], 1, true));
     $block_templates->set_var('lang_side', $LANG21[39]);
     $block_templates->set_var('lang_left', $LANG21[40]);
     $block_templates->set_var('lang_right', $LANG21[41]);
@@ -421,7 +493,7 @@
         array('text' => $LANG_ADMIN['title'], 'field' => 'title', 'sort' => true),
         array('text' => $LANG21[48], 'field' => 'name', 'sort' => true),
         array('text' => $LANG_ADMIN['type'], 'field' => 'type', 'sort' => true),
-        array('text' => $LANG_ADMIN['topic'], 'field' => 'tid', 'sort' => true),
+        array('text' => $LANG_ADMIN['topic'], 'field' => 'topic', 'sort' => true),
         array('text' => $LANG_ADMIN['enabled'], 'field' => 'is_enabled', 'sort' => true)
     );
 
@@ -494,7 +566,7 @@
 * @param    string  $type           Type of block
 * @param    int     $blockorder     Order block appears relative to the others
 * @param    string  $content        Content of block
-* @param    string  $tid            Topic block should appear in
+* @param    string  $tid            Ids of topics block is assigned to
 * @param    string  $rdfurl         URL to headline feed for portal blocks
 * @param    string  $rdfupdated     Date RSS/RDF feed was last updated
 * @param    string  $rdflimit       max. number of entries to import from feed
@@ -510,9 +582,9 @@
 * @return   string                  HTML redirect or error message
 *
 */
-function saveblock($bid, $name, $title, $help, $type, $blockorder, $content, $tid, $rdfurl, $rdfupdated, $rdflimit, $phpblockfn, $onleft, $owner_id, $group_id, $perm_owner, $perm_group, $perm_members, $perm_anon, $is_enabled, $allow_autotags)
+function saveblock($bid, $name, $title, $help, $type, $blockorder, $content, $tid, $topic_option, $rdfurl, $rdfupdated, $rdflimit, $phpblockfn, $onleft, $owner_id, $group_id, $perm_owner, $perm_group, $perm_members, $perm_anon, $is_enabled, $allow_autotags)
 {
-    global $_CONF, $_TABLES, $LANG01, $LANG21, $MESSAGE;
+    global $_CONF, $_TABLES, $LANG01, $LANG21, $MESSAGE, $_USER;
 
     $retval = '';
 
@@ -540,7 +612,15 @@
         $access = SEC_hasAccess ($owner_id, $group_id, $perm_owner, $perm_group,
                 $perm_members, $perm_anon);
     }
-    if (($access < 3) || !hasBlockTopicAccess($tid) || !SEC_inGroup($group_id)) {
+    
+    // Figure out what needs to be passed to hasBlockMultiTopicAccess
+    if ($topic_option == TOPIC_ALL_OPTION || $topic_option == TOPIC_HOMEONLY_OPTION) {
+        $topic_list = $topic_option;
+    } else {
+        $topic_list = $tid;
+    }
+    
+    if (($access < 3) || !hasBlockMultiTopicAccess($topic_list, true) || !SEC_inGroup($group_id)) {
         $retval .= COM_siteHeader('menu', $MESSAGE[30])
                 . COM_showMessageText($MESSAGE[29], $MESSAGE[30])
                 . COM_siteFooter();
@@ -628,16 +708,16 @@
         }
 
         if ($bid > 0) {
-            DB_save($_TABLES['blocks'],'bid,name,title,help,type,blockorder,content,tid,rdfurl,rdfupdated,rdflimit,phpblockfn,onleft,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon,is_enabled,allow_autotags,rdf_last_modified,rdf_etag',"$bid,'$name','$title','$help','$type','$blockorder','$content','$tid','$rdfurl','$rdfupdated','$rdflimit','$phpblockfn',$onleft,$owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon,$is_enabled,$allow_autotags,NULL,NULL");
+            DB_save($_TABLES['blocks'],'bid,name,title,help,type,blockorder,content,rdfurl,rdfupdated,rdflimit,phpblockfn,onleft,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon,is_enabled,allow_autotags,rdf_last_modified,rdf_etag',"$bid,'$name','$title','$help','$type','$blockorder','$content','$rdfurl','$rdfupdated','$rdflimit','$phpblockfn',$onleft,$owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon,$is_enabled,$allow_autotags,NULL,NULL");
         } else {
             $sql = array();
             $sql['mysql'] = $sql['mssql'] = "INSERT INTO {$_TABLES['blocks']} "
-             .'(name,title,help,type,blockorder,content,tid,rdfurl,rdfupdated,rdflimit,phpblockfn,onleft,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon,is_enabled,allow_autotags) '
-             ."VALUES ('$name','$title','$help','$type','$blockorder','$content','$tid','$rdfurl','$rdfupdated','$rdflimit','$phpblockfn',$onleft,$owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon,$is_enabled,$allow_autotags)";
+             .'(name,title,help,type,blockorder,content,rdfurl,rdfupdated,rdflimit,phpblockfn,onleft,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon,is_enabled,allow_autotags) '
+             ."VALUES ('$name','$title','$help','$type','$blockorder','$content','$rdfurl','$rdfupdated','$rdflimit','$phpblockfn',$onleft,$owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon,$is_enabled,$allow_autotags)";
             
              $sql['pgsql'] = "INSERT INTO {$_TABLES['blocks']} "
-             .'(bid,name,title,help,type,blockorder,content,tid,rdfurl,rdfupdated,rdflimit,phpblockfn,onleft,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon,is_enabled,allow_autotags) '
-             ."VALUES ((SELECT NEXTVAL('{$_TABLES['blocks']}_bid_seq')),'$name','$title','$help','$type','$blockorder','$content','$tid','$rdfurl','$rdfupdated','$rdflimit','$phpblockfn',$onleft,$owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon,$is_enabled,$allow_autotags)";
+             .'(bid,name,title,help,type,blockorder,content,rdfurl,rdfupdated,rdflimit,phpblockfn,onleft,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon,is_enabled,allow_autotags) '
+             ."VALUES ((SELECT NEXTVAL('{$_TABLES['blocks']}_bid_seq')),'$name','$title','$help','$type','$blockorder','$content','$rdfurl','$rdfupdated','$rdflimit','$phpblockfn',$onleft,$owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon,$is_enabled,$allow_autotags)";
              
              DB_query($sql);
              $bid = DB_insertId();
@@ -646,6 +726,19 @@
         if (($type == 'gldefault') && ($name == 'older_stories')) {
             COM_olderStuff ();
         }
+        
+        // Save Topic link(s)
+        DB_delete($_TABLES['topic_assignments'], array('type', 'id'), array('block', $bid));



More information about the geeklog-cvs mailing list