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 |