コード例 #1
0
ファイル: stats.php プロジェクト: drognisep/Simple-Groupware
 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;
 }
コード例 #2
0
ファイル: date.php プロジェクト: drognisep/Simple-Groupware
 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);
     }
 }
コード例 #3
0
 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 "";
 }
コード例 #4
0
 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;
 }
コード例 #5
0
ファイル: modify.php プロジェクト: drognisep/Simple-Groupware
 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);
 }