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 NoticeDirectory filter : [ all ] / postnuke_official / html / modules / categories [ view in CVS ]
Date | Directory [filter] | File(s) [view] | Author [filter] |
16 Aug 2002 14:12:31 | postnuke_official/html/modules/categories | pnuserapi.php,1.9,1.10 | Mike |
improve params for AND-ing categories |
Update of /home/cvsroot/postnuke_official/html/modules/categories In directory ns7.hostnuke.net:/tmp/cvs-serv7112 Modified Files: pnuserapi.php Log Message: improve params for AND-ing categories Index: pnuserapi.php =================================================================== RCS file: /home/cvsroot/postnuke_official/html/modules/categories/pnuserapi.php,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** pnuserapi.php 13 Aug 2002 22:13:11 -0000 1.9 --- pnuserapi.php 16 Aug 2002 14:12:29 -0000 1.10 *************** *** 240,247 **** /** ! * get info on a specific category ! * @param $args['cid'] id of category to get info * @returns array ! * @return category array, or false on failure */ --- 240,248 ---- /** ! * get info on a specific (list of) category ! * @param $args['cid'] id of category to get info, or ! * @param $args['cids'] array of category ids to get info * @returns array ! * @return category info array, or array of cat info arrays, false on failure */ *************** *** 253,257 **** extract($args); ! if (!isset($cid)) { pnSessionSetVar('errormsg', _MODARGSERROR); return false; --- 254,258 ---- extract($args); ! if (!isset($cid) && !isset($cids)) { pnSessionSetVar('errormsg', _MODARGSERROR); return false; *************** *** 270,275 **** ".$categoriescolumn['left'].", ".$categoriescolumn['right']." ! FROM $categoriestable ! WHERE ".$categoriescolumn['cid']."=".pnVarPrepForStore($cid); // TODO - check that start is correct (might be -1) --- 271,281 ---- ".$categoriescolumn['left'].", ".$categoriescolumn['right']." ! FROM $categoriestable "; ! if (isset($cid)) { ! $SQLquery .= "WHERE ".$categoriescolumn['cid']."=".pnVarPrepForStore($cid); ! } else { ! $allcids = join(', ',$cids); ! $SQLquery .= "WHERE ".$categoriescolumn['cid']." IN (".pnVarPrepForStore($allcids).")"; ! } // TODO - check that start is correct (might be -1) *************** *** 286,312 **** } ! list($cid, $name, $description, $image, $left, $right) = $result->fields; ! $info = Array( ! "cid" => $cid, ! "name" => $name, ! "description" => $description, ! "image" => $image, ! "left" => $left, ! "right" => $right ! ); ! ! return $info; } /** * get links ! * @param $args['cids'] array of ids of categories to get linkage for (OR) * @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' ! // TODO: better name for params ! * @param $args['andcids'] array of ids of categories to get linkage for (AND) ! * @param $args['numcids'] the number of categories you want to items grouped by * @returns array * @return item array, or false on failure --- 292,333 ---- } ! if (isset($cid)) { ! list($cid, $name, $description, $image, $left, $right) = $result->fields; ! $info = Array( ! "cid" => $cid, ! "name" => $name, ! "description" => $description, ! "image" => $image, ! "left" => $left, ! "right" => $right ! ); ! return $info; ! } else { ! $info = array(); ! while (!$result->EOF) { ! list($cid, $name, $description, $image, $left, $right) = $result->fields; ! $info[$cid] = Array( ! "cid" => $cid, ! "name" => $name, ! "description" => $description, ! "image" => $image, ! "left" => $left, ! "right" => $right ! ); ! $result->MoveNext(); ! } ! return $info; ! } } /** * get links ! * @param $args['cids'] array of ids of categories to get linkage for (OR/AND) * @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' ! * @param $args['andcids'] true means AND-ing categories listed in cids ! * @param $args['groupcids'] the number of categories you want items grouped by * @returns array * @return item array, or false on failure *************** *** 328,334 **** $sql = 'SELECT ' . $categoriesdef['cid'] . ', ' . $categoriesdef['iid']; $sql .= ' FROM ' . $categoriesdef['table']; ! if (!empty($categoriesdef['more'])) { ! $sql .= $categoriesdef['more']; ! } if (!empty($categoriesdef['where'])) { $sql .= ' WHERE ' . $categoriesdef['where']; --- 349,353 ---- $sql = 'SELECT ' . $categoriesdef['cid'] . ', ' . $categoriesdef['iid']; $sql .= ' FROM ' . $categoriesdef['table']; ! $sql .= $categoriesdef['more']; if (!empty($categoriesdef['where'])) { $sql .= ' WHERE ' . $categoriesdef['where']; *************** *** 352,358 **** if ($reverse == 1) { // the list of categories is in the N first fields here ! if (isset($andcids) && count($andcids) > 1) { $answer[$iid] = $fields; ! } elseif (isset($numcids) && $numcids > 1) { $answer[$iid] = $fields; // we get 1 category per record here --- 371,377 ---- if ($reverse == 1) { // the list of categories is in the N first fields here ! if (isset($cids) && count($cids) > 1 && $andcids) { $answer[$iid] = $fields; ! } elseif (isset($groupcids) && $groupcids > 1) { $answer[$iid] = $fields; // we get 1 category per record here *************** *** 375,381 **** /** * count number of items ! * @param $args['cids'] optional array of cids we're counting for (OR) ! // TODO: better name for params ! * @param $args['andcids'] optional array of cids we're counting for (AND) * @returns int * @return number of items --- 394,399 ---- /** * count number of items ! * @param $args['cids'] optional array of cids we're counting for (OR/AND) ! * @param $args['andcids'] true means AND-ing categories listed in cids * @returns int * @return number of items *************** *** 406,412 **** $sql = 'SELECT COUNT(DISTINCT ' . $categoriesdef['iid'] . ')'; $sql .= ' FROM ' . $categoriesdef['table']; ! if (!empty($categoriesdef['more'])) { ! $sql .= $categoriesdef['more']; ! } if (!empty($categoriesdef['where'])) { $sql .= ' WHERE ' . $categoriesdef['where']; --- 424,428 ---- $sql = 'SELECT COUNT(DISTINCT ' . $categoriesdef['iid'] . ')'; $sql .= ' FROM ' . $categoriesdef['table']; ! $sql .= $categoriesdef['more']; if (!empty($categoriesdef['where'])) { $sql .= ' WHERE ' . $categoriesdef['where']; *************** *** 530,537 **** * @param $args['groupby'] group entries by 'category' or by 'item' * @param $args['modid'] module�s ID ! * @param $args['cids'] optional array of cids we're counting for (OR) ! // TODO: better name for params ! * @param $args['andcids'] optional array of cids we're counting for (AND), or ! * @param $args['numcids'] optional grouping of categories for counting (AND) * @returns array * @return number of items per category, or caterogies per item --- 546,552 ---- * @param $args['groupby'] group entries by 'category' or by 'item' * @param $args['modid'] module�s ID ! * @param $args['cids'] optional array of cids we're counting for (OR/AND) ! * @param $args['andcids'] true means AND-ing categories listed in cids ! * @param $args['groupcids'] the number of categories you want items grouped by * @returns array * @return number of items per category, or caterogies per item *************** *** 567,573 **** $sql = 'SELECT ' . $field . ', COUNT(*)'; $sql .= ' FROM ' . $categoriesdef['table']; ! if (!empty($categoriesdef['more'])) { ! $sql .= $categoriesdef['more']; ! } if (!empty($categoriesdef['where'])) { $sql .= ' WHERE ' . $categoriesdef['where']; --- 582,586 ---- $sql = 'SELECT ' . $field . ', COUNT(*)'; $sql .= ' FROM ' . $categoriesdef['table']; ! $sql .= $categoriesdef['more']; if (!empty($categoriesdef['where'])) { $sql .= ' WHERE ' . $categoriesdef['where']; *************** *** 661,671 **** * @param $args['modid'] your module ID (use pnModGetIDFromName('mymodule')) * - * @param $args['cids'] opt. array of category ids that we are selecting on (OR) * @param $args['iids'] optional array of item ids that we are selecting on ! // TODO: better name for params ! * @param $args['andcids'] opt. array of category ids that we are selecting on ! * (AND) ! * @param $args['numcids'] the number of categories you want to group by/select ! * for etc. (AND) * @returns array * @return array('table' => 'nuke_categories_linkage', --- 674,681 ---- * @param $args['modid'] your module ID (use pnModGetIDFromName('mymodule')) * * @param $args['iids'] optional array of item ids that we are selecting on ! * @param $args['cids'] optional array of cids we're counting for (OR/AND) ! * @param $args['andcids'] true means AND-ing categories listed in cids ! * @param $args['groupcids'] the number of categories you want items grouped by * @returns array * @return array('table' => 'nuke_categories_linkage', *************** *** 699,703 **** } if (!isset($andcids)) { ! $andcids = array(); } --- 709,713 ---- } if (!isset($andcids)) { ! $andcids = false; } *************** *** 720,732 **** } } - foreach ($andcids as $cid) { - if (!pnSecAuthAction(0, 'categories::category', '::$cid', ACCESS_OVERVIEW)) { - $msg = pnML('Not authorized to view #(1) #(2)', - 'category',pnVarPrepForStore($cid)); - pnExceptionSet(PN_SYSTEM_EXCEPTION, 'NO_PERMISSION', - new SystemException($msg)); - return array(); - } - } // Note: your module should be checking security for the iids too ! foreach ($iids as $iid) { --- 730,733 ---- *************** *** 740,748 **** } ! // dummy andcids array when we're going for x categories at a time ! if (isset($numcids) && count($andcids) == 0) { $isdummy = 1; ! for ($i = 0; $i < $numcids; $i++) { ! $andcids[] = $i; } } else { --- 741,750 ---- } ! // dummy cids array when we're going for x categories at a time ! if (isset($groupcids) && count($cids) == 0) { ! $andcids = true; $isdummy = 1; ! for ($i = 0; $i < $groupcids; $i++) { ! $cids[] = $i; } } else { *************** *** 757,763 **** // create list of tables we'll be left joining for AND ! if (count($andcids) > 0) { $catlinks = array(); ! for ($i = 0; $i < count($andcids); $i++) { $catlinks[] = 'catlink' . $i; } --- 759,765 ---- // create list of tables we'll be left joining for AND ! if (count($cids) > 0 && $andcids) { $catlinks = array(); ! for ($i = 0; $i < count($cids); $i++) { $catlinks[] = 'catlink' . $i; } *************** *** 774,778 **** // Specify LEFT JOIN ... ON ... [WHERE ...] parts ! if (count($andcids) > 0) { $leftjoin['table'] = $categorieslinkagetable . ' as ' . $catlinks[0]; $leftjoin['more'] = ' '; --- 776,780 ---- // Specify LEFT JOIN ... ON ... [WHERE ...] parts ! if (count($cids) > 0 && $andcids) { $leftjoin['table'] = $categorieslinkagetable . ' as ' . $catlinks[0]; $leftjoin['more'] = ' '; *************** *** 800,806 **** } if (count($cids) > 0) { ! $allcids = join(', ', $cids); ! $where[] = $leftjoin['cid'] . ' IN (' . ! pnVarPrepForStore($allcids) . ')'; } if (count($iids) > 0) { --- 802,829 ---- } if (count($cids) > 0) { ! if ($andcids) { ! // select only the 1-2-4 combination, not the 2-1-4, 4-2-1, etc. ! if ($isdummy) { ! $oldcid = ''; ! foreach ($leftjoin['cids'] as $cid) { ! if (!empty($oldcid)) { ! $where[] .= $oldcid . ' < ' . $cid; ! } ! $oldcid = $cid; ! } ! // select the categories you wanted ! } else { ! for ($i = 0; $i < count($cids); $i++) { ! $where[] = $catlinks[$i] . '.pn_cid = ' . ! pnVarPrepForStore($cids[$i]); ! } ! } ! // include all cids here ! $leftjoin['cid'] = join(', ',$leftjoin['cids']); ! } else { ! $allcids = join(', ', $cids); ! $where[] = $leftjoin['cid'] . ' IN (' . ! pnVarPrepForStore($allcids) . ')'; ! } } if (count($iids) > 0) { *************** *** 808,831 **** $where[] = $leftjoin['iid'] . ' IN (' . pnVarPrepForStore($alliids) . ')'; - } - if (count($andcids) > 0) { - // select only the 1-2-4 combination, not the 2-1-4, 4-2-1, etc. - if ($isdummy) { - $oldcid = ''; - foreach ($leftjoin['cids'] as $cid) { - if (!empty($oldcid)) { - $where[] .= $oldcid . ' < ' . $cid; - } - $oldcid = $cid; - } - // select the categories you wanted - } else { - for ($i = 0; $i < count($andcids); $i++) { - $where[] = $catlinks[$i] . '.pn_cid = ' . - pnVarPrepForStore($andcids[$i]); - } - } - // include all cids here - $leftjoin['cid'] = join(', ',$leftjoin['cids']); } if (count($where) > 0) { --- 831,834 ----
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 |