1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
<?php
/*
* Copyright 2014 Florian "Bluewind" Pritz <bluewind@server-speed.net>
*
* Licensed under AGPLv3
* (see COPYING for full license text)
*
*/
class Tools extends MY_Controller {
function __construct()
{
parent::__construct();
$this->load->model('mfile');
$this->_require_cli_request();
}
function index()
{
echo "php index.php <controller> <function> [arguments]\n";
echo "\n";
echo "Functions:\n";
echo " file cron Cronjob\n";
echo " file nuke_id <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');
$upgraded = $this->migration->current();
if ( ! $upgraded) {
throw new \exceptions\ApiException("tools/update_database/migration-error", $this->migration->error_string());
}
if ($upgraded === true) {
echo "Already at latest database version. No upgrade performed\n";
}
if (is_int($upgraded)) {
echo "Database upgraded sucessfully to version: $upgraded\n";
}
}
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;
$testcase = $argv[3];
$testcase = str_replace("application/", "", $testcase);
$testcase = str_replace("/", "\\", $testcase);
$testcase = str_replace(".php", "", $testcase);
$test = new $testcase();
$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->setTestID("{$testcase}->{$method->name}");
$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);
}
}
function generate_coverage_report()
{
include APPPATH."../vendor/autoload.php";
$coverage = new \SebastianBergmann\CodeCoverage\CodeCoverage();
foreach (glob(FCPATH."/test-coverage-data/*") as $file) {
$coverage->merge(unserialize(file_get_contents($file)));
}
$writer = new \SebastianBergmann\CodeCoverage\Report\Clover();
$writer->process($coverage, 'code-coverage-report.xml');
$writer = new \SebastianBergmann\CodeCoverage\Report\Html\Facade();
$writer->process($coverage, 'code-coverage-report');
print "Report saved to ./code-coverage-report/index.html\n";
}
}
|