|
|
<?php
|
|
|
|
|
|
// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
|
|
|
//
|
|
|
// All Rights Reserved. See copyright.txt for details and a complete list of authors.
|
|
|
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
|
|
|
// $Id$
|
|
|
|
|
|
//this script may only be included - so its better to die if called directly.
|
|
|
if (strpos($_SERVER['SCRIPT_NAME'], basename(__FILE__)) !== false) {
|
|
|
header('location: index.php');
|
|
|
exit;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @return array
|
|
|
*/
|
|
|
function module_since_last_visit_new_info()
|
|
|
{
|
|
|
return [
|
|
|
'name' => tra('Since Last Visit'),
|
|
|
'description' => tra('Displays to logged-in users new or updated objects since a point in time, by default their last login date and time.'),
|
|
|
'params' => [
|
|
|
'showuser' => [
|
|
|
'name' => tra('Show users'),
|
|
|
'description' => tra('If set to "n", do not show new users.') . ' ' . tra('Default:') . ' "y"'
|
|
|
],
|
|
|
'showtracker' => [
|
|
|
'name' => tra('Show trackers'),
|
|
|
'description' => tra('If set to "n", do not show tracker changes.') . ' ' . tra('Default:') . ' "y"'
|
|
|
],
|
|
|
'calendar_focus' => [
|
|
|
'name' => tra('Calendar focus'),
|
|
|
'description' => tra('Unless set to "ignore", the module changes the reference point in time from the user\'s last login date and time to a day where users browse to using the calendar.')
|
|
|
],
|
|
|
'date_as_link' => [
|
|
|
'name' => tra('Show date as a calendar link'),
|
|
|
'description' => tra('If set to "n", do not add a link to tiki calendar on the date in the header (even if feature calendar is set).') . ' ' . tra('Default:') . ' "y"'
|
|
|
],
|
|
|
'fold_sections' => [
|
|
|
'name' => tra('Fold sections by default'),
|
|
|
'description' => tra('If set to "y", fold automatically sections and show only the title (user has to click on each section in order to see the details of modifications).') . ' ' . tra('Default:') . ' "n"'
|
|
|
],
|
|
|
'use_jquery_ui' => [
|
|
|
'name' => tra('Use tabbed presentation'),
|
|
|
'description' => tra('If set to "y", use Bootstrap tabs to show the result.') . ' ' . tra('Default:') . ' "n"'
|
|
|
],
|
|
|
'daysAtLeast' => [
|
|
|
'name' => tra('Minimum timespan'),
|
|
|
'description' => tra('Instead of the last login time, go back this minimum time, specified in days, in case the last login time is more recent.') . ' ' . tra('Default value:') . ' "0"',
|
|
|
'filter' => 'int'
|
|
|
],
|
|
|
'commentlength' => [
|
|
|
'name' => tra('Maximum comment length'),
|
|
|
'description' => tra("If comments don't use titles this sets the maximum length for the comment snippet."),
|
|
|
'filter' => 'digits',
|
|
|
'default' => 40,
|
|
|
],
|
|
|
],
|
|
|
'common_params' => ['nonums', 'rows'],
|
|
|
];
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @param $mod_reference
|
|
|
* @param null $params
|
|
|
* @return bool
|
|
|
*/
|
|
|
function module_since_last_visit_new($mod_reference, $params = null)
|
|
|
{
|
|
|
global $user;
|
|
|
$smarty = TikiLib::lib('smarty');
|
|
|
include_once('tiki-sefurl.php');
|
|
|
|
|
|
if (! $user) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
if (! isset($params['use_jquery_ui']) || $params['use_jquery_ui'] != 'y') {
|
|
|
$smarty->assign('use_jquery_ui', 'n');
|
|
|
} else {
|
|
|
$smarty->assign('use_jquery_ui', 'y');
|
|
|
}
|
|
|
|
|
|
if (! isset($params['date_as_link']) || $params['date_as_link'] != 'n') {
|
|
|
$smarty->assign('date_as_link', 'y');
|
|
|
} else {
|
|
|
$smarty->assign('date_as_link', 'n');
|
|
|
}
|
|
|
|
|
|
if (! isset($params['fold_sections']) || $params['fold_sections'] != 'y') {
|
|
|
$smarty->assign('default_folding', 'block');
|
|
|
$smarty->assign('opposite_folding', 'none');
|
|
|
} else {
|
|
|
$smarty->assign('default_folding', 'none');
|
|
|
$smarty->assign('opposite_folding', 'block');
|
|
|
}
|
|
|
|
|
|
if (empty($params['commentlength'])) {
|
|
|
$params['commentlength'] = 40;
|
|
|
}
|
|
|
|
|
|
$resultCount = $mod_reference['rows'];
|
|
|
|
|
|
global $prefs;
|
|
|
$userlib = TikiLib::lib('user');
|
|
|
$tikilib = TikiLib::lib('tiki');
|
|
|
$smarty->loadPlugin('smarty_modifier_username');
|
|
|
|
|
|
$ret = [];
|
|
|
if ($params == null) {
|
|
|
$params = [];
|
|
|
}
|
|
|
|
|
|
if (
|
|
|
(empty($params['calendar_focus']) || $params['calendar_focus'] != 'ignore')
|
|
|
&& strpos($_SERVER['SCRIPT_NAME'], 'tiki-calendar.php') !== false
|
|
|
&& ! empty($_REQUEST['todate'])
|
|
|
) {
|
|
|
$last = $_REQUEST['todate'];
|
|
|
$_SESSION['slvn_last_login'] = $last;
|
|
|
$smarty->assign('tpl_module_title', tra('Changes since'));
|
|
|
} elseif (isset($_SESSION['slvn_last_login'])) {
|
|
|
$last = $_SESSION['slvn_last_login'];
|
|
|
$smarty->assign('tpl_module_title', tra('Changes since'));
|
|
|
} else {
|
|
|
$last = $tikilib->getOne('select `lastLogin` from `users_users` where `login`=?', [$user]);
|
|
|
$smarty->assign('tpl_module_title', tra('Since your last visit...'));
|
|
|
if (! $last || ! empty($params['daysAtLeast'])) {
|
|
|
$now = TikiLib::lib('tiki')->now;
|
|
|
if (! $last) {
|
|
|
$last = $now;
|
|
|
}
|
|
|
if (! empty($params['daysAtLeast']) && $now - $last < $params['daysAtLeast'] * 60 * 60 * 24) {
|
|
|
$last = $now - $params['daysAtLeast'] * 60 * 60 * 24;
|
|
|
$smarty->assign('tpl_module_title', tr('In the last %0 days...', $params['daysAtLeast']));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
$ret['lastLogin'] = $last;
|
|
|
|
|
|
$ret['items']['comments']['label'] = tra('new comments');
|
|
|
$ret['items']['comments']['cname'] = 'slvn_comments_menu';
|
|
|
|
|
|
//TODO: should be a function on commentslib.php or use one of the existent functions
|
|
|
$query = 'select `object`,`objectType`,`title`,`commentDate`,`userName`,`threadId`, `parentId`, `approved`, `archived`, `data`' .
|
|
|
" from `tiki_comments` where `commentDate`>? and `objectType` != 'forum' and `data` != '' order by `commentDate` desc";
|
|
|
$result = $tikilib->query($query, [(int) $last], $resultCount);
|
|
|
|
|
|
$count = 0;
|
|
|
while ($res = $result->fetchRow()) {
|
|
|
$ret['items']['comments']['list'][$count]['href'] = TikiLib::lib('comments')->getHref($res['objectType'], $res['object'], $res['threadId']);
|
|
|
switch ($res['objectType']) {
|
|
|
case 'article':
|
|
|
$perm = 'tiki_p_read_article';
|
|
|
$ret['items']['comments']['list'][$count]['href'] =
|
|
|
filter_out_sefurl($ret['items']['comments']['list'][$count]['href'], 'article', $res['title']);
|
|
|
break;
|
|
|
|
|
|
case 'post':
|
|
|
$perm = 'tiki_p_read_blog';
|
|
|
$ret['items']['comments']['list'][$count]['href'] =
|
|
|
filter_out_sefurl($ret['items']['comments']['list'][$count]['href'], 'blogpost', $res['title']);
|
|
|
break;
|
|
|
|
|
|
case 'blog':
|
|
|
$perm = 'tiki_p_read_blog';
|
|
|
$ret['items']['comments']['list'][$count]['href'] =
|
|
|
filter_out_sefurl($ret['items']['comments']['list'][$count]['href'], 'blog', $res['title']);
|
|
|
break;
|
|
|
|
|
|
case 'faq':
|
|
|
$perm = 'tiki_p_view_faqs';
|
|
|
break;
|
|
|
|
|
|
case 'file gallery':
|
|
|
$perm = 'tiki_p_view_file_gallery';
|
|
|
break;
|
|
|
|
|
|
case 'poll':
|
|
|
// no perm check for viewing polls, only a perm for taking them
|
|
|
break;
|
|
|
|
|
|
case 'wiki page':
|
|
|
$perm = 'tiki_p_view';
|
|
|
break;
|
|
|
|
|
|
default: // note trackeritem needs more complex perms checking due to status and ownership
|
|
|
$perm = 'tiki_p_read_comments';
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
if ($res['approved'] == 'n' || $res['archived'] == 'y') {
|
|
|
$visible = $userlib->user_has_perm_on_object($user, $res['object'], $res['objectType'], 'tiki_p_admin_comments');
|
|
|
} elseif ($res['objectType'] === 'trackeritem') {
|
|
|
$item = Tracker_Item::fromId($res['object']);
|
|
|
$visible = $item->canView();
|
|
|
} elseif ($res['objectType'] == 'blog post') {
|
|
|
$visible = false;
|
|
|
// Only show new comments related to posts the user is allowed to see
|
|
|
if ($userlib->user_has_perm_on_object($user, $res['object'], $res['objectType'], 'tiki_p_read_comments')) {
|
|
|
$visible = $userlib->user_has_perm_on_object($user, $res['object'], $res['objectType'], $perm);
|
|
|
}
|
|
|
} else {
|
|
|
$visible = ! isset($perm) || $userlib->user_has_perm_on_object($user, $res['object'], $res['objectType'], $perm);
|
|
|
}
|
|
|
|
|
|
if ($visible) {
|
|
|
$ret['items']['comments']['list'][$count]['title'] = $tikilib->get_short_datetime($res['commentDate']) . ' ' . tra('by') . ' ' . smarty_modifier_username($res['userName']);
|
|
|
$ret['items']['comments']['list'][$count]['label'] = TikiLib::lib('comments')->process_comment_title($res, $params['commentlength']);
|
|
|
;
|
|
|
|
|
|
if ($res['archived'] == 'y') {
|
|
|
$ret['items']['comments']['list'][$count]['label'] .= tra(' (archived)');
|
|
|
}
|
|
|
|
|
|
$count++;
|
|
|
} else {
|
|
|
unset($ret['items']['comments']['list'][$count]);
|
|
|
}
|
|
|
}
|
|
|
$ret['items']['comments']['count'] = $count;
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
// FORUMS
|
|
|
if ($prefs['feature_forums'] == 'y') {
|
|
|
$ret['items']['posts']['label'] = tra('new posts');
|
|
|
$ret['items']['posts']['cname'] = 'slvn_posts_menu';
|
|
|
$query = 'select `posts`.`object`,`posts`.`objectType`,`posts`.`title`,`posts`.`commentDate`,' .
|
|
|
' `posts`.`userName`,`posts`.`threadId`, `posts`.`parentId`,`topics`.`title` `topic_title`' .
|
|
|
' from `tiki_comments` `posts`' .
|
|
|
' left join `tiki_comments` `topics` ON `posts`.`parentId` = `topics`.`threadId`' .
|
|
|
" where `posts`.`commentDate`>? and `posts`.`objectType` = 'forum'" .
|
|
|
' order by `posts`.`commentDate` desc';
|
|
|
|
|
|
$result = $tikilib->query($query, [(int) $last], $resultCount);
|
|
|
|
|
|
$count = 0;
|
|
|
while ($res = $result->fetchRow()) {
|
|
|
if ($userlib->user_has_perm_on_object($user, $res['parentId'], 'thread', 'tiki_p_forum_read')) {
|
|
|
$ret['items']['posts']['list'][$count]['href']
|
|
|
= 'tiki-view_forum_thread.php?comments_parentId=';
|
|
|
if ($res['parentId']) {
|
|
|
$ret['items']['posts']['list'][$count]['href'] .= $res['parentId'] . '#threadId=' . $res['threadId'];
|
|
|
} else {
|
|
|
$ret['items']['posts']['list'][$count]['href'] .= $res['threadId'];
|
|
|
}
|
|
|
$ret['items']['posts']['list'][$count]['title'] = $tikilib->get_short_datetime($res['commentDate']) . ' ' . tra('by') . ' ' . smarty_modifier_username($res['userName']);
|
|
|
if ($res['parentId'] == 0 || $prefs['forum_reply_notitle'] != 'y') {
|
|
|
$ret['items']['posts']['list'][$count]['label'] = $res['title'];
|
|
|
} else {
|
|
|
$ret['items']['posts']['list'][$count]['label'] = $res['topic_title'];
|
|
|
}
|
|
|
++$count;
|
|
|
}
|
|
|
}
|
|
|
$ret['items']['posts']['count'] = $count;
|
|
|
}
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
// WIKI PAGES
|
|
|
if ($prefs['feature_wiki'] == 'y') {
|
|
|
$ret['items']['pages']['label'] = tra('wiki pages changed');
|
|
|
$ret['items']['pages']['cname'] = 'slvn_pages_menu';
|
|
|
$query = 'select `pageName`, `user`, `lastModif` from `tiki_pages` where `lastModif`>? order by `lastModif` desc';
|
|
|
$result = $tikilib->query($query, [(int) $last], $resultCount);
|
|
|
|
|
|
$smarty->loadPlugin('smarty_modifier_sefurl');
|
|
|
$count = 0;
|
|
|
while ($res = $result->fetchRow()) {
|
|
|
if ($userlib->user_has_perm_on_object($user, $res['pageName'], 'wiki page', 'tiki_p_view')) {
|
|
|
$ret['items']['pages']['list'][$count]['href'] = smarty_modifier_sefurl($res['pageName']);
|
|
|
$ret['items']['pages']['list'][$count]['title'] = $tikilib->get_short_datetime($res['lastModif']) . ' ' . tra('by') . ' ' . smarty_modifier_username($res['user']);
|
|
|
$ret['items']['pages']['list'][$count]['label'] = $res['pageName'];
|
|
|
$count++;
|
|
|
}
|
|
|
}
|
|
|
$ret['items']['pages']['count'] = $count;
|
|
|
}
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
// ARTICLES
|
|
|
if ($prefs['feature_articles'] == 'y') {
|
|
|
$ret['items']['articles']['label'] = tra('new articles');
|
|
|
$ret['items']['articles']['cname'] = 'slvn_articles_menu';
|
|
|
|
|
|
if ($userlib->user_has_permission($user, 'tiki_p_edit_article')) {
|
|
|
$query = 'select `articleId`,`title`,`publishDate`,`authorName` from `tiki_articles` where `ispublished` = ? and `created`>? and `expireDate`>? order by `articleId` desc';
|
|
|
$bindvars = ['y',(int) $last, time()];
|
|
|
} else {
|
|
|
$query = 'select `articleId`,`title`,`publishDate`,`authorName` from `tiki_articles` where `ispublished` = ? and `publishDate`>? and `publishDate`<=? and `expireDate`>? order by `articleId` desc';
|
|
|
$bindvars = ['y',(int) $last,time(),time()];
|
|
|
}
|
|
|
$result = $tikilib->fetchAll($query, $bindvars, $resultCount);
|
|
|
|
|
|
$articleIds = array_map(
|
|
|
function ($res) {
|
|
|
return $res['articleId'];
|
|
|
},
|
|
|
$result
|
|
|
);
|
|
|
Perms::bulk(['type' => 'article'], 'object', $articleIds);
|
|
|
|
|
|
$count = 0;
|
|
|
foreach ($result as $res) {
|
|
|
if ($userlib->user_has_perm_on_object($user, $res['articleId'], 'article', 'tiki_p_read_article')) {
|
|
|
$ret['items']['articles']['list'][$count]['href'] = filter_out_sefurl('tiki-read_article.php?articleId=' . $res['articleId'], 'article', $res['title']);
|
|
|
$ret['items']['articles']['list'][$count]['title'] = $tikilib->get_short_datetime($res['publishDate']) . ' ' . tra('by') . ' ' . $res['authorName'];
|
|
|
$ret['items']['articles']['list'][$count]['label'] = $res['title'];
|
|
|
$count++;
|
|
|
}
|
|
|
}
|
|
|
$ret['items']['articles']['count'] = $count;
|
|
|
}
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
// FAQs
|
|
|
if ($prefs['feature_faqs'] == 'y') {
|
|
|
$ret['items']['faqs']['label'] = tra('new FAQs');
|
|
|
$ret['items']['faqs']['cname'] = 'slvn_faqs_menu';
|
|
|
|
|
|
$query = 'select `faqId`, `title`, `created` from `tiki_faqs` where `created`>? order by `created` desc';
|
|
|
$result = $tikilib->query($query, [(int) $last], $resultCount);
|
|
|
|
|
|
$count = 0;
|
|
|
while ($res = $result->fetchRow()) {
|
|
|
if ($userlib->user_has_perm_on_object($user, $res['faqId'], 'faq', 'tiki_p_view_faq')) {
|
|
|
$ret['items']['faqs']['list'][$count]['href'] = 'tiki-view_faq.php?faqId=' . $res['faqId'];
|
|
|
$ret['items']['faqs']['list'][$count]['title'] = $tikilib->get_short_datetime($res['created']);
|
|
|
$ret['items']['faqs']['list'][$count]['label'] = $res['title'];
|
|
|
$count++;
|
|
|
}
|
|
|
}
|
|
|
$ret['items']['faqs']['count'] = $count;
|
|
|
}
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
// BLOGS
|
|
|
if ($prefs['feature_blogs'] == 'y') {
|
|
|
$ret['items']['blogs']['label'] = tra('new blogs');
|
|
|
$ret['items']['blogs']['cname'] = 'slvn_blogs_menu';
|
|
|
|
|
|
$query = "select `blogId`, `title`, `user`, `created` from `tiki_blogs` where `created`>? order by `created` desc";
|
|
|
$result = $tikilib->query($query, [(int) $last], $resultCount);
|
|
|
|
|
|
$count = 0;
|
|
|
while ($res = $result->fetchRow()) {
|
|
|
if ($userlib->user_has_perm_on_object($user, $res['blogId'], 'blog', 'tiki_p_read_blog')) {
|
|
|
$ret['items']['blogs']['list'][$count]['href'] = filter_out_sefurl('tiki-view_blog.php?blogId=' . $res['blogId'], 'blog', $res['title']);
|
|
|
$ret['items']['blogs']['list'][$count]['title'] = $tikilib->get_short_datetime($res['created']) . ' ' . tra('by') . ' ' . smarty_modifier_username($res['user']);
|
|
|
$ret['items']['blogs']['list'][$count]['label'] = $res['title'];
|
|
|
$count++;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
$ret['items']['blogs']['count'] = $count;
|
|
|
|
|
|
$ret['items']['blogPosts']['label'] = tra('new blog posts');
|
|
|
$ret['items']['blogPosts']['cname'] = 'slvn_blogPosts_menu';
|
|
|
|
|
|
$query = 'select `postId`, `blogId`, `title`, `user`, `created` from `tiki_blog_posts` where `created`>? order by `created` desc';
|
|
|
$result = $tikilib->query($query, [(int) $last], $resultCount);
|
|
|
|
|
|
$count = 0;
|
|
|
while ($res = $result->fetchRow()) {
|
|
|
if ($userlib->user_has_perm_on_object($user, $res['postId'], 'blog post', 'tiki_p_read_blog')) {
|
|
|
$ret['items']['blogPosts']['list'][$count]['href'] = filter_out_sefurl('tiki-view_blog_post.php?postId=' . $res['postId'], 'blogpost', $res['title']);
|
|
|
$ret['items']['blogPosts']['list'][$count]['title'] = $tikilib->get_short_datetime($res['created']) . ' ' . tra('by') . ' ' . smarty_modifier_username($res['user']);
|
|
|
$ret['items']['blogPosts']['list'][$count]['label'] = $res['title'];
|
|
|
$count++;
|
|
|
}
|
|
|
}
|
|
|
$ret['items']['blogPosts']['count'] = $count;
|
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
// FILE GALLERIES
|
|
|
if ($prefs['feature_file_galleries'] == 'y') {
|
|
|
// file galleries
|
|
|
$ret['items']['fileGalleries']['label'] = tra('new file galleries');
|
|
|
$ret['items']['fileGalleries']['cname'] = 'slvn_fileGalleries_menu';
|
|
|
$query = 'select `galleryId`,`name`,`created`,`user` from `tiki_file_galleries` where `created`>? order by `created` desc';
|
|
|
$result = $tikilib->query($query, [(int) $last], $resultCount);
|
|
|
|
|
|
$count = 0;
|
|
|
while ($res = $result->fetchRow()) {
|
|
|
if ($userlib->user_has_perm_on_object($user, $res['galleryId'], 'file gallery', 'tiki_p_view_file_gallery')) {
|
|
|
$ret['items']['fileGalleries']['list'][$count]['href'] = filter_out_sefurl('tiki-list_file_gallery.php?galleryId=' . $res['galleryId'], 'file gallery');
|
|
|
$ret['items']['fileGalleries']['list'][$count]['title'] = $tikilib->get_short_datetime($res['created']) . ' ' . tra('by') . ' ' . smarty_modifier_username($res['user']);
|
|
|
$ret['items']['fileGalleries']['list'][$count]['label'] = $res['name'];
|
|
|
$count++;
|
|
|
}
|
|
|
}
|
|
|
$ret['items']['fileGalleries']['count'] = $count;
|
|
|
|
|
|
// files
|
|
|
$ret['items']['files']['label'] = tra('new files');//get_strings tra('new files');
|
|
|
$ret['items']['files']['cname'] = 'slvn_files_menu';
|
|
|
|
|
|
$files = TikiLib::lib('filegal')->get_files(-1, $resultCount, 'created_desc', null, -2, false, false, true, true, false, false, true, false, '', true, false, false, ['created' => (int) $last]);
|
|
|
foreach ($files['data'] as $res) {
|
|
|
$ret['items']['files']['list'][] = [
|
|
|
'href' => filter_out_sefurl('tiki-list_file_gallery.php?galleryId=' . $res['galleryId'] . '&fileId=' . $res['fileId'] . '&view=page', 'file gallery'),
|
|
|
'title' => $tikilib->get_short_datetime($res['created']) . ' ' . tra('by') . ' ' . smarty_modifier_username($res['user']),
|
|
|
'label' => $res['name'] . ' (' . $res['filename'] . ')'
|
|
|
];
|
|
|
}
|
|
|
$ret['items']['files']['count'] = $files['cant'];
|
|
|
}
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
// POLLS
|
|
|
if ($prefs['feature_polls'] == 'y') {
|
|
|
$ret['items']['polls']['label'] = tra('new polls');
|
|
|
$ret['items']['polls']['cname'] = 'slvn_polls_menu';
|
|
|
|
|
|
$query = 'select `pollId`, `title`, `publishDate` from `tiki_polls` where `publishDate`>? order by `publishDate` desc';
|
|
|
$result = $tikilib->query($query, [(int) $last], $resultCount);
|
|
|
|
|
|
$count = 0;
|
|
|
while ($res = $result->fetchRow()) {
|
|
|
$ret['items']['polls']['list'][$count]['href'] = 'tiki-poll_results.php?pollId=' . $res['pollId'];
|
|
|
$ret['items']['polls']['list'][$count]['title'] = $tikilib->get_short_datetime($res['publishDate']);
|
|
|
$ret['items']['polls']['list'][$count]['label'] = $res['title'];
|
|
|
$count++;
|
|
|
}
|
|
|
$ret['items']['polls']['count'] = $count;
|
|
|
}
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
// NEW USERS
|
|
|
if (! isset($params['showuser']) || $params['showuser'] != 'n') {
|
|
|
$ret['items']['users']['label'] = tra('new users');
|
|
|
$ret['items']['users']['cname'] = 'slvn_users_menu';
|
|
|
$query = 'select `login`, `registrationDate` from `users_users` where `registrationDate`>? and `provpass`=?';
|
|
|
$result = $tikilib->query($query, [(int) $last, ''], $resultCount);
|
|
|
|
|
|
$count = 0;
|
|
|
$slvn_tmp_href = $userlib->user_has_permission($user, 'tiki_p_admin') ? 'tiki-assignuser.php?assign_user=' : 'tiki-user_information.php?view_user=';
|
|
|
while ($res = $result->fetchRow()) {
|
|
|
$ret['items']['users']['list'][$count]['href'] = $slvn_tmp_href . rawurlencode($res['login']);
|
|
|
$ret['items']['users']['list'][$count]['title'] = $tikilib->get_short_datetime($res['registrationDate']);
|
|
|
$ret['items']['users']['list'][$count]['label'] = smarty_modifier_username($res['login']);
|
|
|
$count++;
|
|
|
}
|
|
|
$ret['items']['users']['count'] = $count;
|
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
// TRACKER ITEMS
|
|
|
// This breaks out tracker updates into sub-sections, by tracker, separating new items and updated items.
|
|
|
// NEW TRACKER ITEMS
|
|
|
if ($prefs['feature_trackers'] == 'y' && (! isset($params['showtracker']) || $params['showtracker'] != 'n')) {
|
|
|
$ret['items']['trackers']['label'] = tra('new tracker items');
|
|
|
$ret['items']['trackers']['cname'] = 'slvn_trackers_menu';
|
|
|
|
|
|
$query = 'select `itemId`, `trackerId`, `created`, `lastModif` from `tiki_tracker_items` where `created`>? order by `created` desc';
|
|
|
$result = $tikilib->query($query, [(int) $last], $resultCount);
|
|
|
|
|
|
$count = 0;
|
|
|
$counta = [];
|
|
|
$tracker_name = [];
|
|
|
$cachelib = TikiLib::lib('cache');
|
|
|
while ($res = $result->fetchRow()) {
|
|
|
$itemObject = Tracker_Item::fromId($res['itemId']);
|
|
|
if ($itemObject->canView()) {
|
|
|
// Initialize tracker counter if needed.
|
|
|
if (! isset($counta[$res['trackerId']])) {
|
|
|
$counta[$res['trackerId']] = 0;
|
|
|
}
|
|
|
|
|
|
// Pull Tracker Name
|
|
|
if ($res['trackerId'] > 0 && ! isset($tracker_name[$res['trackerId']])) {
|
|
|
$query = "select `name` from `tiki_trackers` where `trackerId` = ?";
|
|
|
$tracker_name[$res['trackerId']] = $tikilib->getOne($query, $res['trackerId']);
|
|
|
}
|
|
|
|
|
|
$ret['items']['trackers']['tid'][$res['trackerId']]['label'] = tra('in') . ' ' . tra($tracker_name[$res['trackerId']]);
|
|
|
$ret['items']['trackers']['tid'][$res['trackerId']]['cname'] = 'slvn_tracker' . $res['trackerId'] . '_menu';
|
|
|
$ret['items']['trackers']['tid'][$res['trackerId']]['list'][$counta[$res['trackerId']]]['href'] = filter_out_sefurl(
|
|
|
'tiki-view_tracker_item.php?itemId=' . $res['itemId'],
|
|
|
'trackeritem'
|
|
|
);
|
|
|
$ret['items']['trackers']['tid'][$res['trackerId']]['list'][$counta[$res['trackerId']]]['title'] = $tikilib->get_short_datetime($res['created']);
|
|
|
|
|
|
// routine to verify field in tracker that's used as label
|
|
|
$cacheKey = 'trackerItemLabel' . $res['itemId'];
|
|
|
if (! $label = $cachelib->getCached($cacheKey)) {
|
|
|
$query = 'select `fieldId` from `tiki_tracker_fields` where `isMain` = ? and `trackerId` = ? order by `position`';
|
|
|
$fieldId = $tikilib->getOne($query, ['y',$res['trackerId']]);
|
|
|
$query = 'select `value` from `tiki_tracker_item_fields` where `fieldId` = ? and `itemId` = ?';
|
|
|
$label = $tikilib->getOne($query, [$fieldId,$res['itemId']]);
|
|
|
|
|
|
$cachelib->cacheItem($cacheKey, $label);
|
|
|
}
|
|
|
|
|
|
// If the label is empty (b:0;), then use the item ID
|
|
|
if ($label == 'b:0;' || $label == '') {
|
|
|
$label = 'Trk i' . $res['trackerId'] . ' - ID: ' . $res['itemId'];
|
|
|
}
|
|
|
$ret['items']['trackers']['tid'][$res['trackerId']]['list'][$counta[$res['trackerId']]]['label'] = $label;
|
|
|
$counta[$res['trackerId']]++;
|
|
|
$ret['items']['trackers']['tid'][$res['trackerId']]['count'] = $counta[$res['trackerId']];
|
|
|
$count++;
|
|
|
}
|
|
|
}
|
|
|
$ret['items']['trackers']['count'] = $count;
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
// UPDATED TRACKER ITEMS - ignore updates on same day as creation
|
|
|
$ret['items']['utrackers']['label'] = tra('updated tracker items');
|
|
|
$ret['items']['utrackers']['cname'] = 'slvn_utrackers_menu';
|
|
|
|
|
|
$query = 'select `itemId`, `trackerId`, `created`, `lastModif`' .
|
|
|
' from `tiki_tracker_items` where `lastModif`>? and `lastModif`!=`created`' .
|
|
|
' order by `lastModif` desc';
|
|
|
$result = $tikilib->query($query, [(int) $last], $resultCount);
|
|
|
|
|
|
$count = 0;
|
|
|
$countb = [];
|
|
|
$cachelib = TikiLib::lib('cache');
|
|
|
|
|
|
while ($res = $result->fetchRow()) {
|
|
|
$itemObject = Tracker_Item::fromId($res['itemId']);
|
|
|
if ($itemObject->canView()) {
|
|
|
// Initialize tracker counter if needed.
|
|
|
if (! isset($countb[$res['trackerId']])) {
|
|
|
$countb[$res['trackerId']] = 0;
|
|
|
}
|
|
|
|
|
|
// Pull Tracker Name
|
|
|
if (! isset($tracker_name[$res['trackerId']])) {
|
|
|
$query = 'select `name` from `tiki_trackers` where `trackerId` = ?';
|
|
|
$tracker_name[$res['trackerId']] = $tikilib->getOne($query, $res['trackerId']);
|
|
|
}
|
|
|
|
|
|
$ret['items']['utrackers']['tid'][$res['trackerId']]['label'] = tra('in') . ' ' . tra($tracker_name[$res['trackerId']]);
|
|
|
$ret['items']['utrackers']['tid'][$res['trackerId']]['cname'] = 'slvn_utracker' . $res['trackerId'] . '_menu';
|
|
|
$ret['items']['utrackers']['tid'][$res['trackerId']]['list'][$countb[$res['trackerId']]]['href'] = filter_out_sefurl(
|
|
|
'tiki-view_tracker_item.php?itemId=' . $res['itemId'],
|
|
|
'trackeritem'
|
|
|
);
|
|
|
$ret['items']['utrackers']['tid'][$res['trackerId']]['list'][$countb[$res['trackerId']]]['title'] = $tikilib->get_short_datetime($res['lastModif']);
|
|
|
|
|
|
// routine to verify field in tracker that's used as label
|
|
|
$cacheKey = 'trackerItemLabel' . $res['itemId'];
|
|
|
if (! $label = $cachelib->getCached($cacheKey)) {
|
|
|
$query = 'select `fieldId` from `tiki_tracker_fields` where `isMain` = ? and `trackerId` = ? order by `position`';
|
|
|
$fieldId = $tikilib->getOne($query, ['y',$res['trackerId']]);
|
|
|
$query = 'select `value` from `tiki_tracker_item_fields` where `fieldId` = ? and `itemId` = ?';
|
|
|
$label = $tikilib->getOne($query, [$fieldId,$res['itemId']]);
|
|
|
|
|
|
$cachelib->cacheItem($cacheKey, $label);
|
|
|
}
|
|
|
|
|
|
// If the label is empty (b:0;), then use the item ID
|
|
|
if ($label == 'b:0;' || $label == '') {
|
|
|
$label = 'Trk i' . $res['trackerId'] . ' - ID: ' . $res['itemId'];
|
|
|
}
|
|
|
$ret['items']['utrackers']['tid'][$res['trackerId']]['list'][$countb[$res['trackerId']]]['label'] = $label;
|
|
|
$countb[$res['trackerId']]++;
|
|
|
$ret['items']['utrackers']['tid'][$res['trackerId']]['count'] = $countb[$res['trackerId']];
|
|
|
$count++;
|
|
|
}
|
|
|
}
|
|
|
$ret['items']['utrackers']['count'] = $count;
|
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
// CALENDARS & THEIR EVENTS
|
|
|
if ($prefs['feature_calendar'] == 'y') {
|
|
|
$ret['items']['calendar']['label'] = tra('new calendars');
|
|
|
$ret['items']['calendar']['cname'] = 'slvn_calendar_menu';
|
|
|
|
|
|
$query = "select `calendarId`, `name`, `user`, `created` from `tiki_calendars` where `created`>? order by `created` desc";
|
|
|
$result = $tikilib->query($query, [(int) $last], $resultCount);
|
|
|
|
|
|
$count = 0;
|
|
|
while ($res = $result->fetchRow()) {
|
|
|
if ($userlib->user_has_perm_on_object($user, $res['calendarId'], 'calendar', 'tiki_p_view_calendar')) {
|
|
|
$ret['items']['calendar']['list'][$count]['href'] = filter_out_sefurl('tiki-calendar.php?calIds[]=' . $res['calendarId'], 'calendar', $res['name']);
|
|
|
$ret['items']['calendar']['list'][$count]['title'] = $tikilib->get_short_datetime($res['created']) . ' ' . tra('by') . ' ' . smarty_modifier_username($res['user']);
|
|
|
$ret['items']['calendar']['list'][$count]['label'] = $res['name'];
|
|
|
$count++;
|
|
|
}
|
|
|
}
|
|
|
$ret['items']['calendar']['count'] = $count;
|
|
|
|
|
|
$ret['items']['events']['label'] = tra('new events');
|
|
|
$ret['items']['events']['cname'] = 'slvn_events_menu';
|
|
|
|
|
|
$query = "select `calitemId`, `calendarId`, `name`, `user`, `created`, `start` from `tiki_calendar_items` where `created`>? order by `created` desc";
|
|
|
$result = $tikilib->query($query, [(int) $last], $resultCount);
|
|
|
|
|
|
$count = 0;
|
|
|
while ($res = $result->fetchRow()) {
|
|
|
if ($userlib->user_has_perm_on_object($user, $res['calendarId'], 'calendar', 'tiki_p_view_events')) {
|
|
|
$ret['items']['events']['list'][$count]['href'] = filter_out_sefurl('tiki-calendar_edit_item.php?viewcalitemId=' . $res['calitemId'], 'event', $res['name']);
|
|
|
$ret['items']['events']['list'][$count]['title'] = $tikilib->get_short_datetime($res['created']) . ' ' . tra('by') . ' ' . smarty_modifier_username($res['user']) . ', ' . tra('starting on') . ' ' . $tikilib->get_short_datetime($res['start']) ;
|
|
|
$ret['items']['events']['list'][$count]['label'] = $res['name'];
|
|
|
$count++;
|
|
|
}
|
|
|
}
|
|
|
$ret['items']['events']['count'] = $count;
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
// SUMMARY
|
|
|
//get the total of items
|
|
|
$ret['cant'] = 0;
|
|
|
$ret['nonempty'] = 0;
|
|
|
foreach ($ret['items'] as $item) {
|
|
|
$ret['cant'] += $item['count'];
|
|
|
if ($item['count'] > 0) {
|
|
|
$ret['nonempty']++;
|
|
|
}
|
|
|
}
|
|
|
if ($ret['nonempty'] > 0) {
|
|
|
$ret['li_width'] = min(22, (int)90 / $ret['nonempty']);
|
|
|
} else {
|
|
|
$ret['li_width'] = 90;
|
|
|
}
|
|
|
|
|
|
$smarty->assign('slvn_info', $ret);
|
|
|
}
|