static function rebuild_schema($rebuild_search = false) { if ($rebuild_search) { self::_out(sprintf("{t}Processing %s ...{/t}", "schema, search index")); } else { self::_out(sprintf("{t}Processing %s ...{/t}", "schema")); } if (sgsml_parser::table_exists("simple_sys_search") and $rebuild_search) { db_delete("simple_sys_search", array(), array()); } $files = array(); $folders = array("modules/schema/", "modules/schema_sys/", SIMPLE_EXT . "/modules/schema/", SIMPLE_EXT . "/modules/schema_sys/", SIMPLE_CUSTOM . "/modules/schema/", SIMPLE_CUSTOM . "/modules/schema_sys/"); foreach ($folders as $folder) { if (!is_dir($folder)) { continue; } foreach (scandir($folder) as $file) { if (!strpos($file, ".xml")) { continue; } $files[$file] = $folder . $file; } } @set_time_limit(60 * count($files)); foreach ($files as $file) { self::_out(basename($file) . " ", false); $schema = db_get_schema($file, "", "", false); sys::$db_queries = array(); // reduce memory usage if (!$rebuild_search or sys_strbegins(basename($file), "nodb_") or empty($schema["views"]["display"])) { continue; } if (!empty($schema["att"]["SQL_HANDLER"]) or !empty($schema["att"]["NO_SEARCH_INDEX"])) { continue; } $table = $schema["att"]["NAME"]; $fields = $schema["fields"]; $rows = db_select($table, array("id", "folder"), array(), "", ""); if (!is_array($rows) or count($rows) == 0) { continue; } self::_out("... ", false); foreach ($rows as $row) { if (folder_in_trash($row["folder"])) { continue; } db_search_update($table, $row["id"], $fields); } } self::_out("<br>", false); }