* * Licensed under AGPLv3 * (see COPYING for full license text) * */ class Tools extends MY_Controller { function __construct() { parent::__construct(); $this->load->model('mfile'); if (!$this->input->is_cli_request()) { throw new \exceptions\PublicApiException("api/cli-only", "This can only be called via CLI"); } } function index() { echo "php index.php [arguments]\n"; echo "\n"; echo "Functions:\n"; echo " file cron Cronjob\n"; echo " file nuke_id Nukes all IDs sharing the same hash\n"; echo " user cron Cronjob\n"; echo " tools update_database Update/Initialise the database\n"; echo "\n"; echo "Functions that shouldn't have to be run:\n"; echo " file clean_stale_files Remove files without database entries\n"; echo " file update_file_metadata Update filesize and mimetype in database\n"; exit; } function update_database() { $this->load->library('migration'); if ( ! $this->migration->current()) { throw new \exceptions\ApiException("tools/update_database/migration-error", $this->migration->error_string()); } } function drop_all_tables() { $tables = $this->db->list_tables(); $prefix = $this->db->dbprefix; $tables_to_drop = array(); foreach ($tables as $table) { if ($prefix === "" || strpos($table, $prefix) === 0) { $tables_to_drop[] = $this->db->protect_identifiers($table); } } if (empty($tables_to_drop)) { return; } if ($this->db->dbdriver !== 'postgre') { $this->db->query('SET FOREIGN_KEY_CHECKS = 0'); } $this->db->query('DROP TABLE '.implode(", ", $tables_to_drop)); if ($this->db->dbdriver !== 'postgre') { $this->db->query('SET FOREIGN_KEY_CHECKS = 1'); } } function test() { global $argv; $url = $argv[3]; $testcase = $argv[4]; $testcase = str_replace("application/", "", $testcase); $testcase = str_replace("/", "\\", $testcase); $testcase = str_replace(".php", "", $testcase); $test = new $testcase(); $test->setServer($url); $exitcode = 0; $refl = new ReflectionClass($test); foreach ($refl->getMethods() as $method) { if (strpos($method->name, "test_") === 0) { try { $test->setTestNamePrefix($method->name." - "); $test->init(); $test->{$method->name}(); $test->cleanup(); } catch (\Exception $e) { echo "not ok - uncaught exception in {$testcase}->{$method->name}\n"; \libraries\ExceptionHandler::exception_handler($e); $exitcode = 255; } } } if ($exitcode == 0) { $test->done_testing(); } else { exit($exitcode); } } }