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] |
| 30 Jul 2002 18:31:51 | postnuke_modules/articles | pnuser.php,1.34,1.35 pnuserapi.php,1.23,1.24 | Mike |
| add support for Archive (part 1) | |||
Update of /home/cvsroot/postnuke_modules/articles
In directory ns7.hostnuke.net:/tmp/cvs-serv5656
Modified Files:
pnuser.php pnuserapi.php
Log Message:
add support for Archive (part 1)
Index: pnuser.php
===================================================================
RCS file: /home/cvsroot/postnuke_modules/articles/pnuser.php,v
retrieving revision 1.34
retrieving revision 1.35
diff -C2 -d -r1.34 -r1.35
*** pnuser.php 29 Jul 2002 17:20:50 -0000 1.34
--- pnuser.php 30 Jul 2002 18:31:48 -0000 1.35
***************
*** 30,33 ****
--- 30,35 ----
{
//return articles_user_view();
+ // TODO: make this configurable someday ?
+ // redirect to default view with news articles
pnRedirect(pnModURL('articles', 'user', 'view', array('ptid' => 1)));
return;
***************
*** 296,299 ****
--- 298,310 ----
pnML('View Article Map'));
+ $output->SetInputMode(_PNH_VERBATIMINPUT);
+ $output->Text(' ');
+ $output->SetInputMode(_PNH_PARSEINPUT);
+ $output->URL(pnModURL('articles',
+ 'user',
+ 'archive',
+ array()),
+ pnML('View Archive'));
+
return $output->GetOutput();
}
***************
*** 408,412 ****
// Navigation links
$data['publinks'] = pnModAPIFunc('articles','user','getpublinks');
! $data['maplink'] = pnModURL('articles','user','viewmap',array());
// Hooks
--- 419,424 ----
// Navigation links
$data['publinks'] = pnModAPIFunc('articles','user','getpublinks');
! $data['maplink'] = pnModURL('articles','user','viewmap');
! $data['archivelink'] = pnModURL('articles','user','archive');
// Hooks
***************
*** 429,432 ****
--- 441,607 ----
/**
+ * show monthly archive (Archives-like)
+ */
+ function articles_user_archive($args)
+ {
+ // Get parameters from user
+ list($ptid,
+ $month)= pnVarCleanFromInput('ptid',
+ 'month');
+
+ // Override if needed from argument array
+ extract($args);
+
+ // Defaults
+ if (!isset($ptid)) {
+ $ptid = 1;
+ }
+ if (!isset($month)) {
+ $month = '';
+ }
+
+ // QUESTION: work with user-dependent time settings or not someday ?
+ // Set the start and end date for that month
+ if (!empty($month) && preg_match('/^(\d{4})-(\d+)$/',$month,$matches)) {
+ $startdate = gmmktime(0,0,0,$matches[2],1,$matches[1],0);
+ // PHP allows month > 12 :-)
+ $enddate = gmmktime(0,0,0,$matches[2]+1,1,$matches[1],0);
+ } else {
+ $startdate = '';
+ $enddate = '';
+ }
+
+ // Load API
+ if (!pnModAPILoad('articles', 'user')) {
+ return _LOADFAILED;
+ }
+
+ // Get monthly statistics
+ $monthcount = pnModAPIFunc('articles','user','getmonthcount');
+ if(!isset($monthcount)) {
+ $monthcount = array();
+ }
+ krsort($monthcount);
+ reset($monthcount);
+ $months = array();
+ foreach ($monthcount as $thismonth => $count) {
+ if ($thismonth == $month) {
+ $mlink = '';
+ } else {
+ $mlink = pnModURL('articles','user','archive',
+ array('month' => $thismonth));
+ }
+ $months[] = array('month' => $thismonth,
+ 'mcount' => $count,
+ 'mlink' => $mlink);
+ }
+
+ // get the links and counts for all publication types
+ $publinks = pnModAPIFunc('articles','user','getpublinks',
+ array('all' => 1));
+
+ // Load API
+ if (!pnModAPILoad('categories', 'user')) {
+ return _LOADFAILED;
+ }
+
+ // Get the list of root categories for this publication type
+ if (!empty($ptid)) {
+ $string = pnModGetVar('articles','cids.' . $ptid);
+ }
+ if (!isset($string)) {
+ $string = pnModGetVar('articles','cids');
+ }
+ $catlist = array();
+ $catinfo = array();
+ if (!empty($string)) {
+ $rootcats = split(';',$string);
+ // TODO: do this in categories API !
+ foreach ($rootcats as $cid) {
+ if (empty($cid)) {
+ continue;
+ }
+ // save the name and root category for each child
+ $cats = pnModAPIFunc('categories',
+ 'user',
+ 'getcat',
+ array('cid' => $cid,
+ 'return_itself' => true,
+ 'getchildren' => true));
+ foreach ($cats as $info) {
+ $item = array();
+ $item['name'] = $info['name'];
+ $item['root'] = $cid;
+ $catinfo[$info['cid']] = $item;
+ }
+ $catlist[] = array('cid' => $cid,'name' => $catinfo[$cid]['name']);
+ }
+ }
+
+ // Get articles
+ if ($startdate && $enddate) {
+ $articles = pnModAPIFunc('articles',
+ 'user',
+ 'getall',
+ array('ptid' => (isset($ptid) ? $ptid : null),
+ 'startdate' => $startdate,
+ 'enddate' => $enddate,
+ 'fields' => array('aid','title','pubdate','pubtypeid','cids')
+ )
+ );
+ if (!is_array($articles)) {
+ return _ARTICLESITEMFAILED;
+ }
+ } else {
+ $articles = array();
+ }
+
+ foreach ($articles as $key => $article) {
+ $articles[$key]['link'] = pnModURL('articles','user','display',
+ array('aid' => $articles[$key]['aid'],
+ 'ptid' => $articles[$key]['pubtypeid']));
+ $articles[$key]['date'] = strftime("%Y-%m-%d %H:%M:%S",
+ $articles[$key]['pubdate']);
+ $list = array();
+ // get all the categories for that article and put them under the
+ // right root category
+ if (!isset($articles[$key]['cids'])) {
+ $articles[$key]['cids'] = array();
+ }
+ foreach ($articles[$key]['cids'] as $cid) {
+ if (!isset($list[$catinfo[$cid]['root']])) {
+ $list[$catinfo[$cid]['root']] = array();
+ }
+ array_push($list[$catinfo[$cid]['root']],$cid);
+ }
+ // fill in the column corresponding to each root category
+ $articles[$key]['cats'] = array();
+ foreach ($catlist as $cat) {
+ if (isset($list[$cat['cid']])) {
+ $descr = '';
+ // TODO: add links to category someday ?
+ foreach ($list[$cat['cid']] as $cid) {
+ if (!empty($descr)) {
+ $descr .= '<br>';
+ }
+ $descr .= $catinfo[$cid]['name'];
+ }
+ $articles[$key]['cats'][] = array('list' => $descr);
+ } else {
+ $articles[$key]['cats'][] = array('list' => '-');
+ }
+ }
+ }
+
+ // return template out
+ return array('months' => $months,
+ 'articles' => $articles,
+ 'catlist' => $catlist,
+ 'publinks' => pnModAPIFunc('articles','user','getpublinks',
+ array('ptid' => $ptid)),
+ 'maplink' => pnModURL('articles','user','viewmap'));
+ }
+
+ /**
* view article map
*/
***************
*** 448,452 ****
// get the links and counts for all publication types
! $publinks = pnModAPIFunc('articles','user','getpublinks',array('all' => 1));
// build the list of root categories for all publication types
--- 623,628 ----
// get the links and counts for all publication types
! $publinks = pnModAPIFunc('articles','user','getpublinks',
! array('all' => 1));
// build the list of root categories for all publication types
***************
*** 511,515 ****
}
! return array('publinks' => $publinks);
}
--- 687,694 ----
}
! $archivelink = pnModURL('articles','user','archive');
!
! return array('publinks' => $publinks,
! 'archivelink' => $archivelink);
}
***************
*** 536,540 ****
$out = $output->Text($pubtype['descr']);
} else {
! $out = $output->URL(pnModURL('articles','user','view',array('ptid' => $id)), $pubtype['descr']);
}
$out .= ' (' . $pubcount[$id] . ')';
--- 715,721 ----
$out = $output->Text($pubtype['descr']);
} else {
! $out = $output->URL(pnModURL('articles','user','view',
! array('ptid' => $id)),
! $pubtype['descr']);
}
$out .= ' (' . $pubcount[$id] . ')';
Index: pnuserapi.php
===================================================================
RCS file: /home/cvsroot/postnuke_modules/articles/pnuserapi.php,v
retrieving revision 1.23
retrieving revision 1.24
diff -C2 -d -r1.23 -r1.24
*** pnuserapi.php 29 Jul 2002 12:13:47 -0000 1.23
--- pnuserapi.php 30 Jul 2002 18:31:48 -0000 1.24
***************
*** 46,53 ****
/**
* get overview of all articles
! * @param $args['startnum'] starting article number
* @param $args['numitems'] number of articles to get
* @param $args['ptid'] publication type ID (for news, sections, reviews, ...)
* @param $args['cids'] array of category IDs for which to get articles (for all don�t set it)
* @returns array
* @return array of articles, or false on failure
--- 46,59 ----
/**
* get overview of all articles
! * Note : the following parameters are all optional
! *
* @param $args['numitems'] number of articles to get
+ * @param $args['startnum'] starting article number
* @param $args['ptid'] publication type ID (for news, sections, reviews, ...)
* @param $args['cids'] array of category IDs for which to get articles (for all don�t set it)
+ * @param $args['startdate'] articles published at startdate or later (unix timestamp format)
+ * @param $args['enddate'] articles published before enddate (unix timestamp format)
+ * @param $args['fields'] array with the fields to return per article - default is
+ * 'aid','title','summary','author','pubdate','pubtypeid','body','cids'
* @returns array
* @return array of articles, or false on failure
***************
*** 62,66 ****
--- 68,77 ----
$startnum = 1;
}
+ if (!isset($fields)) {
+ $fields = array('aid','title','summary','author','pubdate','pubtypeid',
+ 'body','cids');
+ }
+ /*
// Required argument
if (!isset($numitems)) {
***************
*** 70,73 ****
--- 81,85 ----
return;
}
+ */
$articles = array();
***************
*** 78,81 ****
--- 90,99 ----
}
+ // Required fields
+ $required = array();
+ foreach ($fields as $field) {
+ $required[$field] = 1;
+ }
+
// Database information
// More abstraction?
***************
*** 86,102 ****
$articlescolumn = &$pntable['articles_column'];
- // TODO: figure out some way to let the category module handle its part
- // of the query construction, e.g. by providing part of the SQL stmt.
- // or something...
-
- $categories_linkage = pnConfigGetVar('prefix') . '_categories_linkage';
- $categorieslinkagetable = &$categories_linkage;
- $categorieslinkagecolumn = array
- (
- 'cid' => $categories_linkage . '.pn_cid',
- 'iid' => $categories_linkage . '.pn_iid',
- 'modid' => $categories_linkage . '.pn_modid'
- );
-
$userstable = $pntable['users'];
$prefix = $userstable;
--- 104,107 ----
***************
*** 113,129 ****
$conditions = Array();
- if (is_array($cids))
- {
- // OR (the articles shown are those that are linked to any of the cids)
- $conditions[] = $categorieslinkagecolumn['cid']
- .' IN ('
- .join (',', $cids)
- .')';
- $conditions[] = $categorieslinkagecolumn['modid'].' = '.pnModGetIDFromName('articles');
- }
$conditions[] = $articlescolumn['authorid'].' = '.$userscolumn['uid'];
if (!empty($ptid)) {
$conditions[] = $articlescolumn['pubtypeid'].' = '.$ptid;
}
// Get articles
--- 118,131 ----
$conditions = Array();
$conditions[] = $articlescolumn['authorid'].' = '.$userscolumn['uid'];
if (!empty($ptid)) {
$conditions[] = $articlescolumn['pubtypeid'].' = '.$ptid;
}
+ if (!empty($startdate) && !empty($enddate) &&
+ is_numeric($startdate) && is_numeric($enddate) &&
+ $enddate > $startdate) {
+ $conditions[] = $articlescolumn['pubdate'].' >= '.$startdate;
+ $conditions[] = $articlescolumn['pubdate'].' < '.$enddate;
+ }
// Get articles
***************
*** 142,146 ****
(
$articlestable,
! $userstable
);
--- 144,148 ----
(
$articlestable,
! $userstable
);
***************
*** 150,176 ****
);
- $join = Array
- (
- $categorieslinkagetable
- );
-
- $on = Array
- (
- "$categorieslinkagecolumn[iid] = $articlescolumn[aid]"
- );
-
$sql = '';
$sql .= IterateSQL ('SELECT DISTINCT', $columns, ',');
$sql .= IterateSQL (' FROM', $tables, ',');
! if (is_array($cids)) {
! $sql .= IterateSQL (' LEFT JOIN', $join, ',');
! $sql .= IterateSQL (' ON', $on, ' AND ');
}
$sql .= IterateSQL (' WHERE', $conditions, ' AND ');
$sql .= IterateSQL (' ORDER BY', $orderings, ',');
! $result = $dbconn->SelectLimit($sql, $numitems, $startnum-1);
if ($dbconn->ErrorNo() != 0) {
--- 152,188 ----
);
$sql = '';
+ # TODO: we need FROM (articles LEFT JOIN users ON ...) LEFT JOIN categories ON ... here !
+
$sql .= IterateSQL ('SELECT DISTINCT', $columns, ',');
$sql .= IterateSQL (' FROM', $tables, ',');
! if (isset($cids) && is_array($cids)) {
! // Load API
! if (!pnModAPILoad('categories', 'user')) {
! $msg = pnML('Unable to load (#(1))�s module (#(2))�s functions.',
! pnML('categories'), pnML('user'));
! pnExceptionSet(PN_SYSTEM_EXCEPTION, 'UNABLE_TO_LOAD',
! new SystemException(__FILE__.'('.__LINE__.'): '.$msg));
! return;
! }
! $catdef = pnModAPIFunc('categories','user','leftjoin',array('cids' => $cids));
! $sql .= ' LEFT JOIN ' . $catdef['table'];
! $sql .= ' ON ' . $catdef['field'] . ' = ' . $articlescolumn['aid'];
}
$sql .= IterateSQL (' WHERE', $conditions, ' AND ');
+ if (isset($cids) && is_array($cids)) {
+ $sql .= ' AND ' . $catdef['where'] . ' = ' . pnModGetIDFromName('articles');
+ }
+
$sql .= IterateSQL (' ORDER BY', $orderings, ',');
!
! if (isset($numitems) && is_numeric($numitems)) {
! $result = $dbconn->SelectLimit($sql, $numitems, $startnum-1);
! } else {
! $result = $dbconn->Execute($sql);
! }
if ($dbconn->ErrorNo() != 0) {
***************
*** 198,227 ****
$result->Close();
! // Get all the categories at once
! $aids = array();
! foreach ($articles as $article) {
! $aids[] = $article['aid'];
! }
! // Load API
! if (!pnModAPILoad('categories', 'user')) {
! $msg = pnML('Unable to load (#(1))�s module (#(2))�s functions.', pnML('categories'), pnML('user'));
! pnExceptionSet(PN_SYSTEM_EXCEPTION, 'UNABLE_TO_LOAD',
! new SystemException(__FILE__.'('.__LINE__.'): '.$msg));
! return;
! }
!
! // Get the links for the Array of iids we have
! $cids = pnModAPIFunc('categories',
! 'user',
! 'getlinks',
! array('iids' => $aids,
! 'reverse' => 1,
! 'modid' => pnModGetIDFromName('articles')));
! // Inserting the corresponding Category ID in the Article Description
! foreach ($articles as $key => $article) {
! if (isset($cids[$article['aid']])) {
! $articles[$key]['cids'] = $cids[$article['aid']];
}
}
--- 210,241 ----
$result->Close();
! if ($required['cids']) {
! // Get all the categories at once
! $aids = array();
! foreach ($articles as $article) {
! $aids[] = $article['aid'];
! }
! // Load API
! if (!pnModAPILoad('categories', 'user')) {
! $msg = pnML('Unable to load (#(1))�s module (#(2))�s functions.', pnML('categories'), pnML('user'));
! pnExceptionSet(PN_SYSTEM_EXCEPTION, 'UNABLE_TO_LOAD',
! new SystemException(__FILE__.'('.__LINE__.'): '.$msg));
! return;
! }
! // Get the links for the Array of iids we have
! $cids = pnModAPIFunc('categories',
! 'user',
! 'getlinks',
! array('iids' => $aids,
! 'reverse' => 1,
! 'modid' => pnModGetIDFromName('articles')));
!
! // Inserting the corresponding Category ID in the Article Description
! foreach ($articles as $key => $article) {
! if (isset($cids[$article['aid']])) {
! $articles[$key]['cids'] = $cids[$article['aid']];
! }
}
}
***************
*** 470,473 ****
--- 484,523 ----
/**
+ * count the number of items per month
+ * @param $args['cids'] array of cids that we are counting for
+ * @param $args['ptid'] publication type ID we're interested in
+ * @returns array
+ * @return array(month => count), or false on failure
+ */
+ function articles_userapi_getmonthcount($args)
+ {
+ // Get database setup
+ list($dbconn) = pnDBGetConn();
+ $pntable = pnDBGetTables();
+ $articlestable = $pntable['articles'];
+
+ // TODO: check how to do this for non-mysql databases !
+ $sql = 'SELECT LEFT(FROM_UNIXTIME(pn_pubdate),7) as mymonth, COUNT(*) FROM ' . $articlestable;
+ if (!empty($args['ptid']) && is_numeric($args['ptid'])) {
+ $sql .= ' WHERE pn_pubtypeid = ' . pnVarPrepForStore($args['ptid']);
+ }
+ $sql .= ' GROUP BY mymonth';
+ $result = $dbconn->Execute($sql);
+
+ if ($dbconn->ErrorNo() != 0) {
+ return;
+ }
+
+ $months = array();
+ while (!$result->EOF) {
+ list($month, $count) = $result->fields;
+ $months[$month] = $count;
+ $result->MoveNext();
+ }
+
+ return $months;
+ }
+
+ /**
* return the path for a short URL to pnModURL for this module
* @param $args the function and arguments passed to pnModURL
***************
*** 529,532 ****
--- 579,588 ----
// }
//}
+ } elseif ($func == 'archive') {
+ if (isset($month)) {
+ $path = '/' . $module . '/archive/' . $month . '.html';
+ } else {
+ $path = '/' . $module . '/archive/index.html';
+ }
} elseif ($func == 'viewmap') {
$path = '/' . $module . '/map.html';
***************
*** 562,573 ****
} elseif ($params[1] == 'map.html') {
return array('viewmap', $args);
! } elseif (preg_match('/^(\d+)\.html$/',$params[1],$matches)) {
$aid = $matches[1];
$args['aid'] = $aid;
return array('display', $args);
! } elseif (preg_match('/^category(\d+)\.html$/',$params[1],$matches)) {
$cids[0] = $matches[1];
$args['cids'] = $cids;
return array('view', $args);
} else {
$pubtypes = pnModAPIFunc('articles','user','getpubtypes');
--- 618,634 ----
} elseif ($params[1] == 'map.html') {
return array('viewmap', $args);
! } elseif (preg_match('/^(\d+)/',$params[1],$matches)) {
$aid = $matches[1];
$args['aid'] = $aid;
return array('display', $args);
! } elseif (preg_match('/^category(\d+)/',$params[1],$matches)) {
$cids[0] = $matches[1];
$args['cids'] = $cids;
return array('view', $args);
+ } elseif ($params[1] == 'archive') {
+ if (!empty($params[2]) && preg_match('/^(\d{4}-\d+)/',$params[2],$matches)) {
+ $args['month'] = $matches[1];
+ }
+ return array('archive', $args);
} else {
$pubtypes = pnModAPIFunc('articles','user','getpubtypes');
***************
*** 575,582 ****
if ($params[1] == $pubtype['name']) {
$args['ptid'] = $id;
! if (!empty($params[2]) && preg_match('/^(\d+)\.html$/',$params[2],$matches)) {
! $aid = $matches[1];
! $args['aid'] = $aid;
! return array('display', $args);
} else {
return array('view', $args);
--- 636,649 ----
if ($params[1] == $pubtype['name']) {
$args['ptid'] = $id;
! if (!empty($params[2])) {
! if (preg_match('/^(\d+)/',$params[2],$matches)) {
! $aid = $matches[1];
! $args['aid'] = $aid;
! return array('display', $args);
! } elseif ($params[2] == 'archive') {
! return array('archive', $args);
! } else {
! return array('view', $args);
! }
} else {
return array('view', $args);
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 |