static function init()
 {
     self::$selects["default_style"] = array("{t}Default theme{/t}", select::themes());
     self::$selects["timezone"] = array("{t}Time zone{/t}, {t}current time{/t}: " . sys_date("{t}g:i a{/t}"), select::timezones(true));
     self::$selects["lang"] = array("{t}Default language{/t}", select::languages());
     $modules = select::modules_all();
     asort($modules);
     self::$multi_selects["disabled_modules"] = array("{t}Disabled modules{/t}", $modules);
     if (empty($_REQUEST["setup_auth_ldap_groups"])) {
         $_POST["setup_auth_ldap_groups"] = 0;
         $_REQUEST["setup_auth_ldap_groups"] = 0;
     }
 }
Exemple #2
0
 static function build_history($type, $value, $data_old)
 {
     if ($value == "0" and in_array($type, array("folder", "date", "datetime", "time"))) {
         return "";
     }
     switch ($type) {
         case "folder":
             $value = modify::getpathfull($value, false, "/") . " ([/" . $value . "])";
             break;
         case "password":
             $value = "";
             break;
         case "date":
             $value = sys_date("{t}m/d/Y{/t}", $value);
             break;
         case "datetime":
             $value = sys_date("{t}m/d/Y g:i a{/t}", $value);
             break;
         case "time":
             $value = sys_date("{t}g:i a{/t}", $value);
             break;
         case "dateselect":
             $data = array();
             foreach (explode("|", trim($value, "|")) as $date) {
                 $data[] = sys_date("{t}m/d/Y{/t}", $date);
             }
             $value = implode(", ", $data);
             break;
         case "files":
             $new = explode("|", trim($value, "|"));
             $old = explode("|", trim($data_old, "|"));
             $value = array("");
             foreach ($new as $file) {
                 if ($file != "" and !in_array($file, $old)) {
                     $value[] = "+ " . modify::basename($file);
                 }
             }
             foreach ($old as $file) {
                 if ($file != "" and !in_array($file, $new)) {
                     $value[] = "- " . modify::basename($file);
                 }
             }
             $value = rtrim(implode("\n  ", $value));
             break;
         case "select":
             $value = str_replace("|", ", ", trim($value, "|"));
             break;
         case "checkbox":
             $value = $value ? "{t}yes{/t}" : "{t}no{/t}";
             break;
         case "textarea":
             $value = self::build_diff($data_old, $value);
             break;
         default:
             if (is_call_type($type)) {
                 $value = call_type($type, "build_history", $data_old, $value);
             }
             break;
     }
     return $value;
 }
Exemple #3
0
 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 simple_contacts($id, $data)
 {
     if (empty($data["birthday"])) {
         return "";
     }
     $delivery = strtotime("-2 days " . sys_date("Y-m-d", $data["birthday"]));
     $subject = sprintf("{t}Birthday{/t}: %s, %s - %s", $data["lastname"], $data["firstname"], SMTP_REMINDER);
     $message = self::_message($id, $data, array("lastname", "firstname", "company", "email", "birthday"), "contacts");
     db_notification_add("simple_contacts|" . $id . "&birthday", $data["notification"], $subject, $message, $delivery, "+1 year");
     return "";
 }
" name="iframe_<?php 
    echo q($key);
    ?>
" style="width:100%; height:350px; border:0px; margin-top:5px; margin-bottom:9px;"></iframe>
	</td></tr></table>
  <?php 
}
if (!$this->rows) {
    ?>
	{t}No entries found.{/t} ({t}Offline folders{/t})<br>
  <?php 
}
?>
  <br>
  <div id="online">
	{t}Read this page offline:{/t}<br/>
	<ul>
	  <li>Android: Context menu -> Save for offline reading</li>
	  <li>Safari: Reading List -> Add page</li>
	  <li>Firefox: Install the "Readability" or "Read it later" extension</li>
	</ul>
  </div>
  <span style="float:right;"><?php 
echo sys_date("{t}m/d/y g:i:s a{/t}");
?>
</span>
  <div style="white-space:nowrap; border-top: 1px solid black;">  
    <a href="http://www.simple-groupware.de" class="lnotice" target="_blank" onmouseover="set_html(this,'Powered by Simple Groupware, Copyright (C) 2002-2012 by Thomas Bley.');" onmouseout="set_html(this,'Powered by Simple Groupware.');">Powered by Simple Groupware.</a>
  </div>
</body>
</html>
Exemple #6
0
function sys_log_stat($action, $weight)
{
    if (empty($_SESSION["username"])) {
        return;
    }
    if ($weight == 0) {
        return;
    }
    db_insert("simple_sys_stats", array("id" => sql_genID("simple_sys_stats") * 100, "username" => $_SESSION["username"], "loghour" => sys_date("H"), "logday" => sys_date("d"), "logweek" => sys_date("W"), "logweekpart" => floor((sys_date("w") * 24 + sys_date("H") + 1) / 6), "action" => $action, "uri" => substr(_sys_request_uri(), 0, 250), "weight" => $weight));
}
function show_table($data, $full_texts = false, $vertical = true)
{
    if (count($data) == 0) {
        return "";
    }
    $limit = Max(round(220 / count($data[0])), 20);
    if ($vertical) {
        $limit = 150;
    }
    $content = "<table border='0' cellpadding='0' cellspacing='0'>";
    if (!$vertical) {
        $content .= "<tr>";
        foreach (array_keys($data[0]) as $value) {
            if ($full_texts and strlen($value) > $limit) {
                $value = substr($value, 0, $limit) . "...";
            }
            $content .= "<td nowrap><b>" . q($value) . "</b></td>";
        }
        $content .= "</tr>";
    }
    foreach ($data as $dataset) {
        if ($vertical) {
            foreach ($dataset as $key => $value) {
                if ($value == "") {
                    continue;
                }
                $content .= "<tr onmouseover='this.style.backgroundColor=\"#EFEFEF\";' onmouseout='this.style.backgroundColor=\"\";'>";
                $content .= "<td style='width:25%;' valign='top'><b>" . q($key) . "</b></td>";
                $hint = $value;
                if (is_numeric($value) and strlen($value) == 10) {
                    $value .= " / " . sys_date("Y-m-d H:i:s a", $value);
                }
                if (!$full_texts and strlen($value) > $limit) {
                    $value = substr($value, 0, $limit) . "...";
                }
                $content .= "<td title='" . q($hint) . "'>" . nl2br(q($value)) . "</td></tr>";
            }
            $content .= "<tr><td colspan='2'><hr></td></tr>";
        } else {
            $content .= "<tr onmouseover='this.style.backgroundColor=\"#EFEFEF\";' onmouseout='this.style.backgroundColor=\"\";'>";
            foreach ($dataset as $key => $value) {
                if ($vertical) {
                    if ($full_texts and strlen($key) > $limit) {
                        $key = substr($key, 0, $limit) . "...";
                    }
                    $content .= "<td nowrap><b>" . q($key) . "</b></td>";
                }
                $hint = $value;
                if (is_numeric($value) and strlen($value) == 10) {
                    $hint = sys_date("Y-m-d H:i:s a", $value);
                }
                if (!$full_texts and strlen($value) > $limit) {
                    $value = substr($value, 0, $limit) . "...";
                }
                $content .= "<td nowrap title='" . q($hint) . "'>" . q($value) . "</td>";
            }
            $content .= "</tr>";
        }
    }
    return $content . "</table>";
}
Exemple #8
0
 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 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 _move($ccp, $folder, $sgsml)
 {
     if (empty($sgsml->att["DISABLE_TRIGGER_CCP"]) and (!empty($sgsml->att["TRIGGER_NEW"]) or !empty($sgsml->att["TRIGGER_DELETE"]))) {
         $ccp["data_fields"] = array("*");
     } else {
         if (in_array("notification", $ccp["data_fields"])) {
             $ccp["data_fields"] = array("id", "folder", "notification");
             foreach ($sgsml->fields as $key => $field) {
                 if (isset($field["REQUIRED"]) and !in_array($key, $ccp["data_fields"])) {
                     $ccp["data_fields"][] = $key;
                 }
             }
         } else {
             $ccp["data_fields"] = array("id", "folder");
         }
     }
     $vars = array("handler" => $ccp["handler"], "sqlvarsnoquote" => $ccp["vars_noquote"], "custom_name" => $ccp["custom_name"], "default_sql" => $ccp["default_sql"]);
     $rows = db_select($ccp["tname"], $ccp["data_fields"], $ccp["where"], "", "", array("item" => $ccp["items"], "folder" => $ccp["folder"], "folders" => $ccp["folders"]), $vars);
     if (is_array($rows) and count($rows) < count($ccp["items"])) {
         exit("{t}Item(s) not found or access denied.{/t}");
     }
     $default_values = folder_get_default_values($folder);
     $messages = array();
     foreach ($rows as $row) {
         $folder_source = $row["folder"];
         if (empty($folder_source) or $folder_source == $folder or !db_get_right($folder_source, "write")) {
             continue;
         }
         $sgsml->vars["id"] = array($row["id"]);
         $sgsml->vars["folders"] = array($folder_source);
         if (!empty($sgsml->att["DISABLE_TRIGGER_CCP"])) {
             unset($sgsml->att["TRIGGER_EDIT"]);
         }
         $result = 0;
         if (!is_numeric($folder)) {
             $sgsml->vars["id"] = $row["id"];
             $sgsml->vars["folder_source"] = $folder_source;
             $sql_data = array_merge($default_values, array("folder" => $folder));
             $sql_data["history"] = sprintf("{t}Item edited (%s) by %s at %s{/t}\n", "@fields@", $_SESSION["username"], sys_date("{t}m/d/y g:i:s a{/t}"));
             $sql_data = $sgsml->build_history($sql_data, $row);
             $error_sql = db_update($sgsml->tname, $sql_data, array("id=@id@"), $sgsml->vars, array("handler" => $sgsml->handler));
             if ($error_sql != "") {
                 $messages[] = "{t}SQL failed.{/t} " . $error_sql;
             }
             if (!empty($sgsml->att["TRIGGER_EDIT"]) and empty($sgsml->att["DISABLE_TRIGGER_CCP"])) {
                 $return = asset_process_trigger($sgsml->att["TRIGGER_EDIT"], $row["id"], $row, $sgsml->tname);
                 if ($return != "") {
                     $messages[] = "{t}Trigger failed{/t}: " . $return;
                 }
             }
             if (!empty($row["notification"])) {
                 $row["folder"] = $folder;
                 $smtp_data = asset::build_notification($sgsml->tname, $sgsml->fields, $row, $sql_data, $row["id"]);
                 $return = asset_process_trigger("sendmail", $row["id"], $smtp_data);
                 if ($return != "") {
                     $messages[] = "{t}Trigger failed{/t}: " . $return;
                 }
             }
         } else {
             $sql_data = array_merge($default_values, array("folder" => $folder));
             $result = $sgsml->update($sql_data, $row["id"]);
         }
         if (!is_numeric($result)) {
             if (is_array($result) and count($result) > 0) {
                 $message = "{t}Error pasting asset{/t}:";
                 foreach ($result as $field => $errors) {
                     foreach ($errors as $error) {
                         $message .= "\n" . $error[0] . ": " . $error[1];
                     }
                 }
             } else {
                 $message = $result;
             }
             $messages[] = $message;
         } else {
             sys_log_stat("moved_records", 1);
         }
     }
     return $messages;
 }
Exemple #11
0
 private function _save(array &$data, $id = -1)
 {
     $insert = ($id > 0 or !is_numeric($id)) ? false : true;
     if (count($data) == 0) {
         return array();
     }
     if (!empty($this->att["DEFAULT_SQL"]) and $this->att["DEFAULT_SQL"] == "no_select") {
         return self::_error("{t}Module{/t}", "{t}Access denied.{/t}");
     }
     if (!empty($data["folder"])) {
         // check permissions
         if (!db_get_right($data["folder"], "write", $this->view)) {
             return self::_error("{t}Folder{/t}", "{t}Access denied.{/t}", "folder");
         }
         $this->folder = $data["folder"];
     } else {
         $data["folder"] = $this->folder;
     }
     // fill data array
     list($rdata, $data_row, $error) = $this->_complete_data($data, $id);
     if ($error) {
         return $error;
     }
     // validate
     if ($result = $this->_validate($rdata, $id)) {
         return $result;
     }
     if ($insert) {
         $id = sql_genID($this->tname) * 100;
         $sql_data = array("id" => $id, "dsize" => 0, "history" => sprintf("{t}Item created by %s at %s{/t}\n", $_SESSION["username"], sys_date("{t}m/d/y g:i:s a{/t}")));
     } else {
         $sql_data = array("dsize" => 0, "history" => sprintf("{t}Item edited (%s) by %s at %s{/t}\n", "@fields@", $_SESSION["username"], sys_date("{t}m/d/y g:i:s a{/t}")));
     }
     // count sizes, move files to store, delete old files
     foreach ($this->current_fields as $field_name => $field) {
         if ($field["SIMPLE_TYPE"] == "id") {
             continue;
         }
         if ($field["SIMPLE_TYPE"] == "files" and !empty($rdata[$field_name])) {
             foreach ($rdata[$field_name] as $val) {
                 if (file_exists($val)) {
                     $sql_data["dsize"] += filesize($val);
                 }
             }
             // TODO 2 store handler?
             if (!empty($data_row[$field_name])) {
                 $data_old = explode("|", trim($data_row[$field_name], "|"));
                 foreach ($data_old as $filekey => $file) {
                     if (in_array($file, $rdata[$field_name])) {
                         continue;
                     }
                     if (ARCHIVE_DELETED_FILES and file_exists($file)) {
                         $i = 1;
                         $m = "";
                         $trash_name = SIMPLE_STORE . "/trash/" . $this->folder . "_" . $id . "_";
                         $trash_file = modify::basename($file);
                         while (file_exists($trash_name . $m . $trash_file)) {
                             $m = $i++ . "_";
                         }
                         rename($file, $trash_name . $m . $trash_file);
                         touch($trash_name . $m . $trash_file);
                     } else {
                         @unlink($file);
                     }
                 }
             }
             foreach ($rdata[$field_name] as $filekey => $file) {
                 if ($file == "") {
                     unset($rdata[$field_name][$filekey]);
                     $data[$field_name] = implode("|", $rdata[$field_name]);
                     continue;
                 }
                 if (file_exists(SIMPLE_CACHE . "/upload/" . basename($file))) {
                     $filebase = modify::basename(basename($file));
                     list($target, $filename) = sys_build_filename($filebase, $this->tname);
                     dirs_checkdir($target);
                     $target .= sys_get_pathnum($id) . "/";
                     dirs_checkdir($target);
                     $target .= md5($id) . $filename;
                     rename(SIMPLE_CACHE . "/upload/" . basename($file), $target);
                     $rdata[$field_name][$filekey] = $target;
                     $data[$field_name] = implode("|", $rdata[$field_name]);
                 }
             }
             $basenames = array();
             foreach (array_reverse($rdata[$field_name]) as $filekey => $file) {
                 $basename = modify::basename($file);
                 if (isset($basenames[$basename])) {
                     $old_filekey = $basenames[$basename];
                     $basename = preg_replace("|_rev\\d+|", "", $basename);
                     $base = $basename;
                     $i = 1;
                     while (isset($basenames[$basename])) {
                         if ($pos = strrpos($base, ".")) {
                             $basename = substr($base, 0, $pos) . "_rev" . $i++ . substr($base, $pos);
                         } else {
                             $basename = $base . "_rev" . $i++;
                         }
                     }
                     $target = str_replace(modify::basename($file), $basename, $file);
                     if (rename($file, $target)) {
                         // swap
                         $rdata[$field_name][$filekey] = $rdata[$field_name][$old_filekey];
                         $rdata[$field_name][$old_filekey] = $target;
                         $data[$field_name] = implode("|", $rdata[$field_name]);
                     }
                 }
                 $basenames[$basename] = $filekey;
             }
         }
         if (!empty($field["STORE"]) and is_array($field["STORE"])) {
             foreach ($field["STORE"] as $store) {
                 list($class, $function, $params) = sys_find_callback("modify", $store["FUNCTION"]);
                 $rdata[$field_name] = call_user_func(array($class, $function), $rdata[$field_name], $rdata, $params);
             }
         }
         if (!isset($sql_data[$field_name]) and !is_null($rdata[$field_name])) {
             $sql_data[$field_name] = $rdata[$field_name];
         }
     }
     // transform
     foreach ($sql_data as $key => $value) {
         $sql_data[$key] = self::scalarize($value, $this->fields[$key]);
     }
     // reduce to new values
     $sys_fields = array("history" => "", "dsize" => "", "seen" => "");
     foreach ($sql_data as $data_key => $data_value) {
         if (isset($sys_fields[$data_key])) {
             continue;
         }
         $addfield = true;
         $field = $this->fields[$data_key];
         if (!isset($this->current_fields[$data_key])) {
             $addfield = false;
         }
         if (isset($field["NOTINALL"])) {
             $addfield = false;
         }
         if (isset($field["NOTIN"]) and in_array($this->view, $field["NOTIN"])) {
             $addfield = false;
         }
         if (isset($field["READONLYIN"]) and (in_array($this->view, $field["READONLYIN"]) or in_array("all", $field["READONLYIN"]))) {
             $addfield = false;
         }
         if (isset($field["ONLYIN"])) {
             if (in_array($this->view, $field["ONLYIN"])) {
                 $addfield = true;
             } else {
                 $addfield = false;
             }
         }
         if (!$addfield) {
             unset($sql_data[$data_key]);
         }
     }
     // build history
     $sql_data = $this->build_history($sql_data, $data_row);
     if (!array_diff(array_keys($sql_data), array("history", "seen"))) {
         $sql_data = array();
     }
     // save in db
     if ($insert) {
         $error_sql = db_insert($this->tname, $sql_data, array("handler" => $this->handler));
         if ($error_sql != "") {
             return self::_error("{t}SQL failed.{/t}", $error_sql);
         }
         if ($this->notification) {
             sys_notification("{t}Item successfully created.{/t} (" . $id . ")");
         }
     } else {
         if (count($sql_data) == 0) {
             return $id;
         }
         $error_sql = db_update($this->tname, $sql_data, array("id=@id@"), array("id" => $id, "folder" => $this->folder), array("handler" => $this->handler));
         if ($error_sql != "") {
             return self::_error("{t}SQL failed.{/t}", $error_sql);
         }
         if ($this->notification) {
             sys_notification("{t}Item successfully updated.{/t} (" . (is_numeric($id) ? $id : 1) . ")");
         }
     }
     if (empty($this->handler)) {
         db_update("simple_sys_tree", array("history" => "[" . $id . "/details] " . $sql_data["history"]), array("id=@id@"), array("id" => $this->folder));
         db_update_treesize($this->tname, $this->folder);
         if (!$insert and $this->folder != $data_row["folder"]) {
             db_update("simple_sys_tree", array("history" => "[" . $id . "/details] " . $sql_data["history"]), array("id=@id@"), array("id" => $data_row["folder"]));
             db_update_treesize($this->tname, $data_row["folder"]);
             db_search_delete($this->tname, $id, $data_row["folder"]);
         }
         if (empty($this->att["NO_SEARCH_INDEX"])) {
             db_search_update($this->tname, $id, $this->fields);
         }
         sys_log_stat($insert ? "new_records" : "changed_records", 1);
     }
     // call triggers
     $trigger = "";
     if ($insert and !empty($this->att["TRIGGER_NEW"])) {
         $trigger = $this->att["TRIGGER_NEW"];
     }
     if (!$insert and !empty($this->att["TRIGGER_EDIT"])) {
         $trigger = $this->att["TRIGGER_EDIT"];
     }
     if ($trigger and $result = asset_process_trigger($trigger, $id, $rdata, $this->tname)) {
         return self::_error("{t}Trigger failed{/t}", $result);
     }
     // send notification
     $tree_notification = db_select_value("simple_sys_tree", "notification", "id=@id@", array("id" => $this->folder));
     if ($tree_notification != "") {
         $rdata["notification"] .= "," . $tree_notification;
     }
     if (!$insert and $this->folder != $data_row["folder"]) {
         $tree_notification = db_select_value("simple_sys_tree", "notification", "id=@id@", array("id" => $data_row["folder"]));
         if ($tree_notification != "") {
             $rdata["notification"] .= "," . $tree_notification;
         }
     }
     if (!empty($rdata["notification"])) {
         $rdata["notification"] = trim($rdata["notification"], ",");
         $smtp_data = asset::build_notification($this->att["NAME"], $this->current_fields, $rdata, $sql_data, $id, $data_row);
         if ($result = asset_process_trigger("sendmail", $id, $smtp_data)) {
             return self::_error("{t}Trigger failed{/t}", $result);
         }
     }
     // update stats
     if (!empty($this->handler)) {
         foreach ($sql_data as $data_key => $data_value) {
             $field = $this->fields[$data_key];
             if ($field["SIMPLE_TYPE"] != "files") {
                 continue;
             }
             foreach (explode("|", $data_value) as $file) {
                 if (sys_strbegins($file, SIMPLE_CACHE . "/upload/")) {
                     @unlink($file);
                 }
             }
         }
     }
     return $id;
 }
Exemple #12
0
function _upload_create_file($db_path, $target_lnk, $path, $filename)
{
    list($id, $left, $unused) = _upload_process_folder_string($db_path . "/");
    if ($left != 0 or $id == 0) {
        sys_error("path not found", "409 Conflict");
    }
    $ftype = db_select_value("simple_sys_tree", "ftype", "id=@id@", array("id" => $id));
    if (db_get_right($id, "write") and !empty($ftype) and $ftype == "files") {
        list($target, $a_filename) = sys_build_filename($filename, "simple_files");
        dirs_checkdir($target);
        $target .= sys_get_pathnum($id) . "/";
        dirs_checkdir($target);
        $target .= md5($id) . $a_filename;
        if ($fp = fopen("php://input", "r") and $ft = fopen($target, "wb")) {
            while (!feof($fp)) {
                fwrite($ft, fread($fp, 8192));
            }
            fclose($fp);
            fclose($ft);
            $a_id = sql_genID("simple_files") * 100;
            $data = array("id" => $a_id, "folder" => $id, "dsize" => filesize($target), "filedata" => "|" . $target . "|", "filename" => $filename, "rread_users" => "|anonymous|", "rwrite_users" => "|anonymous|", "history" => t("{t}Item created by %s at %s{/t}", $_SESSION["username"], sys_date(t("{t}m/d/y g:i:s a{/t}"))) . "\n");
            $error_sql = db_insert("simple_files", $data);
            if ($error_sql == "") {
                db_update_treesize("simple_files", $id);
                $fields = array("filename" => "text", "filedata" => "files", "folder" => "id", "id" => "id");
                db_search_update("simple_files", $a_id, array(), $fields);
                sys_log_stat("new_records", 1);
                file_put_contents($target_lnk, $path . "/" . $a_id . "_0__" . $filename . "\n" . $target, LOCK_EX);
                _upload_success();
            }
        }
    }
    sys_error("cant write new", "403 Forbidden");
}
Exemple #13
0
 static function replymessage($value, $args, $data)
 {
     if ($value != "") {
         $value = trim(str_replace("\n", "\n> ", "\n" . wordwrap($value)));
         if (!empty($data["efrom"]["data"][0]) and !empty($data["created"])) {
             $value = self::dateformat($data["created"], array("", "{t}m/d/Y{/t}")) . ", " . $data["efrom"]["data"][0] . ":\n" . $value;
         }
         $value = "\n\n\n" . $value;
     }
     if (isset($_REQUEST["return_receipt"])) {
         $value = sprintf("{t}Your message was read on %s.{/t}", sys_date("r")) . $value;
     }
     return $value;
 }
Exemple #14
0
 private static function _import_delete($folder, $id, $tname, $module)
 {
     $where = array("folder=@folder@");
     if ($id[0] == "_") {
         $where[] = "id=@id@";
     } else {
         $where[] = "syncid=@id@";
     }
     $row_id = db_select_value($tname, "id", $where, array("id" => trim($id, "_"), "folder" => $folder));
     if (!empty($row_id)) {
         $trash = db_select_value("simple_sys_tree", "id", "anchor=@anchor@", array("anchor" => "trash"));
         if (empty($trash)) {
             sys_warning("{t}Error{/t}: {t}Trash folder not found.{/t}");
             return;
         }
         $id = folders::create(sys_date("{t}m/d/Y{/t}"), "blank", "", $trash, true);
         $id2 = folders::create($module, str_replace("simple_", "", $tname), "", $id, true);
         $data = array("folder" => $id2, "history" => sprintf("{t}Item deleted by %s at %s{/t}\n", $_SESSION["username"], sys_date("{t}m/d/y g:i:s a{/t}")));
         db_update($tname, $data, array("id=@id@"), array("id" => $row_id));
         db_update_treesize($tname, $folder);
         db_search_delete($tname, $row_id, $folder);
         sys_log_stat("deleted_records", 1);
     }
 }
 static function delete($folder)
 {
     $row = db_select_first("simple_sys_tree", array("id", "rgt", "lft", "ftitle", "parent"), "id=@id@", "", array("id" => $folder));
     $rows = array();
     if (!empty($row["id"])) {
         $rows = db_select("simple_sys_tree", array("id", "ftype"), "lft between @left@ and @right@", "lft asc", "", array("left" => $row["lft"], "right" => $row["rgt"]));
     }
     if (!is_array($rows) or count($rows) == 0) {
         return "";
     }
     if (!folder_in_trash($folder)) {
         $trash = db_select_value("simple_sys_tree", "id", "anchor=@anchor@", array("anchor" => "trash"));
         if (empty($trash)) {
             exit("{t}Error{/t}: {t}Trash folder not found.{/t}");
         }
         $id = self::create(sys_date("{t}m/d/Y{/t}"), "blank", "", $trash, true);
         $old_path = modify::getpath($folder);
         if (!self::move($row["id"], $id, true)) {
             exit("{t}The folder cannot be deleted.{/t}");
         }
         $data = array("rread_users" => "", "rread_groups" => "", "rwrite_users" => "", "rwrite_groups" => "", "radmin_users" => "", "radmin_groups" => "", "rexception_users" => "", "rexception_groups" => "", "anchor" => "");
         $data["history"] = sprintf("{t}Item deleted by %s at %s{/t}\n", $_SESSION["username"], sys_date("{t}m/d/y g:i:s a{/t}"));
         foreach ($rows as $folder) {
             db_update("simple_sys_tree", $data, array("id=@id@"), array("id" => $folder["id"]));
         }
         db_update("simple_sys_tree", array("history" => "{t}Origin{/t}: " . $old_path . "\n"), array("id=@id@"), array("id" => $rows[0]["id"]));
         sys_log_stat("deleted_folders", count($rows));
     } else {
         foreach ($rows as $folder) {
             if ($folder["ftype"] != "sys_tree") {
                 $schema_data = db_get_schema(sys_find_module($folder["ftype"]));
                 $tname = $schema_data["att"]["NAME"];
                 if (!strpos($tname, "_nodb_")) {
                     $delete_fields = array();
                     foreach ($schema_data["fields"] as $key => $field) {
                         if ($field["SIMPLE_TYPE"] == "files") {
                             $delete_fields[] = $key;
                         }
                     }
                     if (count($delete_fields) > 0) {
                         $data = db_select($tname, $delete_fields, "folder=@folder@", "created asc", "", array("folder" => $folder["id"]));
                         if (is_array($data) and count($data) > 0) {
                             foreach ($data as $ditem) {
                                 foreach ($delete_fields as $field) {
                                     $files = explode("|", $ditem[$field]);
                                     sys_unlink($files);
                                 }
                             }
                         }
                     }
                     db_delete($tname, array("folder=@folder@"), array("folder" => $folder["id"]));
                 }
             }
             db_search_delete("simple_sys_tree", $folder["id"], $folder["id"]);
             db_search_delete_folder($folder["id"]);
             db_delete("simple_sys_tree", array("id=@id@"), array("id" => $folder["id"]));
         }
         db_update_subfolder_count($row["parent"]);
     }
     $folder = $row["id"];
     if (isset($_SESSION["folder_states"][$folder])) {
         foreach ($_SESSION["folder_states"][$folder] as $child) {
             unset($_SESSION["folder_states"][$child]);
         }
         unset($_SESSION["folder_states"][$folder]);
     }
     return $row["parent"];
 }
Exemple #16
0
 private static function _create_backup($folder)
 {
     $bfolder = db_select_first("simple_sys_tree", "*", "id=@id@", "lft asc", array("id" => $folder));
     $folders = db_select("simple_sys_tree", "*", "lft between @lft@ and @rgt@", "lft asc", "", array("lft" => $bfolder["lft"], "rgt" => $bfolder["rgt"]));
     if (empty($bfolder["id"]) or !is_array($folders)) {
         return "";
     }
     $folder_path = self::_get_backup_folderpath($bfolder);
     $rand_str = NOW . "-" . sha1(uniqid(rand(), true) . uniqid(rand(), true));
     $tarfile = SIMPLE_STORE . "/backup/" . $rand_str . "--" . urlencode(str_replace("/", "__", $folder_path)) . "--" . sys_date("Y-m-d---H-i-s") . ".tar";
     $cachefile = SIMPLE_CACHE . "/backup/" . $rand_str . "--" . urlencode(str_replace("/", "__", $folder_path)) . "--" . sys_date("Y-m-d---H-i-s") . "_content.xml";
     $files = array();
     file_put_contents($cachefile, "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<data>\n", LOCK_EX);
     foreach ($folders as $folder) {
         $data = self::_build_backupdata($folder);
         $files = array_merge($files, $data["files"]);
         sys_file_append($cachefile, $data["output"]);
     }
     sys_file_append($cachefile, "</data>\n");
     $cmd = sys_find_bin("tar") . " -cf " . modify::realfilename($tarfile);
     $files = array_merge(array($cachefile), $files);
     foreach ($files as $file) {
         $cmd .= " " . str_replace("\\", "/", modify::realfilename($file));
     }
     if (DEBUG) {
         self::_out("TAR: " . $cmd . "\n\n");
     }
     echo sys_exec($cmd);
     if (file_exists($cachefile)) {
         unlink($cachefile);
     }
     $message = "{t}Backup{/t}: " . $folder_path . " [" . $bfolder["id"] . "]";
     sys_log_message_log("info", $message);
     self::_out($message);
     return "";
 }
Exemple #17
0
 static function process_login($username, $password = "")
 {
     $id = session_id();
     if (!APC_SESSION and $id and (empty($_SESSION["username"]) or $_SESSION["username"] != $username)) {
         $row = db_select_first("simple_sys_session", array("id", "data", "expiry"), "username=@username@", "lastmodified desc", array("username" => $username));
         if (!empty($row["id"])) {
             $_SESSION = array();
             session_decode(rawurldecode($row["data"]));
             if ($row["expiry"] < NOW) {
                 db_delete("simple_sys_session", array("id=@id@"), array("id" => $row["id"]));
             }
         }
         if (!db_count("simple_sys_session", array("id=@id@"), array("id" => $id))) {
             db_insert("simple_sys_session", array("expiry" => NOW + LOGIN_TIMEOUT, "id" => $id));
         }
     }
     $_SESSION["username"] = $username;
     if ($password != "") {
         $_SESSION["password"] = sys_encrypt($password, $id);
     }
     if (!isset($_SESSION["history"])) {
         $_SESSION["history"] = array();
     }
     $_SESSION["groups"] = array();
     $_SESSION["folder_states"] = array();
     $base = dirname($_SERVER["SCRIPT_FILENAME"]) . "/";
     if (sys_is_super_admin($_SESSION["username"])) {
         $_SESSION["ALLOWED_PATH"] = array($base . SIMPLE_STORE . "/home/", $base . SIMPLE_CACHE . "/debug/", $base . SIMPLE_STORE . "/trash/", $base . SIMPLE_CACHE . "/preview/", $base . SIMPLE_STORE . "/backup/");
     } else {
         $_SESSION["ALLOWED_PATH"] = array($base . SIMPLE_STORE . "/home/" . $_SESSION["username"] . "/", $base . SIMPLE_CACHE . "/preview/");
     }
     foreach (explode(",", SIMPLE_IMPORT) as $folder) {
         if ($folder == "" or !is_dir($folder)) {
             continue;
         }
         if ($folder[0] != "/" and !strpos($folder, ":")) {
             $folder = $base . $folder;
         }
         $_SESSION["ALLOWED_PATH"][] = rtrim(str_replace("\\", "/", $folder), "/") . "/";
     }
     // TODO2 put in extra function and configure it with setup to fetch groups from somewhere else
     if (sys_is_super_admin($_SESSION["username"])) {
         $_SESSION["permission_sql"] = "1=1";
         $_SESSION["permission_sql_exception"] = "1=0";
         $_SESSION["disabled_modules"] = array();
     } else {
         $_SESSION["permission_sql"] = sql_regexp("r@right@_users", array($username, "anonymous"));
         $_SESSION["permission_sql_exception"] = "(rexception_users!='' and " . sql_regexp("rexception_users", array($username, "anonymous"), "|@view@:@right@:%s|") . ")";
         $_SESSION["disabled_modules"] = array_flip(explode("|", DISABLED_MODULES));
         $rows = db_select("simple_sys_groups", "groupname", array("activated=1", "members like @username_sql@"), "", "", array("username_sql" => "%|" . $username . "|%"));
         if (is_array($rows) and count($rows) > 0) {
             foreach ($rows as $val) {
                 $_SESSION["groups"][] = $val["groupname"];
             }
             $_SESSION["permission_sql"] = "(" . $_SESSION["permission_sql"] . " or " . sql_regexp("r@right@_groups", $_SESSION["groups"]) . ")";
             $_SESSION["permission_sql_exception"] = "(" . $_SESSION["permission_sql_exception"] . " or (rexception_groups!='' and " . sql_regexp("rexception_groups", $_SESSION["groups"], "|@view@:@right@:%s|") . "))";
         }
     }
     $_SESSION["permission_sql_read"] = str_replace("@right@", "read", $_SESSION["permission_sql"]);
     $_SESSION["permission_sql_write"] = str_replace("@right@", "write", $_SESSION["permission_sql"]);
     $_SESSION["ip"] = _login_get_remoteaddr();
     $_SESSION["tickets"] = array("templates" => array("dbselect", "simple_templates", array("tplcontent", "tplname"), array("tplname like @search@"), "tplname asc"));
     $_SESSION["treevisible"] = true;
     $row = db_select_first("simple_sys_users", "*", "username=@username@", "", array("username" => $username));
     if (!empty($row["cal_day_begin"])) {
         $_SESSION["day_begin"] = sys_date("G", $row["cal_day_begin"] - 1) * 3600;
         $_SESSION["day_end"] = sys_date("G", $row["cal_day_end"]) * 3600;
     } else {
         $_SESSION["day_begin"] = 25200;
         // 7:00 = 7*3600
         $_SESSION["day_end"] = 64800;
         // 18:00 = 18*3600
     }
     if (!empty($row["enabled_modules"])) {
         $row["enabled_modules"] = array_flip(explode("|", trim($row["enabled_modules"], "|")));
         $_SESSION["disabled_modules"] = array_diff_key($_SESSION["disabled_modules"], $row["enabled_modules"]);
     }
     if (!empty($row["timezone"])) {
         $_SESSION["timezone"] = $row["timezone"];
     } else {
         $_SESSION["timezone"] = "";
     }
     if (!empty($row["theme"])) {
         $_SESSION["theme"] = $row["theme"];
     } else {
         $_SESSION["theme"] = "core";
     }
     if (!empty($row["home_folder"])) {
         $_SESSION["home_folder"] = "index.php?folder=" . rawurlencode($row["home_folder"]);
     } else {
         if (sys_is_super_admin($username)) {
             $anchor = "system";
         } else {
             $anchor = "home_" . $username;
         }
         $_SESSION["home_folder"] = "index.php?folder=^" . $anchor;
     }
     if ($id or isset($_REQUEST["login"])) {
         sys_log_stat("logins", 1);
         sys_log_message_log("login", sprintf("{t}login %s from %s with %s{/t}", $_SESSION["username"], $_SESSION["ip"], sys::$browser));
     }
     trigger::login();
     if (!empty($row["pwdexpires"]) and $row["pwdexpires"] < NOW) {
         sys_warning(sprintf("{t}Password expired. (password of %s has expired){/t}", $username));
         self::_redirect("index.php?view=changepwd&find=asset|simple_sys_users|1|username="******"username"]);
     } else {
         if (!empty($_REQUEST["page"])) {
             if (CMS_REAL_URL) {
                 self::_redirect(CMS_REAL_URL . $_REQUEST["page"]);
             }
             self::_redirect("cms.php/" . $_REQUEST["page"]);
         } else {
             if (!empty($_REQUEST["redirect"])) {
                 self::_redirect($_SESSION["home_folder"]);
             }
         }
     }
 }
Exemple #18
0
 private static function _date($time)
 {
     return sys_date("Y-m-d\\TH:i:s", $time) . "+00:00";
 }
 static function showlist()
 {
     setup::out("\n\t<div style='color:#ff0000;'>\n\t<b>{t}Warning{/t}</b>:<br>\n\t- Please make a complete backup of your database (e.g. using phpMyAdmin)<br>\n\t- Please make a complete backup of your sgs folder (e.g. /var/www/htdocs/sgs/)<br>\n\t- Make sure both backups are complete!\n    </div>\n  ");
     setup::out("{t}Downloading extension list{/t} ...<br>");
     $url = "http://sourceforge.net/projects/simplgroup/files/simplegroupware_modules/modules.xml";
     if (!($data = sys_cache_get("modules.xml"))) {
         $data = @file_get_contents($url);
         sys_cache_set("modules.xml", $data, 3600);
     }
     if ($xml = @simplexml_load_string($data)) {
         foreach ($xml as $package) {
             $php_version = (string) $package->php_version;
             $sgs_version = (string) $package->require_version;
             $target = SIMPLE_EXT . substr(basename($package->filename), 0, -3);
             if (file_exists($target)) {
                 continue;
             }
             $id = md5($package->filename);
             if (version_compare(PHP_VERSION, $php_version, "<")) {
                 setup::out(sprintf("{t}Setup needs php with at least version %s !{/t} ", $php_version), false);
             } else {
                 if (version_compare(CORE_VERSION_STRING, $sgs_version, "<")) {
                     setup::out(sprintf("{t}Setup needs Simple Groupware with at least version %s !{/t} ", $sgs_version), false);
                 } else {
                     setup::out("<a href='extensions.php?token=" . modify::get_form_token() . "&extension=" . $package->name . "&filename=" . $package->filename . "'>{t}I n s t a l l{/t}</a> ", false);
                 }
             }
             setup::out($package->title . " <a href='#' onclick='return showhide(\"" . $id . "\")'>{t}Info{/t}</a>", false);
             setup::out("<br><div class='description' style='display:none;' id='" . $id . "'>" . nl2br(trim($package->description)) . "</div>");
         }
     } else {
         setup::out(sprintf("{t}Connection error: %s [%s]{/t}", $url, "HTTP") . "<br>" . strip_tags($data, "<br><p><h1><center>"));
     }
     setup::out("{t}Package from local file system (.tar.gz){/t}:<br/>{t}current path{/t}: " . str_replace("\\", "/", getcwd()) . "/<br/>");
     $dir = opendir("./");
     while ($file = readdir($dir)) {
         if ($file != "." and $file != ".." and preg_match("|^SimpleGroupware\\_.*?.tar\\.gz\$|i", $file)) {
             setup::out("<a href='extensions.php?token=" . modify::get_form_token() . "&cfile=" . $file . "'>{t}I n s t a l l{/t}</a>&nbsp; " . $file . "<br/>");
         }
     }
     closedir($dir);
     setup::out("<form method='POST'><input type='hidden' name='token' value='" . modify::get_form_token() . "'><input type='text' name='cfile' value='/tmp/SimpleGroupware_SomeExtension_0.x.tar.gz' style='width:300px;'>&nbsp;<input type='submit' class='submit' value='{t}I n s t a l l{/t}'><br>");
     $can_uninstall = false;
     foreach (scandir(SIMPLE_EXT) as $file) {
         if ($file[0] == "." or !is_dir(SIMPLE_EXT . $file) or !file_exists(SIMPLE_EXT . $file . "/package.xml")) {
             continue;
         }
         $package = simplexml_load_file(SIMPLE_EXT . $file . "/package.xml");
         $id = md5($package->filename);
         setup::out("<a onclick='if (!confirm(\"{t}Really uninstall the module ?{/t}\")) return false;' href='extensions.php?token=" . modify::get_form_token() . "&uninstall=" . $package->filename . "'>{t}U n i n s t a l l{/t}</a> " . $package->title, false);
         setup::out(" <a href='#' onclick='return showhide(\"" . $id . "\")'>{t}Info{/t}</a>", false);
         setup::out(" ({t}installed{/t} " . sys_date("{t}m/d/Y{/t}", filemtime(SIMPLE_EXT . $file)) . ")");
         setup::out("<div class='description' style='display:none;' id='" . $id . "'>" . nl2br(trim($package->description)) . "</div>");
         $can_uninstall = true;
     }
     if ($can_uninstall) {
         setup::out("<b>{t}Note{/t}:</b> {t}Uninstall does not delete any data in the database.{/t}<br>");
     }
     setup::out_exit('<div style="border-top: 1px solid black;">Powered by Simple Groupware, Copyright (C) 2002-2012 by Thomas Bley.</div></div></body></html>');
 }