Xaraya / Postnuke CVS Notices - Message

Note: this list is kept only as a demonstration for CVSNotice. For the latest CVS notices, see the Xaraya and Postnuke sites

View Statistics - Next Notice - Previous Notice

Directory filter : [ all ] / postnuke_official / html / modules / categories [ view in CVS ]

Date Directory [filter] File(s) [view] Author [filter]
31 Jul 2002 02:13:35postnuke_official/html/modules/categoriespnuserapi.php,1.6,1.7Mike
 leftjoin expanded & used - countitems no longer accepts external table/field/where

Update of /home/cvsroot/postnuke_official/html/modules/categories
In directory ns7.hostnuke.net:/tmp/cvs-serv7393

Modified Files:
	pnuserapi.php 
Log Message:
leftjoin expanded & used - countitems no longer accepts external table/field/where


Index: pnuserapi.php
===================================================================
RCS file: /home/cvsroot/postnuke_official/html/modules/categories/pnuserapi.php,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** pnuserapi.php	30 Jul 2002 22:14:19 -0000	1.6
--- pnuserapi.php	31 Jul 2002 02:13:33 -0000	1.7
***************
*** 304,309 ****
   * @param $args['iids'] array of ids of itens to get linkage for
   * @param $args['modid'] module´s ID
!  * @param $args['reverse'] if set to 1 the return will have as keys the 'cids'
!  *                         else the keys are the 'iids'
   * @returns array
   * @return item array, or false on failure
--- 304,309 ----
   * @param $args['iids'] array of ids of itens to get linkage for
   * @param $args['modid'] module´s ID
!  * @param $args['reverse'] if set to 1 the return will have as keys the 'iids'
!  *                         else the keys are the 'cids'
   * @returns array
   * @return item array, or false on failure
***************
*** 316,350 ****
      // Get database setup
      list($dbconn) = pnDBGetConn();
-     $pntable = pnDBGetTables();
-     $categorieslinkagetable = $pntable['categories_linkage'];
-     $categorieslinkagecolumn = &$pntable['categories_linkage_column'];
  
!     // Get item IDs
!     $sql = "SELECT $categorieslinkagecolumn[iid], $categorieslinkagecolumn[cid]";
! 
!     $sql .=" FROM $categorieslinkagetable WHERE ";
! 
!     // Handle out the proper restrictions for the input Arrays
!     if (isset($cids) && is_array($cids) && count($cids) > 0)
!     {
!        $allcids = join(', ', $cids);
!        $sql .= "$categorieslinkagecolumn[cid] IN (" . pnVarPrepForStore($allcids) . ") ";
!     }
  
!     if (isset($iids) && is_array($iids) && count($iids) > 0)
!     {
!        if (isset($allcids)) {
!            $sql .= " AND ";
!        }
!        $alliids = join(', ', $iids);
!        $sql .= "$categorieslinkagecolumn[iid] IN (" . pnVarPrepForStore($alliids) . ") ";
      }
! 
!     if (isset($modid))
!     {
!        if (isset($allcids) || isset($alliids)) {
!            $sql .= " AND ";
!        }
!        $sql .= " $categorieslinkagecolumn[modid] IN (" . pnVarPrepForStore($modid) . ") ";
      }
  
--- 316,335 ----
      // Get database setup
      list($dbconn) = pnDBGetConn();
  
!     // Get the field names and LEFT JOIN ... ON ... parts from categories
!     // By passing on the $args, we can let leftjoin() create the WHERE for
!     // the categories-specific columns too now
!     $categoriesdef = pnModAPIFunc('categories','user','leftjoin',$args);
  
!     // Get item IDs
!     // Reverse the order if reverse is set to 1
!     if ($reverse == 1) {
!         $sql = 'SELECT ' . $categoriesdef['iid'] . ', ' . $categoriesdef['cid'];
!     } else {
!         $sql = 'SELECT ' . $categoriesdef['cid'] . ', ' . $categoriesdef['iid'];
      }
!     $sql .= ' FROM ' . $categoriesdef['table'];
!     if (!empty($categoriesdef['where'])) {
!         $sql .= ' WHERE ' . $categoriesdef['where'];
      }
  
***************
*** 353,357 ****
      if ($dbconn->ErrorNo() != 0)
      {
!         pnSessionSetVar('errormsg', _DBSELECTERROR);
          return false;
      }
--- 338,342 ----
      if ($dbconn->ErrorNo() != 0)
      {
!         pnSessionSetVar('errormsg', _DBSELECTERROR . ' error ' . $dbconn->ErrorMsg());
          return false;
      }
***************
*** 360,376 ****
      $answer = array();
      
-     // Reverse the order if reverse is set to 1
-     if ($reverse == 1)
-     {
-         $f = 0;
-         $s = 1;
-     } else {
-         $f = 1;
-         $s = 0;
-     }
- 
      for(; !$result->EOF; $result->MoveNext())
      {
!         $answer[$result->fields[$f]][] = $result->fields[$s];
      }
  
--- 345,351 ----
      $answer = array();
      
      for(; !$result->EOF; $result->MoveNext())
      {
!         $answer[$result->fields[0]][] = $result->fields[1];
      }
  
***************
*** 382,385 ****
--- 357,409 ----
  
  /**
+  * count number of items
+  * @param $args['cids'] array of cids that we are counting for
+  * @returns int
+  * @return number of items
+  */
+ function categories_userapi_countitems($args)
+ {
+     // Get arguments from argument array
+     extract($args);
+ 
+     // Optional arguments
+     if (!isset($cids)) {
+         $cids = array();
+     }
+ 
+     // Security check
+     if (!pnSecAuthAction(0, 'categories::item', '::', ACCESS_OVERVIEW)) {
+         return;
+     }
+ 
+     // Get database setup
+     list($dbconn) = pnDBGetConn();
+ 
+     // Get the field names and LEFT JOIN ... ON ... parts from categories
+     // By passing on the $args, we can let leftjoin() create the WHERE for
+     // the categories-specific columns too now
+     $categoriesdef = pnModAPIFunc('categories','user','leftjoin',$args);
+ 
+     $sql = 'SELECT COUNT(DISTINCT ' . $categoriesdef['iid'];
+     $sql .= ' FROM ' . $categoriesdef['table'];
+     if (!empty($categoriesdef['where'])) {
+         $sql .= ' WHERE ' . $categoriesdef['where'];
+     }
+ 
+     $result = $dbconn->Execute($sql);
+ 
+     if ($dbconn->ErrorNo() != 0) {
+         pnSessionSetVar('errormsg', _DBSELECTERROR);
+         return false;
+     }
+ 
+     $num = $result->fields[0];
+ 
+     $result->Close();
+ 
+     return $num;
+ }
+ 
+ /**
   * count number of items (optionally depending on external module criteria)
   * @param $args['cids'] array of cids that we are counting for
***************
*** 389,394 ****
   * @returns int
   * @return number of items
!  */
! function categories_userapi_countitems($args)
  {
      // Get arguments from argument array
--- 413,423 ----
   * @returns int
   * @return number of items
!  *
! // This was not a good idea, actually - it's better to count your items
! // in your own module, and use e.g.
! //    $categoriesdef = pnModAPIFunc('categories','user','leftjoin',$args);
! // to get the relevant LEFT JOIN ... ON ... [WHERE ...] parts from categories
!  *
! function categories_userapi_countitems_deprecated($args)
  {
      // Get arguments from argument array
***************
*** 397,401 ****
      // Optional arguments
      if (!isset($cids)) {
!         $cids = array(-1);
      }
  
--- 426,430 ----
      // Optional arguments
      if (!isset($cids)) {
!         $cids = array();
      }
  
***************
*** 412,416 ****
  
      // Check if we have active CIDs
!     if ((isset($cids[0])) && ($cids[0] != -1)) {
          // We do.  We just need to know how many articles there are in these
          // categories
--- 441,445 ----
  
      // Check if we have active CIDs
!     if (count($cids) > 0) {
          // We do.  We just need to know how many articles there are in these
          // categories
***************
*** 472,475 ****
--- 501,506 ----
      return $num;
  }
+ * end of not-so-good idea
+ */ 
  
  /**
***************
*** 497,521 ****
      // Get database setup
      list($dbconn) = pnDBGetConn();
!     $pntable = pnDBGetTables();
!     $categorieslinkagetable = $pntable['categories_linkage'];
!     $categorieslinkagecolumn = &$pntable['categories_linkage_column'];
  
      if ($groupby == 'item') {
!         $sql = "SELECT $categorieslinkagecolumn[iid], COUNT(*)
!                 FROM $categorieslinkagetable ";
!         if (isset($modid)) {
!             $sql .= " WHERE $categorieslinkagecolumn[modid] = '" .
!                     pnVarPrepForStore($modid) . "'";
!         }
!         $sql .= " GROUP BY $categorieslinkagecolumn[iid]";
      } else {
!         $sql = "SELECT $categorieslinkagecolumn[cid], COUNT(*)
!                 FROM $categorieslinkagetable ";
!         if (isset($modid)) {
!             $sql .= " WHERE $categorieslinkagecolumn[modid] = '" .
!                     pnVarPrepForStore($modid) . "'";
!         }
!         $sql .= " GROUP BY $categorieslinkagecolumn[cid]";
      }
  
      $result = $dbconn->Execute($sql);
--- 528,548 ----
      // Get database setup
      list($dbconn) = pnDBGetConn();
! 
!     // Get the field names and LEFT JOIN ... ON ... parts from categories
!     // By passing on the $args, we can let leftjoin() create the WHERE for
!     // the categories-specific columns too now
!     $categoriesdef = pnModAPIFunc('categories','user','leftjoin',$args);
  
      if ($groupby == 'item') {
!         $field = $categoriesdef['iid'];
      } else {
!         $field = $categoriesdef['cid'];
      }
+     $sql = 'SELECT ' . $field . ', COUNT(*)';
+     $sql .= ' FROM ' . $categoriesdef['table'];
+     if (!empty($categoriesdef['where'])) {
+         $sql .= ' WHERE ' . $categoriesdef['where'];
+     }
+     $sql .= ' GROUP BY ' . $field;
  
      $result = $dbconn->Execute($sql);
***************
*** 598,609 ****
   *               ON $field = <name of itemid field in your module>
   *           WHERE ...
!  *               AND $modid = <module ID> // this is *required* for categories
!  *               AND $where
   *
!  * @param $args['cids'] optional array of cids that we are selecting on
   * @returns array
   * @return array('table' => 'nuke_categories_linkage',
   *               'field' => 'nuke_categories_linkage.pn_iid',
!  *               'where' => 'nuke_categories_linkage.pn_cid IN (...)',
   *               'cid'   => 'nuke_categories_linkage.pn_cid',
   *               ...
--- 625,639 ----
   *               ON $field = <name of itemid field in your module>
   *           WHERE ...
!  *               AND $where // this includes pn_modid = <your module ID>
   *
!  * @param $args['modid'] your module ID (use pnModGetIDFromName('mymodule'))
!  *
!  * @param $args['cids'] optional array of category ids that we are selecting on
!  * @param $args['iids'] optional array of item ids that we are selecting on
   * @returns array
   * @return array('table' => 'nuke_categories_linkage',
   *               'field' => 'nuke_categories_linkage.pn_iid',
!  *               'where' => 'nuke_categories_linkage.pn_modid = ...
!  *                           AND nuke_categories_linkage.pn_cid IN (...)',
   *               'cid'   => 'nuke_categories_linkage.pn_cid',
   *               ...
***************
*** 615,622 ****
--- 645,664 ----
      extract($args);
  
+     // Required argument ?
+     if (!isset($modid) || !is_numeric($modid)) {
+         $msg = pnML('Missing parameter #(1) for #(2)',
+                     'modid','categories');
+         pnExceptionSet(PN_SYSTEM_EXCEPTION, 'BAD_PARAM',
+                        new SystemException($msg));
+         return array();
+     }
+ 
      // Optional argument
      if (!isset($cids)) {
          $cids = array();
      }
+     if (!isset($iids)) {
+         $iids = array();
+     }
  
      // Security check
***************
*** 638,641 ****
--- 680,693 ----
          }
      }
+ // Note: your module should be checking security for the iids too !
+     foreach ($iids as $iid) {
+         if (!pnSecAuthAction(0, 'categories::item', '::$iid', ACCESS_OVERVIEW)) {
+             $msg = pnML('Not authorized to view #(1) #(2)',
+                         'category item',pnVarPrepForStore($iid));
+             pnExceptionSet(PN_SYSTEM_EXCEPTION, 'NO_PERMISSION',
+                            new SystemException($msg));
+             return array();
+         }
+     }
  
      // Table definition
***************
*** 645,663 ****
      $leftjoin = array();
  
      // Specify LEFT JOIN ... ON ... [WHERE ...] parts
      $leftjoin['table'] = $categorieslinkagetable;
!     $leftjoin['field'] = $categorieslinkagetable . '.pn_iid';
      if (count($cids) > 0) {
          $allcids = join(', ', $cids);
!         $leftjoin['where'] = $categorieslinkagetable . '.pn_cid IN (' .
!                              pnVarPrepForStore($allcids) . ')';
      } else {
          $leftjoin['where'] = '';
-     }
- 
-     // Add available columns in the categories table
-     $columns = array('cid','iid','modid');
-     foreach ($columns as $column) {
-         $leftjoin[$column] = $categorieslinkagetable . '.pn_' . $column;
      }
  
--- 697,729 ----
      $leftjoin = array();
  
+     // Add available columns in the categories table
+     $columns = array('cid','iid','modid');
+     foreach ($columns as $column) {
+         $leftjoin[$column] = $categorieslinkagetable . '.pn_' . $column;
+     }
+ 
      // Specify LEFT JOIN ... ON ... [WHERE ...] parts
      $leftjoin['table'] = $categorieslinkagetable;
!     $leftjoin['field'] = $leftjoin['iid'];
! 
!     // Specify the WHERE part
!     $where = array();
!     if (!empty($modid) && is_numeric($modid)) {
!         $where[] = $leftjoin['modid'] . ' = ' . $modid;
!     }
      if (count($cids) > 0) {
          $allcids = join(', ', $cids);
!         $where[] = $leftjoin['cid'] . ' IN (' .
!                    pnVarPrepForStore($allcids) . ')';
!     }
!     if (count($iids) > 0) {
!         $alliids = join(', ', $iids);
!         $where[] = $leftjoin['iid'] . ' IN (' .
!                    pnVarPrepForStore($alliids) . ')';
!     }
!     if (count($where) > 0) {
!         $leftjoin['where'] = join(' AND ', $where);
      } else {
          $leftjoin['where'] = '';
      }
  


Directory filter : [ all ] / postnuke_official / html / modules / categories [ view in CVS ]

View Statistics - Next Notice - Previous Notice


Visit Developer Site - Browse CVS Repository Syndicate via backend.rss
(max. once per hour please)
Powered by CVSNotice 0.1.3