function db_get_schema($schema_file, $folder = "", $tview = "", $cache = true, $popup = false) { static $data = array(); if (!$cache) { $data = array(); } $cid = $schema_file . $folder; if (!empty($data[$cid])) { if ($tview == "") { return $data[$cid]; } if (!isset($data[$cid][$tview])) { $tview = sys_array_shift(array_keys($data[$cid])); } return $data[$cid][$tview]; } if (!file_exists($schema_file)) { if (basename($schema_file) == "nodb_.xml") { sys_warning(sprintf("{t}Folder not found.{/t} (%s)", $folder)); } else { sys_log_message_alert("php-fail", sprintf("{t}Schemafile not found. (%s){/t}", $schema_file . " " . $folder)); } $schema_file = "modules/schema/blank.xml"; } $schema = basename(substr($schema_file, 0, -4)); $cache_file = SIMPLE_CACHE . "/schema/" . CORE_SGSML_VERSION . "_" . $schema . "_" . LANG . ".ser"; $custom_schema = ""; if ($folder != "") { if (file_exists(sys_custom($schema_file . "." . $folder))) { $schema_file = sys_custom($schema_file . "." . $folder); $cache_file .= "." . $folder; } $custom_schema = db_select_value("simple_sys_tree", "custom_schema", "id=@id@", array("id" => $folder)); // TODO optimize $rows = db_select("simple_sys_custom_fields", array("custom_schema"), array("module=@schema@", "(ffolder='' or ffolder like @folder@)", "activated=1"), "id asc", "", array("schema" => $schema, "folder" => "%|" . $folder . "|%")); if (is_array($rows) and count($rows) > 0) { $custom_schema = str_replace("</table>", "", $custom_schema); if (!strpos($custom_schema, "<table")) { $custom_schema = "<table>"; } foreach ($rows as $row) { $custom_schema .= $row["custom_schema"] . "\n"; } $custom_schema .= "</table>"; } if ($custom_schema != "") { $cache_file .= "." . sha1($custom_schema); } } $custom_dir = sys_custom_dir(substr($schema_file, 0, -4)); if (is_dir($custom_dir)) { $cache_file .= "." . filemtime($custom_dir); } $schema_mtime = filemtime($schema_file); if (APC) { $data[$cid] = apc_fetch("sgsml" . basename($cache_file) . $schema_mtime); } else { if (file_exists($cache_file) and filemtime($cache_file) == $schema_mtime) { $data[$cid] = unserialize(file_get_contents($cache_file)); } } if (empty($data[$cid])) { if (DEBUG and empty($_REQUEST["iframe"])) { echo "reload schema"; } $schema_content = sgsml_parser::file_get_contents($schema_file, $schema, $custom_schema); $data[$cid] = sgsml_parser::parse_schema($schema_content, $schema, $schema_mtime, $cache_file); if (defined("SETUP_DB_HOST")) { sys_log_message_log("info", sprintf("{t}Updating schema %s from %s.{/t} {t}Folder{/t}: %s", $schema, $schema_file, $folder)); } } if ($tview == "") { return $data[$cid]; } if ($folder != "") { $write = true; if ($popup) { $ftype = str_replace("simple_", "", $data[$cid]["att"]["NAME"]); if (!in_array($ftype, explode("\n", file_get_contents(sys_custom("modules/core/popup_write.txt"))))) { $write = false; } } $superadmin = sys_is_super_admin($_SESSION["username"]); foreach (array_keys($data[$cid]["views"]) as $view) { if (isset($data[$cid]["views"][$view]["RIGHT"])) { $right = $data[$cid]["views"][$view]["RIGHT"]; } else { $right = "read"; } if (($write or $right != "write") and ($superadmin or db_get_right($folder, $right, $view))) { continue; } unset($data[$cid][$view]); unset($data[$cid]["views"][$view]); } } if (isset($data[$cid][$tview])) { return $data[$cid][$tview]; } else { if ($tview != "none") { sys_warning("{t}Item(s) not found or access denied.{/t} (view={$tview})"); } $GLOBALS["tview"] = sys_array_shift(array_keys($data[$cid]["views"])); if (empty($GLOBALS["tview"])) { return db_get_schema("modules/schema/blank.xml", "", "display"); } return $data[$cid][$GLOBALS["tview"]]; } }
static function process_action_sys() { @set_time_limit(900); switch ($_REQUEST["action_sys"]) { case "maintenance": if (!sys_validate_token()) { sys_die("{t}Invalid security token{/t}"); } $lock_file = SIMPLE_STORE . "/maintenance.lck"; if (!file_exists($lock_file)) { touch($lock_file); sys_log_message_alert("info", "{t}Maintenance mode{/t}: {t}Active{/t}"); } else { unlink($lock_file); sys_log_message_alert("info", "{t}Maintenance mode{/t}: {t}Inactive{/t}"); } break; case "clear_locking": self::_remove_locks(); dirs_create_empty_dir(SIMPLE_STORE . "/locking"); sys_log_message_log("clean", "{t}Locking{/t}"); break; case "clear_output": dirs_create_empty_dir(SIMPLE_CACHE . "/smarty"); dirs_create_empty_dir(SIMPLE_CACHE . "/output"); dirs_create_empty_dir(SIMPLE_CACHE . "/artichow"); dirs_create_empty_dir(SIMPLE_CACHE . "/thumbs"); dirs_create_empty_dir(SIMPLE_CACHE . "/lang"); self::build_css(); self::build_js(); self::build_icons(); sys_log_message_log("clean", "{t}Output{/t}"); break; case "clear_debug": dirs_create_empty_dir(SIMPLE_CACHE . "/debug"); sys_log_message_log("clean", "{t}Debug-dir{/t}"); break; case "clear_cms": dirs_create_empty_dir(SIMPLE_CACHE . "/cms"); sys_log_message_log("clean", "{t}CMS{/t}"); break; case "clear_ip": dirs_create_empty_dir(SIMPLE_CACHE . "/ip"); if (APC) { apc_clear_cache("user"); } sys_log_message_log("clean", "IP"); break; case "clear_schema": dirs_create_empty_dir(SIMPLE_CACHE . "/schema"); if (APC) { apc_clear_cache("user"); } sys_log_message_log("clean", "{t}Schema{/t}"); break; case "clear_schemadata": dirs_create_empty_dir(SIMPLE_CACHE . "/schema_data"); dirs_create_empty_dir(SIMPLE_CACHE . "/preview"); if (APC) { apc_clear_cache("user"); } sys_log_message_log("clean", "{t}Schema data{/t}"); break; case "clear_email": dirs_create_empty_dir(SIMPLE_CACHE . "/imap"); dirs_create_empty_dir(SIMPLE_CACHE . "/pop3"); sys_log_message_log("clean", "{t}E-mail{/t}"); break; case "clean_notifications": db_delete("simple_sys_notifications", array("sent='1'"), array()); sql_table_optimize("simple_sys_notifications"); sys_log_message_log("clean", "{t}Notifications{/t}"); break; case "clear_upload": dirs_create_empty_dir(SIMPLE_CACHE . "/upload"); sys_log_message_log("clean", "{t}Uploaded files{/t}"); break; case "clean_tables": db_optimize_tables(); sys_log_message_log("clean", "{t}Optimize Tables{/t}"); break; case "clean_statistics": if (!sys_validate_token()) { sys_die("{t}Invalid security token{/t}"); } db_delete("simple_sys_stats", array(), array()); sql_table_optimize("simple_sys_stats"); sys_log_message_log("clean", "{t}Statistics{/t}"); break; case "clean_events": if (!sys_validate_token()) { sys_die("{t}Invalid security token{/t}"); } db_delete("simple_sys_events", array(), array()); $folder = db_select_value("simple_sys_tree", "id", "ftype=@type@", array("type" => "sys_events")); if (!empty($folder)) { db_delete("simple_sys_search", array("folder=@folder@"), array("folder" => $folder)); } sql_table_optimize("simple_sys_events"); sql_table_optimize("simple_sys_search"); sys_log_message_log("clean", "{t}Events{/t}"); break; case "clean_trash": if (!sys_validate_token()) { sys_die("{t}Invalid security token{/t}"); } $trash = db_select_value("simple_sys_tree", "id", "anchor=@anchor@", array("anchor" => "trash")); if (!empty($trash)) { $folders = db_select("simple_sys_tree", array("id", "fmountpoint"), "parent=@parent@", "", "", array("parent" => $trash)); if (is_array($folders) and count($folders) > 0) { foreach ($folders as $folder) { if (!empty($folder["fmountpoint"])) { continue; } folders::delete($folder["id"]); } } } dirs_create_empty_dir(SIMPLE_STORE . "/trash"); sys_log_message_log("clean", "{t}Trash{/t}"); sys_redirect("index.php?" . sys::$urladdon); break; case "clean_cache": $dirs = array(SIMPLE_STORE . "/cron", SIMPLE_CACHE . "/imap", SIMPLE_CACHE . "/pop3", SIMPLE_CACHE . "/smarty", SIMPLE_CACHE . "/cms", SIMPLE_CACHE . "/cifs", SIMPLE_CACHE . "/gdocs", SIMPLE_CACHE . "/lang", SIMPLE_CACHE . "/output", SIMPLE_CACHE . "/artichow", SIMPLE_CACHE . "/thumbs", SIMPLE_CACHE . "/schema"); foreach ($dirs as $dir) { self::_dirs_clean_dir($dir, 2592000); } // 30 days self::_remove_locks(); $dirs = array(SIMPLE_CACHE . "/schema_data", SIMPLE_CACHE . "/preview", SIMPLE_STORE . "/locking", SIMPLE_CACHE . "/upload", SIMPLE_CACHE . "/ip", SIMPLE_CACHE . "/debug", SIMPLE_CACHE . "/updater", SIMPLE_CACHE . "/backup"); foreach ($dirs as $dir) { self::_dirs_clean_dir($dir, 86400); } // 1 day sys_log_message_log("clean", "{t}Clean Cache{/t}"); sys_redirect("index.php?" . sys::$urladdon); break; case "clear_setup": if (!sys_validate_token()) { sys_die("{t}Invalid security token{/t}"); } @unlink("simple_store/config.php"); @unlink("simple_store/config_old.php"); header("Location: index.php"); exit; break; case "backup": self::_create_backup($_SESSION["folder"]); self::_out("<br><a href='index.php?folder=^system/!sys_nodb_backups'>{t}Continue{/t}</a>"); exit; break; case "restore_newer": self::$_restore_onlynewer = true; echo self::_restore($_REQUEST["file"]); self::_out("<br><a href='index.php'>{t}Continue{/t}</a>"); exit; break; case "restore": echo self::_restore($_REQUEST["file"]); self::_out("<br><a href='index.php'>{t}Continue{/t}</a>"); exit; break; case "restore_here": self::$_restore_here = true; echo self::_restore($_REQUEST["file"]); self::_out("<br><a href='index.php'>{t}Continue{/t}</a>"); exit; break; case "restore_missing": self::$_restore_missing = true; echo self::_restore($_REQUEST["file"]); self::_out("<br><a href='index.php'>{t}Continue{/t}</a>"); exit; break; case "rebuild_search": if (!sys_validate_token()) { sys_die("{t}Invalid security token{/t}"); } self::rebuild_schema(true); self::_out("<br><a href='index.php'>{t}Continue{/t}</a>"); exit; break; case "clear_session": if (!sys_validate_token()) { sys_die("{t}Invalid security token{/t}"); } db_delete("simple_sys_session", array(), array()); if (APC) { apc_clear_cache("user"); } sys_log_message_log("clean", "{t}Sessions{/t}"); self::_out("<br><a href='index.php'>{t}Continue{/t}</a>"); exit; break; case "phpinfo": echo "System time: " . date("c") . "<br>"; echo "Database time: " . sgsml_parser::sql_date(); phpinfo(); exit; break; } }
static function create_user($username, $data = array()) { $data["username"] = $username; $data["createdby"] = "auth_" . SETUP_AUTH; if (empty($data["password"])) { $data["password"] = "******"; } if (empty($data["email"])) { $data["email"] = $username; } if (!strpos($data["email"], "@")) { $data["email"] .= "@invalid.local"; } if (empty($_SESSION["username"])) { $_SESSION["username"] = "******"; $_SESSION["permission_sql"] = "1=1"; $_SESSION["permission_sql_read"] = "1=1"; $_SESSION["groups"] = array(); } $row_id = db_select_value("simple_sys_users", "id", "username=@username@", array("username" => $username)); if (!empty($row_id)) { return; } $row = db_select_first("simple_sys_tree", "id", "ftype=@ftype@", "lft asc", array("ftype" => "sys_users")); if (empty($row["id"])) { return; } $sgsml = new sgsml($row["id"], "new"); $result = $sgsml->insert($data); if (is_numeric($result)) { trigger::addgroupmember(0, array("username" => $username), array("users_self_registration")); sys_notification("{t}Item successfully created.{/t} (" . $result . ")"); } else { if (is_array($result) and count($result) > 0) { $message = array(); foreach ($result as $errors) { foreach ($errors as $error) { $message[] = $error[0] . ": " . $error[1]; } } sys_log_message_alert("login", implode("\n", $message)); } } }