function testNext() { $calendarlib = TikiLib::lib('calendar'); $date = TikiLib::make_time(0, 0, 0, 8, 31, 2010); $previous = $calendarlib->focusNext($calendarlib->infoDate($date), 'month'); $this->assertEquals('2010-09-30', TikiLib::date_format('%Y-%m-%d', $previous['date'])); }
/** * Transform a last period to a 2 dates * */ public function period2dates($when) { global $prefs; $tikilib = TikiLib::lib('tiki'); $now = $tikilib->now; $sec = TikiLib::date_format("%s", $now); $min = TikiLib::date_format("%i", $now); $hour = TikiLib::date_format("%H", $now); $day = TikiLib::date_format("%d", $now); $month = TikiLib::date_format("%m", $now); $year = TikiLib::date_format("%Y", $now); switch ($when) { case 'lasthour': $begin = $now - 60 * 60; break; case 'day': $begin = TikiLib::make_time(0, 0, 0, $month, $day, $year); break; case 'lastday': $begin = Tikilib::make_time($hour - 24, $min, $sec, $month, $day, $year); break; case 'week': $iweek = TikiLib::date_format("%w", $now); // 0 for Sunday... $calendarlib = TikiLib::lib('calendar'); $firstDayofWeek = $calendarlib->firstDayofWeek(); $iweek -= $firstDayofWeek; if ($iweek < 0) { $iweek += 7; } $begin = TikiLib::make_time(0, 0, 0, $month, $day - $iweek, $year); break; case 'lastweek': $begin = Tikilib::make_time($hour, $min, $sec, $month, $day - 7, $year); break; case 'month': $begin = TikiLib::make_time(0, 0, 0, $month, 1, $year); break; case 'lastmonth': $begin = TikiLib::make_time($hour, $min, $sec, $month - 1, $day, $year); break; case 'year': $begin = TikiLib::make_time(0, 0, 0, 1, 1, $year); break; case 'lastyear': $begin = TikiLib::make_time($hour, $min, $sec, $month, $day, $year - 1); break; default: $begin = $now; break; } return array((int) $begin, (int) $now); }
/** * Transform a last period to a 2 dates * */ function period2dates($when) { global $tikilib, $prefs; $now = $tikilib->now; $sec = TikiLib::date_format("%s", $now); $min = TikiLib::date_format("%i", $now); $hour = TikiLib::date_format("%H", $now); $day = TikiLib::date_format("%d", $now); $month = TikiLib::date_format("%m", $now); $year = TikiLib::date_format("%Y", $now); switch ($when) { case 'lasthour': $begin = $now - 60 * 60; break; case 'day': $begin = TikiLib::make_time(0, 0, 0, $month, $day, $year); break; case 'lastday': $begin = Tikilib::make_time($hour - 24, $min, $sec, $month, $day, $year); break; case 'week': $iweek = TikiLib::date_format("%w", $now); // 0 for Sunday... if ($prefs['calendar_firstDayofWeek'] == 'user') { $firstDayofWeek = (int) tra('First day of week: Sunday (its ID is 0) - translators you need to localize this string!'); if ($firstDayofWeek < 1 || $firstDayofWeek > 6) { $firstDayofWeek = 0; } } else { $firstDayofWeek = $prefs['calendar_firstDayofWeek']; } $iweek -= $firstDayofWeek; if ($iweek < 0) { $iweek += 7; } $begin = TikiLib::make_time(0, 0, 0, $month, $day - $iweek, $year); break; case 'lastweek': $begin = Tikilib::make_time($hour, $min, $sec, $month, $day - 7, $year); break; case 'month': $begin = TikiLib::make_time(0, 0, 0, $month, 1, $year); break; case 'lastmonth': $begin = TikiLib::make_time($hour, $min, $sec, $month - 1, $day, $year); break; case 'year': $begin = TikiLib::make_time(0, 0, 0, 1, 1, $year); break; case 'lastyear': $begin = TikiLib::make_time($hour, $min, $sec, $month, $day, $year - 1); break; default: $begin = $now; break; } return array((int) $begin, (int) $now); }
$smarty->assign('publishDate', $tikilib->now); //Use 12- or 24-hour clock for $publishDate time selector based on admin and user preferences $userprefslib = TikiLib::lib('userprefs'); $smarty->assign('use_24hr_clock', $userprefslib->get_user_clock_pref($user)); $smarty->assign('actual', ''); if (isset($_REQUEST["save"])) { check_ticket('edit-programmed-content'); if ($_REQUEST['content_type'] == 'page') { $content = 'page:' . $_REQUEST['page_name']; } else { $content = $_REQUEST['data']; } if (!empty($_REQUEST['Time_Meridian'])) { $_REQUEST['Time_Hour'] = date('H', strtotime($_REQUEST['Time_Hour'] . ':00 ' . $_REQUEST['Time_Meridian'])); } $publishDate = TikiLib::make_time($_REQUEST["Time_Hour"], $_REQUEST["Time_Minute"], 0, $_REQUEST["Date_Month"], $_REQUEST["Date_Day"], $_REQUEST["Date_Year"]); $id = $dcslib->replace_programmed_content($_REQUEST["pId"], $_REQUEST["contentId"], $publishDate, $content, $_REQUEST['content_type']); $smarty->assign('data', $_REQUEST["data"]); $smarty->assign('publishDate', $publishDate); $smarty->assign('pId', $id); $_REQUEST['edit'] = $id; } if (isset($_REQUEST["edit"])) { $info = $dcslib->get_programmed_content($_REQUEST["edit"]); $actual = $dcslib->get_actual_content_date($_REQUEST["contentId"]); $smarty->assign('info', $info); $smarty->assign('actual', $actual); $smarty->assign('data', $info["data"]); $smarty->assign('publishDate', $info["publishDate"]); $smarty->assign('pId', $info["pId"]); }
/** * @return array */ function quiz_data_load() { global $_REQUEST; $quiz_data = array(); foreach ($_REQUEST as $key => $val) { if (preg_match("/^quiz_/", $key)) { $k = preg_replace("/^quiz_([.]*)/", "\$1", $key); $quiz_data[$k] = $val; } } if ($quiz_data["online"] == "online") { $quiz_data["online"] = "y"; } else { if ($quiz_data["online"] == "offline") { $quiz_data["online"] = "n"; } } //Convert 12-hour clock hours to 24-hour scale to compute time if (!empty($_REQUEST['publish_Meridian'])) { $_REQUEST['publish_Hour'] = date('H', strtotime($_REQUEST['publish_Hour'] . ':00 ' . $_REQUEST['publish_Meridian'])); } if (!empty($_REQUEST['expire_Meridian'])) { $_REQUEST['expire_Hour'] = date('H', strtotime($_REQUEST['expire_Hour'] . ':00 ' . $_REQUEST['expire_Meridian'])); } $quiz_data["datePub"] = TikiLib::make_time($quiz_data["publish_Hour"], $quiz_data["publish_Minute"], 0, $quiz_data["publish_Month"], $quiz_data["publish_Day"], $quiz_data["publish_Year"]); $quiz_data["dateExp"] = TikiLib::make_time($quiz_data["expire_Hour"], $quiz_data["expire_Minute"], 0, $quiz_data["expire_Month"], $quiz_data["expire_Day"], $quiz_data["expire_Year"]); $fields = array('nQuestion', 'shuffleAnswers', 'shuffleQuestions', 'multiSession', 'additionalQuestions', 'limitDisplay', 'timeLimited', 'canRepeat', 'additionalQuestions', 'forum'); foreach ($fields as $field) { fetchYNOption($quiz_data, $quiz_data, $field); } return $quiz_data; }
/** * @param $start * @param $startNext * @param string $view * @param int $firstWeekDay * @return array */ function getTableViewCells($start, $startNext, $view = 'month', $firstWeekDay = 0) { // start of the view $viewStart = $start; $nbBackDays = $start['weekDay'] < $firstWeekDay ? 6 : $start['weekDay'] - $firstWeekDay; if ($nbBackDays == 0) { $viewStart['daysInMonth'] = Date_Calc::daysInMonth($viewStart['month'], $viewStart['year']); } elseif ($start['day'] - $nbBackDays < 0) { $viewStart['month'] = $start['month'] == 1 ? 12 : $start['month'] - 1; $viewStart['year'] = $start['month'] == 1 ? $start['year'] - 1 : $start['year']; $viewStart['daysInMonth'] = Date_Calc::daysInMonth($viewStart['month'], $viewStart['year']); $viewStart['day'] = $viewStart['daysInMonth'] - $nbBackDays + 1; $viewStart['date'] = TikiLib::make_time(0, 0, 0, $viewStart['month'], $viewStart['day'], $viewStart['year']); } else { $viewStart['daysInMonth'] = Date_Calc::daysInMonth($viewStart['month'], $viewStart['year']); $viewStart['day'] = $viewStart['day'] - $nbBackDays; $viewStart['date'] = TikiLib::make_time(0, 0, 0, $viewStart['month'], $viewStart['day'], $viewStart['year']); } // echo '<br/>VIEWSTART'; print_r($viewStart); // end of the period $cell = array(); for ($ilign = 0, $icol = 0, $loop = $viewStart, $weekDay = $viewStart['weekDay'];;) { if ($loop['date'] >= $startNext['date'] && $icol == 0) { break; } $cell[$ilign][$icol] = $loop; $cell[$ilign][$icol]['focus'] = $loop['date'] < $start['date'] || $loop['date'] >= $startNext['date'] ? false : true; $cell[$ilign][$icol]['weekDay'] = $weekDay; $weekDay = ($weekDay + 1) % 7; if ($icol >= 6) { ++$ilign; $icol = 0; } else { ++$icol; } if ($loop['day'] >= $loop['daysInMonth']) { $loop['day'] = 1; if ($loop['month'] == 12) { $loop['month'] = 1; $loop['year'] += 1; } else { $loop['month'] += 1; } $loop['daysInMonth'] = Date_Calc::daysInMonth($loop['month'], $loop['year']); } else { $loop['day'] = $loop['day'] + 1; } $loop['date'] = TikiLib::make_time(0, 0, 0, $loop['month'], $loop['day'], $loop['year']); } //echo '<pre>CELL'; print_r($cell); echo '</pre>'; return $cell; }
function wikiplugin_trackerlist($data, $params) { global $smarty, $tikilib, $dbTiki, $userlib, $tiki_p_admin_trackers, $prefs, $_REQUEST, $tiki_p_view_trackers, $user, $page, $tiki_p_tracker_vote_ratings, $tiki_p_tracker_view_ratings, $trklib, $tiki_p_traker_vote_rating, $tiki_p_export_tracker, $tiki_p_watch_trackers; require_once("lib/trackers/trackerlib.php"); global $notificationlib; include_once('lib/notifications/notificationlib.php');//needed if plugin tracker after plugin trackerlist static $iTRACKERLIST = 0; ++$iTRACKERLIST; $smarty->assign('iTRACKERLIST', $iTRACKERLIST); $default = array( 'calendarfielddate' => '', 'wiki' => '', 'calendarviewmode' => 'month', 'calendarstickypopup' => 'n', 'calendarbeginmonth' => 'y', 'calendarviewnavbar' => 'y', 'calendartitle'=>'', 'calendardelta' => '', 'force_compile' => 'n' ); $params = array_merge($default, $params); extract($params, EXTR_SKIP); $skip_status_perm_check = false; if ($prefs['feature_trackers'] != 'y' || !isset($trackerId) || !($tracker_info = $trklib->get_tracker($trackerId))) { return $smarty->fetch("wiki-plugins/error_tracker.tpl"); } else { global $auto_query_args; $auto_query_args_local = array('trackerId', 'tr_initial',"tr_sort_mode$iTRACKERLIST",'tr_user', 'filterfield', 'filtervalue', 'exactvalue', 'itemId'); $auto_query_args = empty($auto_query_args)? $auto_query_args_local: array_merge($auto_query_args, $auto_query_args_local); $smarty->assign('listTrackerId', $trackerId); $tracker_info = $trklib->get_tracker($trackerId); if ($t = $trklib->get_tracker_options($trackerId)) { $tracker_info = array_merge($tracker_info, $t); } if (!isset($sort)) { $sort = 'n'; } if ($tiki_p_admin_trackers != 'y') { $perms = $tikilib->get_perm_object($trackerId, 'tracker', $tracker_info, false); if ($perms['tiki_p_view_trackers'] != 'y' && !$user) { return; } $userCreatorFieldId = $trklib->get_field_id_from_type($trackerId, 'u', '1%'); $groupCreatorFieldId = $trklib->get_field_id_from_type($trackerId, 'g', '1%'); if ($perms['tiki_p_view_trackers'] != 'y' && $tracker_info['writerCanModify'] != 'y' && empty($userCreatorFieldId) && empty($groupCreatorFieldId)) { return; } $smarty->assign_by_ref('perms', $perms); } global $trklib; require_once("lib/trackers/trackerlib.php"); if (!empty($fields)) { $limit = $fields; } else { $limit = ''; } if (!empty($filterfield) && !empty($limit)) { $limit = array_unique(array_merge($limit, $filterfield)); } if (!empty($popup)) { $limit = array_unique(array_merge($limit, $popup)); } if (!empty($calendarfielddate)) { $limit = array_unique(array_merge($limit, $calendarfielddate)); } if (!empty($limit) && $trklib->test_field_type($limit, array('C'))) { $limit = ''; } $allfields = $trklib->list_tracker_fields($trackerId, 0, -1, 'position_asc', '', true, '', $trklib->flaten($limit)); if (!empty($fields)) { $listfields = $fields; //We must include the $calendarfielddate, even if they are not in the listfields if (!empty($calendarfielddate)) { foreach($calendarfielddate as $f) { if (!in_array($f, $listfields)) { $listfields[] = $f; } } } if ($sort == 'y') { $allfields = $trklib->sort_fields($allfields, $listfields); } } elseif (!empty($wiki) || !empty($tpl) || !empty($tplwiki)) { if (!empty($wiki)) { $listfields = $trklib->get_pretty_fieldIds($wiki, 'wiki', $outputPretty); } elseif (!empty($tplwiki)) { $listfields = $trklib->get_pretty_fieldIds($tplwiki, 'wiki', $outputPretty); } else { $listfields = $trklib->get_pretty_fieldIds($tpl, 'tpl', $outputPretty); } } else { $listfields = ''; } if (!empty($compute) && !empty($listfields)) { if (preg_match_all('/[0-9.]+/', $compute, $matches)) { foreach ($matches[0] as $f) { if (!in_array($f, $listfields)) $listfields[] = $f; } } } if (!empty($filterfield)) { if (is_array($filterfield)) { foreach ($filterfield as $ff) { unset($filterfieldok); if (is_array($ff)) {// already checked in trackerfilter $filterfieldok=true; break; } else { foreach ($allfields['data'] as $f) { if ($f['fieldId'] == $ff) { $filterfieldok=true; break; } } } if (!isset($filterfieldok)) break; } } else { foreach ($allfields['data'] as $f) { if ($f['fieldId'] == $filterfield) { $filterfieldok=true; break; } } } if (!isset($filterfieldok)) { return tra('incorrect filterfield'); } } $filter = array(); if (isset($periodQuantity)) { switch ($periodUnit) { case 'hour': $periodUnit = 3600; break; case 'day': $periodUnit = 86400; break; case 'week': $periodUnit = 604800; break; case 'month': $periodUnit = 2628000; break; default: break; } if (!isset($periodType)) { $periodType = 'c'; } if (is_int($periodUnit) && ($periodType == 'm' ) ) { $filter['lastModifAfter'] = $tikilib->now - ($periodQuantity * $periodUnit); $filter['lastModifBefore'] = $tikilib->now; } elseif (is_int($periodUnit)) { # case for periodType beig c or anything else (therefore, set as case for default) $filter['createdAfter'] = $tikilib->now - ($periodQuantity * $periodUnit); $filter['createdBefore'] = $tikilib->now; } } if (isset($_REQUEST['reloff']) && empty($_REQUEST['itemId']) && !empty($_REQUEST['trackerId'])) { //coming from a pagination $items = $trklib->list_items( $_REQUEST['trackerId'], $_REQUEST['reloff'], 1, '', '', isset($_REQUEST['filterfield']) ? preg_split('/\s*:\s*/', $_REQUEST['filterfield']) : '', isset($_REQUEST['filtervalue']) ? preg_split('/\s*:\s*/', $_REQUEST['filtervalue']) : '', isset($_REQUEST['status']) ? preg_split('/\s*:\s*/', $_REQUEST['status']) : '', isset($_REQUEST['initial']) ? $_REQUEST['initial'] : '', isset($_REQUEST['exactvalue']) ? preg_split('/\s*:\s*/', $_REQUEST['exactvalue']) : '', $filter ); if (isset($items['data'][0]['itemId'])) { $_REQUEST['cant'] = $items['cant']; $_REQUEST['itemId'] = $items['data'][0]['itemId']; } } if (!empty($_REQUEST['itemId']) && $tiki_p_tracker_vote_ratings == 'y' && $user) { $hasVoted = false; foreach ($allfields['data'] as $f) { if ($f['type'] == 's' && isset($tracker_info['useRatings']) and $tracker_info['useRatings'] == 'y' && ($f['name'] == 'Rating' || $f['name'] = tra('Rating'))) { $i = $f['fieldId']; if (isset($_REQUEST["ins_$i"]) && ($_REQUEST["ins_$i"] == 'NULL' || in_array($_REQUEST["ins_$i"], explode(',', $tracker_info['ratingOptions'])))) { $trklib->replace_rating($trackerId, $_REQUEST['itemId'], $i, $user, $_REQUEST["ins_$i"]); $hasVoted = true; } } elseif ($f['type'] == '*' || $f['type'] == 'STARS') { $i = $f['fieldId']; if (isset($_REQUEST["ins_$i"])) { $trklib->replace_star($_REQUEST["ins_$i"], $trackerId, $_REQUEST['itemId'], $f, $user); $hasVoted = true; } } } if ($hasVoted) { // Must strip NULL for remove my vote case $url = preg_replace('/[(\?)|&]vote=y/', '$1', preg_replace('/[(\?)|&]ins_[0-9]+=-?[0-9|N|U|L]*/', '$1', $_SERVER['REQUEST_URI'])); // reduce duplicate itemIds in query string $occurences = preg_match_all('/[(\?)|&]itemId=[0-9]+/', $url, $matches); if ($params['list_mode'] == 'y' && $occurences > 0) { $url = preg_replace('/[(\?)|&]itemId=[0-9]+/', '$1', $url, $occurences); } elseif ($occurences > 1) { $url = preg_replace('/&itemId=[0-9]+/', '', $url, $occurences - 1); } header("Location: $url"); die; } } if (!empty($showwatch) && $showwatch == 'y' && $prefs['feature_user_watches'] == 'y' && $tiki_p_watch_trackers == 'y' && !empty($user)) { if (isset($_REQUEST['watch']) && isset($_REQUEST['trackerId']) && $_REQUEST['trackerId'] == $trackerId) { if ($_REQUEST['watch'] == 'add') { $tikilib->add_user_watch($user, 'tracker_modified', $trackerId, 'tracker', $tracker_info['name'], "tiki-view_tracker.php?trackerId=" . $trackerId); } elseif ($_REQUEST['watch'] == 'stop') { $tikilib->remove_user_watch($user, 'tracker_modified', $trackerId, 'tracker'); } } if ($tikilib->user_watches($user, 'tracker_modified', $trackerId, 'tracker')) { $smarty->assign('user_watching_tracker', 'y'); } else { $smarty->assign('user_watching_tracker', 'n'); } } else { $smarty->clear_assign('user_watching_tracker'); } if (empty($showrss) || $showrss == 'n') { $smarty->assign('showrss', 'n'); } else { $smarty->assign('showrss', 'y'); } if (empty($listfields)) { foreach ($allfields['data'] as $f) { $listfields[] = $f['fieldId']; } } if (!empty($popup)) { $popupfields = $popup; } else { $popupfields = array(); } if ($t = $trklib->get_tracker_options($trackerId)) $tracker_info = array_merge($tracker_info, $t); $smarty->assign_by_ref('tracker_info', $tracker_info); //$query_array = array(); //$quarray = array(); //TikiLib::parse_str($_SERVER['QUERY_STRING'],$query_array); if (isset($stickypopup) && $stickypopup == 'y') { $stickypopup = true; } else { $stickypopup = false; } $smarty->assign_by_ref('stickypopup', $stickypopup); if (!isset($showtitle)) { $showtitle = 'n'; } $smarty->assign_by_ref('showtitle', $showtitle); if (!isset($showlinks)) { $showlinks = 'n'; } $smarty->assign_by_ref('showlinks', $showlinks); if (!isset($showdesc)) { $showdesc = 'n'; } $smarty->assign_by_ref('showdesc', $showdesc); if (!isset($showinitials)) { $showinitials = 'n'; } $smarty->assign_by_ref('showinitials', $showinitials); if (!isset($shownbitems)) { $shownbitems = 'n'; } $smarty->assign_by_ref('shownbitems', $shownbitems); if (!isset($showstatus)) { $showstatus = 'n'; } $smarty->assign_by_ref('showstatus', $showstatus); if (!isset($showfieldname)) { $showfieldname = 'y'; } $smarty->assign_by_ref('showfieldname', $showfieldname); if (!isset($showitemrank)) { $showitemrank = 'n'; } $smarty->assign_by_ref('showitemrank', $showitemrank); if (!isset($showdelete)) { $showdelete = 'n'; } $smarty->assign_by_ref('showdelete', $showdelete); if (!isset($showpenditem)) { $showpenditem = 'n'; } $smarty->assign_by_ref('showpenditem', $showpenditem); if (!isset($showcloseitem)) { $showcloseitem = 'n'; } $smarty->assign_by_ref('showcloseitem', $showcloseitem); if (!isset($showopenitem)) { $showopenitem = 'n'; } $smarty->assign_by_ref('showopenitem', $showopenitem); if (!isset($showpagination)) { $showpagination = 'y'; } $smarty->assign_by_ref('showpagination', $showpagination); if (!isset($sortchoice)) { $sortchoice = ''; } else { foreach ($sortchoice as $i=>$sc) { $sc = explode('|', $sc); $sortchoice[$i] = array('value'=>$sc[0], 'label'=>empty($sc[1])?$sc[0]: $sc[1]); } } $smarty->assign_by_ref('sortchoice', $sortchoice); if (!isset($status)) { $status = 'o'; } $tr_status = $status; $smarty->assign_by_ref('tr_status', $tr_status); if (!isset($list_mode)) { $list_mode = 'y'; } $smarty->assign_by_ref('list_mode', $list_mode); if (!isset($showcreated)) { $showcreated = $tracker_info['showCreated']; } $smarty->assign_by_ref('showcreated', $showcreated); if (!isset($showlastmodif)) { $showlastmodif = $tracker_info['showLastModif']; } $smarty->assign_by_ref('showlastmodif', $showlastmodif); if (!isset($more)) $more = 'n'; $smarty->assign_by_ref('more', $more); if (!isset($moreurl)) $moreurl = 'tiki-view_tracker.php'; $smarty->assign_by_ref('moreurl', $moreurl); if (!isset($url)) $url = ''; $smarty->assign_by_ref('url', $url); if (!isset($export)) $export = 'n'; $smarty->assign_by_ref('export', $export); if (!empty($ldelim)) $smarty->left_delimiter = $ldelim; if (!empty($rdelim)) $smarty->right_delimiter = $rdelim; if (isset($checkbox)) { $check = array('ix' => -1, 'type' => 'checkbox'); $cb = explode('/', $checkbox); if (isset($cb[0])) $check['fieldId'] = $cb[0]; if (isset($cb[1])) $check['name'] = $cb[1]; if (isset($cb[2])) $check['title'] = $cb[2]; if (isset($cb[3])) $check['submit'] = $cb[3]; if (isset($cb[4])) $check['action'] = $cb[4]; if (isset($cb[5])) $check['tpl'] = $cb[5]; if (isset($cb[6]) && $cb[6] == 'radio') { $check['radio'] = 'y'; $check['type'] = 'radio'; } if (isset($cb[6]) && $cb[6] == 'dropdown') $check['dropdown'] = 'y'; // is this actually used? $smarty->assign_by_ref('checkbox', $check); } if (isset($_REQUEST["tr_sort_mode$iTRACKERLIST"])) { $sort_mode = $_REQUEST["tr_sort_mode$iTRACKERLIST"]; } elseif (!isset($sort_mode)) { if (!empty($tracker_info['defaultOrderKey'])) { if ($tracker_info['defaultOrderKey'] == -1) $sort_mode = 'lastModif'; elseif ($tracker_info['defaultOrderKey'] == -2) $sort_mode = 'created'; elseif ($tracker_info['defaultOrderKey'] == -3) $sort_mode = 'itemId'; else $sort_mode = 'f_'.$tracker_info['defaultOrderKey']; if (isset($tracker_info['defaultOrderDir'])) { $sort_mode.= "_".$tracker_info['defaultOrderDir']; } else { $sort_mode.= "_asc"; } } else { $sort_mode = ''; } } elseif ($sort_mode != 'created_asc' && $sort_mode != 'lastModif_asc' && $sort_mode != 'created_desc' && $sort_mode != 'lastModif_desc' && !preg_match('/f_[0-9]+_(asc|desc)/', $sort_mode)) { return tra('Incorrect param').' sort_mode'; } $tr_sort_mode = $sort_mode; $smarty->assign_by_ref('tr_sort_mode', $tr_sort_mode); if (isset($compute)) { $max = -1; // to avoid confusion compute is on what you see or all the items } elseif (!isset($max)) { $max = $prefs['maxRecords']; } if (isset($_REQUEST['tr_offset']) && (!isset($forceoffset) || $forceoffset == 'n')) { $tr_offset = $_REQUEST['tr_offset']; } else if (isset($offset) && $offset >= 0) { $tr_offset = $offset; } else { $tr_offset = 0; } $smarty->assign_by_ref('tr_offset', $tr_offset); $tr_initial = ''; if ($showinitials == 'y') { if (isset($_REQUEST['tr_initial'])) { //$query_array['tr_initial'] = $_REQUEST['tr_initial']; $tr_initial = $_REQUEST['tr_initial']; } $smarty->assign('initials', explode(' ', 'a b c d e f g h i j k l m n o p q r s t u v w x y z')); } $smarty->assign_by_ref('tr_initial', $tr_initial); if ((isset($view) && $view == 'user') || isset($view_user) || isset($_REQUEST['tr_user'])) { if ($f = $trklib->get_field_id_from_type($trackerId, 'u', '1%')) { $filterfield[] = $f; $filtervalue[] = ''; if (!isset($_REQUEST['tr_user'])) { $exactvalue[] = isset($view)? (empty($user)?'Anonymous':$user): $view_user; } else { $exactvalue[] = $_REQUEST['tr_user']; $smarty->assign_by_ref('tr_user', $exactvalue); } if ($tracker_info['writerCanModify'] == 'y') { $skip_status_perm_check = true; } } } if (isset($view) && $view == 'page' && isset($_REQUEST['page'])) { if (($f = $trklib->get_field_id_from_type($trackerId, 'k', '1%')) || ($f = $trklib->get_field_id_from_type($trackerId, 'k', '%,1%')) || ($f = $trklib->get_field_id_from_type($trackerId, 'k'))) { $filterfield[] = $f; $filtervalue[] = ''; $exactvalue[] = $_REQUEST['page']; } } if (isset($view) && $view == 'ip') { if ($f = $trklib->get_field_id_from_type($trackerId, 'I', '1%')) { $filterfield[] = $f; $filtervalue[] = ''; $ip = $tikilib->get_ip_address(); $exactvalue[] = $ip; } } if (!isset($filtervalue)) { $filtervalue = ''; } else { foreach ($filtervalue as $i=>$f) { if ($f == '#user') { $filtervalue[$i] = $user; } else if ($f == '#default_group') { $filtervalue[$i] = $_SESSION['u_info']['group']; } } } if (!isset($exactvalue)) { $exactvalue = ''; } else { foreach ($exactvalue as $i=>$f) { if ($f == '#user') { $exactvalue[$i] = $user; } } } if (!empty($_REQUEST['itemId']) && (empty($ignoreRequestItemId) || $ignoreRequestItemId != 'y') ) { $itemId = $_REQUEST['itemId']; } if (isset($itemId)) { if (is_string($itemId) && strstr($itemId, ':')) { // JB Tiki7: This doesn't quite make sense as itemId is an array $itemId = explode(':', $itemId); // Probably just some redundant code TOKIL } $filter['tti.`itemId`'] = $itemId; } $newItemRateField = false; $status_types = $trklib->status_types(); $smarty->assign('status_types', $status_types); if (!isset($filterfield)) { $filterfield = ''; } else { if (!empty($filterfield)) { if (!empty($filtervalue)) { $fvs = $filtervalue; unset($filtervalue); for ($i = 0, $count_ff = count($filterfield); $i < $count_ff; ++$i) { $filtervalue[] = isset($fvs[$i])? $fvs[$i]:''; } } if (!empty($exactvalue)) { $evs = $exactvalue; unset($exactvalue); for ($i = 0, $count_ff2 = count($filterfield); $i < $count_ff2; ++$i) { if (isset($evs[$i])) { if (is_array($evs[$i])) { // already processed $exactvalue[] = $evs[$i]; } elseif (preg_match('/(not)?categories\(([0-9]+)\)/', $evs[$i], $matches)) { global $categlib; include_once('lib/categories/categlib.php'); if (ctype_digit($matches[2]) && $matches[2] > 0) { $filter = array('identifier'=>$matches[2], 'type'=>'descendants'); } else { $filter = NULL; } $categs = $categlib->getCategories($filter, true, false); $l = array($matches[2]); foreach ($categs as $cat) { $l[] = $cat['categId']; } if (empty($matches[1])) { $exactvalue[] = $l; } else { $exactvalue[] = array('not'=>$l); } } elseif (preg_match('/(not)?preference\((.*)\)/', $evs[$i], $matches)) { if (empty($matches[1])) { $exactvalue[] = $prefs[$matches[2]]; } else { $exactvalue[] = array('not'=>$prefs[$matches[2]]); } } elseif (preg_match('/(not)?field\(([0-9]+)(,([0-9]+|user)(,([0-9]+))?)?\)/', $evs[$i], $matches)) { // syntax field(fieldId, user, trackerId) or field(fieldId)(need the REQUEST['itemId'] or field(fieldId, itemId) or field(fieldId, user) if (empty($matches[4]) && !empty($_REQUEST['itemId'])) { // user the itemId of the url $matches[4] = $_REQUEST['itemId']; } if (!empty($matches[4]) && $matches[4] == 'user') { if (!empty($matches[6])) { // pick the user item of this tracker $t_i = $trklib->get_tracker($matches[6]); $matches[4] = $trklib->get_user_item($matches[6], $t_i, $user); } elseif ($prefs['userTracker'] == 'y') { //pick the generic user tracker global $userlib; $utid = $userlib->get_tracker_usergroup($user); $matches[4] = $trklib->get_item_id($utid['usersTrackerId'], $utid['usersFieldId'], $user); } } if (!empty($matches[4])) { $l = $trklib->get_item_value(0, $matches[4], $matches[2]); $field = $trklib->get_tracker_field($matches[2]); if ($field['type'] == 'r') { $refItemId = $l; $l = $trklib->get_item_value($field['options_array'][0], $refItemId, $field['options_array'][3]); } } if (empty($matches[1])) { $exactvalue[] = $l; } else { $exactvalue[] = array('not'=>$l); } } elseif (preg_match('/(less|greater|lessequal|greaterequal)\((.+)\)/', $evs[$i], $matches)) { $conv = array('less'=>'<', 'greater'=>'>', 'lessequal'=>'<=', 'greaterequal'=>'>='); $field = $trklib->get_tracker_field($filterfield[$i]); if ($field['type'] == 'f' || $field['type'] == 'j') { if ($matches[2] == 'now') { $matches[2] = $tikilib->now; } elseif (($r = strtotime($matches[2])) !== false) { $matches[2] = $r; } } $exactvalue[] = array($conv[$matches[1]]=>$matches[2]); } elseif (preg_match('/not\((.+)\)/', $evs[$i], $matches)) { $exactvalue[] = array('not' => $matches[1]); } else { $exactvalue[] = $evs[$i]; } } else { $exactvalue[] = ''; } } } } } if ($tiki_p_admin_trackers != 'y' && $perms['tiki_p_view_trackers'] != 'y' && $tracker_info['writerCanModify'] == 'y' && $user && $userCreatorFieldId) { //patch this should be in list_items if ($filterfield != $userCreatorFieldId || (is_array($filterfield) && !in_array($$userCreatorFieldId, $filterfield))) { if (is_array($filterfield)) $filterfield[] = $userCreatorFieldId; elseif (empty($filterfield)) $filterfield = $userCreatorFieldId; else $filterfield = array($filterfield, $fieldId); if (is_array($exactvalue)) $exactvalue[] = $user; elseif (empty($exactvalue)) $exactvalue = $user; else $exactvalue = array($exactvalue, $user); } } if ($tiki_p_admin_trackers != 'y' && $perms['tiki_p_view_trackers'] != 'y' && $user && $groupCreatorFieldId) { if ($filterfield != $groupCreatorFieldId || (is_array($filterfield) && !in_array($groupCreatorFieldId, $filterfield))) { $groups = $userlib->get_user_groups($user); if (is_array($filterfield)) $filterfield[] = $groupCreatorFieldId; elseif (empty($filterfield)) $filterfield = $groupCreatorFieldId; else $filterfield = array($filterfield, $fieldId); if (is_array($exactvalue)) $exactvalue[] = array_merge($exactvalue, $groups); elseif (empty($exactvalue)) $exactvalue = $groups; else $exactvalue = array_merge(array($exactvalue), $groups); global $group;// awful trick - but the filter garantee that the group is ok $smarty->assign_by_ref('ours', $group); $perms = array_merge($perms, $trklib->get_special_group_tracker_perm($tracker_info)); } } for ($i = 0, $count_allf = count($allfields['data']); $i < $count_allf; $i++) { if ($allfields['data'][$i]['type'] == 'C') { $infoComputed = $trklib->get_computed_info($allfields['data'][$i]['options_array'][0], $trackerId, $allfields['data']); if (!empty($infoComputed)) { $allfields['data'][$i] = array_merge($infoComputed, $allfields['data'][$i]); } } elseif ($allfields["data"][$i]['type'] == 'w') { /* keep track of dynamic list items referring to user selectors */ $refFieldId = $allfields["data"][$i]['options_array'][3]; $refField = $trklib->get_tracker_field($refFieldId); if ($refField['type'] == 'u') { $allfields["data"][$i]['type'] = $refField['type']; } } if ((in_array($allfields["data"][$i]['fieldId'], $listfields) or in_array($allfields["data"][$i]['fieldId'], $popupfields))and $allfields["data"][$i]['isPublic'] == 'y') { $passfields["{$allfields["data"][$i]['fieldId']}"] = $allfields["data"][$i]; } if (isset($check['fieldId']) && $allfields["data"][$i]['fieldId'] == $check['fieldId']) { $passfields["{$allfields["data"][$i]['fieldId']}"] = $allfields["data"][$i]; if (!in_array($allfields["data"][$i]['fieldId'], $listfields)) $allfields["data"][$i]['isPublic'] == 'n'; //don't show it $check['ix'] = count($passfields) -1; } if ($allfields["data"][$i]['name'] == 'page' && empty($filterfield) && empty($displayList) && !empty($view) && $view == 'page') { $filterfield = $allfields["data"][$i]['fieldId']; $filtervalue = $_REQUEST['page']; } if (isset($tracker_info['useRatings']) and $tracker_info['useRatings'] == 'y' and $allfields["data"][$i]['type'] == 's' and $allfields["data"][$i]['name'] == 'Rating') { $newItemRateField = $allfields["data"][$i]['fieldId']; } } $smarty->assign_by_ref('filterfield', $filterfield); $smarty->assign_by_ref('filtervalue', $filtervalue); $smarty->assign_by_ref('fields', $passfields); $smarty->assign_by_ref('exactvalue', $exactvalue); $smarty->assign_by_ref('listfields', $listfields); $smarty->assign_by_ref('popupfields', $popupfields); if (!empty($filterfield)) { $urlquery['filterfield'] = is_array($filtervalue) ? implode(':', $filterfield) : $filterfield; if (!is_array($filtervalue)) { $filtervalue = array($filtervalue); } $urlquery['filtervalue'] = is_array($filtervalue) ? implode(':', $filtervalue) : $filtervalue; $urlquery['exactvalue'] = is_array($exactvalue) ? implode(':', $exactvalue) : $exactvalue; $urlquery['trackerId'] = $trackerId; $smarty->assign('urlquery', $urlquery); } else { $smarty->assign('urlquery', ''); } if (!empty($export) && $export != 'n' && $tiki_p_export_tracker == 'y') { $exportUrl = "tiki-tracker-export?trackerId=$trackerId"; if (!empty($fields)) { $exportUrl .= '&displayedFields='.(is_array($fields)? implode(':', $fields): $fields); } if (is_array($filterfield)) { foreach ($filterfield as $i=>$fieldId) { $exportUrl .= "&f_$fieldId="; if (empty($filtervalue[$i])) { $exportUrl .= $exactvalue[$i]; } else { $exportUrl .= $filtervalue[$i]; } } } elseif (!empty($filterfield)) { $exportUrl .= "&f_$filterfield="; if (empty($filtervalue)) $exportUrl .= $exactvalue; else $exportUrl .= $filtervalue; } $smarty->assign('exportUrl', $exportUrl); } if (!empty($_REQUEST['delete'])) { if (($item_info = $trklib->get_item_info($_REQUEST['delete'])) && $trackerId == $item_info['trackerId']) { if ($tiki_p_admin_trackers == 'y' || ($perms['tiki_p_remove_tracker_items'] == 'y' && $item_info['status'] != 'p' && $item_info['status'] != 'c') || ($perms['tiki_p_remove_tracker_items_pending'] == 'y' && $item_info['status'] == 'p') || ($perms['tiki_p_remove_tracker_items_closed'] == 'y' && $item_info['status'] == 'c') ) { $trklib->remove_tracker_item($_REQUEST['delete']); } } } if (!empty($_REQUEST['closeitem'])) { if (($item_info = $trklib->get_item_info($_REQUEST['closeitem'])) && $trackerId == $item_info['trackerId']) { if ($tiki_p_admin_trackers == 'y' || ($perms['tiki_p_modify_tracker_items'] == 'y' && $item_info['status'] != 'p' && $item_info['status'] != 'c') || ($perms['tiki_p_modify_tracker_items_pending'] == 'y' && $item_info['status'] == 'p') || ($perms['tiki_p_modify_tracker_items_closed'] == 'y' && $item_info['status'] == 'c') ) { $trklib->change_status(array(array('itemId' => $_REQUEST['closeitem'])), 'c'); } } } if (!empty($_REQUEST['penditem'])) { if (($item_info = $trklib->get_item_info($_REQUEST['penditem'])) && $trackerId == $item_info['trackerId']) { if ($tiki_p_admin_trackers == 'y' || ($perms['tiki_p_modify_tracker_items'] == 'y' && $item_info['status'] != 'p' && $item_info['status'] != 'c') || ($perms['tiki_p_modify_tracker_items_pending'] == 'y' && $item_info['status'] == 'p') || ($perms['tiki_p_modify_tracker_items_closed'] == 'y' && $item_info['status'] == 'c') ) { $trklib->change_status(array(array('itemId' => $_REQUEST['penditem'])), 'p'); } } } if (!empty($_REQUEST['openitem'])) { if (($item_info = $trklib->get_item_info($_REQUEST['openitem'])) && $trackerId == $item_info['trackerId']) { if ($tiki_p_admin_trackers == 'y' || ($perms['tiki_p_modify_tracker_items'] == 'y' && $item_info['status'] != 'p' && $item_info['status'] != 'c') || ($perms['tiki_p_modify_tracker_items_pending'] == 'y' && $item_info['status'] == 'p') || ($perms['tiki_p_modify_tracker_items_closed'] == 'y' && $item_info['status'] == 'c') ) { $trklib->change_status(array(array('itemId' => $_REQUEST['openitem'])), 'o'); } } } if (!empty($calendarfielddate)) { global $calendarlib; include_once('lib/calendar/calendarlib.php'); $focusDate = empty($_REQUEST['todate'])? $tikilib->now: $_REQUEST['todate']; $focus = $calendarlib->infoDate($focusDate); if (!empty($calendardelta)) { if ($calendardelta[0] == '-') { $focus = $calendarlib->focusPrevious($focus, str_replace('-', '', $calendardelta)); } else { $focus = $calendarlib->focusNext($focus, str_replace('+', '', $calendardelta)); } } $calendarlib->focusStartEnd($focus, $calendarviewmode, $calendarbeginmonth, $startPeriod, $startNextPeriod); $cell = $calendarlib->getTableViewCells($startPeriod, $startNextPeriod, $calendarviewmode, $calendarlib->firstDayofWeek($user)); $filterfield[] = $calendarfielddate[0]; $filtervalue[] = ''; $exactvalue[] = array('>=' => $startPeriod['date']); $filterfield[] = empty($calendarfielddate[1])?$calendarfielddate[0]: $calendarfielddate[1]; $filtervalue[] = ''; $exactvalue[] = array('<' => $startNextPeriod['date']); } if (count($passfields)) { // Optimization: Group category fields using AND logic indicated by sub-array $catfilters = array(); $catfiltervalue = array(); $catfilternotvalue = array(); if (!empty($filterfield)) { foreach ($filterfield as $k => $ff) { $filterfieldinfo = $trklib->get_tracker_field($ff); if ($filterfieldinfo['type'] == 'e') { $catfilters[] = $k; if (!empty($filtervalue[$k]) && empty($exactvalue[$k]) ) { // Some people use filtervalue instead of exactvalue for category filters $exactvalue[$k] = $filtervalue[$k]; for ($i = 0; $i < $k; $i++) { if (!isset($exactvalue[$i])) { $exactvalue[$i] = ''; } } } if (array_key_exists('not', array($exactvalue[$k]))) { $catfilternotfield[0] = $ff; $catfilternotvalue[] = array($exactvalue[$k]); } else { $catfilterfield[0] = $ff; $catfiltervalue[] = array($exactvalue[$k]); } } } } if ($catfilters) { foreach ($catfilters as $cf) { unset($filterfield[$cf]); unset($exactvalue[$cf]); } if ($catfiltervalue) { // array_merge is used because it reindexes $filterfield = array_merge($filterfield, $catfilterfield); $exactvalue = array_merge($exactvalue, array($catfiltervalue)); } if ($catfilternotvalue) { $filterfield = array_merge($filterfield, $catfilternotfield); $exactvalue[] = array('not' => $catfilternotvalue); } } // End Optimization $items = $trklib->list_items( $trackerId, $tr_offset, $max, $tr_sort_mode, $passfields, (!empty($calendarfielddate) ? null : $filterfield), $filtervalue, $tr_status, $tr_initial, $exactvalue, $filter, $allfields, $skip_status_perm_check ); if (isset($silent) && $silent == 'y' && empty($items['cant'])) { return; } if ($items['cant'] == 1 && isset($goIfOne) && ($goIfOne == 'y' || $goIfOne == 1)) { header('Location: tiki-view_tracker_item.php?itemId='.$items['data'][0]['itemId'].'&trackerId='.$items['data'][0]['trackerId']); die; } if ($newItemRateField && !empty($items['data'])) { foreach ($items['data'] as $f=>$v) { $items['data'][$f]['my_rate'] = $tikilib->get_user_vote("tracker.".$trackerId.'.'.$items['data'][$f]['itemId'], $user); } } if ($tracker_info['useComments'] == 'y' && $tracker_info['showComments'] == 'y') { foreach ($items['data'] as $itkey=>$oneitem) { $items['data'][$itkey]['comments'] = $trklib->get_item_nb_comments($items['data'][$itkey]['itemId']); } } if ($tracker_info['useAttachments'] == 'y' && $tracker_info['showAttachments'] == 'y') { foreach ($items["data"] as $itkey=>$oneitem) { $res = $trklib->get_item_nb_attachments($items["data"][$itkey]['itemId']); $items["data"][$itkey]['attachments'] = $res['attachments']; } } if (!empty($compute) && !empty($items['data'])) { $fs = preg_split('/ *: */', $compute); foreach ($fs as $fieldId) { if (strstr($fieldId, "/")) { list($fieldId, $oper) = preg_split('/ *\/ */', $fieldId); $oper = strtolower($oper); if ($oper == 'average') { $oper = 'avg'; } elseif ($oper != 'sum' && $oper != 'avg') { $oper = 'sum'; } } else { $oper = 'sum'; } foreach ($items['data'] as $i=>$item) { foreach ($item['field_values'] as $field) { if ($field['fieldId'] == $fieldId) { if (preg_match('/^ *$/', $field['value']) || !is_numeric($field['value'])) $amount[$i] = '0'; else $amount[$i] = $field['value']; break; } } } eval('$value='.implode('+', $amount).';'); if ($oper == 'avg') $value = round($value / count($amount)); $computedFields[$fieldId][] = array_merge(array('computedtype' => 'n', 'operator'=>$oper, 'value'=>$value), $passfields[$fieldId]); } $smarty->assign_by_ref('computedFields', $computedFields); } else { $smarty->assign('computedFields', ''); } if (!empty($calendarfielddate)) { foreach ($items['data'] as $i => $item) { if (!empty($wiki)) { $smarty->assign('fields', $item['field_values']); $smarty->assign('item', $item); $smarty->assign('wiki', "wiki:$wiki"); $smarty->assign('showpopup', 'n'); $items['data'][$i]['over'] = $smarty->fetch('tracker_pretty_item.tpl'); } if (!empty($tplwiki)) { $smarty->assign('fields', $item['field_values']); $smarty->assign('item', $item); $smarty->assign('wiki', "tplwiki:$tplwiki"); $smarty->assign('showpopup', 'n'); $items['data'][$i]['over'] = $smarty->fetch('tracker_pretty_item.tpl'); } if (empty($items['data'][$i]['over'])) { $items['data'][$i]['over'] = $trklib->get_isMain_value($trackerId, $item['itemId']); } $items['data'][$i]['visible'] = 'y'; } $trklib->fillTableViewCell($items['data'], $calendarfielddate, $cell); $smarty->assign('cell', $cell); $smarty->assign('show_calendar_module', 'y'); $calendarlib->getDayNames($calendarlib->firstDayofWeek($user), $daysnames, $daysnames_abr); $smarty->assign('daysnames_abr', $daysnames_abr); $smarty->assign('focusmonth', TikiLib::date_format("%m", $focusDate)); $smarty->assign('module_params', array('viewmode'=>'n', 'showaction'=>'n', 'notitle'=>empty($calendartitle)?'y':'n', 'title'=>$calendartitle, 'viewnavbar' => $calendarviewnavbar, 'decorations'=> empty($calendartitle)?'n':'y')); $smarty->assign('tpl_module_title', tra($calendartitle)); $smarty->assign('now', $tikilib->now); $smarty->assign('calendarViewMode', $calendarviewmode); $smarty->assign('viewmodelink', $calendarviewmode); $smarty->assign('viewmode', $calendarviewmode); $focus_prev = $calendarlib->focusPrevious($focus, $calendarviewmode); $smarty->assign('focus_prev', $focus_prev['date']); $focus_next = $calendarlib->focusNext($focus, $calendarviewmode); $smarty->assign('focus_next', $focus_next['date']); $smarty->assign('daystart', $startPeriod['date']); $dayend = $calendarlib->infoDate($startNextPeriod['date']-1); $smarty->assign('dayend', $dayend['date']); $smarty->assign('today', TikiLib::make_time(0, 0, 0, TikiLib::date_format('%m'), TikiLib::date_format('%d'), TikiLib::date_format('%Y'))); $smarty->assign('sticky_popup', $calendarstickypopup); $smarty->assign('calendar_popup', $calendarpopup); $smarty->assign('showpopup', 'n'); global $headerlib; include_once('lib/headerlib.php'); $headerlib->add_cssfile('css/calendar.css', 20); return $smarty->fetch('modules/mod-calendar_new.tpl'); } if (!empty($wiki)) { $tpl = "wiki:$wiki"; } elseif (!empty($tplwiki)) { $tpl = "tplwiki:$tplwiki"; } elseif (empty($tpl)) { $tpl = ''; } if (!empty($tpl)) $smarty->security = true; $smarty->assign('tpl', $tpl); if (!empty($itemId) && $showpagination == 'y' && !empty($_REQUEST['cant'])) { $smarty->assign('max', 1); $smarty->assign('count_item', $_REQUEST['cant']); $smarty->assign('offset_arg', 'reloff'); $smarty->assign('tr_offset', $_REQUEST['reloff']); } else { $smarty->assign_by_ref('max', $max); $smarty->assign_by_ref('item_count', $items['cant']); $smarty->assign_by_ref('count_item', $items['cant']); $smarty->assign('offset_arg', 'tr_offset'); } $smarty->assign_by_ref('items', $items["data"]); $smarty->assign('daformat', $tikilib->get_long_date_format()." ".tra("at")." %H:%M"); if (!empty($params['googlemap']) && $params['googlemap'] == 'y') { $smarty->assign('trackerlistmapview', true); $smarty->assign('trackerlistmapname', "trackerlistgmap_$iTRACKERLIST"); // Check for custom bubble text $unlimitedallfields = $trklib->list_tracker_fields($trackerId); $markerfields = array(); foreach ($unlimitedallfields["data"] as $f) { if ($f["type"] == 'G' && $f["options_array"][0] == 'y' && !empty($f["options_array"][1])) { $markerfields = explode('|', $f["options_array"][1]); break; } } // Generate Google map plugin data if (!empty($params["googlemapicon"])) { $googlemapicon = $params["googlemapicon"]; } else { $googlemapicon = ''; } global $gmapobjectarray; $gmapobjectarray = array(); foreach ($items["data"] as $i) { if (!empty($params["url"])) { $href = str_replace('itemId', $i["itemId"], $params["url"]); } else { $href = 'tiki-view_tracker_item.php?itemId=' . $i["itemId"]; } $markertext = ''; $markertitle = $i["value"]; foreach ($markerfields as $k => $m) { foreach ($i["field_values"] as $f) { if ($f["fieldId"] == $m) { if ($k == 0 && !empty($f["value"])) { $markertitle = preg_replace("/[\r\n|\r|\n]/", "<br />", htmlspecialchars($f["value"])); } elseif (!empty($f["value"])) { if ($markertext) { $markertext .= '<br /><br />'; } $markertext .= preg_replace("/[\r\n|\r|\n]/", "<br />", htmlspecialchars($f["value"])); } break; } } } $gmapobjectarray[] = array('type' => 'trackeritem', 'id' => $i["itemId"], 'title' => $markertitle, 'href' => $href, 'icon' => $googlemapicon, 'text' => $markertext, ); } } else { $smarty->assign('trackerlistmapview', false); } $tracker = $trklib->get_tracker($trackerId, 0, -1); /*foreach ($query_array as $k=>$v) { if (!is_array($v)) { //only to avoid an error: eliminate the params that are not simple (ex: if you have in the same page a tracker list plugin and a tracker plugin, filling the tracker plugin interfers with the tracker list. In any case this is buggy if two tracker list plugins in the same page and if one needs the query value.... $quarray[] = urlencode($k) ."=". urlencode($v); } } if (is_array($quarray)) { $query_string = implode("&",$quarray); } else { $quering_string = ''; } $smarty->assign('query_string', $query_string); */ if (!$tracker) { $smarty->assign('msg', tra("Error in tracker ID")); return $smarty->fetch("error_raw.tpl"); } else { $save_fc = null; if (!empty($wiki) && $params['force_compile'] === 'y') { // some pretty trackers need to compile fresh for each item $save_fc = $smarty->force_compile; $smarty->force_compile = true; } //this options preloads the javascript for displaying sheets if (!empty($displaysheet) && $displaysheet == 'y') { $headerlib = TikiLib::lib("header"); $sheetlib = TikiLib::lib("sheet"); $sheetlib->setup_jquery_sheet(); $headerlib->add_jq_onready( '$("div.trackercontainer").sheet($.extend($.sheet.tikiOptions,{ editable:false, buildSheet: true, minSize: {rows: 0, cols: 0} }));' ); $smarty->assign('displaysheet', 'true'); } //this method sets up the sheet just like it would for jquery.sheet, but assumes that the javascript will be handled elsewere if (!empty($tableassheet) && $tableassheet == 'y') { $smarty->assign('tableassheet', 'true'); } $smarty->assign('context', $params); try { $str = $smarty->fetch('wiki-plugins/wikiplugin_trackerlist.tpl'); } catch (SmartyException $e) { $str = $e->getMessage(); } if ($save_fc !== null) { $smarty->force_compile = $save_fc; // presumably will be false but put it back anyway } return $str; } } else { $smarty->assign('msg', tra("No field indicated")); return $smarty->fetch("error_raw.tpl"); } } return $back; }
$viewstart_d = Date_Calc::daysInMonth($viewstart_m, $viewstart_y) - ($TmpWeekday - 1); $viewstart = $tikilib->make_time(0, 0, 0, $viewstart_m, $viewstart_d, $viewstart_y); } } // this is the last day of $focus_month if ($viewlist == 'list' && $prefs['calendar_list_begins_focus'] == 'y') { $df = $focus_day; } else { $df = 1; } if ($calendarViewMode['casedefault'] == 'month') { $viewend = $tikilib->make_time(0, 0, 0, $focus_month + 1, $df, $focus_year); } elseif ($calendarViewMode['casedefault'] == 'quarter') { $viewend = $tikilib->make_time(0, 0, 0, $focus_month + 3, $df, $focus_year); } elseif ($calendarViewMode['casedefault'] == 'semester') { $viewend = TikiLib::make_time(0, 0, 0, $focus_month + 6, $df, $focus_year); } elseif ($calendarViewMode['casedefault'] == 'year') { $viewend = $tikilib->make_time(0, 0, 0, 1, $df, $focus_year + 1); } else { $viewend = $tikilib->make_time(0, 0, 0, $focus_month + 1, 0, $focus_year); } $viewend -= 1; $dayend = $viewend; $TmpWeekday = TikiLib::date_format("%w", $viewend); if ($viewlist != 'list') { //$viewend += (6 - $TmpWeekday) * $d; $viewend = $tikilib->make_time(23, 59, 59, TikiLib::date_format("%m", $viewend), TikiLib::date_format("%d", $viewend) + (6 - $TmpWeekday), TikiLib::date_format("%Y", $viewend)); } // ISO weeks --- kinda mangled because ours begin on Sunday... $firstweek = TikiLib::date_format("%U", $viewstart + $d); $lastweek = TikiLib::date_format("%U", $viewend);
function coho_get_unix($itemtimeHM, $itemdateUnix) { $tmp = str_pad($itemtimeHM, 4, "0", STR_PAD_LEFT); $itemhour = substr($tmp, 0, 2); $itemminute = substr($tmp, -2); $itemdate = TikiLib::date_format2('Y/m/d', $itemdateUnix); $itemdate = explode("/", $itemdate); $unixtime = TikiLib::make_time($itemhour, $itemminute, 0, $itemdate[1], $itemdate[2], $itemdate[0]); return $unixtime; }
<?php $section = 'calendar'; require_once 'tiki-setup.php'; $jumpto = TikiLib::make_time(0, 0, 0, $_REQUEST['jumpto_Month'], $_REQUEST['jumpto_Day'], $_REQUEST['jumpto_Year']); $url = "tiki-calendar.php?todate=" . $jumpto; header('location: tiki-calendar.php?todate=' . $jumpto); exit;
function quiz_data_load() { global $_REQUEST; $quiz_data = array(); foreach ($_REQUEST as $key => $val) { if (preg_match("/^quiz_/", $key)) { $k = preg_replace("/^quiz_([.]*)/", "\$1", $key); $quiz_data[$k] = $val; } } if ($quiz_data["online"] == "online") { $quiz_data["online"] = "y"; } else { if ($quiz_data["online"] == "offline") { $quiz_data["online"] = "n"; } } $quiz_data["datePub"] = TikiLib::make_time($quiz_data["publish_Hour"], $quiz_data["publish_Minute"], 0, $quiz_data["publish_Month"], $quiz_data["publish_Day"], $quiz_data["publish_Year"]); $quiz_data["dateExp"] = TikiLib::make_time($quiz_data["expire_Hour"], $quiz_data["expire_Minute"], 0, $quiz_data["expire_Month"], $quiz_data["expire_Day"], $quiz_data["expire_Year"]); $fields = array('nQuestion', 'shuffleAnswers', 'shuffleQuestions', 'multiSession', 'additionalQuestions', 'limitDisplay', 'timeLimited', 'canRepeat', 'additionalQuestions', 'forum'); foreach ($fields as $field) { fetchYNOption($quiz_data, $quiz_data, $field); // echo '$quiz_data["'.$field.'"] = '.$quiz_data[$field]."<br>"; } return $quiz_data; }
$save = $_POST['save']; // Take care of timestamps dates coming from jscalendar if (isset($save['date_start']) || isset($save['date_end'])) { $_REQUEST['start_date_Month'] = TikiLib::date_format("%m", $save['date_start']); $_REQUEST['start_date_Day'] = TikiLib::date_format("%d", $save['date_start']); $_REQUEST['start_date_Year'] = TikiLib::date_format("%Y", $save['date_start']); $_REQUEST['end_date_Month'] = TikiLib::date_format("%m", $save['date_end']); $_REQUEST['end_date_Day'] = TikiLib::date_format("%d", $save['date_end']); $_REQUEST['end_date_Year'] = TikiLib::date_format("%Y", $save['date_end']); } $save['start'] = TikiLib::make_time($_REQUEST['start_Hour'], $_REQUEST['start_Minute'], 0, $_REQUEST['start_date_Month'], $_REQUEST['start_date_Day'], $_REQUEST['start_date_Year']); if ($save['end_or_duration'] == 'duration') { $save['duration'] = max(0, $_REQUEST['duration_Hour'] * 60 * 60 + $_REQUEST['duration_Minute'] * 60); $save['end'] = $save['start'] + $save['duration']; } else { $save['end'] = TikiLib::make_time($_REQUEST['end_Hour'], $_REQUEST['end_Minute'], 0, $_REQUEST['end_date_Month'], $_REQUEST['end_date_Day'], $_REQUEST['end_date_Year']); $save['duration'] = max(0, $save['end'] - $save['start']); } } if (isset($_POST['act'])) { if (empty($save['user'])) { $save['user'] = $user; } $newcalid = $save['calendarId']; if (empty($save['calitemId']) and $caladd["{$newcalid}"]['tiki_p_add_events'] or !empty($save['calitemId']) and $caladd["{$newcalid}"]['tiki_p_change_events']) { if (empty($save['name'])) { $save['name'] = tra("event without name"); } $calendarlib->set_item($user, $save['calitemId'], $save); header('Location: tiki-calendar.php'); die;
$orderat = implode(',', $showlist); if (count($popupinfo)) { $orderat .= '|' . implode(',', $popupinfo); } $tracker_options["orderAttachments"] = $orderat; } if (isset($_REQUEST["useExplicitNames"]) && ($_REQUEST["useExplicitNames"] == 'on' or $_REQUEST["useExplicitNames"] == 'y')) { $tracker_options["useExplicitNames"] = 'y'; } else { $tracker_options["useExplicitNames"] = 'n'; } if (isset($_REQUEST['start']) && $_REQUEST['start'] == 'on') { $tracker_options['start'] = TikiLib::make_time($_REQUEST["start_Hour"], $_REQUEST["start_Minute"], 0, $_REQUEST["start_Month"], $_REQUEST["start_Day"], $_REQUEST["start_Year"]); } if (isset($_REQUEST['end']) && $_REQUEST['end'] == 'on') { $tracker_options['end'] = TikiLib::make_time($_REQUEST["end_Hour"], $_REQUEST["end_Minute"], 0, $_REQUEST["end_Month"], $_REQUEST["end_Day"], $_REQUEST["end_Year"]); } if (isset($_REQUEST['doNotShowEmptyField']) && ($_REQUEST['doNotShowEmptyField'] == 'on' || $_REQUEST['doNotShowEmptyField'] == 'y')) { $tracker_options['doNotShowEmptyField'] = 'y'; } else { $tracker_options['doNotShowEmptyField'] = 'n'; } if (isset($_REQUEST['showPopup'])) { $tracker_options['showPopup'] = $_REQUEST['showPopup']; } else { $tracker_options['showPopup'] = ''; } $_REQUEST["trackerId"] = $trklib->replace_tracker($_REQUEST["trackerId"], $_REQUEST["name"], $_REQUEST["description"], $tracker_options, $_REQUEST["descriptionIsParsed"] ? 'y' : ''); $logslib->add_log('admintrackers', 'changed or created tracker ' . $_REQUEST["name"]); $cat_desc = $_REQUEST["description"]; $cat_name = $_REQUEST["name"];
} else { $smarty->assign('spellcheck', 'n'); } } $smarty->assign('parsed_body', $parsed_body); $smarty->assign('parsed_heading', $parsed_heading); $smarty->assign('body', $body); $smarty->assign('heading', $heading); } // Pro if (isset($_REQUEST["save"]) || isset($_REQUEST["submit"])) { check_ticket('edit-submission'); include_once "lib/imagegals/imagegallib.php"; # convert from the displayed 'site' time to UTC time $publishDate = TikiLib::make_time($_REQUEST["publish_Hour"], $_REQUEST["publish_Minute"], 0, $_REQUEST["publish_Month"], $_REQUEST["publish_Day"], $_REQUEST["publish_Year"]); $expireDate = TikiLib::make_time($_REQUEST["expire_Hour"], $_REQUEST["expire_Minute"], 0, $_REQUEST["expire_Month"], $_REQUEST["expire_Day"], $_REQUEST["expire_Year"]); if (isset($_REQUEST["allowhtml"]) && $_REQUEST["allowhtml"] == "on") { $body = $_REQUEST["body"]; $heading = $_REQUEST["heading"]; } else { $body = strip_tags($_REQUEST["body"], '<a><pre><p><img><hr>'); $heading = strip_tags($_REQUEST["heading"], '<a><pre><p><img><hr>'); } if (isset($_REQUEST["useImage"]) && $_REQUEST["useImage"] == 'on') { $useImage = 'y'; } else { $useImage = 'n'; } if (isset($_REQUEST["isfloat"]) && $_REQUEST["isfloat"] == 'on') { $isfloat = 'y'; } else {
function dostime2unixtime($dosdate, $dostime) { $mday = $dosdate & 0x1f; $month = ($dosdate >> 5) & 0x0f; $year = 1980 + (($dosdate >> 9) & 0x7f); $sec = ($dostime & 0x1f) * 2; $min = ($dostime >> 5) & 0x3f; $hour = ($dostime >> 11) & 0x1f; return TikiLib::make_time($hour, $min, $sec, $month, $mday, $year); }
public function fillTableViewCell($items, $fieldIds, &$cell) { $smarty = TikiLib::lib('smarty'); if (empty($items)) { return; } $iStart = -1; $iEnd = -1; foreach ($items[0]['field_values'] as $i => $field) { if ($field['fieldId'] == $fieldIds[0]) { $iStart = $i; $iEnd = $i; //$end can be the same as start } elseif (count($fieldIds) > 1 && $field['fieldId'] == $fieldIds[1]) { $iEnd = $i; } } foreach ($cell as $i => $line) { foreach ($line as $j => $day) { if (!$day['focus']) { continue; } $overs = array(); foreach ($items as $item) { $endDay = TikiLib::make_time(23, 59, 59, $day['month'], $day['day'], $day['year']); if (count($fieldIds) == 1 && $item['field_values'][$iStart]['value'] >= $day['date'] && $item['field_values'][$iStart]['value'] <= $endDay || count($fieldIds) > 1 && $item['field_values'][$iStart]['value'] <= $endDay && $item['field_values'][$iEnd]['value'] >= $day['date']) { $cell[$i][$j]['items'][] = $item; $overs[] = preg_replace('|(<br /> *)*$|m', '', $item['over']); } } if (!empty($overs)) { $smarty->assign_by_ref('overs', $overs); $cell[$i][$j]['over'] = $smarty->fetch('tracker_calendar_over.tpl'); } } } //echo '<pre>'; print_r($cell); echo '</pre>'; }
} else { $viewstart_d -= $wd; } $viewstart = TikiLib::make_time(0, 0, 0, $viewstart_m, $viewstart_d, $viewstart_y); } $daystart = $viewstart; // then go to the end of the week for $viewend // $viewend = $viewstart + (7 * $d) - 1; $viewend = TikiLib::make_time(0, 0, 0, TikiLib::date_format("%m", $viewstart), TikiLib::date_format("%d", $viewstart) + 7, TikiLib::date_format("%Y", $viewstart)) - 1; $dayend = $viewend; $numberofweeks = 0; } else { $firstweek = $currentweek; $lastweek = $currentweek; // $viewend = $viewstart + ($d - 1); $viewend = TikiLib::make_time(0, 0, 0, TikiLib::date_format("%m", $viewstart), TikiLib::date_format("%d", $viewstart) + 1, TikiLib::date_format("%Y", $viewstart)) - 1; $dayend = $daystart; $weekdays = array(TikiLib::date_format('%w', $focusdate)); $numberofweeks = 0; } $smarty->assign('viewstart', $viewstart); $smarty->assign('viewend', $viewend); $smarty->assign('numberofweeks', $numberofweeks); $smarty->assign('daystart', $daystart); $smarty->assign('dayend', $dayend); $daysnames = array(); if ($firstDayofWeek == 0) { $daysnames[] = tra("Sunday"); } array_push($daysnames, tra("Monday"), tra("Tuesday"), tra("Wednesday"), tra("Thursday"), tra("Friday"), tra("Saturday")); if ($firstDayofWeek != 0) {
$endDate = new TikiDate(); $endDate->setDate($startTime); if ($calendarViewMode['casedefault'] == 'month') { $stopTime = $endDate->addMonths(1); } elseif ($calendarViewMode['casedefault'] == 'quarter') { $stopTime = $endDate->addMonths(3); } elseif ($calendarViewMode['casedefault'] == 'semester') { $stopTime = $endDate->addMonths(6); } elseif ($calendarViewMode['casedefault'] == 'year') { $stopTime = $endDate->addMonths(12); } else { $stopTime = $endDate->addMonths(1); } $stopTime = $endDate->getTime(); if (isset($_REQUEST['stop_date_Month'])) { $stopTime = TikiLib::make_time(0, 0, 0, $_REQUEST['stop_date_Month'], $_REQUEST['stop_date_Day'], $_REQUEST['stop_date_Year']); } elseif (isset($_REQUEST["tstop"])) { $stopTime = $_REQUEST["tstop"]; } $calendarIds = array(); if (isset($_REQUEST['calendarIds'])) { $calendarIds = $_REQUEST['calendarIds']; foreach ($calendarIds as $anId) { $smarty->assign('individual_' . $anId, $userlib->object_has_one_permission($anId, 'calendar')); } } else { if (!isset($_REQUEST["calendarId"])) { $_REQUEST["calendarId"] = 0; } else { $smarty->assign('individual_' . $_REQUEST["calendarId"], $userlib->object_has_one_permission($_REQUEST["calendarId"], 'calendar')); }
public function Quiz() { global $user; $userlib = TikiLib::lib('user'); $this->dbFields = array("id", "bDeleted", "timestamp", "nAuthor", "bOnline", "nTaken", "sName", "sDescription", "datePub", "dateExp", "bRandomQuestions", "nRandomQuestions", "bShuffleQuestions", "bShuffleAnswers", "bLimitQuestionsPerPage", "nLimitQuestionsPerPage", "bTimeLimited", "nTimeLimit", "bMultiSession", "bCanRepeat", "nCanRepeat", "sGradingMethod", "sShowScore", "sShowCorrectAnswers", "sPublishStats", "bAdditionalQuestions", "bForum", "sForum", "sPrologue", "sData", "sEpilogue"); $this->id = 0; $this->bDeleted = 0; $this->timestamp = $this->now; $this->nAuthor = $userlib->get_user_id($user); $this->sAuthor = $user; $this->bOnline = 'n'; $this->nTaken = 'n'; $this->sName = ""; $this->sDescription = ""; $this->datePub = $this->now; $this->dateExp = TikiLib::make_time(0, 0, 0, 1, 1, TikiLib::date_format("%Y") + 10); $this->bRandomQuestions = "y"; $this->nRandomQuestions = 10; $this->nShuffleQuestions = "y"; $this->bShuffleAnswers = "y"; $this->bLimitQuestionsPerPage = "y"; $this->nLimitQuestionsPerPage = 1; $this->bTimeLimited = "n"; $this->nTimeLimit = "1"; $this->bMultiSession = "n"; $this->bCanRepeat = "y"; $this->nCanRepeat = "unlimited"; $this->sGradingMethod = "machine"; $this->sShowScore = "immediately"; $this->sShowCorrectAnswers = "immediately"; $this->sPublishStats = "immediately"; $this->bAdditionalQuestions = "n"; $this->forum = "n"; $this->forumName = ""; $this->prologue = ""; $this->epilogue = ""; }
if (isset($le['result']['organizers'])) { $host = $le['result']['organizers_realname']; } $event_info['visitor'] = $visitor; $event_info['host'] = $host; $event_info['start'] = $guest_start; $event_info['end'] = $guest_end; $printDay[$i]['camping'][] = $event_info; } } } } $smarty->assign('printDay', $printDay); /// visitors are id 6 // we look 5 weeks in the future for this category $long_end_date = TikiLib::make_time(0, 0, 0, $startM, $startD + 35, $startY); $calids = array(); $calids[0] = 6; $listevents = $calendarlib->list_items($calids, $user, $start_date, $long_end_date, 0, -1); $calendarlib->add_coho_recurrence_items($listevents, $calids, $user, $start_date, $long_end_date, 0, -1); $visitors_tmp = array(); $i = 0; foreach ($listevents as $leDay) { foreach ($leDay as $le) { $id = 'c' . $le['calitemId']; if ($id == 'c0') { $id = 'r' . $le['recurrenceId']; } if (!array_key_exists($id, $visitors_tmp)) { $visitors_tmp[$id]['startTimeStamp'] = $le['startTimeStamp']; $visitors_tmp[$id]['endTimeStamp'] = $le['endTimeStamp'];
function list_items_by_day($calIds, $user, $tstart, $tstop, $offset, $maxRecords, $sort_mode = 'start_asc', $find = '', $customs = array()) { global $user, $prefs; $ret = array(); $list = $this->list_raw_items($calIds, $user, $tstart, $tstop, $offset, $maxRecords, $sort_mode, $find, $customs); foreach ($list as $res) { $mloop = TikiLib::date_format("%m", $res['start']); $dloop = TikiLib::date_format("%d", $res['start']); $yloop = TikiLib::date_format("%Y", $res['start']); $dstart = TikiLib::make_time(0, 0, 0, $mloop, $dloop, $yloop); $dend = TikiLib::make_time(0, 0, 0, TikiLib::date_format("%m", $res['end']), TikiLib::date_format("%d", $res['end']), TikiLib::date_format("%Y", $res['end'])); $tstart = TikiLib::date_format("%H%M", $res["start"]); $tend = TikiLib::date_format("%H%M", $res["end"]); for ($i = $dstart; $i <= $dend; $i = TikiLib::make_time(0, 0, 0, $mloop, ++$dloop, $yloop)) { /* $head is in user time */ if ($dstart == $dend) { $head = TikiLib::date_format($prefs['short_time_format'], $res["start"]) . " - " . TikiLib::date_format($prefs['short_time_format'], $res["end"]); } elseif ($i == $dstart) { $head = TikiLib::date_format($prefs['short_time_format'], $res["start"]) . " ..."; } elseif ($i == $dend) { $head = " ... " . TikiLib::date_format($prefs['short_time_format'], $res["end"]); } else { $head = " ... " . tra("continued") . " ... "; } /* $i is timestamp unix of the beginning of a day */ $j = is_array($ret[$i]) ? count($ret[$i]) : 0; $ret[$i][$j] = $res; $ret[$i][$j]['head'] = $head; $ret[$i][$j]['parsedDescription'] = $this->parse_data($res["description"]); $ret[$i][$j]['description'] = str_replace("\n|\r", "", $res["description"]); $ret[$i][$j]['visible'] = 'y'; $ret[$i][$j]['where'] = $res['locationName']; $ret[$i][$j]['show_description'] = 'y'; /* 'time' => $tstart, /* user time */ /* 'end' => $tend, /* user time */ $ret[$i][$j]['group_description'] = $res['name'] . ', ' . $head; } } return $ret; }
/** * @param $tikiobj * @param $user * @param $tstart * @param $tstop * @param $offset * @param $maxRecords * @param string $sort_mode * @param string $find * @return array */ function list_tiki_items($tikiobj, $user, $tstart, $tstop, $offset, $maxRecords, $sort_mode = 'name_desc', $find = '') { global $user; $ret = array(); if (!is_array($tikiobj)) { return $ret; } $tikiobj = array_unique($tikiobj); if (in_array('wiki', $tikiobj)) { $tikiobj[] = 'wiki page'; $tikiobj[] = 'wiki comment'; } foreach ($tikiobj as $type) { if ($type != '' && $type != 'wiki') { $objectType = $type == 'wiki comment' ? 'wiki page' : $type; $result = $this->get_object_cal_infos($type, array($tstart, $tstop, $objectType)); if (is_object($result)) { while ($res = $result->fetchRow()) { if ($res['start'] > 0) { $res['show_description'] = 'y'; $res['visible'] = 'y'; $res['type'] = $type; $dstart = TikiLib::make_time(0, 0, 0, TikiLib::date_format('%m', $res['start']), TikiLib::date_format('%d', $res['start']), TikiLib::date_format('%Y', $res['start'])); $res['time'] = TikiLib::date_format('%H%M', $res['start']); $res['when'] = TikiLib::date_format('%H:%M', $res['start']); $when = '<b>' . $res['when'] . '</b>'; $url_vars = array($res['id'], $res['id2']); switch ($res['type']) { case 'art': $res['description'] = $this->parse_data($res['description']); break; case 'blog': $res['name'] = $res['parent'] . ' :: ' . $res['name']; break; case 'dir': $res['description'] = addslashes($res['dir_url']) . '<br />' . $res['description']; break; case 'forum': if ($res['fid'] > 0) { $url_vars = array($res['fid'], $res['id2'], 'threadId' . $res['id']); } break; case 'gal': $res['description'] = tra('New Image Uploaded by') . ' %s'; break; case 'nl': $res['description'] = tra('New Subscriptions'); $res['head'] = ' ... ' . $res['head']; break; case 'track': $res['description'] = tra('New Item in Tracker'); $res['parent'] = tra('tracker'); break; case 'wiki page': $res['parent'] = 'wiki'; break; } $res['url'] = $this->get_object_url($res['type'], $url_vars); if ($res['user'] != '') { include_once 'lib/smarty_tiki/modifier.username.php'; $res['user'] = smarty_modifier_username($res['user']); if (!strpos($res['description'], '%s')) { $br = $res['description'] == '' ? '' : '<br />'; $res['description'] = '<i>' . tra('by') . ' %s</i>' . $br . $res['description']; } $res['description'] = sprintf($res['description'], $res['user']); } $res['description'] = str_replace(array('"', "\n|\r"), array("'", ''), $res['description']); if ($res['name'] == '') { $res['name'] = $res['id']; } $res['where'] = str_replace("\n|\r", '', addslashes($res['parent'])); if ((!isset($where) || $where == '') && $res['parent'] != '') { $where = ' ' . tra('in') . ' <b>' . $res['where'] . '</b>'; } if ($res['head'] == '') { $res['head'] = $when . $where; } $res['group_description'] = $res['name']; $ret[$dstart][] = $res; unset($where); unset($when); } } } } } return $ret; }
$calRecurrence->setMonthlyWeekday($_REQUEST['monthlyWeekday']); $calRecurrence->setMonthlyWeekNumber($_REQUEST['monthlyWeekNumber']); $calRecurrence->setYearly(false); break; case "yearly": $calRecurrence->setWeekly(false); $calRecurrence->setMonthly(false); $calRecurrence->setMonthlyByWeekday(false); $calRecurrence->setYearly(true); $calRecurrence->setDateOfYear(str_pad($_REQUEST['dateOfYear_month'], 2, '0', STR_PAD_LEFT) . str_pad($_REQUEST['dateOfYear_day'], 2, '0', STR_PAD_LEFT)); break; } $startPeriod = TikiLib::make_time(0, 0, 0, $_REQUEST['startPeriod_Month'], $_REQUEST['startPeriod_Day'], $_REQUEST['startPeriod_Year']); $calRecurrence->setStartPeriod($startPeriod); if ($_REQUEST['endType'] == "dt") { $endPeriod = TikiLib::make_time(0, 0, 0, $_REQUEST['endPeriod_Month'], $_REQUEST['endPeriod_Day'], $_REQUEST['endPeriod_Year']); $calRecurrence->setEndPeriod($endPeriod); } elseif ($_REQUEST['endType'] == "dtneverending") { $endPeriod = 0; $calRecurrence->setEndPeriod($endPeriod); } else { $calRecurrence->setNbRecurrences($_REQUEST['nbRecurrences']); } $calRecurrence->setUser($save['user']); $calRecurrence->save($_REQUEST['affect'] == 'all'); $calendarlib->coho_set_organizer($save['calendarId'], $calRecurrence->getId(), $save['organizers'], $save['guestContact']); // Save the ip at the log for the addition of new calendar items when done by anonymous users if (empty($user) && empty($save['calitemId']) && $caladd["{$newcalid}"]['tiki_p_add_events']) { $logslib->add_log('calendar', 'Recurrent calendar item starting on ' . $startPeriod . ' added to calendar ' . $save['calendarId']); } if (empty($user) && !empty($save['calitemId']) and $caladd["{$newcalid}"]['tiki_p_change_events']) {
$_REQUEST['find'] = ''; } $smarty->assign_by_ref('find', $_REQUEST['find']); $now = $vote_from_date = $vote_to_date = $tikilib->now; if (isset($_REQUEST['which_date'])) { $which_date = $_REQUEST['which_date']; if ($which_date == 'between') { if (!empty($_REQUEST['vote_from_date'])) { $vote_from_date = $_REQUEST['vote_from_date']; } else { $vote_from_date = TikiLib::make_time(0, 0, 0, $_REQUEST['from_Month'], $_REQUEST['from_Day'], $_REQUEST['from_Year']); } if (!empty($_REQUEST['vote_to_date'])) { $vote_to_date = $_REQUEST['vote_to_date']; } else { $vote_to_date = TikiLib::make_time(23, 59, 59, $_REQUEST['to_Month'], $_REQUEST['to_Day'], $_REQUEST['to_Year']); } } $smarty->assign_by_ref('which_date', $which_date); } else { $which_date = ''; } if ($tiki_p_admin == 'y' && !empty($_REQUEST['deletevote']) && !empty($_REQUEST['optionId'])) { $polllib->delete_vote($_REQUEST['pollId'], $_REQUEST['user'], $_REQUEST['ip'], $_REQUEST['optionId']); } $pollIds = array(); if (!empty($_REQUEST['pollId'])) { $pollIds[] = $_REQUEST['pollId']; $smarty->assign_by_ref('pollId', $_REQUEST['pollId']); $previous = $polllib->get_user_vote('poll' . $_REQUEST['pollId'], $user); if (!empty($previous)) {
/** * @param bool $updateManuallyChangedEvents * @param $oldRec */ public function updateEvents($updateManuallyChangedEvents = false, $oldRec) { // retrieve the yet-to-happen events of the recurrence rule (only the relevant fields) $query = "SELECT calitemId,calendarId, start, end, allday, locationId, categoryId, nlId, priority, status, url, lang, name, description, " . "user, created, lastModif, changed " . "FROM tiki_calendar_items WHERE recurrenceId = ? ORDER BY start"; $bindvars = array((int) $this->getId()); $result = $this->query($query, $bindvars); $theEvents = array(); $theEventsToBeChanged = array(); if ($updateManuallyChangedEvents) { while ($row = $result->fetchRow()) { $theEvents[$row['calitemId']] = $row; $theEventsToBeChanged[] = $row['calitemId']; } } else { while ($row = $result->fetchRow()) { $theEvents[$row['calitemId']] = $row; if ($row['changed'] == 0) { $theEventsToBeChanged[] = $row['calitemId']; } } } // we'll now update the events, according to the manually changed flag. // we'll check only the new fields; so we should retrieve the list of changed fields first. $changedFields = $this->compareFields($oldRec); if ($updateManuallyChangedEvents == false) { foreach ($theEvents as $evtId => $anEvent) { if ($anEvent['changed'] == 1) { continue; } foreach ($changedFields as $aField) { $changedFieldsOfEvent = $this->compareFieldsOfEvent($anEvent, $oldRec); $inters = array_intersect($changedFields, $changedFieldsOfEvent); if (count($inters) == 0) { $theEventsToBeChanged[] = $anEvent['calitemId']; } } } } // we now update the events $advanced = null; $ChangeDateInSeconds; //will be needed if dates have been changed foreach ($theEventsToBeChanged as $anEvtId) { $anEvt = $theEvents[$anEvtId]; $tmp = array(); $doWeChangeTimeIfNeeded = true; foreach ($changedFields as $aField) { if (substr($aField, 0, 1) != "_") { $tmp[] = $aField . " = '" . $this->{$aField} . "'"; } else { $anEvtStart = TikiLib::date_format2('Y/m/d', $anEvt['start']); $anEvtStart = explode('/', $anEvtStart); $newStartHour = floor($this->getStart() / 100); $newStartMin = $this->getStart() - 100 * $newStartHour; $newEndHour = floor($this->getEnd() / 100); $newEndMin = $this->getEnd() - 100 * $newEndHour; // the tricky part...if the dates should be changed. // here are the rules : // - for weekly events : // if the new weekday is before (less than) the old weekday // if this week's new weekday is after (greater than) now and after the startperiod // then dates will be advanced // else // then dates will be postponed if ($aField == "_weekday") { $doWeChangeTimeIfNeeded = false; if (is_null($advanced)) { if ($this->getWeekday() < $oldRec->getWeekday()) { if (TikiLib::date_format2('w', TikiLib::make_time()) <= $this->getWeekday()) { $offsetInSeconds = ($this->getWeekday() - TikiLib::date_format2('w', TikiLib::make_time())) * dayInSeconds; $couldBeDay = TikiLib::make_time($newStartHour, $newStartMin, 0, TikiLib::date_format2('m'), TikiLib::date_format2('d'), TikiLib::date_format2('Y')) + $offsetInSeconds; if ($couldBeDay >= $this->getStartPeriod()) { $advanced = true; } } } } if (is_null($advanced)) { $advanced = false; } if (!is_null($advanced)) { $daysOffsetEvent = $this->getWeekday() - TikiLib::date_format2('w', TikiLib::make_time(0, 0, 0, $anEvtStart[1], $anEvtStart[2], $anEvtStart[0])); $tmp[] = "start='" . TikiLib::make_time($newStartHour, $newStartMin, 0, $anEvtStart[1], $anEvtStart[2] + $daysOffsetEvent, $anEvtStart[0]) . "'"; $tmp[] = "end='" . TikiLib::make_time($newEndHour, $newEndMin, 0, $anEvtStart[1], $anEvtStart[2] + $daysOffsetEvent, $anEvtStart[0]) . "'"; } // - for monthly events : // if the new day of month is before (less than) the old day of month // if this month's new day is after (greater than) now and after the startperiod // then dates will be advanced // else // then dates will be postponed } elseif ($aField == "_dayOfMonth") { $doWeChangeTimeIfNeeded = false; if (is_null($advanced)) { if ($this->getDayOfMonth() < $oldRec->getDayOfMonth()) { if (TikiLib::date_format2('d', TikiLib::make_time()) <= $this->getDayOfMonth()) { $offsetInSeconds = ($this->getDayOfMonth() - TikiLib::date_format2('d', TikiLib::make_time())) * dayInSeconds; $couldBeDay = TikiLib::make_time(0, 0, 0, TikiLib::date_format2('m', TikiLib::make_time()), TikiLib::date_format2('d', TikiLib::make_time()), TikiLib::date_format2('Y', TikiLib::make_time())) + $offsetInSeconds; if ($couldBeDay >= $this->getStartPeriod()) { $advanced = true; } } } } if (is_null($advanced)) { $advanced = false; } if ($advanced) { // we are on the same month $tmp[] = "start='" . TikiLib::make_time($newStartHour, $newStartMin, 0, $anEvtStart[1], $this->getDayOfMonth(), $anEvtStart[0]) . "'"; $tmp[] = "end='" . TikiLib::make_time($newEndHour, $newEndMin, 0, $anEvtStart[1], $this->getDayOfMonth(), $anEvtStart[0]) . "'"; } else { // if the new day is after the old one, we are on the same month; instead, we are on the next month. $offsetMonth = 0; if ($this->getDayOfMonth() < $oldRec->getDayOfMonth()) { $offsetMonth = 1; } $tmp[] = "start='" . TikiLib::make_time($newStartHour, $newStartMin, 0, $anEvtStart[1] + $offsetMonth, $this->getDayOfMonth(), $anEvtStart[0]) . "'"; $tmp[] = "end='" . TikiLib::make_time($newEndHour, $newEndMin, 0, $anEvtStart[1] + $offsetMonth, $this->getDayOfMonth(), $anEvtStart[0]) . "'"; } // - for yearly events : // if the new day of year is before (less than) the old day of year // if this year's new day is after (greater than) now and after the startperiod // then dates will be advanced // else // then dates will be postponed } elseif ($aField == "_dateOfYear") { $doWeChangeTimeIfNeeded = false; if (is_null($advanced)) { $thisdate = str_pad($this->getDateOfYear(), 4, '0', STR_PAD_LEFT); $olddate = str_pad($oldRec->getDateOfYear(), 4, '0', STR_PAD_LEFT); if ($this->getDateOfYear() < $oldRec->getDateOfYear()) { if (time() <= TikiLib::make_time($newStartHour, $newStartMin, 0, substr($thisdate, 0, 2), substr($thisdate, -2), TikiLib::date_format2('Y'))) { $offsetInSeconds = TikiLib::make_time($newStartHour, $newStartMin, 0, substr($thisdate, 0, 2), substr($thisdate, -2), TikiLib::date_format2('Y')) - $this->getStartPeriod(); if ($offsetInSeconds > 0) { $advanced = true; } } } } if (is_null($advanced)) { $advanced = false; } if ($advanced) { $tmp[] = "start='" . TikiLib::make_time($newStartHour, $newStartMin, 0, substr($thisdate, 0, 2), substr($thisdate, -2), $anEvtStart[0]) . "'"; $tmp[] = "end='" . TikiLib::make_time($newEndHour, $newEndMin, 0, substr($thisdate, 0, 2), substr($thisdate, -2), $anEvtStart[0]) . "'"; } else { $offsetYear = 0; if ($this->getDateOfYear() < $oldRec->getDateOfYear()) { $offsetYear = 1; } $tmp[] = "start='" . TikiLib::make_time($newStartHour, $newStartMin, 0, substr($thisdate, 0, 2), substr($thisdate, -2), $anEvtStart[0] + $offsetYear) . "'"; $tmp[] = "end='" . TikiLib::make_time($newEndHour, $newEndMin, 0, substr($thisdate, 0, 2), substr($thisdate, -2), $anEvtStart[0] + $offsetYear) . "'"; } } /* elseif ($aField == "_start") { // on fera la modif si les trois précédents n'ont pas été concernés } elseif ($aField == "_end") { // on fera la modif si les trois précédents n'ont pas été concernés } */ } } if (in_array("_start", $changedFields) && $doWeChangeTimeIfNeeded) { $anEvtStart = TikiLib::date_format2('Y/m/d', $anEvt['start']); $anEvtStart = explode('/', $anEvtStart); $newStartHour = floor($this->getStart() / 100); $newStartMin = $this->getStart() - 100 * $newStartHour; $tmp[] = "start='" . TikiLib::make_time($newStartHour, $newStartMin, 0, $anEvtStart[1], $anEvtStart[2], $anEvtStart[0]) . "'"; } if (in_array("_end", $changedFields) && $doWeChangeTimeIfNeeded) { $anEvtStart = TikiLib::date_format2('Y/m/d', $anEvt['start']); $anEvtStart = explode('/', $anEvtStart); $newEndHour = floor($this->getEnd() / 100); $newEndMin = $this->getEnd() - 100 * $newEndHour; $tmp[] = "end='" . TikiLib::make_time($newEndHour, $newEndMin, 0, $anEvtStart[1], $anEvtStart[2], $anEvtStart[0]) . "'"; } if (count($tmp) > 0) { $query = "UPDATE tiki_calendar_items SET " . implode(',', $tmp) . " WHERE calitemId = ?"; $bindvars = array((int) $anEvt['calitemId']); $this->query($query, $bindvars); } } }
function wikiplugin_trackerlist($data, $params) { global $tiki_p_admin_trackers, $prefs, $tiki_p_view_trackers, $user, $page, $tiki_p_tracker_vote_ratings, $tiki_p_tracker_view_ratings, $tiki_p_export_tracker, $tiki_p_watch_trackers, $tiki_p_edit; $userlib = TikiLib::lib('user'); $tikilib = TikiLib::lib('tiki'); $trklib = TikiLib::lib('trk'); $smarty = TikiLib::lib('smarty'); $notificationlib = TikiLib::lib('notification'); static $iTRACKERLIST = 0; ++$iTRACKERLIST; $smarty->assign('iTRACKERLIST', $iTRACKERLIST); $default = array('calendarfielddate' => '', 'wiki' => '', 'calendarviewmode' => 'month', 'calendarstickypopup' => 'n', 'calendarbeginmonth' => 'y', 'calendarviewnavbar' => 'y', 'calendartitle' => '', 'calendardelta' => '', 'force_compile' => 'n', 'editable' => array(), 'editableall' => 'n'); $params = array_merge($default, $params); extract($params, EXTR_SKIP); $skip_status_perm_check = false; if (isset($force_separate_compile) && $force_separate_compile == 'y') { $smarty->assign('force_separate_compile', 'y'); } if ($prefs['feature_trackers'] != 'y' || !isset($trackerId) || !($tracker_info = $trklib->get_tracker($trackerId))) { return $smarty->fetch("wiki-plugins/error_tracker.tpl"); } else { global $auto_query_args; $auto_query_args_local = array('trackerId', 'tr_initial', "tr_sort_mode{$iTRACKERLIST}", 'tr_user', 'filterfield', 'filtervalue', 'exactvalue', 'itemId', "tr_offset{$iTRACKERLIST}"); $auto_query_args = empty($auto_query_args) ? $auto_query_args_local : array_merge($auto_query_args, $auto_query_args_local); $smarty->assign('listTrackerId', $trackerId); $definition = Tracker_Definition::get($trackerId); $tracker_info = $definition->getInformation(); if (!isset($sort)) { $sort = 'n'; } $perms = $tikilib->get_perm_object($trackerId, 'tracker', $tracker_info, false); if ($perms['tiki_p_view_trackers'] != 'y' && !$user) { return; } $userCreatorFieldId = $definition->getAuthorField(); $groupCreatorFieldId = $definition->getWriterGroupField(); if ($perms['tiki_p_view_trackers'] != 'y' && !$definition->isEnabled('writerCanModify') && !$definition->isEnabled('userCanSeeOwn') && empty($userCreatorFieldId) && empty($groupCreatorFieldId)) { return; } $smarty->assign_by_ref('perms', $perms); if (!empty($fields)) { $limit = $fields; } else { $limit = ''; } // Make sure limit is an array if (!is_array($limit) && !empty($limit)) { $limit = explode(':', $limit); } if (!empty($filterfield) && !empty($limit)) { $limit = array_unique(array_merge($limit, $filterfield)); } // for some reason if param popup is set but empty, the array contains 2 empty elements. We filter them out. if (isset($popup)) { $popup = array_filter($popup); if (!empty($popup)) { $limit = array_unique(array_merge($limit, $popup)); } } if (!empty($calendarfielddate)) { $limit = array_unique(array_merge($limit, $calendarfielddate)); } if (!empty($limit) && $trklib->test_field_type($limit, array('C'))) { $limit = array(); } $allfields = $trklib->list_tracker_fields($trackerId, 0, -1, 'position_asc', '', true, '', $trklib->flaten($limit)); if (!empty($fields)) { $listfields = $fields; //We must include the $calendarfielddate, even if they are not in the listfields if (!empty($calendarfielddate)) { foreach ($calendarfielddate as $f) { if (!in_array($f, $listfields)) { $listfields[] = $f; } } } if ($sort == 'y') { $allfields = $trklib->sort_fields($allfields, $listfields); } } elseif (!empty($wiki) || !empty($tpl) || !empty($tplwiki)) { if (!empty($wiki)) { $listfields = $trklib->get_pretty_fieldIds($wiki, 'wiki', $prettyModifier, $trackerId); } elseif (!empty($tplwiki)) { $listfields = $trklib->get_pretty_fieldIds($tplwiki, 'wiki', $prettyModifier, $trackerId); } else { $listfields = $trklib->get_pretty_fieldIds($tpl, 'tpl', $prettyModifier, $trackerId); } } else { $listfields = ''; } if (!empty($compute) && !empty($listfields)) { if (preg_match_all('/[0-9.]+/', $compute, $matches)) { foreach ($matches[0] as $f) { if (!in_array($f, $listfields)) { $listfields[] = $f; } } } } /*** tablesorter ***/ //note whether ajax is needed $tsServer = isset($params['server']) && $params['server'] === 'y' ? true : false; $tsOn = isset($sortable) && $sortable !== 'n' && Table_Check::isEnabled($tsServer); $smarty->assign('tsOn', $tsOn); //note whether this is the initial tablesorter ajax call or a subsequent ajax call $tsAjax = Table_Check::isAjaxCall(); $smarty->assign('tsAjax', $tsAjax); if ($tsAjax) { // if status is enabled, need to adjust field index by -1 - need to check both - tracker config and plugin config $adjustCol = isset($showstatus) && $showstatus == 'y' && $definition->isEnabled('showStatus') ? -1 : 0; //convert tablesorter filter syntax to tiki syntax if (!empty($_REQUEST['filter'])) { $i = 0; $tsfiltersArray = explode('|', $tsfilters); foreach ($_REQUEST['filter'] as $col => $ajaxfilter) { $fieldtype = $allfields['data'][$col + $adjustCol]['type']; $id = $allfields['data'][$col + $adjustCol]['fieldId']; //handle status filter if ($adjustCol === -1 && $col === 0 && in_array($ajaxfilter, ['o', 'p', 'c'])) { $status = $ajaxfilter; /* * handle date filter - these are always one filter, in the form of: * from: >=1427389832000; to: <=1427389832000; both from and to: 1427389832000 - 1427880000000 * which is unix timestamp in milliseconds */ } elseif (strpos($tsfiltersArray[$col], 'type:date') !== false && in_array($fieldtype, ['f', 'j'])) { $datefilter = explode(' - ', $ajaxfilter); $filterfield[$i] = $id; //a range (from and to filters) will have 2 items in the array if (count($datefilter) == 2) { $filterfield[$i + 1] = $id; //use substr to leave off milliseconds since date is stored in seconds in the database $exactvalue[$i] = 'greaterequal(@' . substr($datefilter[0], 0, 10) . ')'; $exactvalue[$i + 1] = 'lessequal(@' . substr($datefilter[1], 0, 10) . ')'; } else { //use substr to leave off milliseconds since date is stored in seconds in the database $stamp = '(@' . substr($datefilter[0], 2, 10) . ')'; $symbol = substr($datefilter[0], 0, 2); if ($symbol === '<=') { $compare = 'lessequal'; } elseif ($symbol === '>=') { $compare = 'greaterequal'; } $exactvalue[$i] = $compare . $stamp; } } else { $filterfield[$i] = $id; //convert category filters entered as text if ($fieldtype === 'e' && !is_numeric($ajaxfilter)) { $categlib = TikiLib::lib('categ'); $ajaxfilter = $categlib->get_category_id($ajaxfilter); } $filtervalue[$i] = $ajaxfilter; } $i++; } } //convert tablesorter sort syntax to tiki syntax if (!empty($_REQUEST['sort'])) { foreach ($_REQUEST['sort'] as $sortcol => $ajaxsort) { if ($ajaxsort == '0') { $dir = '_asc'; } elseif ($ajaxsort == '1') { $dir = '_desc'; } //avoid setting sort_mode based on status field - will return error. Handle later once records are retrieved if ($adjustCol !== -1 || $sortcol !== 0) { $sort_mode = 'f_' . $allfields['data'][$sortcol + $adjustCol]['fieldId'] . $dir; } } } //set max records if (isset($_REQUEST['numrows'])) { $max = $_REQUEST['numrows']; } } /*** end first tablesorter section ***/ if (!empty($filterfield)) { if (is_array($filterfield)) { foreach ($filterfield as $ff) { unset($filterfieldok); if (is_array($ff)) { // already checked in trackerfilter $filterfieldok = true; break; } else { foreach ($allfields['data'] as $f) { if ($f['fieldId'] == $ff) { $filterfieldok = true; break; } } } if (!isset($filterfieldok)) { break; } } } else { foreach ($allfields['data'] as $f) { if ($f['fieldId'] == $filterfield) { $filterfieldok = true; break; } } } if (!isset($filterfieldok)) { return tra('incorrect filterfield'); } } $filter = array(); if (isset($periodQuantity)) { switch ($periodUnit) { case 'hour': $periodUnit = 3600; break; case 'day': $periodUnit = 86400; break; case 'week': $periodUnit = 604800; break; case 'month': $periodUnit = 2628000; break; default: break; } if (!isset($periodType)) { $periodType = 'c'; } if (is_int($periodUnit) && $periodType == 'm') { $filter['lastModifAfter'] = $tikilib->now - $periodQuantity * $periodUnit; $filter['lastModifBefore'] = $tikilib->now; } elseif (is_int($periodUnit)) { # case for periodType beig c or anything else (therefore, set as case for default) $filter['createdAfter'] = $tikilib->now - $periodQuantity * $periodUnit; $filter['createdBefore'] = $tikilib->now; } } if (isset($_REQUEST['reloff']) && empty($_REQUEST['itemId']) && !empty($_REQUEST['trackerId'])) { //coming from a pagination $items = $trklib->list_items($_REQUEST['trackerId'], $_REQUEST['reloff'], 1, '', '', isset($_REQUEST['filterfield']) ? preg_split('/\\s*:\\s*/', $_REQUEST['filterfield']) : '', isset($_REQUEST['filtervalue']) ? preg_split('/\\s*:\\s*/', $_REQUEST['filtervalue']) : '', isset($_REQUEST['status']) ? preg_split('/\\s*:\\s*/', $_REQUEST['status']) : '', isset($_REQUEST['initial']) ? $_REQUEST['initial'] : '', isset($_REQUEST['exactvalue']) ? preg_split('/\\s*:\\s*/', $_REQUEST['exactvalue']) : '', $filter); if (isset($items['data'][0]['itemId'])) { $_REQUEST['cant'] = $items['cant']; $_REQUEST['itemId'] = $items['data'][0]['itemId']; } } if (!empty($_REQUEST['itemId']) && $tiki_p_tracker_vote_ratings == 'y' && $user) { $hasVoted = false; foreach ($allfields['data'] as $f) { if ($f['type'] == 's' && $definition->isEnabled('useRatings') && ($f['name'] == 'Rating' || ($f['name'] = tra('Rating')))) { $i = $f['fieldId']; if (isset($_REQUEST["ins_{$i}"]) && ($_REQUEST["ins_{$i}"] == 'NULL' || in_array($_REQUEST["ins_{$i}"], explode(',', $tracker_info['ratingOptions'])))) { $trklib->replace_rating($trackerId, $_REQUEST['itemId'], $i, $user, $_REQUEST["ins_{$i}"]); $hasVoted = true; } } elseif ($f['type'] == '*' || $f['type'] == 'STARS') { $i = $f['fieldId']; if (isset($_REQUEST["ins_{$i}"])) { $trklib->replace_star($_REQUEST["ins_{$i}"], $trackerId, $_REQUEST['itemId'], $f, $user); $hasVoted = true; } } } if ($hasVoted) { // Must strip NULL for remove my vote case $url = preg_replace('/[(\\?)|&]vote=y/', '$1', preg_replace('/[(\\?)|&]ins_[0-9]+=-?[0-9|N|U|L]*/', '$1', $_SERVER['REQUEST_URI'])); // reduce duplicate itemIds in query string $occurences = preg_match_all('/[(\\?)|&]itemId=[0-9]+/', $url, $matches); if ($params['list_mode'] == 'y' && $occurences > 0) { $url = preg_replace('/[(\\?)|&]itemId=[0-9]+/', '$1', $url, $occurences); } elseif ($occurences > 1) { $url = preg_replace('/&itemId=[0-9]+/', '', $url, $occurences - 1); } header("Location: {$url}"); die; } } if (!empty($showwatch) && $showwatch == 'y' && $prefs['feature_user_watches'] == 'y' && $tiki_p_watch_trackers == 'y' && !empty($user)) { if (isset($_REQUEST['watch']) && isset($_REQUEST['trackerId']) && $_REQUEST['trackerId'] == $trackerId) { if ($_REQUEST['watch'] == 'add') { $tikilib->add_user_watch($user, 'tracker_modified', $trackerId, 'tracker', $tracker_info['name'], "tiki-view_tracker.php?trackerId=" . $trackerId); } elseif ($_REQUEST['watch'] == 'stop') { $tikilib->remove_user_watch($user, 'tracker_modified', $trackerId, 'tracker'); } } if ($tikilib->user_watches($user, 'tracker_modified', $trackerId, 'tracker')) { $smarty->assign('user_watching_tracker', 'y'); } else { $smarty->assign('user_watching_tracker', 'n'); } } else { $smarty->clear_assign('user_watching_tracker'); } if (empty($showrss) || $showrss == 'n') { $smarty->assign('showrss', 'n'); } else { $smarty->assign('showrss', 'y'); } if (empty($listfields)) { foreach ($allfields['data'] as $f) { $listfields[] = $f['fieldId']; } } if (!empty($popup)) { $popupfields = $popup; } else { $popupfields = array(); } $smarty->assign_by_ref('tracker_info', $tracker_info); //$query_array = array(); //$quarray = array(); //TikiLib::parse_str($_SERVER['QUERY_STRING'],$query_array); if (isset($stickypopup) && $stickypopup == 'y') { $stickypopup = true; } else { $stickypopup = false; } $smarty->assign_by_ref('stickypopup', $stickypopup); if (!isset($showtitle)) { $showtitle = 'n'; } $smarty->assign_by_ref('showtitle', $showtitle); if (!isset($showlinks)) { $showlinks = 'n'; } $smarty->assign_by_ref('showlinks', $showlinks); if (!isset($showdesc)) { $showdesc = 'n'; } $smarty->assign_by_ref('showdesc', $showdesc); if (!isset($showinitials)) { $showinitials = 'n'; } $smarty->assign_by_ref('showinitials', $showinitials); if (!isset($shownbitems)) { $shownbitems = 'n'; } $smarty->assign_by_ref('shownbitems', $shownbitems); if (!isset($showstatus)) { $showstatus = 'n'; } $smarty->assign_by_ref('showstatus', $showstatus); if (!isset($showfieldname)) { $showfieldname = 'y'; } $smarty->assign_by_ref('showfieldname', $showfieldname); if (!isset($showitemrank)) { $showitemrank = 'n'; } $smarty->assign_by_ref('showitemrank', $showitemrank); if (!isset($showdelete)) { $showdelete = 'n'; } $smarty->assign_by_ref('showdelete', $showdelete); if (!isset($showpenditem)) { $showpenditem = 'n'; } $smarty->assign_by_ref('showpenditem', $showpenditem); if (!isset($showcloseitem)) { $showcloseitem = 'n'; } $smarty->assign_by_ref('showcloseitem', $showcloseitem); if (!isset($showopenitem)) { $showopenitem = 'n'; } $smarty->assign_by_ref('showopenitem', $showopenitem); if (!isset($showpagination)) { $showpagination = 'y'; } $smarty->assign_by_ref('showpagination', $showpagination); if (!isset($sortchoice)) { $sortchoice = ''; } else { foreach ($sortchoice as $i => $sc) { $sc = explode('|', $sc); $sortchoice[$i] = array('value' => $sc[0], 'label' => empty($sc[1]) ? $sc[0] : $sc[1]); } } $smarty->assign_by_ref('sortchoice', $sortchoice); if (!isset($status)) { $status = 'o'; } $tr_status = $status; $smarty->assign_by_ref('tr_status', $tr_status); if (!isset($list_mode)) { $list_mode = 'y'; } $smarty->assign_by_ref('list_mode', $list_mode); if (!isset($showcreated)) { $showcreated = $tracker_info['showCreated']; } $smarty->assign_by_ref('showcreated', $showcreated); if (!isset($showlastmodif)) { $showlastmodif = $tracker_info['showLastModif']; } $smarty->assign_by_ref('showlastmodif', $showlastmodif); if (!isset($showlastmodifby)) { $showlastmodifby = $tracker_info['showLastModifBy']; } $smarty->assign_by_ref('showlastmodifby', $showlastmodifby); if (!isset($more)) { $more = 'n'; } $smarty->assign_by_ref('more', $more); if (!isset($moreurl)) { $moreurl = 'tiki-view_tracker.php'; } $smarty->assign_by_ref('moreurl', $moreurl); if (!isset($url)) { $url = ''; } $smarty->assign_by_ref('url', $url); if (!isset($export)) { $export = 'n'; } $smarty->assign_by_ref('export', $export); if (!empty($ldelim)) { $smarty->left_delimiter = $ldelim; } if (!empty($rdelim)) { $smarty->right_delimiter = $rdelim; } if (isset($checkbox)) { $check = array('ix' => -1, 'type' => 'checkbox'); $cb = explode('/', $checkbox); if (isset($cb[0])) { $check['fieldId'] = $cb[0]; } if (isset($cb[1])) { $check['name'] = $cb[1]; } if (isset($cb[2])) { $check['title'] = $cb[2]; } if (isset($cb[3])) { $check['submit'] = $cb[3]; } if (isset($cb[4])) { $check['action'] = $cb[4]; } if (isset($cb[5])) { $check['tpl'] = $cb[5]; } if (isset($cb[6]) && $cb[6] == 'radio') { $check['radio'] = 'y'; $check['type'] = 'radio'; } if (isset($cb[6]) && $cb[6] == 'dropdown') { $check['dropdown'] = 'y'; } // is this actually used? $smarty->assign_by_ref('checkbox', $check); } if (isset($_REQUEST["tr_sort_mode{$iTRACKERLIST}"])) { $sort_mode = $_REQUEST["tr_sort_mode{$iTRACKERLIST}"]; } elseif (!isset($sort_mode)) { if (!empty($tracker_info['defaultOrderKey'])) { if ($tracker_info['defaultOrderKey'] == -1) { $sort_mode = 'lastModif'; } elseif ($tracker_info['defaultOrderKey'] == -2) { $sort_mode = 'created'; } elseif ($tracker_info['defaultOrderKey'] == -3) { $sort_mode = 'itemId'; } else { $sort_mode = 'f_' . $tracker_info['defaultOrderKey']; } if (isset($tracker_info['defaultOrderDir'])) { $sort_mode .= "_" . $tracker_info['defaultOrderDir']; } else { $sort_mode .= "_asc"; } } else { $sort_mode = ''; } } elseif ($sort_mode != 'created_asc' && $sort_mode != 'lastModif_asc' && $sort_mode != 'created_desc' && $sort_mode != 'lastModif_desc' && !preg_match('/f_[0-9]+_(asc|desc)/', $sort_mode)) { return tra('Incorrect param') . ' sort_mode'; } $tr_sort_mode = $sort_mode; $smarty->assign_by_ref('tr_sort_mode', $tr_sort_mode); if (!isset($max)) { $max = $prefs['maxRecords']; } if (isset($_REQUEST["tr_offset{$iTRACKERLIST}"]) && (!isset($forceoffset) || $forceoffset == 'n')) { $tr_offset = $_REQUEST["tr_offset{$iTRACKERLIST}"]; } else { if (isset($offset) && $offset >= 0) { $tr_offset = $offset; } else { $tr_offset = 0; } } $smarty->assign_by_ref("tr_offset{$iTRACKERLIST}", $tr_offset); $tr_initial = ''; if ($showinitials == 'y') { if (isset($_REQUEST['tr_initial'])) { //$query_array['tr_initial'] = $_REQUEST['tr_initial']; $tr_initial = $_REQUEST['tr_initial']; } $smarty->assign('initials', explode(' ', 'a b c d e f g h i j k l m n o p q r s t u v w x y z')); } $smarty->assign_by_ref('tr_initial', $tr_initial); if (isset($view) && $view == 'user' || isset($view_user) || isset($_REQUEST['tr_user'])) { if ($f = $definition->getAuthorField()) { $filterfield[] = $f; $filtervalue[] = ''; if (!isset($_REQUEST['tr_user'])) { $exactvalue[] = isset($view) ? empty($user) ? 'Anonymous' : $user : $view_user; } else { $exactvalue[] = $_REQUEST['tr_user']; $smarty->assign_by_ref('tr_user', $exactvalue); } if ($definition->isEnabled('writerCanModify') or $definition->isEnabled('userCanSeeOwn')) { $skip_status_perm_check = true; } } } if (isset($view) && $view == 'page' && isset($_REQUEST['page'])) { if ($f = $trklib->get_page_field($trackerId)) { $filterfield[] = $f['fieldId']; $filtervalue[] = ''; $exactvalue[] = $_REQUEST['page']; } } if (isset($view) && $view == 'ip') { if ($f = $definition->getAuthorIpField()) { $filterfield[] = $f; $filtervalue[] = ''; $ip = $tikilib->get_ip_address(); $exactvalue[] = $ip; } } if (!isset($filtervalue)) { $filtervalue = ''; } else { foreach ($filtervalue as $i => $f) { if ($f == '#user') { $filtervalue[$i] = $user; } else { if ($f == '#default_group') { $filtervalue[$i] = $_SESSION['u_info']['group']; } } } } if (!isset($exactvalue)) { $exactvalue = ''; } else { foreach ($exactvalue as $i => $f) { if ($f == '#user') { $exactvalue[$i] = $user; } } } if (!empty($_REQUEST['itemId']) && (empty($ignoreRequestItemId) || $ignoreRequestItemId != 'y')) { $itemId = $_REQUEST['itemId']; } if (isset($itemId)) { if (is_string($itemId) && strstr($itemId, ':')) { // JB Tiki7: This doesn't quite make sense as itemId is an array $itemId = explode(':', $itemId); // Probably just some redundant code TOKIL } $filter['tti.`itemId`'] = $itemId; } $newItemRateField = false; $status_types = $trklib->status_types(); $smarty->assign('status_types', $status_types); if (!isset($filterfield)) { $filterfield = ''; } else { if (!empty($filterfield)) { if (!empty($filtervalue)) { $fvs = $filtervalue; unset($filtervalue); for ($i = 0, $count_ff = count($filterfield); $i < $count_ff; ++$i) { $filtervalue[] = isset($fvs[$i]) ? $fvs[$i] : ''; } } if (!empty($exactvalue)) { $evs = $exactvalue; unset($exactvalue); for ($i = 0, $count_ff2 = count($filterfield); $i < $count_ff2; ++$i) { if (isset($evs[$i])) { if (is_array($evs[$i])) { // already processed $exactvalue[] = $evs[$i]; } elseif (preg_match('/(not)?categories\\(([0-9]+)\\)/', $evs[$i], $matches)) { $categlib = TikiLib::lib('categ'); if (ctype_digit($matches[2]) && $matches[2] > 0) { $cfilter = array('identifier' => $matches[2], 'type' => 'descendants'); } else { $cfilter = NULL; } $categs = $categlib->getCategories($cfilter, true, false); $l = array($matches[2]); foreach ($categs as $cat) { $l[] = $cat['categId']; } if (empty($matches[1])) { $exactvalue[] = $l; } else { $exactvalue[] = array('not' => $l); } } elseif (preg_match('/(not)?preference\\((.*)\\)/', $evs[$i], $matches)) { if (empty($matches[1])) { $exactvalue[] = $prefs[$matches[2]]; } else { $exactvalue[] = array('not' => $prefs[$matches[2]]); } } elseif (preg_match('/(not)?field\\(([0-9]+)(,([0-9]+|user)(,([0-9]+))?)?\\)/', $evs[$i], $matches)) { // syntax field(fieldId, user, trackerId) or field(fieldId)(need the REQUEST['itemId'] or field(fieldId, itemId) or field(fieldId, user) if (empty($matches[4]) && !empty($_REQUEST['itemId'])) { // user the itemId of the url $matches[4] = $_REQUEST['itemId']; } if (!empty($matches[4]) && $matches[4] == 'user') { if (!empty($matches[6])) { // pick the user item of this tracker $t_i = $trklib->get_tracker($matches[6]); $matches[4] = $trklib->get_user_item($matches[6], $t_i, $user); } elseif ($prefs['userTracker'] == 'y') { //pick the generic user tracker $utid = $userlib->get_tracker_usergroup($user); $matches[4] = $trklib->get_item_id($utid['usersTrackerId'], $utid['usersFieldId'], $user); } } if (!empty($matches[4])) { $l = $trklib->get_item_value(0, $matches[4], $matches[2]); $field = $trklib->get_tracker_field($matches[2]); if ($field['type'] == 'r') { $refItemId = $l; $l = $trklib->get_item_value($field['options_array'][0], $refItemId, $field['options_array'][3]); } } if (empty($matches[1])) { $exactvalue[] = $l; } else { $exactvalue[] = array('not' => $l); } } elseif (preg_match('/(less|greater|lessequal|greaterequal)\\((.+)\\)/', $evs[$i], $matches)) { $conv = array('less' => '<', 'greater' => '>', 'lessequal' => '<=', 'greaterequal' => '>='); $field = $trklib->get_tracker_field($filterfield[$i]); if ($field['type'] == 'f' || $field['type'] == 'j') { if ($matches[2] == 'now') { $matches[2] = $tikilib->now; } elseif (($r = strtotime($matches[2])) !== false) { $matches[2] = $r; } } $exactvalue[] = array($conv[$matches[1]] => $matches[2]); } elseif (preg_match('/not\\((.+)\\)/', $evs[$i], $matches)) { $exactvalue[] = array('not' => $matches[1]); } else { $exactvalue[] = $evs[$i]; } } else { $exactvalue[] = ''; } } } } } if ($tiki_p_admin_trackers != 'y' && $perms['tiki_p_view_trackers'] != 'y' && ($definition->isEnabled('writerCanModify') or $definition->isEnabled('userCanSeeOwn')) && $user && $userCreatorFieldId) { //patch this should be in list_items if ($filterfield != $userCreatorFieldId || is_array($filterfield) && !in_array(${$userCreatorFieldId}, $filterfield)) { if (is_array($filterfield)) { $filterfield[] = $userCreatorFieldId; } elseif (empty($filterfield)) { $filterfield = $userCreatorFieldId; } else { $filterfield = array($filterfield, $fieldId); } if (is_array($exactvalue)) { $exactvalue[] = $user; } elseif (empty($exactvalue)) { $exactvalue = $user; } else { $exactvalue = array($exactvalue, $user); } } } if ($tiki_p_admin_trackers != 'y' && $perms['tiki_p_view_trackers'] != 'y' && $user && $groupCreatorFieldId) { if ($filterfield != $groupCreatorFieldId || is_array($filterfield) && !in_array($groupCreatorFieldId, $filterfield)) { $groups = $userlib->get_user_groups($user); if (is_array($filterfield)) { $filterfield[] = $groupCreatorFieldId; } elseif (empty($filterfield)) { $filterfield = $groupCreatorFieldId; } else { $filterfield = array($filterfield, $fieldId); } if (is_array($exactvalue)) { $exactvalue[] = array_merge($exactvalue, $groups); } elseif (empty($exactvalue)) { $exactvalue = $groups; } else { $exactvalue = array_merge(array($exactvalue), $groups); } global $group; // awful trick - but the filter garantee that the group is ok $smarty->assign_by_ref('ours', $group); $perms = array_merge($perms, $trklib->get_special_group_tracker_perm($tracker_info)); } } for ($i = 0, $count_allf = count($allfields['data']); $i < $count_allf; $i++) { if ($allfields['data'][$i]['type'] == 'C') { $infoComputed = $trklib->get_computed_info($allfields['data'][$i]['options_array'][0], $trackerId, $allfields['data']); if (!empty($infoComputed)) { $allfields['data'][$i] = array_merge($infoComputed, $allfields['data'][$i]); } } elseif ($allfields["data"][$i]['type'] == 'w') { /* keep track of dynamic list items referring to user selectors */ $refFieldId = $allfields["data"][$i]['options_array'][3]; $refField = $trklib->get_tracker_field($refFieldId); if ($refField['type'] == 'u') { $allfields["data"][$i]['type'] = $refField['type']; } } // If listfields is a colon separated string, convert it to an array if (!is_array($listfields)) { $listfields = explode(':', $listfields); } if ((in_array($allfields["data"][$i]['fieldId'], $listfields) or in_array($allfields["data"][$i]['fieldId'], $popupfields)) and $allfields["data"][$i]['isPublic'] == 'y') { $passfields["{$allfields["data"][$i]['fieldId']}"] = $allfields["data"][$i]; } if (isset($check['fieldId']) && $allfields["data"][$i]['fieldId'] == $check['fieldId']) { $passfields["{$allfields["data"][$i]['fieldId']}"] = $allfields["data"][$i]; if (!in_array($allfields["data"][$i]['fieldId'], $listfields)) { $allfields["data"][$i]['isPublic'] == 'n'; } //don't show it $check['ix'] = count($passfields) - 1; } if ($allfields["data"][$i]['name'] == 'page' && empty($filterfield) && empty($displayList) && !empty($view) && $view == 'page') { $filterfield = $allfields["data"][$i]['fieldId']; $filtervalue = $_REQUEST['page']; } if ($definition->isEnabled('useRatings') and $allfields["data"][$i]['type'] == 's' and $allfields["data"][$i]['name'] == 'Rating') { $newItemRateField = $allfields["data"][$i]['fieldId']; } } $nonPublicFieldsWarning = ''; if ($tiki_p_edit === 'y') { foreach ($allfields['data'] as $field) { if ($field['isPublic'] !== 'y' && in_array($field['fieldId'], array_merge($listfields, $popupfields))) { $nonPublicFieldsWarning = tra('You have attempted to view data of a tracker field which is not public. You need to ask the admin to change the setting to public for this field.'); } } } if ($editableall == 'y') { $editable = $listfields; } $smarty->assign('nonPublicFieldsWarning', $nonPublicFieldsWarning); $smarty->assign_by_ref('filterfield', $filterfield); $smarty->assign_by_ref('filtervalue', $filtervalue); $smarty->assign_by_ref('fields', $passfields); $smarty->assign_by_ref('exactvalue', $exactvalue); $smarty->assign_by_ref('listfields', $listfields); $smarty->assign_by_ref('popupfields', $popupfields); $smarty->assign('editableFields', $editable); if (!empty($filterfield)) { $urlquery['filterfield'] = is_array($filtervalue) ? implode(':', $filterfield) : $filterfield; if (!is_array($filtervalue)) { $filtervalue = array($filtervalue); } $urlquery['filtervalue'] = is_array($filtervalue) ? implode(':', $filtervalue) : $filtervalue; $urlquery['exactvalue'] = is_array($exactvalue) ? implode(':', $exactvalue) : $exactvalue; $urlquery['trackerId'] = $trackerId; $smarty->assign('urlquery', $urlquery); } else { $smarty->assign('urlquery', ''); } if (!empty($export) && $export != 'n' && $perms['tiki_p_export_tracker'] == 'y') { $smarty->loadPlugin('smarty_function_service'); $exportParams = array('controller' => 'tracker', 'action' => 'export', 'trackerId' => $trackerId); if (!empty($fields)) { $exportParams['displayedFields'] = is_array($fields) ? implode(':', $fields) : $fields; } if (is_array($filterfield)) { foreach ($filterfield as $i => $fieldId) { $exportParams["f_{$fieldId}"] = empty($filtervalue[$i]) ? $exactvalue[$i] : $filtervalue[$i]; } } elseif (!empty($filterfield)) { $exportParams["f_{$filterfield}"] = empty($filtervalue) ? $exactvalue : $filtervalue; } $exportUrl = smarty_function_service($exportParams, $smarty); $smarty->assign('exportUrl', $exportUrl); } if (!empty($_REQUEST['delete'])) { $itemToDelete = Tracker_Item::fromId($_REQUEST['delete']); if ($itemToDelete->canRemove()) { $trklib->remove_tracker_item($_REQUEST['delete']); } if (!empty($urlafterdelete)) { header("Location: {$urlafterdelete}"); exit; } } if (!empty($_REQUEST['closeitem'])) { $itemToModify = Tracker_Item::fromId($_REQUEST['closeitem']); if ($itemToModify->canModify()) { $trklib->change_status(array(array('itemId' => $_REQUEST['closeitem'])), 'c'); } } if (!empty($_REQUEST['penditem'])) { $itemToModify = Tracker_Item::fromId($_REQUEST['penditem']); if ($itemToModify->canModify()) { $trklib->change_status(array(array('itemId' => $_REQUEST['penditem'])), 'p'); } } if (!empty($_REQUEST['openitem'])) { $itemToModify = Tracker_Item::fromId($_REQUEST['openitem']); if ($itemToModify->canModify()) { $trklib->change_status(array(array('itemId' => $_REQUEST['openitem'])), 'o'); } } if (!empty($calendarfielddate)) { $calendarlib = TikiLib::lib('calendar'); $focusDate = empty($_REQUEST['todate']) ? $tikilib->now : $_REQUEST['todate']; $focus = $calendarlib->infoDate($focusDate); if (!empty($calendardelta)) { if ($calendardelta[0] == '-') { $focus = $calendarlib->focusPrevious($focus, str_replace('-', '', $calendardelta)); } else { $focus = $calendarlib->focusNext($focus, str_replace('+', '', $calendardelta)); } } $calendarlib->focusStartEnd($focus, $calendarviewmode, $calendarbeginmonth, $startPeriod, $startNextPeriod); $cell = $calendarlib->getTableViewCells($startPeriod, $startNextPeriod, $calendarviewmode, $calendarlib->firstDayofWeek($user)); if (is_array($filterfield) == false) { $filterfield = array($filterfield); } if (is_array(${$filtervalue}) == false) { $filtervalue = array($filtervalue); } $filterfield[] = $calendarfielddate[0]; $filtervalue[] = ''; $exactvalue[] = array('>=' => $startPeriod['date']); $filterfield[] = empty($calendarfielddate[1]) ? $calendarfielddate[0] : $calendarfielddate[1]; $filtervalue[] = ''; $exactvalue[] = array('<' => $startNextPeriod['date']); } if (count($passfields)) { // Optimization: Group category fields using AND logic indicated by sub-array $catfilters = array(); $catfiltervalue = array(); $catfilternotvalue = array(); if (!empty($filterfield)) { foreach ($filterfield as $k => $ff) { $filterfieldinfo = $trklib->get_tracker_field($ff); if ($filterfieldinfo['type'] == 'e') { $catfilters[] = $k; if (!empty($filtervalue[$k]) && empty($exactvalue[$k])) { // Some people use filtervalue instead of exactvalue for category filters $exactvalue[$k] = $filtervalue[$k]; for ($i = 0; $i < $k; $i++) { if (!isset($exactvalue[$i])) { $exactvalue[$i] = ''; } } } if (array_key_exists('not', array($exactvalue[$k]))) { $catfilternotfield[0] = $ff; $catfilternotvalue[] = array($exactvalue[$k]); } else { $catfilterfield[0] = $ff; $catfiltervalue[] = array($exactvalue[$k]); } } } } if ($catfilters) { foreach ($catfilters as $cf) { unset($filterfield[$cf]); unset($exactvalue[$cf]); } if ($catfiltervalue) { // array_merge is used because it reindexes $filterfield = array_merge($filterfield, $catfilterfield); $exactvalue = array_merge($exactvalue, array($catfiltervalue)); } if ($catfilternotvalue) { $filterfield = array_merge($filterfield, $catfilternotfield); $exactvalue[] = array('not' => $catfilternotvalue); } } // End Optimization //fetch tracker items $items = $trklib->list_items($trackerId, $tr_offset, $max, $tr_sort_mode, $passfields, !empty($calendarfielddate) ? null : $filterfield, $filtervalue, $tr_status, $tr_initial, $exactvalue, $filter, $allfields, $skip_status_perm_check); /*** tablesorter ***/ if ($tsOn && !$tsAjax) { // when using serverside filtering check wether a dropdown is in use // and we must take params from tracker definition because no explicit options have been defined if ($tsServer) { //format from plugin: type:text|type:dropdown;option:1=Open;option:2=Closed|type:text|type:nofilter|type:nofilter|type:nofilter if (!empty($tsfilters) && strpos($tsfilters, 'dropdown') !== false) { $tsfiltersArray = explode('|', $tsfilters); $adjustCol = isset($showstatus) && $showstatus == 'y' && $definition->isEnabled('showStatus') ? -1 : 0; foreach ($tsfiltersArray as $col => &$tsfilterField) { // only consider dropdown definitions without explicit option if (strpos($tsfilterField, 'dropdown') !== false && strpos($tsfilterField, 'option') === false) { //content from options (json object): {"options":["1=Open"," 2=Closed]} - note there can be whitespaces - it should not but there can be - yet another fix required if ($allfields['data'][$col + $adjustCol]['type'] == 'd') { $options = $allfields['data'][$col + $adjustCol]['options']; $options = json_decode($options); $options = $options->options; // construct the new dropdown filterfield entry from the trackerfield definition $newTsfilterField = 'type:dropdown'; foreach ($options as $option) { $newTsfilterField .= ";option:" . trim($option); } // update field - note that we used a ref $tsfilterField = $newTsfilterField; } } } // update tsfilters $tsfilters = implode('|', $tsfiltersArray); } } $ts_id = 'wptrackerlist' . $trackerId . '-' . $iTRACKERLIST; $ts = new Table_Plugin(); $ts->setSettings($ts_id, isset($server) ? $server : null, $sortable, isset($sortList) ? $sortList : null, isset($tsortcolumns) ? $tsortcolumns : null, isset($tsfilters) ? $tsfilters : null, isset($tsfilteroptions) ? $tsfilteroptions : null, isset($tspaginate) ? $tspaginate : null, isset($tscolselect) ? $tscolselect : null, $GLOBALS['requestUri'], $items['cant'], isset($tstotals) ? $tstotals : null, isset($tstotalformat) ? $tstotalformat : null, isset($tstotaloptions) ? $tstotaloptions : null); //loads the jquery tablesorter code if (is_array($ts->settings)) { $ts->settings['ajax']['offset'] = 'tr_offset' . $iTRACKERLIST; Table_Factory::build('PluginWithAjax', $ts->settings); } } //determine whether totals will be added to bottom of table if (isset($ts->settings)) { Table_Totals::setTotals($ts->settings); } //handle certain tablesorter sorts if (isset($sortcol) && $items['cant'] > 1) { $fieldtype = $items['data'][0]['field_values'][$sortcol + $adjustCol]['type']; //convert categoryId sort to category name sort when tablesorter server side sorting is used if ($fieldtype === 'e') { foreach ($items['data'] as $key => $record) { $catfield = $record['field_values'][$sortcol + $adjustCol]; $sortarray[$key] = $catfield['list'][$catfield['value']]['name']; } //sort status } elseif ($adjustCol === -1 && $sortcol === 0) { $sortarray = array_column($items['data'], 'status'); } array_multisort($sortarray, $dir == '_desc' ? SORT_DESC : SORT_ASC, $items['data']); } /*** end second tablesorter section ***/ if (isset($silent) && $silent == 'y' && empty($items['cant'])) { return; } if (isset($items['cant']) && $items['cant'] == 1 && isset($goIfOne) && ($goIfOne == 'y' || $goIfOne == 1)) { header('Location: tiki-view_tracker_item.php?itemId=' . $items['data'][0]['itemId'] . '&trackerId=' . $items['data'][0]['trackerId']); die; } if ($newItemRateField && !empty($items['data'])) { foreach ($items['data'] as $f => $v) { $items['data'][$f]['my_rate'] = $tikilib->get_user_vote("tracker." . $trackerId . '.' . $items['data'][$f]['itemId'], $user); } } if (!empty($items['data']) && ($definition->isEnabled('useComments') && $definition->isEnabled('showComments') || $definition->isEnabled('showLastComment'))) { foreach ($items['data'] as $itkey => $oneitem) { if ($definition->isEnabled('showComments')) { $items['data'][$itkey]['comments'] = $trklib->get_item_nb_comments($items['data'][$itkey]['itemId']); } if ($definition->isEnabled('showLastComment')) { $l = $trklib->list_last_comments($items['data'][$itkey]['trackerId'], $items['data'][$itkey]['itemId'], 0, 1); $items['data'][$itkey]['lastComment'] = !empty($l['cant']) ? $l['data'][0] : ''; } } } if (!empty($items['data']) && ($definition->isEnabled('useAttachments') && $definition->isEnabled('showAttachments'))) { foreach ($items["data"] as $itkey => $oneitem) { $res = $trklib->get_item_nb_attachments($items["data"][$itkey]['itemId']); $items["data"][$itkey]['attachments'] = $res['attachments']; } } if (!empty($compute) && !empty($items['data'])) { $fs = preg_split('/ *: */', $compute); foreach ($fs as $fieldId) { if (strstr($fieldId, "/")) { list($fieldId, $oper) = preg_split('/ *\\/ */', $fieldId); $oper = strtolower($oper); if ($oper == 'average') { $oper = 'avg'; } elseif ($oper != 'sum' && $oper != 'avg') { $oper = 'sum'; } } else { $oper = 'sum'; } foreach ($items['data'] as $i => $item) { foreach ($item['field_values'] as $field) { if ($field['fieldId'] == $fieldId) { if (preg_match('/^ *$/', $field['value']) || !is_numeric($field['value'])) { $amount[$i] = '0'; } else { $amount[$i] = $field['value']; } break; } } } $value = array_sum($amount); if ($oper == 'avg') { $value = round($value / count($amount)); } $computedFields[$fieldId][] = array_merge(array('computedtype' => 'n', 'operator' => $oper, 'value' => $value), $passfields[$fieldId]); } $smarty->assign_by_ref('computedFields', $computedFields); } else { $smarty->assign('computedFields', ''); } if (!empty($calendarfielddate)) { foreach ($items['data'] as $i => $item) { if (!empty($wiki)) { $smarty->assign('fields', $item['field_values']); $smarty->assign('item', $item); $smarty->assign('wiki', "wiki:{$wiki}"); $smarty->assign('showpopup', 'n'); $items['data'][$i]['over'] = $smarty->fetch('tracker_pretty_item.tpl'); } if (!empty($tplwiki)) { $smarty->assign('fields', $item['field_values']); $smarty->assign('item', $item); $smarty->assign('wiki', "tplwiki:{$tplwiki}"); $smarty->assign('showpopup', 'n'); $items['data'][$i]['over'] = $smarty->fetch('tracker_pretty_item.tpl'); } if (empty($items['data'][$i]['over'])) { $items['data'][$i]['over'] = $trklib->get_isMain_value($trackerId, $item['itemId']); } $items['data'][$i]['visible'] = 'y'; } $trklib->fillTableViewCell($items['data'], $calendarfielddate, $cell); $smarty->assign('cell', $cell); $smarty->assign('show_calendar_module', 'y'); $calendarlib->getDayNames($calendarlib->firstDayofWeek($user), $daysnames, $daysnames_abr); $smarty->assign('daysnames_abr', $daysnames_abr); $smarty->assign('focusmonth', TikiLib::date_format("%m", $focusDate)); $smarty->assign('module_params', array('viewmode' => 'n', 'showaction' => 'n', 'notitle' => empty($calendartitle) ? 'y' : 'n', 'title' => $calendartitle, 'viewnavbar' => $calendarviewnavbar, 'decorations' => empty($calendartitle) ? 'n' : 'y')); $smarty->assign('tpl_module_title', tra($calendartitle)); $smarty->assign('now', $tikilib->now); $smarty->assign('calendarViewMode', $calendarviewmode); $smarty->assign('viewmodelink', $calendarviewmode); $smarty->assign('viewmode', $calendarviewmode); $focus_prev = $calendarlib->focusPrevious($focus, $calendarviewmode); $smarty->assign('focus_prev', $focus_prev['date']); $focus_next = $calendarlib->focusNext($focus, $calendarviewmode); $smarty->assign('focus_next', $focus_next['date']); $smarty->assign('daystart', $startPeriod['date']); $dayend = $calendarlib->infoDate($startNextPeriod['date'] - 1); $smarty->assign('dayend', $dayend['date']); $smarty->assign('today', TikiLib::make_time(0, 0, 0, TikiLib::date_format('%m'), TikiLib::date_format('%d'), TikiLib::date_format('%Y'))); $smarty->assign('sticky_popup', $calendarstickypopup); $smarty->assign('calendar_popup', $calendarpopup); $smarty->assign('showpopup', 'n'); $headerlib = TikiLib::lib('header'); $headerlib->add_cssfile('themes/base_files/feature_css/calendar.css', 20); return $smarty->fetch('modules/mod-calendar_new.tpl'); } if (!empty($wiki)) { $tpl = "wiki:{$wiki}"; } elseif (!empty($tplwiki)) { $tpl = "tplwiki:{$tplwiki}"; } elseif (empty($tpl)) { $tpl = ''; } if (!empty($tpl)) { $smarty->security = true; } $smarty->assign('tpl', $tpl); if (!empty($itemId) && $showpagination == 'y' && !empty($_REQUEST['cant'])) { $smarty->assign('max', 1); $smarty->assign('count_item', $_REQUEST['cant']); $smarty->assign('offset_arg', 'reloff'); $smarty->assign("tr_offset{$iTRACKERLIST}", $_REQUEST['reloff']); } else { $smarty->assign_by_ref('max', $max); $smarty->assign_by_ref('item_count', $items['cant']); $smarty->assign_by_ref('count_item', $items['cant']); $smarty->assign('offset_arg', "tr_offset{$iTRACKERLIST}"); } $smarty->assign_by_ref('items', $items["data"]); $smarty->assign('daformat', $tikilib->get_long_date_format() . " " . tra("at") . " %H:%M"); if (!empty($params['showmap']) && $params['showmap'] == 'y') { $smarty->assign('trackerlistmapview', true); $smarty->assign('trackerlistmapname', "trackerlistmap_{$iTRACKERLIST}"); } else { $smarty->assign('trackerlistmapview', false); } if (isset($items['data'])) { foreach ($items['data'] as $score_item) { $item_info = $trklib->get_tracker_item($score_item['itemId']); $currentItemId = $score_item['itemId']; TikiLib::events()->trigger('tiki.trackeritem.view', array('type' => 'trackeritem', 'object' => $currentItemId, 'owner' => $item_info['createdBy'], 'user' => $GLOBALS['user'])); } } $tracker = $trklib->get_tracker($trackerId, 0, -1); /*foreach ($query_array as $k=>$v) { if (!is_array($v)) { //only to avoid an error: eliminate the params that are not simple (ex: if you have in the same page a tracker list plugin and a tracker plugin, filling the tracker plugin interfers with the tracker list. In any case this is buggy if two tracker list plugins in the same page and if one needs the query value.... $quarray[] = urlencode($k) ."=". urlencode($v); } } if (is_array($quarray)) { $query_string = implode("&",$quarray); } else { $quering_string = ''; } $smarty->assign('query_string', $query_string); */ if (!$tracker) { $smarty->assign('msg', tra("Error in tracker ID")); return $smarty->fetch("error_raw.tpl"); } else { $save_fc = null; if (!empty($wiki) && $params['force_compile'] === 'y') { // some pretty trackers need to compile fresh for each item $save_fc = $smarty->force_compile; $smarty->force_compile = true; } //this options preloads the javascript for displaying sheets if (!empty($displaysheet) && $displaysheet == 'y') { $headerlib = TikiLib::lib("header"); $sheetlib = TikiLib::lib("sheet"); $sheetlib->setup_jquery_sheet(); $headerlib->add_jq_onready('$("div.trackercontainer").sheet($.extend($.sheet.tikiOptions,{ editable:false, buildSheet: true, minSize: {rows: 0, cols: 0} }));'); $smarty->assign('displaysheet', 'true'); } //this method sets up the sheet just like it would for jquery.sheet, but assumes that the javascript will be handled elsewere if (!empty($tableassheet) && $tableassheet == 'y') { $smarty->assign('tableassheet', 'true'); } $smarty->assign('context', $params); try { $str = $smarty->fetch('wiki-plugins/wikiplugin_trackerlist.tpl'); } catch (SmartyException $e) { $str = $e->getMessage(); } if ($save_fc !== null) { $smarty->force_compile = $save_fc; // presumably will be false but put it back anyway } return $str; } } else { $smarty->assign('msg', tra("No field indicated")); return $smarty->fetch("error_raw.tpl"); } } return $back; }
/** * @param $evt * @param $oldRec * @return array */ public function compareFieldsOfEvent($evt, $oldRec) { $result = array(); if ($evt['calendarId'] != $oldRec->getCalendarId()) { $result[] = "calendarId"; } if (TikiLib::date_format2('Hi', $evt['start']) != $oldRec->getStart()) { $result[] = "start"; } // checking the end is double check : is it the right hour ? is it the same day ? if (TikiLib::date_format2('Hi', $evt['end']) != $oldRec->getEnd() || TikiLib::date_format2('Ymd', $evt['start']) != TikiLib::date_format2('Ymd', $evt['end'])) { $result[] = "end"; } if ($evt['allday'] != $oldRec->isAllday()) { $result[] = "allday"; } if ($evt['locationId'] != $oldRec->getLocationId()) { $result[] = "locationId"; } if ($evt['categoryId'] != $oldRec->getCategoryId()) { $result[] = "categoryId"; } if ($evt['nlId'] != $oldRec->getNlId()) { $result[] = "nlId"; } if ($evt['priority'] != $oldRec->getPriority()) { $result[] = "priority"; } if ($evt['status'] != $oldRec->getStatus()) { $result[] = "status"; } if ($evt['url'] != $oldRec->getUrl()) { $result[] = "url"; } if ($evt['lang'] != $oldRec->getLang()) { $result[] = "lang"; } if ($evt['name'] != $oldRec->getName()) { $result[] = "name"; } if ($evt['description'] != $oldRec->getDescription()) { $result[] = "description"; } if (TikiLib::date_format2('Hi', $evt['start']) != str_pad($oldRec->getStart(), 4, "0", STR_PAD_LEFT)) { $result[] = "_start"; } if (TikiLib::date_format2('Hi', $evt['end']) != str_pad($oldRec->getEnd(), 4, "0", STR_PAD_LEFT)) { $result[] = "_end"; } if ($oldRec->isWeekly()) { if (TikiLib::date_format2('w', $evt['start']) != $oldRec->getWeekday()) { $result[] = "_weekday"; } } elseif ($oldRec->isMonthly()) { if (TikiLib::date_format2('d', $evt['start']) != $oldRec->getDayOfMonth()) { $result[] = "_dayOfMonth"; } } elseif ($oldRec->isMonthlyByWeekday()) { $tmpStart = TikiLib::date_format2('Y/m/d', $this->getStartPeriod()); $tmpStart = explode("/", $tmpStart); if (TikiLib::date_format2('w', $evt['start']) != $oldRec->getMonthlyWeekday() && TikiLib::date_format2('W', $evt['start']) != TikiLib::date_format2('W', TikiLib::make_time(0, 0, 0, $tmpStart[1], 1, $tmpStart[0])) + $this->getMonthlyWeekNumber() - 1) { $result[] = "_monthlyByWeekday"; } } elseif ($oldRec->isYearly()) { if (TikiLib::date_format2('md', $evt['start']) != $oldRec->getDateOfYear()) { $result[] = "_dateOfYear"; } } return $result; }