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_modules / articles [ view in CVS ]
| Date | Directory [filter] | File(s) [view] | Author [filter] |
| 08 Aug 2002 23:03:22 | postnuke_modules/articles | pnadmin.php,1.28,1.29 pnuser.php,1.41,1.42 pnuserapi.php,1.34,1.35 | Mike |
| working with hitcount, category browsing, combined pubtype+cat item count, some layout change | |||
Update of /home/cvsroot/postnuke_modules/articles
In directory ns7.hostnuke.net:/tmp/cvs-serv15127
Modified Files:
pnadmin.php pnuser.php pnuserapi.php
Log Message:
working with hitcount, category browsing, combined pubtype+cat item count, some layout change
Index: pnadmin.php
===================================================================
RCS file: /home/cvsroot/postnuke_modules/articles/pnadmin.php,v
retrieving revision 1.28
retrieving revision 1.29
diff -C2 -d -r1.28 -r1.29
*** pnadmin.php 7 Aug 2002 00:39:35 -0000 1.28
--- pnadmin.php 8 Aug 2002 23:03:20 -0000 1.29
***************
*** 662,665 ****
--- 662,667 ----
$labels['categories'] = pnML('Categorization');
+ // Note : this determines which fields are really shown in the template !!!
+ // Get the labels from the pubtype configuration
foreach ($pubtypes[$ptid]['config'] as $field => $value) {
$labels[$field] = $value;
Index: pnuser.php
===================================================================
RCS file: /home/cvsroot/postnuke_modules/articles/pnuser.php,v
retrieving revision 1.41
retrieving revision 1.42
diff -C2 -d -r1.41 -r1.42
*** pnuser.php 5 Aug 2002 23:17:11 -0000 1.41
--- pnuser.php 8 Aug 2002 23:03:20 -0000 1.42
***************
*** 36,39 ****
--- 36,43 ----
}
+ // TODO: generalize, organize, put stuff in userapi and categories, simplify
+
+ // TODO: allow *AND*-ing of categories (also in categories API) !!!
+
/**
* view articles
***************
*** 163,166 ****
--- 167,171 ----
// TODO: make this dependent on publication type too ?
+ $output->Text(pnML('Category') . ' : ');
$output->Text('[ ');
$output->URL(pnModURL('articles',
***************
*** 171,174 ****
--- 176,194 ----
$output->Text(' ] ');
+ // get the counts for all categories
+ $pubcatcount = pnModAPIFunc('articles',
+ 'user',
+ 'getpubcatcount',
+ // frontpage or approved
+ array('status' => array(3,2),
+ 'cids' => $cids,
+ 'ptid' => $ptid,
+ 'reverse' => 1));
+ if (!empty($ptid)) {
+ $curptid = $ptid;
+ } else {
+ $curptid = 'total';
+ }
+
// display one (or more) bread-crumb trails of categories
foreach ($cids as $cid) {
***************
*** 183,186 ****
--- 203,209 ----
if ($info['cid'] == $cid) {
$output->Text(pnVarPrepForDisplay(pnVarCensor($info['name'])));
+ if (isset($pubcatcount[$cid][$curptid])) {
+ $output->Text(' (' . $pubcatcount[$cid][$curptid] . ')');
+ }
} else {
$output->URL(pnModURL('articles',
***************
*** 199,209 ****
//TODO: only show 1-st level children, horizontally ?
// show child categories (when only 1 category is selected)
! if (count($cids) == 1 && empty($articles)) {
! $count = pnModAPIFunc('categories',
! 'user',
! 'groupcount',
! array('groupby' => 'category',
! 'modid' => pnModGetIDFromName('articles')));
!
if (!pnModAPILoad('categories', 'visual')) {
$msg = pnML('Unable to load #(1) #(2) API',
--- 222,227 ----
//TODO: only show 1-st level children, horizontally ?
// show child categories (when only 1 category is selected)
! // if (count($cids) == 1 && empty($articles)) {
! if (count($cids) == 1) {
if (!pnModAPILoad('categories', 'visual')) {
$msg = pnML('Unable to load #(1) #(2) API',
***************
*** 213,217 ****
return;
}
!
// TODO: make sure permissions are taken into account here !
$list = pnModAPIFunc('categories',
--- 231,235 ----
return;
}
!
// TODO: make sure permissions are taken into account here !
$list = pnModAPIFunc('categories',
***************
*** 219,222 ****
--- 237,260 ----
'listarray',
array('cid' => $cids[0]));
+ $seencid = array();
+ foreach ($list as $info) {
+ $seencid[$info['id']] = 1;
+ }
+ $childlist = array_keys($seencid);
+
+ // get the counts for all child categories
+ $pubcatcount = pnModAPIFunc('articles',
+ 'user',
+ 'getpubcatcount',
+ // frontpage or approved
+ array('status' => array(3,2),
+ 'cids' => $childlist,
+ 'ptid' => $ptid,
+ 'reverse' => 1));
+ if (!empty($ptid)) {
+ $curptid = $ptid;
+ } else {
+ $curptid = 'total';
+ }
$output->SetInputMode(_PNH_VERBATIMINPUT);
foreach ($list as $info) {
***************
*** 231,236 ****
array('cids' => array($info['id']))),
pnVarPrepForDisplay(pnVarCensor($info['name'])));
! if (isset($count[$info['id']])) {
! $output->Text(' (' . $count[$info['id']] . ')');
}
$output->Text($info['aftertags']);
--- 269,274 ----
array('cids' => array($info['id']))),
pnVarPrepForDisplay(pnVarCensor($info['name'])));
! if (isset($pubcatcount[$info['id']][$curptid])) {
! $output->Text(' (' . $pubcatcount[$info['id']][$curptid] . ')');
}
$output->Text($info['aftertags']);
***************
*** 238,241 ****
--- 276,304 ----
$output->Linebreak();
}
+ } elseif (!empty($ptid)) {
+ $output->Text(pnML('Browse in') . ' : ');
+ $string = pnModGetVar('articles','cids.'.$ptid);
+ if (empty($string)) {
+ $string = pnModGetVar('articles','cids');
+ }
+ // TODO: make 1 call to get all
+ $rootcats = split(';',$string);
+ foreach ($rootcats as $cid) {
+ if (empty($cid)) {
+ continue;
+ }
+ $info = pnModAPIFunc('categories',
+ 'user',
+ 'getcatinfo',
+ array('cid' => $cid));
+ $output->URL(pnModURL('articles',
+ 'user',
+ 'view',
+ array('cids' => array($info['cid']),
+ 'ptid' => $ptid)),
+ pnVarPrepForDisplay(pnVarCensor($info['name'])));
+ $output->Text(' ');
+ }
+ $output->Linebreak(2);
}
***************
*** 268,279 ****
foreach ($articles as $article)
{
- // TODO: figure out how we *should* be adding an URL in a template :-)
$article['link'] = pnModURL('articles', 'user', 'display',
array('aid' => $article['aid'],
'ptid' => $article['pubtypeid'],
'cids' => $cids));
- $article['title'] = '<a class="pn-title" href="' .
- $article['link'] .
- '">' . $article['title'] . '</a>';
$bodylen = strlen($article['body']);
if ($bodylen > 0) {
--- 331,338 ----
***************
*** 290,296 ****
$article['comments'] = '';
// TODO: to be defined
- $article['counter'] = '';
$article['topic_icons'] = '';
- // $article['notes'] = '';
}
$template = $pubtypes[$article['pubtypeid']]['name'];
--- 349,353 ----
***************
*** 468,484 ****
// TODO: output from hooks comes here ?
$data['comments'] = '';
- // TODO: to be defined
- $data['counter'] = '';
- // $data['notes'] = '';
! if ($article['pubtypeid'] == 1) {
// TODO: add pnVarCensor ?
$data['author'] = pnUserGetVar('name', $article['authorid']);
$data['date'] = strftime(_DATETIMELONG, $article['pubdate']);
$data['summary'] = $article['summary'];
} else {
- $data['author'] = '';
$data['summary'] = '';
}
$data['title'] = $article['title'];
$data['body'] = $article['body'];
--- 525,547 ----
// TODO: output from hooks comes here ?
$data['comments'] = '';
!
// TODO: add pnVarCensor ?
+ if (!empty($pubtypes[$ptid]['config']['author'])) {
$data['author'] = pnUserGetVar('name', $article['authorid']);
+ } else {
+ $data['author'] = '';
+ }
+ if (!empty($pubtypes[$ptid]['config']['pubdate'])) {
$data['date'] = strftime(_DATETIMELONG, $article['pubdate']);
+ } else {
+ $data['date'] = '';
+ }
+ if (!empty($pubtypes[$ptid]['config']['summary'])) {
$data['summary'] = $article['summary'];
} else {
$data['summary'] = '';
}
+
$data['title'] = $article['title'];
$data['body'] = $article['body'];
***************
*** 505,508 ****
--- 568,578 ----
$data['archivelink'] = pnModURL('articles','user','archive');
+ // Tell the hitcount hook not to display the hitcount, but to save it
+ // in the variable cache. Note that the hook might not be enabled !
+ if (pnModAvailable('hitcount') && pnModAPILoad('hitcount','user')) {
+ pnVarSetCached('Hooks.hitcount','save',1);
+ $dohits = 1;
+ }
+
// Hooks
$data['hooks'] = pnModCallHooks('item',
***************
*** 515,518 ****
--- 585,595 ----
'ptid' => $ptid)));
+ // Retrieve the current hitcount from the variable cache
+ if ($dohits && pnVarIsCached('Hooks.hitcount','value')) {
+ $data['counter'] = pnVarGetCached('Hooks.hitcount','value');
+ } else {
+ $data['counter'] = '';
+ }
+
// Save some variables to (temporary) cache for use in blocks etc.
pnVarSetCached('Blocks.articles','aid',$aid);
***************
*** 770,773 ****
--- 847,858 ----
// get the counts for all categories
+ $pubcatcount = pnModAPIFunc('articles',
+ 'user',
+ 'getpubcatcount',
+ // frontpage or approved
+ array('status' => array(3,2)));
+
+ /*
+ // get the counts for all categories
$catcount = pnModAPIFunc('categories',
'user',
***************
*** 775,778 ****
--- 860,864 ----
array('groupby' => 'category',
'modid' => pnModGetIDFromName('articles')));
+ */
// create the category tree for each root category
***************
*** 808,818 ****
for ($i=0;$i<count($publinks);$i++) {
$publinks[$i]['cats'] = array();
// for each root category of this publication type
foreach ($publinks[$i]['rootcats'] as $cid) {
// update the links in the category tree to include both cid & ptid
for ($j=0;$j<count($cattree[$cid]);$j++) {
$cattree[$cid][$j]['link'] = pnModURL('articles','user','view',
! array('ptid' => $publinks[$i]['pubid'],
! 'cids' => array($cattree[$cid][$j]['id'])));
}
// and add the category tree to the categories to show
--- 894,911 ----
for ($i=0;$i<count($publinks);$i++) {
$publinks[$i]['cats'] = array();
+ $ptid = $publinks[$i]['pubid'];
// for each root category of this publication type
foreach ($publinks[$i]['rootcats'] as $cid) {
// update the links in the category tree to include both cid & ptid
for ($j=0;$j<count($cattree[$cid]);$j++) {
+ $childcid = $cattree[$cid][$j]['id'];
$cattree[$cid][$j]['link'] = pnModURL('articles','user','view',
! array('ptid' => $ptid,
! 'cids' => array($childcid)));
! if (isset($pubcatcount[$ptid][$childcid])) {
! $cattree[$cid][$j]['count'] = $pubcatcount[$ptid][$childcid];
! } else {
! $cattree[$cid][$j]['count'] = '';
! }
}
// and add the category tree to the categories to show
Index: pnuserapi.php
===================================================================
RCS file: /home/cvsroot/postnuke_modules/articles/pnuserapi.php,v
retrieving revision 1.34
retrieving revision 1.35
diff -C2 -d -r1.34 -r1.35
*** pnuserapi.php 5 Aug 2002 23:17:11 -0000 1.34
--- pnuserapi.php 8 Aug 2002 23:03:20 -0000 1.35
***************
*** 81,86 ****
// + 'cids' = list of categories an article belongs to
// + 'author' = user name of authorid
$columns = array('aid','title','summary','authorid','pubdate','pubtypeid',
! 'notes','status','body','cids','author');
if (!isset($fields)) {
$fields = $columns;
--- 81,87 ----
// + 'cids' = list of categories an article belongs to
// + 'author' = user name of authorid
+ // + 'counter' = number of times this article was displayed (hitcount)
$columns = array('aid','title','summary','authorid','pubdate','pubtypeid',
! 'notes','status','body','cids','author','counter');
if (!isset($fields)) {
$fields = $columns;
***************
*** 148,151 ****
--- 149,167 ----
}
+ if (!empty($required['counter']) && pnModAvailable('hitcount','user')) {
+ // Load API
+ if (!pnModAPILoad('hitcount', 'user')) {
+ $msg = pnML('Unable to load #(1) #(2) API',
+ 'hitcount','user');
+ pnExceptionSet(PN_SYSTEM_EXCEPTION, 'UNABLE_TO_LOAD',
+ new SystemException($msg));
+ return false;
+ }
+ // Get the LEFT JOIN ... ON ... and WHERE (!) parts from categories
+ $hitcountdef = pnModAPIFunc('hitcount','user','leftjoin',
+ array('modid' =>
+ pnModGetIDFromName('articles')));
+ }
+
// Create the SELECT part
$select = array();
***************
*** 156,159 ****
--- 172,177 ----
} elseif ($field == 'author') {
$select[] = $usersdef['name'];
+ } elseif ($field == 'counter') {
+ $select[] = $hitcountdef['hits'];
} else {
$select[] = $articlesdef[$field];
***************
*** 170,173 ****
--- 188,201 ----
// add this for SQL compliance when there are multiple JOINs
+ if (!empty($required['counter']) || count($cids) > 0) {
+ $from = '(' . $from . ')';
+ }
+ }
+ if (!empty($required['counter'])) {
+ // Add the LEFT JOIN ... ON ... parts from hitcount
+ $from .= ' LEFT JOIN ' . $hitcountdef['table'];
+ $from .= ' ON ' . $hitcountdef['field'] . ' = ' . $articlesdef['aid'];
+
+ // add this for SQL compliance when there are multiple JOINs
if (count($cids) > 0) {
$from = '(' . $from . ')';
***************
*** 188,191 ****
--- 216,222 ----
$where[] = $articlesdef['where'];
}
+ if (!empty($required['counter']) && !empty($hitcountdef['where'])) {
+ $where[] = $hitcountdef['where'];
+ }
if (count($cids) > 0) {
// we rely on leftjoin() to create the necessary categories clauses
***************
*** 448,451 ****
--- 479,566 ----
return $pubcount;
+ }
+
+
+ /**
+ * get the number of articles per publication type and category
+ *
+ * @param $args['status'] array of requested status(es) for the articles
+ * @param $args['cids'] array of category IDs
+ * @param $args['ptid'] publication type ID
+ * @param $args['reverse'] default is ptid => cid, reverse (1) is cid => ptid
+ * @returns array
+ * @return array( $ptid => array( $cid => $count) ),
+ * or false on failure
+ */
+ function articles_userapi_getpubcatcount($args)
+ {
+ /*
+ static $pubcatcount = array();
+
+ if (count($pubcatcount) > 0) {
+ return $pubcatcount;
+ }
+ */
+ $pubcatcount = array();
+
+ // Get database setup
+ list($dbconn) = pnDBGetConn();
+
+ // Get the LEFT JOIN ... ON ... and WHERE parts from articles
+ $articlesdef = pnModAPIFunc('articles','user','leftjoin',$args);
+
+ // Load API
+ if (!pnModAPILoad('categories', 'user')) {
+ $msg = pnML('Unable to load #(1) #(2) API',
+ 'categories','user');
+ pnExceptionSet(PN_SYSTEM_EXCEPTION, 'UNABLE_TO_LOAD',
+ new SystemException($msg));
+ return false;
+ }
+
+ $args['modid'] = pnModGetIDFromName('articles');
+ // Get the LEFT JOIN ... ON ... and WHERE parts from categories
+ $categoriesdef = pnModAPIFunc('categories','user','leftjoin',$args);
+
+ // Get count
+ $sql = 'SELECT '. $articlesdef['pubtypeid'] .', '. $categoriesdef['cid']
+ .', COUNT(*)
+ FROM '. $articlesdef['table'] . '
+ LEFT JOIN ' . $categoriesdef['table'] .'
+ ON '. $categoriesdef['field'] . ' = ' . $articlesdef['field'] .'
+ WHERE '. $categoriesdef['where'] .' AND '. $articlesdef['where'] .'
+ GROUP BY '. $articlesdef['pubtypeid'] .', '. $categoriesdef['cid'];
+
+ $result = $dbconn->Execute($sql);
+
+ if ($dbconn->ErrorNo() != 0) {
+ $msg = pnML('Database error for #(1) function #(2)() in module #(3)',
+ 'user', 'getpubcatcount', 'Articles');
+ pnExceptionSet(PN_SYSTEM_EXCEPTION, 'DATABASE_ERROR',
+ new SystemException($msg));
+ return false;
+ }
+
+ if ($result->EOF) {
+ return false;
+ }
+ while (!$result->EOF) {
+ list($ptid, $cid, $count) = $result->fields;
+ if (empty($args['reverse'])) {
+ $pubcatcount[$ptid][$cid] = $count;
+ } else {
+ $pubcatcount[$cid][$ptid] = $count;
+ }
+ $result->MoveNext();
+ }
+ foreach ($pubcatcount as $id1 => $val) {
+ $total = 0;
+ foreach ($val as $id2 => $count) {
+ $total += $count;
+ }
+ $pubcatcount[$id1]['total'] = $total;
+ }
+
+ return $pubcatcount;
}
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 |