static function select($folder, $fields, $where, $order, $limit, $vars, $mfolder) { $tname = "simple_sys_stats"; $today = $_SESSION[$tname]["_" . $folder]["today"]; $today_arr = sys_getdate($today); $weekdays = array("{t}Su{/t}", "{t}Mo{/t}", "{t}Tu{/t}", "{t}We{/t}", "{t}Th{/t}", "{t}Fr{/t}", "{t}Sa{/t}"); $weekstart = $_SESSION[$tname]["_" . $folder]["weekstart"]; $t_today = date::$today; $t_then = date::$then; $s_today = $t_today; $s_then = $t_then; if ($_SESSION[$tname]["_" . $folder]["markdate"] == "day") { $dstrings = array(sys_date("Y_M_d", $today), 24, "loghour"); $labels = range(1, 24); } else { if ($_SESSION[$tname]["_" . $folder]["markdate"] == "week") { $dstrings = array(sys_date("Y_W_", $today) . $_SESSION[$tname]["_" . $folder]["weekstart"], 28, "logweekpart"); $labels = array($weekdays[$weekstart], "", "", "", $weekdays[($weekstart + 1) % 7], "", "", "", $weekdays[($weekstart + 2) % 7], "", "", "", $weekdays[($weekstart + 3) % 7], "", "", "", $weekdays[($weekstart + 4) % 7], "", "", "", $weekdays[($weekstart + 5) % 7], "", "", "", $weekdays[($weekstart + 6) % 7], "", "", ""); } else { if ($_SESSION[$tname]["_" . $folder]["markdate"] == "month") { $s_today = mktime(0, 0, 0, $today_arr["mon"], 1, $today_arr["year"]); $s_then = strtotime("+1 month -1 day", $s_today); $dstrings = array(sys_date("Y_M", $today), 31, "logday"); $labels = range(1, 31); } else { $s_today = mktime(0, 0, 0, 1, 1, $today_arr["year"]); $s_then = mktime(0, 0, 0, 12, 31, $today_arr["year"]); $dstrings = array(sys_date("Y", $today), 52, "logweek"); $labels = range(1, 52); } } } if ($t_today != "" and $t_today != $s_today) { foreach ($where as $key => $val) { if (strpos($val, (string) $t_today)) { $where[$key] = str_replace(array($t_today, $t_then), array($s_today, $s_then), $val); } } } $rows = array(); if (in_array("id in (@item@)", $where)) { unset($where[array_search("id in (@item@)", $where)]); } $rows2 = db_select("simple_sys_stats", array("action", $dstrings[2] . " as id", "sum(weight) as weight"), $where, "", "", $vars, array("groupby" => "action, " . $dstrings[2])); $data_all = array("logins" => array(), "pages" => array(), "downloads" => array()); if (is_array($rows2) and count($rows2) > 0) { foreach ($rows2 as $row) { if (!isset($data_all[$row["action"]]) or count($data_all[$row["action"]]) == 0) { $data_all[$row["action"]] = array_fill(0, $dstrings[1], ""); } $data_all[$row["action"]][$row["id"] - 1] = $row["weight"]; } } if (count($data_all) > 0) { foreach ($data_all as $stat => $data) { if (count($data) == 0) { continue; } $id = md5($_SESSION["style"] . $stat . $dstrings[0]); $stat = str_replace("_", " ", ucfirst($stat)); $filename = "preview.php?type=bar&stat=" . $stat . "&style=" . $_SESSION["style"] . "&width=550&height=175&data=" . implode(",", array_slice($data, 0, $dstrings[1])) . "&labels=" . implode(",", array_slice($labels, 0, $dstrings[1])); $row = array(); foreach ($fields as $field) { switch ($field) { case "id": $row[$field] = $id; break; case "created": $row[$field] = 0; break; case "lastmodified": $row[$field] = 0; break; case "lastmodifiedby": $row[$field] = ""; break; case "image": $row[$field] = "<img src='" . $filename . "'/>"; break; case "title": $row[$field] = $stat; break; case "searchcontent": $row[$field] = $stat; break; } } if (sys_select_where($row, $where, $vars)) { $rows[] = $row; } } $rows = sys_select($rows, $order, $limit, $fields); } return $rows; }
static function build_datebox($today, $mark, $weekstart) { $today_arr = sys_getdate($today); $current_month = $today_arr["mon"]; $weekdays = array("{t}Su{/t}", "{t}Mo{/t}", "{t}Tu{/t}", "{t}We{/t}", "{t}Th{/t}", "{t}Fr{/t}", "{t}Sa{/t}"); $months = array("", "{t}January{/t}", "{t}February{/t}", "{t}March{/t}", "{t}April{/t}", "{t}May{/t}", "{t}June{/t}", "{t}July{/t}", "{t}August{/t}", "{t}September{/t}", "{t}October{/t}", "{t}November{/t}", "{t}December{/t}"); if ($mark == "year") { $dates_months = range($today_arr["mon"], $today_arr["mon"] + 11); } else { $dates_months = array($today_arr["mon"]); } $dow = array(); for ($i = 0; $i < 7; $i++) { $index = ($i + $weekstart) % 7; $dow[] = array("date_d" => $weekdays[$index], "date_w" => $index); } $dates = array(); $fstinmonths = array(); foreach ($dates_months as $mon) { $year = $today_arr["year"]; if ($mon > 12) { $mon -= 12; $year++; } $start_day = mktime(0, 0, 0, $mon, 1, $year); $last_day = mktime(0, 0, 0, $mon + 1, 1, $year); $fstinmonths[$mon] = $start_day; $num = sys_date("w", $start_day); if ($num != $weekstart) { $start_day = strtotime("-" . (7 + $num - $weekstart) % 7 . " days", $start_day); } $num = sys_date("w", $last_day); if ((int) $num != (int) $weekstart) { $last_day = strtotime("+" . (7 + $weekstart - $num) % 7 . " days", $last_day); } $date_n = 12; if ($mon != 1) { $date_n = $mon - 1; } $start_week = sys_date("W", $start_day + 86400); for ($i = 0; $i < 42; $i++) { $date_j = sys_date("j", $start_day); if ($date_j == 1) { $date_n++; } if ($date_n == 13) { $date_n = 1; } $week_key = floor($i / 7) + $start_week; if ($week_key > 52) { $week_key = $week_key % 52; } $dates[$mon][$week_key][] = array("timestamp" => $start_day, "j" => $date_j, "n" => $date_n); $start_day = strtotime("+1 day", $start_day); if ($start_day == $last_day) { break; } } } $next_date = strtotime("+1 month", $today); $prev_date = strtotime("-1 month", $today); if ($mark == "year") { $next_date_year = strtotime("+1 year", $today); $prev_date_year = strtotime("-1 year", $today); } else { $next_date_year = $next_date; $prev_date_year = $prev_date; } if ($mark == "month" or $mark == "year" or $mark == "gantt") { $start_day = mktime(0, 0, 0, $today_arr["mon"], 1, $today_arr["year"]); if ($mark == "month" or $mark == "gantt") { $last_day = strtotime("+1 month", $start_day); } else { $last_day = mktime(0, 0, 0, $today_arr["mon"], 1, $today_arr["year"] + 1); } $num = sys_date("w", $last_day); if ((int) $num != (int) $weekstart) { $last_day = strtotime("+" . (7 + $weekstart - $num) % 7 . " days", $last_day); } $num = sys_date("w", $start_day); if ($num != $weekstart) { $start_day = strtotime("-" . (7 + $num - $weekstart) % 7 . " days", $start_day); } $today = $start_day; $tomorrow = $last_day - 1; } else { if ($mark == "week") { $num = sys_date("w", $today); if ($num != $weekstart) { $today = strtotime("-" . (7 + $num - $weekstart) % 7 . " days", $today); } $tomorrow = strtotime("+1 week -1 second", $today); } else { if ($mark == "day") { $tomorrow = $today + 86399; } else { $today = 0; $tomorrow = 0; } } } sys::$smarty->assign("datebox", array("dow" => $dow, "dates" => $dates, "realtoday" => strtotime("00:00:00"), "today" => $today, "week" => sys_date("W", $today + 86400), "month" => $current_month, "year" => sys_date("Y", $fstinmonths[$current_month]), "months" => $months, "mark" => $mark, "next_date" => $next_date, "prev_date" => $prev_date, "next_date" => $next_date, "prev_date" => $prev_date, "next_date_year" => $next_date_year, "prev_date_year" => $prev_date_year, "fstinmonths" => $fstinmonths)); if ($mark != "all") { $today_arr = sys_getdate($today); $tomorrow_arr = sys_getdate($tomorrow); self::_build_datebox_sql($today, $today_arr, $tomorrow, $tomorrow_arr, $mark); } }
static function calcappointment($id, $data, $unused, $table) { if ($data["begin"] > $data["ending"]) { $tmp = $data["begin"]; $data["begin"] = $data["ending"]; $data["ending"] = $tmp; } if (isset($data["allday"]) and $data["allday"] == "1") { $begin_arr = sys_getdate($data["begin"]); $data["begin"] = mktime(0, 0, 0, $begin_arr["mon"], $begin_arr["mday"], $begin_arr["year"]); $end_arr = sys_getdate($data["ending"]); $data["ending"] = mktime(23, 59, 0, $end_arr["mon"], $end_arr["mday"], $end_arr["year"]); } $repeatbegin = 0; $repeatend = 0; if (!empty($data["recurrence"])) { switch ($data["recurrence"]) { case "weeks": $repeatbegin = sys_date("w", $data["begin"]); $repeatend = sys_date("w", $data["ending"]); break; case "months": $repeatbegin = sys_date("j", $data["begin"]); $repeatend = sys_date("j", $data["ending"]); break; case "years": $repeatbegin = sys_date("z", $data["begin"]); $repeatend = sys_date("z", $data["ending"]); if ($repeatbegin > 58) { $repeatbegin--; } // leap year if ($repeatend > 58) { $repeatend++; } break; } } $datas = array("begin" => $data["begin"], "ending" => $data["ending"], "duration" => $data["ending"] - $data["begin"], "repeatbegin" => $repeatbegin, "repeatend" => $repeatend); $begin = strtotime("00:00:00", $data["begin"]); $days = min(ceil(($data["ending"] - $begin) / 86400), 31); $occurs = array(); $occurs_weeks = array(); self::_get_occurrence($begin, $days, $occurs, $occurs_weeks); $diff = $data["begin"] - $begin; $max_recurrence = strtotime("+3 years", NOW); $recurs = array(); if (!empty($data["recurrence"])) { $recurs[] = $begin + $diff; $excludes = explode("|", $data["repeatexcludes"]); $counter = 0; while ($data["repeatcount"] != 1 and $counter < 150 and $begin < $max_recurrence) { $begin = strtotime("+" . (int) $data["repeatinterval"] . " " . $data["recurrence"], $begin); if ($data["repeatuntil"] != 0 and $begin > $data["repeatuntil"]) { break; } if (in_array($begin, $excludes)) { continue; } self::_get_occurrence($begin, $days, $occurs, $occurs_weeks); $recurs[] = $begin + $diff; if ($data["repeatcount"] != 0) { $data["repeatcount"]--; } $counter++; } } if (!empty($occurs)) { $datas["until"] = strtotime(preg_replace("!(\\d{2})(\\d{2})(\\d{2})!", "\\1-\\2-\\3", $occurs[count($occurs) - 1])); } else { $datas["until"] = $data["ending"]; } $datas["occurs"] = self::_scalarize($occurs); $datas["occurs_weeks"] = self::_scalarize(array_unique($occurs_weeks)); $datas["recurs"] = self::_scalarize($recurs); if ($id != "") { db_update($table, $datas, array("id=@id@"), array("id" => $id)); self::notify($id, array_merge($data, $datas), array(), $table); } else { return $datas; } return ""; }
private static function _parse($file) { if ($data = sys_cache_get("icalendar_" . sha1($file))) { return $data; } if ($message = sys_allowedpath(dirname($file))) { sys_warning(sprintf("{t}Cannot read the file %s. %s{/t}", $file, $message)); return array(); } $rows = array(); if (!($handle = fopen($file, "rb"))) { sys_warning(sprintf("{t}Cannot read the file %s. %s{/t}", $file, "")); return array(); } $i = 0; $evopen = false; $lines = array(); while (!feof($handle)) { $line = fgets($handle, 10000); $line = str_replace(array("\r", "\n", "\\n"), array("", "", "\n"), $line); if ($line == "") { continue; } if ($line[0] == " ") { $lines[count($lines) - 1] .= substr($line, 1); } else { $lines[] = $line; } } fclose($handle); foreach ($lines as $line) { $line = trim($line); switch ($line) { case "BEGIN:VEVENT": $i++; $evopen = true; $rows[$i] = array("subject" => "", "begin" => 0, "ending" => 0, "created" => 0, "duration" => 0, "lastmodified" => 0, "allday" => "0", "location" => "", "description" => "", "organizer" => array(), "participants_ext" => array(), "category" => "", "priority" => "3", "recurrence" => "", "repeatinterval" => 1, "repeatcount" => "0", "repeatuntil" => 0, "repeatexcludes" => array()); break; case "BEGIN:VALARM": $evopen = false; break; case "END:VEVENT": $evopen = false; $begin = sys_getdate($rows[$i]["begin"]); $end = sys_getdate($rows[$i]["ending"]); if ($rows[$i]["lastmodified"] == 0) { $rows[$i]["lastmodified"] = $rows[$i]["created"]; } if ($begin["hours"] == 0 and $end["hours"] == 0 and $begin["minutes"] == 0 and $end["minutes"] == 0) { if ($rows[$i]["begin"] == $rows[$i]["ending"]) { $rows[$i]["ending"] += 86399; } else { $rows[$i]["ending"]--; } $rows[$i]["allday"] = "1"; } foreach ($rows[$i] as $key => $item) { if (is_array($item)) { $rows[$i][$key] = self::_array_flat($item); } } if ($rows[$i]["ending"] != "" and $rows[$i]["begin"] != "") { $rows[$i]["duration"] = $rows[$i]["ending"] - $rows[$i]["begin"]; } $rows[$i] = array_merge($rows[$i], trigger::calcappointment("", $rows[$i], null, "")); // $rows[$i]["begin_str"] = date("D d-m-y H:i:s",$rows[$i]["begin"]); // $rows[$i]["end_str"] = date("D d-m-y H:i:s",$rows[$i]["ending"]); break; default: if (!$evopen) { break; } $pos = strpos($line, ":"); $first = substr($line, 0, $pos); $value_str = str_replace(array("\\,", "\\n", "\\N"), array(",", "\n", "\n"), substr($line, $pos + 1)); if ($pos2 = strpos($first, ";")) { $kval = substr($first, 0, $pos2); } else { $kval = $first; } switch ($kval) { case "SUMMARY": $rows[$i]["subject"] = $value_str; break; case "DESCRIPTION": $rows[$i]["description"] = $value_str; break; case "LOCATION": $rows[$i]["location"] = $value_str; break; case "CLASS": if ($rows[$i]["category"] != "" and $value_str != "") { $rows[$i]["category"] .= ","; } $rows[$i]["category"] .= ucfirst(strtolower($value_str)); break; case "CATEGORIES": if ($rows[$i]["category"] != "") { $rows[$i]["category"] .= ","; } $rows[$i]["category"] .= $value_str; break; case "UID": $rows[$i]["id"] = $value_str; break; case "SEQUENCE": $rows[$i]["sequence"] = $value_str; break; case "DTSTART": $rows[$i]["begin"] = modify::ical_datetime_to_int($value_str); break; case "DTEND": $rows[$i]["ending"] = modify::ical_datetime_to_int($value_str); break; case "LAST-MODIFIED": $rows[$i]["lastmodified"] = modify::ical_datetime_to_int($value_str); break; case "DTSTAMP": $rows[$i]["created"] = modify::ical_datetime_to_int($value_str); break; case "DURATION": if (!preg_match("/PT?([0-9]{1,2}W)?([0-9]{1,2}D)?([0-9]{1,2}H)?([0-9]{1,2}M)?/", $value_str, $match)) { break; } $match = array_merge($match, array(0, 0, 0, 0)); $rows[$i]["ending"] = $rows[$i]["begin"] + str_replace("W", "", $match[1]) * 604800 + str_replace("D", "", $match[2]) * 86400 + str_replace("H", "", $match[3]) * 3600 + str_replace("M", "", $match[4]) * 60; break; case "RRULE": $value = explode(";", $value_str); foreach ($value as $val) { $val = explode("=", $val); switch ($val[0]) { case "FREQ": switch ($val[1]) { case "YEARLY": $rows[$i]["recurrence"] = "years"; break; case "MONTHLY": $rows[$i]["recurrence"] = "months"; break; case "WEEKLY": $rows[$i]["recurrence"] = "weeks"; break; case "DAILY": $rows[$i]["recurrence"] = "days"; break; } break; case "INTERVAL": $rows[$i]["repeatinterval"] = $val[1]; break; case "COUNT": $rows[$i]["repeatcount"] = $val[1]; break; case "UNTIL": $rows[$i]["repeatuntil"] = modify::ical_datetime_to_int($val[1]); break; } } break; case "EXDATE": $rows[$i]["repeatexcludes"][] = modify::ical_datetime_to_int($value_str); break; case "ORGANIZER": $value = explode(";", $value_str); $key = explode(";", $first); if (isset($value[1])) { $value[0] = $value[1]; } if (isset($key[1])) { $value[0] = str_replace(array("CN=", "\""), "", $key[1]) . " (" . str_replace(array("MAILTO:", "mailto:"), "", $value[0]) . ")"; } $rows[$i]["organizer"][] = $value[0]; break; case "ATTENDEE": $value = explode(";", $value_str); $key = explode(";", $first); if (isset($value[1])) { $value[0] = $value[1]; } $value[0] = str_replace(array("MAILTO:", "mailto:"), "", $value[0]); if (isset($key[1]) and strpos($key[1], "CN=") !== false) { $value[0] = str_replace(array("CN=", "\""), "", $key[1]) . " (" . $value[0] . ")"; } $rows[$i]["participants_ext"][] = $value[0]; break; default: // echo $line."<br>\n"; break; } break; } } sys_cache_set("icalendar_" . sha1($file), $rows, ICALENDAR_CACHE); return $rows; }
static function shortdatetimeformat($args) { if ($args == 0) { return ""; } $time_arr = sys_getdate(); $format = "{t}m/d/Y g:i a{/t}"; $args_arr = sys_getdate($args); if ($args_arr["hours"] == 0 and $args_arr["minutes"] == 0 or $args_arr["hours"] == 23 and $args_arr["minutes"] == 59) { $format = "{t}m/d/Y{/t}"; } else { $midnight = mktime(0, 0, 0, $time_arr["mon"], $time_arr["mday"], $time_arr["year"]); if ($midnight + 2678400 < $args) { // more than 31 days future $format = "{t}m/d/Y g:i a{/t}"; } else { if ($midnight + 86400 < $args) { // more than 1 day future $format = "{t}M j, g:i a{/t}"; } else { if ($midnight < $args) { // today $format = "{t}g:i a{/t}"; } else { if ($midnight - 518400 < $args) { // 6 days past $format = "{t}M j, g:i a{/t}"; } } } } } return self::_mydate($format, $args); }