plugins\news\news.php
<?php
/* ====================
[BEGIN_COT_EXT]
Hooks=index.tags
Tags=index.tpl:{INDEX_NEWS}
[END_COT_EXT]
==================== */
/**
* Pick up pages from a category and display the newest in the home page
*
* @package News
* @copyright (c) Cotonti Team
* @license https://github.com/Cotonti/Cotonti/blob/master/License.txt
*/
defined('COT_CODE') or die('Wrong URL');
require_once cot_incfile('page', 'module');
require_once cot_langfile('news', 'plug');
list($pg, $d, $durl) = cot_import_pagenav('d', $cfg['plugin']['news']['maxpages']);
$c = cot_import('c', 'G', 'TXT');
$c = (!isset($structure['page'][$c])) ? '' : $c;
$categories = explode(',', $cfg['plugin']['news']['category']);
$jj = 0;
$cats = array();
foreach ($categories as $v)
{
$v = explode('|', trim($v));
if (isset($structure['page'][$v[0]]))
{
$c = (empty($c)) ? $v[0] : $c;
$indexcat = ($jj == 0) ? $v[0] : $indexcat;
$v[2] = ((int)$v[2] > 0) ? $v[2] : (int)$cfg['page']['cat_' . $v[0]]['truncatetext'];
$v[1] = ((int)$v[1] > 0) ? $v[1] : (int)$cfg['plugin']['news']['maxpages'];
$_GET[$v[0].'d'] = (empty($c) || ($jj == 0) || $cfg['plugin']['news']['syncpagination']) ? $_GET['d'] : $_GET[$v[0].'d'];
list($v[3]['pg'], $v[3]['d'], $v[3]['durl']) = cot_import_pagenav($v[0] . 'd', $v[1]);
$cats[$v[0]] = $v;
$jj++;
}
}
if (count($cats) > 0)
{
/* === Hook - Part1 : Set === FIRST === */
$news_first_extp = cot_getextplugins('news.first');
/* === Hook - Part1 : Set === LOOP === */
$news_extp = cot_getextplugins('news.loop');
/* === Hook - Part1 : Set === TAGS === */
$news_tags_extp = cot_getextplugins('news.tags');
/* ===== */
$catn = 0;
foreach ($cats as $k => $v)
{
$cat = ($catn == 0) ? $c : $v[0];
$tagname = str_replace(array(' ', ',', '.', '-'), '_', strtoupper($v[0]));
if (!preg_match('#^\w+$#', $tagname))
{
$tagname = $structure['page'][$v[0]]['id'];
}
// Cache for guests
if ($usr['id'] == 0 && $cache && (int) $cfg['plugin']['news']['cache_ttl'] > 0)
{
$news_cache_id = "$theme.$lang.$cat." . $v[3]['d']; // Includes theme, lang, category and current page
$news_html = $cache->disk->get($news_cache_id, 'news', (int) $cfg['plugin']['news']['cache_ttl']);
if (!is_null($news_html))
{
$t->assign(($catn == 0) ? 'INDEX_NEWS' : 'INDEX_NEWS_' . $tagname, $news_html);
continue;
}
}
$catsub = cot_structure_children('page', $cat);
$where = "page_state = 0 AND page_cat <> 'system' AND page_begin <= {$sys['now']} AND (page_expire = 0 OR page_expire > {$sys['now']}) AND page_cat IN ('" . implode("','", $catsub) . "')";
$news_link_params = ($c != $indexcat) ? "c=" . $c : '';
$news_join_columns = '';
$news_join_tables = '';
/* === Hook - Part2 : Include === FIRST === */
foreach ($news_first_extp as $pl)
{
include $pl;
}
/* ===== */
$sql = $db->query("SELECT p.*, u.* $news_join_columns
FROM $db_pages AS p LEFT JOIN $db_users AS u ON u.user_id=p.page_ownerid $news_join_tables
WHERE $where ORDER BY page_date DESC LIMIT " . $v[3]['d'] . ", " . $v[1]);
$totalnews = $db->query("SELECT COUNT(*)
FROM $db_pages AS p $news_join_tables WHERE " . $where)->fetchColumn();
if ($v[3]['d'] < 0 || $totalnews > 0 && $v[3]['d'] > $totalnews)
{
cot_die_message(404);
}
if (!$cfg['plugin']['news']['syncpagination'])
{
$news_link_params .= ($catn != 0 && $d != 0) ? '&d=' . $durl : '';
$xx = 0;
foreach ($cats as $key => $var)
{
$news_link_params .= (($key != $cat) && $var[3] != 0 && $xx != 0) ? "&" . $key . "d=" . $var[3]['durl'] : '';
$xx++;
}
}
$news_link = cot_url('index', $news_link_params);
$catd = ($catn != 0 && !$cfg['plugin']['news']['syncpagination']) ? $cat . "d" : "d";
$pagenav = cot_pagenav('index', $news_link_params, $v[3]['d'], $totalnews, $v[1], $catd);
$filename = str_replace(array(' ', ',', '.', '-'), '_', $v[0]);
$news = new XTemplate(cot_tplfile(($catn == 0) ? "news" : "news." . $filename, 'plug'));
$sql_rowset = $sql->fetchAll();
$jj = 0;
foreach ($sql_rowset as $pag)
{
$jj++;
$url = cot_url('index', 'c=' . $pag['page_cat']);
$news->assign(cot_generate_pagetags($pag, 'PAGE_ROW_', $v[2]));
$news->assign(array(
'PAGE_ROW_NEWSPATH' => cot_rc_link($url, htmlspecialchars($structure['page'][$row['page_cat']]['title'])),
'PAGE_ROW_NEWSPATH_URL' => $url,
'PAGE_ROW_CATDESC' => htmlspecialchars($structure['page'][$pag['page_cat']]['desc']),
'PAGE_ROW_OWNER' => cot_build_user($pag['page_ownerid'], htmlspecialchars($pag['user_name'])),
'PAGE_ROW_ODDEVEN' => cot_build_oddeven($jj),
'PAGE_ROW_NUM' => $jj
));
$news->assign(cot_generate_usertags($pag, 'PAGE_ROW_OWNER_'));
/* === Hook - Part2 : Include === LOOP === */
foreach ($news_extp as $pl)
{
include $pl;
}
/* ===== */
$news->parse('NEWS.PAGE_ROW');
}
$url_newpage = cot_url('page', 'm=add&c=' . $cat);
$news->assign(array(
'PAGE_PAGENAV' => $pagenav['main'],
'PAGE_PAGEPREV' => $pagenav['prev'],
'PAGE_PAGENEXT' => $pagenav['next'],
'PAGE_PAGELAST' => $pagenav['last'],
'PAGE_PAGENUM' => $pagenav['current'],
'PAGE_PAGECOUNT' => $pagenav['total'],
'PAGE_ENTRIES_ONPAGE' => $pagenav['onpage'],
'PAGE_ENTRIES_TOTAL' => $pagenav['entries'],
'PAGE_SUBMITNEWPOST' => (cot_auth('page', $cat, 'W')) ? cot_rc_link($url_newpage, $L['Submitnew']) : '',
'PAGE_SUBMITNEWPOST_URL' => (cot_auth('page', $cat, 'W')) ? $url_newpage : '',
'PAGE_CATTITLE' => $structure['page'][$cat]['title'],
'PAGE_CATPATH' => cot_breadcrumbs(cot_structure_buildpath('page', $cat), false),
'PAGE_CAT' => $cat
));
/* === Hook - Part2 : Include === TAGS === */
foreach ($news_tags_extp as $pl)
{
include $pl;
}
/* ===== */
$news->parse('NEWS');
$news_html = $news->text('NEWS');
// Cache for guests
if ($usr['id'] == 0 && $cache && (int) $cfg['plugin']['news']['cache_ttl'] > 0)
{
$cache->disk->store($news_cache_id, $news_html, 'news');
}
$t->assign(($catn == 0) ? 'INDEX_NEWS' : 'INDEX_NEWS_' . $tagname, $news_html);
$catn++;
}
}