$smarty->assign('listlanguages', $languages); $smarty->assign('listpriorities', array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')); $smarty->assign('listprioritycolors', array('fff', 'fdd', 'fcc', 'fbb', 'faa', 'f99', 'e88', 'd77', 'c66', 'b66', 'a66')); $smarty->assign('listroles', array('0' => '', '1' => tra('required'), '2' => tra('optional'), '3' => tra('non participant'))); if ($prefs['feature_theme_control'] == 'y') { $cat_type = "calendar"; $cat_objid = $calID; include 'tiki-tc.php'; } $headerlib->add_cssfile('themes/base_files/feature_css/calendar.css', 20); $smarty->assign('referer', empty($_SERVER['HTTP_REFERER']) || strpos($_SERVER['HTTP_REFERER'], 'tiki-calendar_edit_item.php') !== false ? 'tiki-calendar.php' : $_SERVER['HTTP_REFERER']); $smarty->assign('myurl', 'tiki-calendar_edit_item.php'); $smarty->assign('id', $id); $smarty->assign('hour_minmax', $hour_minmax); if (isset($calitem['recurrenceId']) && $calitem['recurrenceId'] > 0) { $cr = new CalRecurrence($calitem['recurrenceId']); $smarty->assign('recurrence', $cr->toArray()); } $headerlib->add_js('function checkDateOfYear(day,month) { var mName = new Array("-","' . tra('January') . '","' . tra('February') . '","' . tra('March') . '","' . tra('April') . '","' . tra('May') . '","' . tra('June') . '","' . tra('July') . '","' . tra('August') . '","' . tra('September') . '","' . tra('October') . '","' . tra('November') . '","' . tra('December') . '}"); var error = false; if (month == 4 || month == 6 || month == 9 || month == 11) if (day == 31) error = true; if (month == 2) if (day > 29) error = true; if (error) { document.getElementById("errorDateOfYear").innerHTML = "<em>' . tra('There\'s no such date as') . ' " + day + " ' . tra('of') . ' " + mName[month] + "</em>"; } else { document.getElementById("errorDateOfYear").innerHTML = "";
function add_coho_recurrence_items(&$eventArray, $calIds, $user, $tstart, $tstop, $offset, $maxRecords, $sort_mode = 'start_asc', $find = '', $customs = array()) { global $prefs; if (count($calIds) == 0) { return; } $where = array(); $bindvars = array(); foreach ($calIds as $calendarId) { $where[] = "i.`calendarId`=?"; $bindvars[] = (int) $calendarId; } $cond = "(" . implode(" or ", $where) . ") and "; // find all recurrences that intersect with the desired range $cond .= " (i.`startPeriod` < ? and (i.`endPeriod` > ? or i.`endPeriod` = 0 or i.`endPeriod` IS NULL))"; $bindvars[] = (int) $tstop; $bindvars[] = (int) $tstart; $cond .= " and ((c.`personal`='y' and i.`user`=?) or c.`personal` != 'y')"; $bindvars[] = $user; $query = "select i.`recurrenceId` as `recurrenceId`, i.`calendarId` as `calendarId`, i.`startPeriod` as `recurrenceStart`, i.`endPeriod` as `recurrenceEnd` "; $tblRef = "i."; $query .= "from `tiki_calendar_recurrence` as i left join `tiki_calendars` as c on i.`calendarId`=c.`calendarId` where ({$cond}) order by " . $tblRef . $this->convertSortMode("{$sort_mode}"); $result = $this->query($query, $bindvars, $maxRecords, $offset); while ($row = $result->fetchRow()) { // calculate the dates/times where we would expect unchanged items to be rendered $recurrenceEntry = new CalRecurrence($row["recurrenceId"]); // want to find where to start and end the rendering, bounded by view and recurrence period $inview_start = $row["recurrenceStart"]; if ($inview_start < $tstart) { $inview_start = $tstart; } $inview_end = $row["recurrenceEnd"]; if ($inview_end == 0) { $inview_end = $tstop; } elseif ($inview_end > $tstop) { $inview_end = $tstop; } $expectedDates = $recurrenceEntry->coho_getUnchangedDates((int) $inview_start, (int) $inview_end); /// NOTE: only one-day events are treated here // query for overrides $override_query = "select `recurrence_override` as `recurrence_override` " . "from `tiki_calendar_items` where `recurrenceId` = ? " . "and `calendarId` = ? "; $override_query .= "and (`recurrence_override` >= ? and `recurrence_override` <= ?) " . "order by `recurrence_override` ASC"; $override_bindvars = array(); $override_bindvars[] = $row["recurrenceId"]; $override_bindvars[] = $row["calendarId"]; $override_bindvars[] = (int) $tstart; $override_bindvars[] = (int) $tstop; $override_result = $this->query($override_query, $override_bindvars); $override_date = $override_result->fetchRow(); // simulate the result of a get_item of an actual event $event = $this->get_coho_unchanged_recurrence_item($row["recurrenceId"], $expectedDates[0]); $render = false; foreach ($expectedDates as $unchangedDate) { // unix timestamp of beginning of day if (!$override_date) { $render = true; } else { if ($override_date['recurrence_override'] != $unchangedDate) { // no overriding event so we can render it unchanged $render = true; } else { $render = false; } } if ($render) { // rendering unchanged // all items in the unchanged recurring event are the same except the date $tmp = str_pad($event["start_time"], 4, "0", STR_PAD_LEFT); $itemhour = substr($tmp, 0, 2); $itemminute = substr($tmp, -2); $time_addition = $itemhour * 3600 + $itemminute * 60; $eventstartTS = $unchangedDate + $time_addition; $event["start"] = $eventstartTS; $event["date_start"] = (int) $eventstartTS; $eventendTS = $eventstartTS + $event["duration"]; $event["end"] = $eventendTS; $event["date_end"] = (int) $eventendTS; $head = TikiLib::date_format($prefs['short_time_format'], $event["start"]) . " - " . TikiLib::date_format($prefs['short_time_format'], $event["end"]); $eventArray["{$unchangedDate}"][] = array("result" => $event, "calitemId" => $event["calitemId"], "calname" => $event["calname"], "time" => $event["start_time"], "end" => $event["end_time"], "type" => $event["status"], "web" => $event["url"], "startTimeStamp" => $eventstartTS, "endTimeStamp" => $eventendTS, "nl" => $event["nlId"], "prio" => $event["priority"], "location" => $event["locationName"], "category" => $event["categoryName"], "name" => $event["name"], "head" => $head, "parsedDescription" => $this->parse_data($event["description"]), "description" => str_replace("\n|\r", "", $event["description"]), "recurrenceId" => $event["recurrenceId"], "calendarId" => $event['calendarId'], "status" => $event['status']); } else { // not rendered, will be rendered in override during non-recurrence rendering // if "used up" this override_date, go to next override date $override_date = $override_result->fetchRow(); } } } }