Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
0.00% |
0 / 620 |
|
0.00% |
0 / 23 |
CRAP | |
0.00% |
0 / 1 |
| DevDataUtils | |
0.00% |
0 / 620 |
|
0.00% |
0 / 23 |
6320 | |
0.00% |
0 / 1 |
| fullResetDb | |
0.00% |
0 / 8 |
|
0.00% |
0 / 1 |
6 | |||
| resetDbStructure | |
0.00% |
0 / 7 |
|
0.00% |
0 / 1 |
6 | |||
| resetDbContent | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
6 | |||
| dropDbTables | |
0.00% |
0 / 16 |
|
0.00% |
0 / 1 |
20 | |||
| truncateDbTables | |
0.00% |
0 / 16 |
|
0.00% |
0 / 1 |
20 | |||
| addDbStructure | |
0.00% |
0 / 13 |
|
0.00% |
0 / 1 |
42 | |||
| addDbContent | |
0.00% |
0 / 15 |
|
0.00% |
0 / 1 |
42 | |||
| getCurrentMigration | |
0.00% |
0 / 10 |
|
0.00% |
0 / 1 |
6 | |||
| generateMigration | |
0.00% |
0 / 11 |
|
0.00% |
0 / 1 |
2 | |||
| migrateTo | |
0.00% |
0 / 12 |
|
0.00% |
0 / 1 |
2 | |||
| printDbBackup | |
0.00% |
0 / 32 |
|
0.00% |
0 / 1 |
90 | |||
| dumpDb | |
0.00% |
0 / 7 |
|
0.00% |
0 / 1 |
2 | |||
| getDbStructureSql | |
0.00% |
0 / 24 |
|
0.00% |
0 / 1 |
2 | |||
| getDbContentSql | |
0.00% |
0 / 51 |
|
0.00% |
0 / 1 |
90 | |||
| clearFiles | |
0.00% |
0 / 14 |
|
0.00% |
0 / 1 |
6 | |||
| addFiles | |
0.00% |
0 / 289 |
|
0.00% |
0 / 1 |
42 | |||
| mkdir | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
6 | |||
| copy | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
6 | |||
| mkimg | |
0.00% |
0 / 56 |
|
0.00% |
0 / 1 |
90 | |||
| mklog | |
0.00% |
0 / 25 |
|
0.00% |
0 / 1 |
20 | |||
| enqueueForTouch | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
| touchEnqueued | |
0.00% |
0 / 2 |
|
0.00% |
0 / 1 |
6 | |||
| fromEnv | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
| 1 | <?php |
| 2 | |
| 3 | namespace Olz\Utils; |
| 4 | |
| 5 | use Ifsnop\Mysqldump\Mysqldump; |
| 6 | use Symfony\Component\Console\Input\ArrayInput; |
| 7 | use Symfony\Component\Console\Output\BufferedOutput; |
| 8 | |
| 9 | class DevDataUtils { |
| 10 | use WithUtilsTrait; |
| 11 | |
| 12 | /** @var array<string> */ |
| 13 | private array $enqueuedForTouch = []; |
| 14 | |
| 15 | /** DO NOT CALL THIS FUNCTION ON PROD! */ |
| 16 | public function fullResetDb(): void { |
| 17 | if ($this->envUtils()->getAppEnv() === 'prod') { |
| 18 | throw new \Exception("Are you fucking insane? You're on prod!"); |
| 19 | } |
| 20 | // Overwrite database with dev content. |
| 21 | $this->dropDbTables(); |
| 22 | $this->addDbStructure(); |
| 23 | $this->addDbContent(); |
| 24 | $this->migrateTo('latest'); |
| 25 | |
| 26 | // Initialize the non-code data file system at $data_path |
| 27 | $this->clearFiles(); |
| 28 | $this->addFiles(); |
| 29 | } |
| 30 | |
| 31 | /** DO NOT CALL THIS FUNCTION ON PROD! */ |
| 32 | public function resetDbStructure(): void { |
| 33 | if ($this->envUtils()->getAppEnv() === 'prod') { |
| 34 | throw new \Exception("Are you fucking insane? You're on prod!"); |
| 35 | } |
| 36 | // Overwrite database with dev content. |
| 37 | $this->dropDbTables(); |
| 38 | $this->addDbStructure(); |
| 39 | $this->addDbContent(); |
| 40 | $this->migrateTo('latest'); |
| 41 | |
| 42 | // Initialize the non-code data file system at $data_path |
| 43 | $this->addFiles(); |
| 44 | } |
| 45 | |
| 46 | /** DO NOT CALL THIS FUNCTION ON PROD! */ |
| 47 | public function resetDbContent(): void { |
| 48 | if ($this->envUtils()->getAppEnv() === 'prod') { |
| 49 | throw new \Exception("Are you fucking insane? You're on prod!"); |
| 50 | } |
| 51 | $this->truncateDbTables(); |
| 52 | $this->addDbContent(); |
| 53 | } |
| 54 | |
| 55 | /** DO NOT CALL THIS FUNCTION ON PROD! */ |
| 56 | public function dropDbTables(): void { |
| 57 | if ($this->envUtils()->getAppEnv() === 'prod') { |
| 58 | throw new \Exception("Are you fucking insane? You're on prod!"); |
| 59 | } |
| 60 | $db = $this->dbUtils()->getDb(); |
| 61 | |
| 62 | // Remove all database tables. |
| 63 | $beg = microtime(true); |
| 64 | $result = $db->query("SHOW TABLES"); |
| 65 | assert(!is_bool($result)); |
| 66 | $table_names = []; |
| 67 | while ($row = $result->fetch_array()) { |
| 68 | $table_name = $row[0]; |
| 69 | $table_names[] = $table_name; |
| 70 | } |
| 71 | $db->query('SET foreign_key_checks = 0'); |
| 72 | foreach ($table_names as $table_name) { |
| 73 | $sql = "DROP TABLE `{$table_name}`"; |
| 74 | $db->query($sql); |
| 75 | } |
| 76 | $db->query('SET foreign_key_checks = 1'); |
| 77 | $duration = round(microtime(true) - $beg, 3); |
| 78 | $this->log()->debug("Dropping took {$duration}s"); |
| 79 | } |
| 80 | |
| 81 | /** DO NOT CALL THIS FUNCTION ON PROD! */ |
| 82 | public function truncateDbTables(): void { |
| 83 | if ($this->envUtils()->getAppEnv() === 'prod') { |
| 84 | throw new \Exception("Are you fucking insane? You're on prod!"); |
| 85 | } |
| 86 | $db = $this->dbUtils()->getDb(); |
| 87 | |
| 88 | // Remove all database tables. |
| 89 | $beg = microtime(true); |
| 90 | $result = $db->query("SHOW TABLES"); |
| 91 | assert(!is_bool($result)); |
| 92 | $table_names = []; |
| 93 | while ($row = $result->fetch_array()) { |
| 94 | $table_name = $row[0]; |
| 95 | $table_names[] = $table_name; |
| 96 | } |
| 97 | $db->query('SET foreign_key_checks = 0'); |
| 98 | foreach ($table_names as $table_name) { |
| 99 | $sql = "TRUNCATE TABLE `{$table_name}`"; |
| 100 | $db->query($sql); |
| 101 | } |
| 102 | $db->query('SET foreign_key_checks = 1'); |
| 103 | $duration = round(microtime(true) - $beg, 3); |
| 104 | $this->log()->debug("Truncating took {$duration}s"); |
| 105 | } |
| 106 | |
| 107 | /** DO NOT CALL THIS FUNCTION ON PROD! */ |
| 108 | public function addDbStructure(): void { |
| 109 | if ($this->envUtils()->getAppEnv() === 'prod') { |
| 110 | throw new \Exception("Are you fucking insane? You're on prod!"); |
| 111 | } |
| 112 | $db = $this->dbUtils()->getDb(); |
| 113 | $dev_data_dir = __DIR__.'/data/'; |
| 114 | |
| 115 | // Overwrite database structure with dev content. |
| 116 | $beg = microtime(true); |
| 117 | $sql_content = file_get_contents("{$dev_data_dir}db_structure.sql") ?: ''; |
| 118 | if ($db->multi_query($sql_content)) { |
| 119 | while ($db->next_result()) { |
| 120 | $result = $db->store_result(); |
| 121 | if ($result) { |
| 122 | $result->free(); |
| 123 | } |
| 124 | } |
| 125 | } |
| 126 | $duration = round(microtime(true) - $beg, 3); |
| 127 | $this->log()->debug("Adding structure took {$duration}s"); |
| 128 | } |
| 129 | |
| 130 | /** DO NOT CALL THIS FUNCTION ON PROD! */ |
| 131 | public function addDbContent(): void { |
| 132 | if ($this->envUtils()->getAppEnv() === 'prod') { |
| 133 | throw new \Exception("Are you fucking insane? You're on prod!"); |
| 134 | } |
| 135 | $db = $this->dbUtils()->getDb(); |
| 136 | $dev_data_dir = __DIR__.'/data/'; |
| 137 | |
| 138 | // Insert dev content into database. |
| 139 | $beg = microtime(true); |
| 140 | $db->query('SET foreign_key_checks = 0'); |
| 141 | $sql_content = file_get_contents("{$dev_data_dir}db_content.sql") ?: ''; |
| 142 | if ($db->multi_query($sql_content)) { |
| 143 | while ($db->next_result()) { |
| 144 | $result = $db->store_result(); |
| 145 | if ($result) { |
| 146 | $result->free(); |
| 147 | } |
| 148 | } |
| 149 | } |
| 150 | $db->query('SET foreign_key_checks = 1'); |
| 151 | $duration = round(microtime(true) - $beg, 3); |
| 152 | $this->log()->debug("Adding content took {$duration}s"); |
| 153 | } |
| 154 | |
| 155 | public function getCurrentMigration(): ?string { |
| 156 | $input = new ArrayInput(['--no-interaction' => true]); |
| 157 | $input->setInteractive(false); |
| 158 | $output = new BufferedOutput(); |
| 159 | $this->symfonyUtils()->callCommand( |
| 160 | 'doctrine:migrations:current', |
| 161 | $input, |
| 162 | $output |
| 163 | ); |
| 164 | $is_match = preg_match('/^\s*([a-zA-Z0-9\\\]+)(\s|$)/', $output->fetch(), $matches); |
| 165 | return $is_match ? $matches[1] : null; |
| 166 | } |
| 167 | |
| 168 | public function generateMigration(): string { |
| 169 | $input = new ArrayInput([ |
| 170 | '--no-interaction' => true, |
| 171 | ]); |
| 172 | $input->setInteractive(false); |
| 173 | $output = new BufferedOutput(); |
| 174 | $this->symfonyUtils()->callCommand( |
| 175 | 'doctrine:migrations:diff', |
| 176 | $input, |
| 177 | $output |
| 178 | ); |
| 179 | return $output->fetch(); |
| 180 | } |
| 181 | |
| 182 | public function migrateTo(string $version = 'latest'): string { |
| 183 | $input = new ArrayInput([ |
| 184 | 'version' => $version, |
| 185 | '--no-interaction' => true, |
| 186 | ]); |
| 187 | $input->setInteractive(false); |
| 188 | $output = new BufferedOutput(); |
| 189 | $this->symfonyUtils()->callCommand( |
| 190 | 'doctrine:migrations:migrate', |
| 191 | $input, |
| 192 | $output |
| 193 | ); |
| 194 | return $output->fetch(); |
| 195 | } |
| 196 | |
| 197 | public function printDbBackup(string $key): void { |
| 198 | if (!$key || strlen($key) < 10) { |
| 199 | throw new \Exception("No valid key"); |
| 200 | } |
| 201 | |
| 202 | $tmp_dir = __DIR__.'/data/tmp/'; |
| 203 | if (!is_dir($tmp_dir)) { |
| 204 | mkdir($tmp_dir); |
| 205 | } |
| 206 | |
| 207 | $plain_path = "{$tmp_dir}backup.plain.sql"; |
| 208 | $plain_fp = fopen($plain_path, 'w+'); |
| 209 | assert((bool) $plain_fp); |
| 210 | fwrite($plain_fp, $this->getDbStructureSql()); |
| 211 | fwrite($plain_fp, "\n\n----------\n\n\n"); |
| 212 | fwrite($plain_fp, $this->getDbContentSql()); |
| 213 | fclose($plain_fp); |
| 214 | |
| 215 | $cipher_path = "{$tmp_dir}backup.cipher.sql"; |
| 216 | $cipher_fp = fopen($cipher_path, 'w+'); |
| 217 | assert((bool) $cipher_fp); |
| 218 | $algo = 'aes-256-gcm'; |
| 219 | $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($algo) ?: 0); |
| 220 | fwrite($cipher_fp, openssl_encrypt(file_get_contents($plain_path) ?: '', $algo, $key, OPENSSL_RAW_DATA, $iv, $tag) ?: ''); |
| 221 | fclose($cipher_fp); |
| 222 | |
| 223 | unlink($plain_path); |
| 224 | |
| 225 | echo json_encode([ |
| 226 | 'algo' => $algo, |
| 227 | 'iv' => base64_encode($iv), |
| 228 | 'tag' => base64_encode($tag), |
| 229 | ]); |
| 230 | echo "\n\n"; |
| 231 | |
| 232 | $cipher_fp = fopen($cipher_path, 'r'); |
| 233 | assert((bool) $cipher_fp); |
| 234 | while (!feof($cipher_fp)) { |
| 235 | $plain = fread($cipher_fp, 57 * 143); |
| 236 | $encoded = base64_encode($plain ?: ''); |
| 237 | $encoded = chunk_split($encoded, 76, "\r\n"); |
| 238 | echo $encoded; |
| 239 | } |
| 240 | fclose($cipher_fp); |
| 241 | |
| 242 | unlink($cipher_path); |
| 243 | } |
| 244 | |
| 245 | public function dumpDb(): void { |
| 246 | $dev_data_dir = __DIR__.'/data/'; |
| 247 | |
| 248 | $sql_structure = $this->getDbStructureSql(); |
| 249 | $sql_content = $this->getDbContentSql(); |
| 250 | $sql_structure_path = "{$dev_data_dir}db_structure.sql"; |
| 251 | $sql_content_path = "{$dev_data_dir}db_content.sql"; |
| 252 | file_put_contents($sql_structure_path, $sql_structure); |
| 253 | file_put_contents($sql_content_path, $sql_content); |
| 254 | } |
| 255 | |
| 256 | public function getDbStructureSql(): string { |
| 257 | $env_utils = $this->envUtils(); |
| 258 | |
| 259 | $current_migration = $this->getCurrentMigration(); |
| 260 | $sql_content = ( |
| 261 | "-- Die Struktur der Datenbank der Webseite der OL Zimmerberg\n" |
| 262 | ."-- MIGRATION: {$current_migration}\n" |
| 263 | ."\n" |
| 264 | ); |
| 265 | $dump_filename = tempnam(__DIR__.'/tmp', 'OLZ'); |
| 266 | $mysql_server = $env_utils->getMysqlServer(); |
| 267 | $mysql_schema = $env_utils->getMysqlSchema(); |
| 268 | $dump = new Mysqldump( |
| 269 | "mysql:host={$mysql_server};dbname={$mysql_schema}", |
| 270 | $env_utils->getMysqlUsername(), |
| 271 | $env_utils->getMysqlPassword(), |
| 272 | [ |
| 273 | 'skip-comments' => true, |
| 274 | 'no-data' => true, |
| 275 | // This is the only way to exclude all views: |
| 276 | 'include-views' => [''], // include only a view which does not exist. |
| 277 | ], |
| 278 | ); |
| 279 | $dump->start($dump_filename); |
| 280 | $sql_content .= file_get_contents($dump_filename); |
| 281 | unlink($dump_filename); |
| 282 | |
| 283 | return $sql_content; |
| 284 | } |
| 285 | |
| 286 | public function getDbContentSql(): string { |
| 287 | $ignored_tables = [ |
| 288 | 'counter' => true, |
| 289 | 'auth_requests' => true, |
| 290 | 'messenger_messages' => true, |
| 291 | ]; |
| 292 | |
| 293 | $db = $this->dbUtils()->getDb(); |
| 294 | $current_migration = $this->getCurrentMigration(); |
| 295 | $sql_content = ( |
| 296 | "-- Der Test-Inhalt der Datenbank der Webseite der OL Zimmerberg\n" |
| 297 | ."-- MIGRATION: {$current_migration}\n" |
| 298 | ."\n" |
| 299 | ."SET SQL_MODE = \"NO_AUTO_VALUE_ON_ZERO\";\n" |
| 300 | ."SET AUTOCOMMIT = 0;\n" |
| 301 | ."START TRANSACTION;\n" |
| 302 | ."SET time_zone = \"+00:00\";\n" |
| 303 | ); |
| 304 | |
| 305 | $res_tables = $db->query('SHOW TABLES'); |
| 306 | assert(!is_bool($res_tables)); |
| 307 | while ($row_tables = $res_tables->fetch_row()) { |
| 308 | $table_name = $row_tables[0]; |
| 309 | $sql_content .= "\n"; |
| 310 | $sql_content .= "-- Table {$table_name}\n"; |
| 311 | $res_contents = $db->query("SELECT * FROM `{$table_name}`"); |
| 312 | assert(!is_bool($res_contents)); |
| 313 | if ($ignored_tables[$table_name] ?? false) { |
| 314 | $sql_content .= "-- ({$table_name} omitted)\n"; |
| 315 | } elseif ($res_contents->num_rows > 0) { |
| 316 | $sql_content .= "INSERT INTO {$table_name}\n"; |
| 317 | $content_fields = $res_contents->fetch_fields(); |
| 318 | $field_names = []; |
| 319 | foreach ($content_fields as $field) { |
| 320 | $field_names[] = $field->name; |
| 321 | } |
| 322 | $field_names_sql = implode('`, `', $field_names); |
| 323 | $sql_content .= " (`{$field_names_sql}`)\n"; |
| 324 | $sql_content .= "VALUES\n"; |
| 325 | $first = true; |
| 326 | while ($row_contents = $res_contents->fetch_assoc()) { |
| 327 | if ($first) { |
| 328 | $first = false; |
| 329 | } else { |
| 330 | $sql_content .= ",\n"; |
| 331 | } |
| 332 | $field_values = []; |
| 333 | foreach ($field_names as $name) { |
| 334 | $content = $row_contents[$name] ?? null; |
| 335 | if ($content === null) { |
| 336 | $field_values[] = 'NULL'; |
| 337 | } else { |
| 338 | $sane_content = $db->escape_string("{$content}"); |
| 339 | $field_values[] = "'{$sane_content}'"; |
| 340 | } |
| 341 | } |
| 342 | $field_values_sql = implode(', ', $field_values); |
| 343 | $sql_content .= " ({$field_values_sql})"; |
| 344 | } |
| 345 | $sql_content .= ";\n"; |
| 346 | } |
| 347 | } |
| 348 | $sql_content .= "\n"; |
| 349 | $sql_content .= "COMMIT;\n"; |
| 350 | return $sql_content; |
| 351 | } |
| 352 | |
| 353 | /** DO NOT CALL THIS FUNCTION ON PROD! */ |
| 354 | public function clearFiles(): void { |
| 355 | if ($this->envUtils()->getAppEnv() === 'prod') { |
| 356 | throw new \Exception("Are you fucking insane? You're on prod!"); |
| 357 | } |
| 358 | $data_path = $this->envUtils()->getDataPath(); |
| 359 | $general_utils = $this->generalUtils(); |
| 360 | |
| 361 | // Remove existing data. |
| 362 | $general_utils->removeRecursive("{$data_path}downloads"); |
| 363 | $general_utils->removeRecursive("{$data_path}files"); |
| 364 | $general_utils->removeRecursive("{$data_path}img"); |
| 365 | $general_utils->removeRecursive("{$data_path}movies"); |
| 366 | $general_utils->removeRecursive("{$data_path}olz_mitglieder"); |
| 367 | $general_utils->removeRecursive("{$data_path}OLZimmerbergAblage"); |
| 368 | $general_utils->removeRecursive("{$data_path}panini_data"); |
| 369 | $general_utils->removeRecursive("{$data_path}pdf"); |
| 370 | $general_utils->removeRecursive("{$data_path}results"); |
| 371 | $general_utils->removeRecursive("{$data_path}temp"); |
| 372 | } |
| 373 | |
| 374 | /** DO NOT CALL THIS FUNCTION ON PROD! */ |
| 375 | public function addFiles(): void { |
| 376 | if ($this->envUtils()->getAppEnv() === 'prod') { |
| 377 | throw new \Exception("Are you fucking insane? You're on prod!"); |
| 378 | } |
| 379 | $private_path = $this->envUtils()->getPrivatePath(); |
| 380 | $data_path = $this->envUtils()->getDataPath(); |
| 381 | |
| 382 | $sample_path = __DIR__.'/data/sample-data/'; |
| 383 | |
| 384 | $this->enqueuedForTouch = []; |
| 385 | |
| 386 | // Build downloads/ |
| 387 | $this->mkdir("{$data_path}downloads"); |
| 388 | |
| 389 | // Build files/ |
| 390 | $this->mkdir("{$data_path}files"); |
| 391 | $this->mkdir("{$data_path}files/downloads"); |
| 392 | $this->mkdir("{$data_path}files/downloads/1"); |
| 393 | $this->copy("{$sample_path}sample-document.pdf", "{$data_path}files/downloads/1/MIGRATED0000000000010001.pdf"); |
| 394 | $this->mkdir("{$data_path}files/downloads/3"); |
| 395 | $this->copy("{$sample_path}sample-document.pdf", "{$data_path}files/downloads/3/XV4x94BJaf2JCPWvB8DDqTyt.pdf"); |
| 396 | |
| 397 | $this->mkdir("{$data_path}files/news"); |
| 398 | $this->mkdir("{$data_path}files/news/3"); |
| 399 | $this->copy("{$sample_path}sample-document.pdf", "{$data_path}files/news/3/MIGRATED0000000000030001.pdf"); |
| 400 | $this->mkdir("{$data_path}files/news/4"); |
| 401 | $this->copy("{$sample_path}sample-document.pdf", "{$data_path}files/news/4/xMpu3ExjfBKa8Cp35bcmsDgq.pdf"); |
| 402 | $this->mkdir("{$data_path}files/news/10"); |
| 403 | $this->copy("{$sample_path}sample-document.pdf", "{$data_path}files/news/10/gAQa_kYXqXTP1_DKKU1s1pGr.csv"); |
| 404 | $this->copy("{$sample_path}sample-document.pdf", "{$data_path}files/news/10/8kCalo9sQtu2mrgrmMjoGLUW.pdf"); |
| 405 | $this->mkdir("{$data_path}files/news/6403"); |
| 406 | $this->copy("{$sample_path}sample-document.pdf", "{$data_path}files/news/6403/MIGRATED0000000064030001.pdf"); |
| 407 | |
| 408 | $this->mkdir("{$data_path}files/questions"); |
| 409 | $this->mkdir("{$data_path}files/questions/1"); |
| 410 | $this->copy("{$sample_path}sample-document.pdf", "{$data_path}files/questions/1/4a7J72vVQFrqkboyD358S4cf.pdf"); |
| 411 | |
| 412 | $this->mkdir("{$data_path}files/roles"); |
| 413 | $this->mkdir("{$data_path}files/roles/5"); |
| 414 | $this->copy("{$sample_path}sample-document.pdf", "{$data_path}files/roles/5/c44s3s8QjwZd2WYTEVg3iW9k.pdf"); |
| 415 | |
| 416 | $this->mkdir("{$data_path}files/snippets"); |
| 417 | $this->mkdir("{$data_path}files/snippets/24"); |
| 418 | $this->copy("{$sample_path}sample-document.pdf", "{$data_path}files/snippets/24/AXfZYP3eyLKTWJmfBRGTua7H.pdf"); |
| 419 | |
| 420 | $this->mkdir("{$data_path}files/termine"); |
| 421 | $this->mkdir("{$data_path}files/termine/2"); |
| 422 | $this->copy("{$sample_path}sample-document.pdf", "{$data_path}files/termine/2/MIGRATED0000000000020001.pdf"); |
| 423 | $this->mkdir("{$data_path}files/termine/5"); |
| 424 | $this->copy("{$sample_path}sample-document.pdf", "{$data_path}files/termine/5/MIGRATED0000000000050001.pdf"); |
| 425 | $this->mkdir("{$data_path}files/termine/7"); |
| 426 | $this->copy("{$sample_path}sample-document.pdf", "{$data_path}files/termine/7/Kzt5p5g6cjM5k9CXdVaSsGFx.pdf"); |
| 427 | |
| 428 | $this->mkdir("{$data_path}files/termin_labels"); |
| 429 | $this->mkdir("{$data_path}files/termin_labels/3"); |
| 430 | $this->copy("{$sample_path}sample-document.pdf", "{$data_path}files/termin_labels/3/6f6novQPv2fjHGzzguXE6nzi.pdf"); |
| 431 | $this->mkdir("{$data_path}files/termin_labels/4"); |
| 432 | $this->copy("{$sample_path}sample-icon_20.svg", "{$data_path}files/termin_labels/4/EM8hA6vye74doeon2RWzZyRf.svg"); |
| 433 | |
| 434 | $this->mkdir("{$data_path}files/termin_templates"); |
| 435 | $this->mkdir("{$data_path}files/termin_templates/2"); |
| 436 | $this->copy("{$sample_path}sample-document.pdf", "{$data_path}files/termin_templates/2/qjhUey6Lc6svXsmUcSaguWkJ.pdf"); |
| 437 | |
| 438 | // Build img/ |
| 439 | $this->mkdir("{$data_path}img"); |
| 440 | $this->mkdir("{$data_path}img/weekly_picture"); |
| 441 | $this->mkdir("{$data_path}img/weekly_picture/1"); |
| 442 | $this->mkdir("{$data_path}img/weekly_picture/1/img"); |
| 443 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/weekly_picture/1/img/ed48ksmyjVgRsaKXUXmmcbRN.jpg", 800, 600); |
| 444 | $this->mkdir("{$data_path}img/weekly_picture/2"); |
| 445 | $this->mkdir("{$data_path}img/weekly_picture/2/img"); |
| 446 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/weekly_picture/2/img/C8k84ncvWyVptk6kjtMJxTUu.jpg", 800, 600); |
| 447 | $this->mkdir("{$data_path}img/fuer_einsteiger"); |
| 448 | $this->mkdir("{$data_path}img/fuer_einsteiger/img"); |
| 449 | $this->mkdir("{$data_path}img/fuer_einsteiger/thumb"); |
| 450 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/orientierungslauf_001.jpg", 800, 600); |
| 451 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/orientierungslauf_002.jpg", 800, 600); |
| 452 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/orientierungslauf_003.jpg", 800, 600); |
| 453 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/orientierungslauf_004.jpg", 800, 600); |
| 454 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/was_ist_ol_001.jpg", 800, 600); |
| 455 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/ol_zimmerberg_001.jpg", 800, 600); |
| 456 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/ol_zimmerberg_002.jpg", 800, 600); |
| 457 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/ol_zimmerberg_003.jpg", 800, 600); |
| 458 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/ol_zimmerberg_004.jpg", 800, 600); |
| 459 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/ol_zimmerberg_005.jpg", 800, 600); |
| 460 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/ol_zimmerberg_006.jpg", 800, 600); |
| 461 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/ol_zimmerberg_007.jpg", 800, 600); |
| 462 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/ol_zimmerberg_008.jpg", 800, 600); |
| 463 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/ol_zimmerberg_009.jpg", 800, 600); |
| 464 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/ol_zimmerberg_010.jpg", 800, 600); |
| 465 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/ol_zimmerberg_011.jpg", 800, 600); |
| 466 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/ol_zimmerberg_012.jpg", 800, 600); |
| 467 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/ol_zimmerberg_013.jpg", 800, 600); |
| 468 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/ol_zimmerberg_014.jpg", 800, 600); |
| 469 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/ol_zimmerberg_015.jpg", 800, 600); |
| 470 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/ol_zimmerberg_016.jpg", 800, 600); |
| 471 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/wie_anfangen_001.jpg", 800, 600); |
| 472 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/wie_anfangen_002.jpg", 800, 600); |
| 473 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/wie_anfangen_003.jpg", 800, 600); |
| 474 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/wie_anfangen_004.jpg", 800, 600); |
| 475 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/trainings_001.jpg", 800, 600); |
| 476 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/trainings_002.jpg", 800, 600); |
| 477 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/trainings_003.jpg", 800, 600); |
| 478 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/trainings_004.jpg", 800, 600); |
| 479 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/trainings_005.jpg", 800, 600); |
| 480 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/trainings_006.jpg", 800, 600); |
| 481 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/trainings_007.jpg", 800, 600); |
| 482 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/trainings_008.jpg", 800, 600); |
| 483 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/trainings_009.jpg", 800, 600); |
| 484 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/trainings_010.jpg", 800, 600); |
| 485 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/trainings_011.jpg", 800, 600); |
| 486 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/trainings_012.jpg", 800, 600); |
| 487 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/trainings_013.jpg", 800, 600); |
| 488 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/trainings_014.jpg", 800, 600); |
| 489 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/trainings_015.jpg", 800, 600); |
| 490 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/trainings_016.jpg", 800, 600); |
| 491 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/pack_die_chance_001.jpg", 800, 600); |
| 492 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/ansprechperson_001.jpg", 800, 600); |
| 493 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/ansprechperson_002.jpg", 800, 600); |
| 494 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/ansprechperson_003.jpg", 800, 600); |
| 495 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/fuer_einsteiger/img/ansprechperson_004.jpg", 800, 600); |
| 496 | |
| 497 | // Generate thumbs |
| 498 | if (function_exists('shell_exec')) { |
| 499 | $thumbize_src = __DIR__."/../../tools/fuer_einsteiger/thumbize.sh"; |
| 500 | $thumbize_dest = "{$data_path}img/fuer_einsteiger/thumbize.sh"; |
| 501 | if (is_file($thumbize_dest)) { |
| 502 | unlink($thumbize_dest); |
| 503 | } |
| 504 | $this->copy($thumbize_src, $thumbize_dest); |
| 505 | $pwd = getcwd(); |
| 506 | chdir("{$data_path}img/fuer_einsteiger"); |
| 507 | shell_exec("sh ./thumbize.sh"); |
| 508 | if ($pwd) { |
| 509 | chdir($pwd); |
| 510 | } |
| 511 | } |
| 512 | |
| 513 | $this->mkdir("{$data_path}img/karten"); |
| 514 | $this->mkdir("{$data_path}img/karten/1"); |
| 515 | $this->mkdir("{$data_path}img/karten/1/img"); |
| 516 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/karten/1/img/MIGRATED0000000000010001.jpg", 800, 600); |
| 517 | $this->mkdir("{$data_path}img/karten/3"); |
| 518 | $this->mkdir("{$data_path}img/karten/3/img"); |
| 519 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/karten/3/img/6R3bpgwcCU3SfUF8vCpepzRJ.jpg", 800, 600); |
| 520 | |
| 521 | $this->mkdir("{$data_path}img/news"); |
| 522 | $this->mkdir("{$data_path}img/news/3"); |
| 523 | $this->mkdir("{$data_path}img/news/3/img"); |
| 524 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/3/img/MIGRATED0000000000030001.jpg", 800, 600); |
| 525 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/3/img/MIGRATED0000000000030002.jpg", 800, 600); |
| 526 | $this->mkdir("{$data_path}img/news/4"); |
| 527 | $this->mkdir("{$data_path}img/news/4/img"); |
| 528 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/4/img/xkbGJQgO5LFXpTSz2dCnvJzu.jpg", 800, 600); |
| 529 | $this->mkdir("{$data_path}img/news/6"); |
| 530 | $this->mkdir("{$data_path}img/news/6/img"); |
| 531 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/6/img/eGbiJQgOyLF5p6S92kC3vTzE.jpg", 600, 800); |
| 532 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/6/img/Frw83uTOyLF5p6S92kC7zpEW.jpg", 800, 600); |
| 533 | $this->mkdir("{$data_path}img/news/7"); |
| 534 | $this->mkdir("{$data_path}img/news/7/img"); |
| 535 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/7/img/aRJIflbxtkF5p6S92k470912.jpg", 800, 600); |
| 536 | $this->mkdir("{$data_path}img/news/8"); |
| 537 | $this->mkdir("{$data_path}img/news/8/img"); |
| 538 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/8/img/9GjbtlsSu96AWZ-oH0rHjxup.jpg", 800, 600); |
| 539 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/8/img/zUXE3aKfbK3edmqS35FhaF8g.jpg", 800, 600); |
| 540 | $this->mkdir("{$data_path}img/news/10"); |
| 541 | $this->mkdir("{$data_path}img/news/10/img"); |
| 542 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/10/img/DvDB8QkHcGuxQ4lAFwyvHnVd.jpg", 800, 600); |
| 543 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/10/img/OOVJIqrWlitR_iTZuIIhztKC.jpg", 800, 600); |
| 544 | $this->mkdir("{$data_path}img/news/1201"); |
| 545 | $this->mkdir("{$data_path}img/news/1201/img"); |
| 546 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/1201/img/MIGRATED0000000012010001.jpg", 800, 600); |
| 547 | $this->mkdir("{$data_path}img/news/1202"); |
| 548 | $this->mkdir("{$data_path}img/news/1202/img"); |
| 549 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/1202/img/MIGRATED0000000012020001.jpg", 800, 600); |
| 550 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/1202/img/MIGRATED0000000012020002.jpg", 800, 600); |
| 551 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/1202/img/MIGRATED0000000012020003.jpg", 600, 800); |
| 552 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/1202/img/MIGRATED0000000012020004.jpg", 800, 600); |
| 553 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/1202/img/MIGRATED0000000012020005.jpg", 800, 300); |
| 554 | $this->mkdir("{$data_path}img/news/1203"); |
| 555 | $this->mkdir("{$data_path}img/news/1203/img"); |
| 556 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/1203/img/MIGRATED0000000012030001.jpg", 800, 600); |
| 557 | $this->mkdir("{$data_path}img/news/1203/thumb"); |
| 558 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/1203/thumb/MIGRATED0000000012030001.jpg\$128.jpg", 128, 96); |
| 559 | $this->mkdir("{$data_path}img/news/1206"); |
| 560 | $this->mkdir("{$data_path}img/news/1206/img"); |
| 561 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/1206/img/MIGRATED0000000012060001.jpg", 800, 600); |
| 562 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/1206/img/MIGRATED0000000012060002.jpg", 800, 600); |
| 563 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/1206/img/MIGRATED0000000012060003.jpg", 800, 600); |
| 564 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/1206/img/MIGRATED0000000012060004.jpg", 800, 600); |
| 565 | $this->mkdir("{$data_path}img/news/1206/thumb"); |
| 566 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/1206/thumb/MIGRATED0000000012060001.jpg\$128.jpg", 128, 96); |
| 567 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/1206/thumb/MIGRATED0000000012060002.jpg\$128.jpg", 128, 96); |
| 568 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/1206/thumb/MIGRATED0000000012060003.jpg\$128.jpg", 128, 96); |
| 569 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/1206/thumb/MIGRATED0000000012060004.jpg\$128.jpg", 128, 96); |
| 570 | $this->mkdir("{$data_path}img/news/6401"); |
| 571 | $this->mkdir("{$data_path}img/news/6401/img"); |
| 572 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/6401/img/MIGRATED0000000064010001.jpg", 800, 600); |
| 573 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/6401/img/MIGRATED0000000064010002.jpg", 800, 600); |
| 574 | $this->mkdir("{$data_path}img/news/6403"); |
| 575 | $this->mkdir("{$data_path}img/news/6403/img"); |
| 576 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/news/6403/img/MIGRATED0000000064030001.jpg", 800, 600); |
| 577 | |
| 578 | $this->mkdir("{$data_path}img/questions"); |
| 579 | $this->mkdir("{$data_path}img/questions/1"); |
| 580 | $this->mkdir("{$data_path}img/questions/1/img"); |
| 581 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/questions/1/img/bKfDuE4hocQhbw9FGMD7WCW3.jpg", 800, 600); |
| 582 | |
| 583 | $this->mkdir("{$data_path}img/roles"); |
| 584 | $this->mkdir("{$data_path}img/roles/5"); |
| 585 | $this->mkdir("{$data_path}img/roles/5/img"); |
| 586 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/roles/5/img/ZntVatFCHj3h8KZh7LyiB9x5.jpg", 800, 600); |
| 587 | |
| 588 | $this->mkdir("{$data_path}img/snippets"); |
| 589 | $this->mkdir("{$data_path}img/snippets/24"); |
| 590 | $this->mkdir("{$data_path}img/snippets/24/img"); |
| 591 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/snippets/24/img/oCGvpb96V6bZNLoQNe8djJgw.jpg", 800, 600); |
| 592 | |
| 593 | $this->mkdir("{$data_path}img/termine"); |
| 594 | $this->mkdir("{$data_path}img/termine/5"); |
| 595 | $this->mkdir("{$data_path}img/termine/5/img"); |
| 596 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/termine/5/img/Ffpi3PK5wBjKfN4etpvGK3ti.jpg", 800, 600); |
| 597 | $this->mkdir("{$data_path}img/termine/10"); |
| 598 | $this->mkdir("{$data_path}img/termine/10/img"); |
| 599 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/termine/10/img/659gCbqzigX8D37XgWMbedB3.jpg", 800, 600); |
| 600 | $this->mkdir("{$data_path}img/termine/13"); |
| 601 | $this->mkdir("{$data_path}img/termine/13/img"); |
| 602 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/termine/13/img/8EKYh2n8DZWShYMWo9ZRnor5.jpg", 800, 600); |
| 603 | |
| 604 | $this->mkdir("{$data_path}img/termin_labels"); |
| 605 | $this->mkdir("{$data_path}img/termin_labels/3"); |
| 606 | $this->mkdir("{$data_path}img/termin_labels/3/img"); |
| 607 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/termin_labels/3/img/QQ8ZApZjsNSBM2wKrkRQxXZG.jpg", 800, 600); |
| 608 | |
| 609 | $this->mkdir("{$data_path}img/termin_locations"); |
| 610 | $this->mkdir("{$data_path}img/termin_locations/1"); |
| 611 | $this->mkdir("{$data_path}img/termin_locations/1/img"); |
| 612 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/termin_locations/1/img/2ZiW6T9biPNjEERzj5xjLRDz.jpg", 800, 600); |
| 613 | |
| 614 | $this->mkdir("{$data_path}img/termin_templates"); |
| 615 | $this->mkdir("{$data_path}img/termin_templates/2"); |
| 616 | $this->mkdir("{$data_path}img/termin_templates/2/img"); |
| 617 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/termin_templates/2/img/bv3KeYVKDJNg3MTyjhSQsDRx.jpg", 800, 600); |
| 618 | |
| 619 | $this->mkdir("{$data_path}img/users"); |
| 620 | $this->mkdir("{$data_path}img/users/1"); |
| 621 | $this->mkdir("{$data_path}img/users/1/img"); |
| 622 | $this->mkdir("{$data_path}img/users/1/thumb"); |
| 623 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/users/1/img/8sVwnV3aAEtQUUxmQYFmojMs.jpg", 300, 300); |
| 624 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/users/1/thumb/8sVwnV3aAEtQUUxmQYFmojMs.jpg\$256.jpg", 256, 256); |
| 625 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/users/1/thumb/8sVwnV3aAEtQUUxmQYFmojMs.jpg\$128.jpg", 128, 128); |
| 626 | $this->mkdir("{$data_path}img/users/3"); |
| 627 | $this->mkdir("{$data_path}img/users/3/img"); |
| 628 | $this->mkdir("{$data_path}img/users/3/thumb"); |
| 629 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/users/3/img/oyLeyPTaCfmadcm5ShEJ236e.jpg", 150, 150); |
| 630 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "img/users/3/thumb/oyLeyPTaCfmadcm5ShEJ236e.jpg\$128.jpg", 128, 128); |
| 631 | |
| 632 | // Build movies/ |
| 633 | $this->mkdir("{$data_path}movies"); |
| 634 | |
| 635 | // Build olz_mitglieder/ |
| 636 | $this->mkdir("{$data_path}olz_mitglieder"); |
| 637 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "olz_mitglieder/max_muster.jpg", 84, 120); |
| 638 | |
| 639 | // Build OLZimmerbergAblage/ |
| 640 | $this->mkdir("{$data_path}OLZimmerbergAblage"); |
| 641 | $dokumente_path = "{$data_path}OLZimmerbergAblage/OLZ Dokumente"; |
| 642 | $this->mkdir("{$dokumente_path}"); |
| 643 | $this->mkdir("{$dokumente_path}/vorstand"); |
| 644 | $this->copy("{$sample_path}sample-document.pdf", "{$dokumente_path}/vorstand/mitgliederliste.pdf"); |
| 645 | $this->mkdir("{$dokumente_path}/vorstand/protokolle"); |
| 646 | $this->copy("{$sample_path}sample-document.pdf", "{$dokumente_path}/vorstand/protokolle/protokoll.pdf"); |
| 647 | $this->mkdir("{$dokumente_path}/karten"); |
| 648 | $this->copy("{$sample_path}sample-document.pdf", "{$dokumente_path}/karten/uebersicht.pdf"); |
| 649 | $this->mkdir("{$dokumente_path}/karten/wald"); |
| 650 | $this->copy("{$sample_path}sample-document.pdf", "{$dokumente_path}/karten/wald/buchstabenwald.pdf"); |
| 651 | |
| 652 | // Build panini_data/ |
| 653 | $this->mkdir("{$data_path}panini_data"); |
| 654 | $this->mkdir("{$data_path}panini_data/cache"); |
| 655 | $this->mkdir("{$data_path}panini_data/fonts"); |
| 656 | $this->mkdir("{$data_path}panini_data/fonts/OpenSans"); |
| 657 | $this->copy("{$sample_path}sample-font.ttf", "{$data_path}panini_data/fonts/OpenSans/OpenSans-SemiBold.ttf"); |
| 658 | $this->copy("{$sample_path}sample-font.php", "{$data_path}panini_data/fonts/OpenSans/OpenSans-SemiBold.php"); |
| 659 | $this->copy("{$sample_path}sample-font.z", "{$data_path}panini_data/fonts/OpenSans/OpenSans-SemiBold.z"); |
| 660 | $this->mkdir("{$data_path}panini_data/masks"); |
| 661 | $this->mkimg("{$sample_path}sample-mask.png", $data_path, "panini_data/masks/topP_1517x2091.png", 1517, 2091); |
| 662 | $this->mkimg("{$sample_path}sample-mask.png", $data_path, "panini_data/masks/bottomP_1517x2091.png", 1517, 2091); |
| 663 | $this->mkimg("{$sample_path}sample-mask.png", $data_path, "panini_data/masks/associationP_1517x2091.png", 1517, 2091); |
| 664 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "panini_data/masks/associationStencilP_1517x2091.png", 1517, 2091); |
| 665 | $this->mkimg("{$sample_path}sample-mask.png", $data_path, "panini_data/masks/topP_1594x2303.png", 1594, 2303); |
| 666 | $this->mkimg("{$sample_path}sample-mask.png", $data_path, "panini_data/masks/topL_2303x1594.png", 2303, 1594); |
| 667 | $this->mkimg("{$sample_path}sample-mask.png", $data_path, "panini_data/masks/bottomP_1594x2303.png", 1594, 2303); |
| 668 | $this->mkimg("{$sample_path}sample-mask.png", $data_path, "panini_data/masks/bottomL_2303x1594.png", 2303, 1594); |
| 669 | $this->mkimg("{$sample_path}sample-mask.png", $data_path, "panini_data/masks/associationP_1594x2303.png", 1594, 2303); |
| 670 | $this->mkimg("{$sample_path}sample-mask.png", $data_path, "panini_data/masks/associationL_2303x1594.png", 2303, 1594); |
| 671 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "panini_data/masks/associationStencilP_1594x2303.png", 1594, 2303); |
| 672 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "panini_data/masks/associationStencilL_2303x1594.png", 2303, 1594); |
| 673 | $this->mkdir("{$data_path}panini_data/wappen"); |
| 674 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "panini_data/wappen/thalwil.jpg", 100, 100); |
| 675 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "panini_data/wappen/other.jpg", 100, 100); |
| 676 | $this->mkdir("{$data_path}panini_data/portraits"); |
| 677 | $this->mkdir("{$data_path}panini_data/portraits/1001"); |
| 678 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "panini_data/portraits/1001/vptD8fzvXIhv_6X32Zkw2s5s.jpg", 800, 600); |
| 679 | $this->mkdir("{$data_path}panini_data/portraits/1002"); |
| 680 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "panini_data/portraits/1002/LkGdXukqgYEdnWpuFHfrJkr7.jpg", 800, 600); |
| 681 | $this->mkdir("{$data_path}panini_data/other"); |
| 682 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "panini_data/other/portrait.jpg", 600, 800); |
| 683 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "panini_data/other/landscape.jpg", 800, 600); |
| 684 | for ($i = 1003; $i <= 1012; $i++) { |
| 685 | $this->mkdir("{$data_path}panini_data/portraits/{$i}"); |
| 686 | $this->mkimg("{$sample_path}sample-picture.jpg", $data_path, "panini_data/portraits/{$i}/LkGdXukqgYEdnWpuFHfrJkr7.jpg", 800, 600); |
| 687 | } |
| 688 | |
| 689 | // Build pdf/ |
| 690 | $this->mkdir("{$data_path}pdf"); |
| 691 | $this->copy("{$sample_path}sample-document.pdf", "{$data_path}pdf/trainingsprogramm.pdf"); |
| 692 | |
| 693 | // Build results/ |
| 694 | $this->mkdir("{$data_path}results"); |
| 695 | $this->copy("{$sample_path}sample-results.xml", "{$data_path}results/results.xml"); |
| 696 | $this->copy("{$sample_path}sample-results.xml", "{$data_path}results/2020-termine-7.xml"); |
| 697 | |
| 698 | // Build temp/ |
| 699 | $this->mkdir("{$data_path}temp"); |
| 700 | |
| 701 | // Build logs/ |
| 702 | $this->mkdir("{$private_path}logs"); |
| 703 | $this->mklog("{$private_path}logs/merged-2020-08-13.log", "2020-08-13"); |
| 704 | $this->mklog("{$private_path}logs/merged-2020-08-14.log", "2020-08-14"); |
| 705 | $this->mklog("{$private_path}logs/merged-2020-08-15.log", "2020-08-15"); |
| 706 | $this->mkdir("{$private_path}logs/server"); |
| 707 | $this->mklog("{$private_path}logs/server/access_ssl_log", "2020-08-15"); |
| 708 | $this->mklog("{$private_path}logs/server/access_ssl_log.processed", "2020-08-14"); |
| 709 | $this->mklog("{$private_path}logs/server/access_ssl_log.processed.1", "2020-08-13"); |
| 710 | $this->mklog("{$private_path}logs/server/access_ssl_log.processed.2", "2020-08-12"); |
| 711 | |
| 712 | // Build sessions |
| 713 | $this->mkdir("{$private_path}sessions"); |
| 714 | |
| 715 | $this->touchEnqueued(1584118800); |
| 716 | } |
| 717 | |
| 718 | protected function mkdir(string $path, int $mode = 0o777, bool $recursive = false): void { |
| 719 | if (!is_dir($path)) { |
| 720 | mkdir($path, $mode, $recursive); |
| 721 | } |
| 722 | $this->enqueueForTouch($path); |
| 723 | } |
| 724 | |
| 725 | protected function copy(string $source, string $dest): void { |
| 726 | if (!is_file($dest)) { |
| 727 | copy($source, $dest); |
| 728 | } |
| 729 | $this->enqueueForTouch($dest); |
| 730 | } |
| 731 | |
| 732 | /** |
| 733 | * @param int<1, max> $width |
| 734 | * @param int<1, max> $height |
| 735 | */ |
| 736 | protected function mkimg( |
| 737 | string $source_path, |
| 738 | string $data_path, |
| 739 | string $destination_relative_path, |
| 740 | int $width, |
| 741 | int $height, |
| 742 | ): void { |
| 743 | $destination_path = "{$data_path}{$destination_relative_path}"; |
| 744 | if (is_file($destination_path)) { |
| 745 | return; |
| 746 | } |
| 747 | $tmp_dir = __DIR__.'/data/tmp/'; |
| 748 | if (!is_dir($tmp_dir)) { |
| 749 | mkdir($tmp_dir); |
| 750 | } |
| 751 | $flat_destination_relative_path = str_replace('/', '___', $destination_relative_path); |
| 752 | $extension_pos = strrpos($flat_destination_relative_path, '.') ?: 0; |
| 753 | $ident = substr($flat_destination_relative_path, 0, $extension_pos); |
| 754 | $extension = substr($flat_destination_relative_path, $extension_pos); |
| 755 | $tmp_basename = "{$ident}___{$width}x{$height}{$extension}"; |
| 756 | $tmp_path = "{$tmp_dir}{$tmp_basename}"; |
| 757 | if (!is_file($tmp_path)) { |
| 758 | $info = getimagesize($source_path); |
| 759 | $source_width = $info[0] ?? 0; |
| 760 | $source_height = $info[1] ?? 0; |
| 761 | $image_type = $info[2] ?? 0; |
| 762 | $source = null; |
| 763 | if ($image_type === 2) { |
| 764 | $source = imagecreatefromjpeg($source_path); |
| 765 | } elseif ($image_type === 3) { |
| 766 | $source = imagecreatefrompng($source_path); |
| 767 | } |
| 768 | if (!$source) { |
| 769 | throw new \Exception("mkimg: Image must be JPEG or PNG, was: {$image_type}"); |
| 770 | } |
| 771 | $destination = imagecreatetruecolor($width, $height); |
| 772 | imagealphablending($destination, false); |
| 773 | imagesavealpha($destination, true); |
| 774 | imagecopyresampled( |
| 775 | $destination, |
| 776 | $source, |
| 777 | 0, |
| 778 | 0, |
| 779 | 0, |
| 780 | 0, |
| 781 | $width, |
| 782 | $height, |
| 783 | $source_width, |
| 784 | $source_height, |
| 785 | ); |
| 786 | $red = imagecolorallocate($destination, 255, 0, 0); |
| 787 | assert($red !== false); |
| 788 | $hash = intval(substr(md5($destination_relative_path), 0, 1), 16); |
| 789 | $x = floor($hash / 4) * $width / 4; |
| 790 | $y = floor($hash % 4) * $height / 4; |
| 791 | imagefilledrectangle( |
| 792 | $destination, |
| 793 | intval(round($x)), |
| 794 | intval(round($y)), |
| 795 | intval(round($x + $width / 4)), |
| 796 | intval(round($y + $height / 4)), |
| 797 | $red |
| 798 | ); |
| 799 | if (preg_match('/\.jpg$/', $destination_relative_path)) { |
| 800 | imagejpeg($destination, $tmp_path, 90); |
| 801 | } else { |
| 802 | imagepng($destination, $tmp_path); |
| 803 | } |
| 804 | imagedestroy($destination); |
| 805 | } |
| 806 | $this->copy($tmp_path, $destination_path); |
| 807 | } |
| 808 | |
| 809 | protected function mklog(string $file_path, string $iso_date): void { |
| 810 | $log_levels = [ |
| 811 | 'DEBUG', |
| 812 | 'INFO', |
| 813 | 'NOTICE', |
| 814 | 'WARNING', |
| 815 | 'ERROR', |
| 816 | 'CRITICAL', |
| 817 | 'ALERT', |
| 818 | 'EMERGENCY', |
| 819 | ]; |
| 820 | $num_log_levels = count($log_levels); |
| 821 | $fp = fopen($file_path, 'w+'); |
| 822 | assert($fp !== false); |
| 823 | $long_line = 'Wow,'; |
| 824 | for ($i = 0; $i < 1000; $i++) { |
| 825 | $long_line .= ' so much content'; |
| 826 | } |
| 827 | for ($i = 0; $i < 1440; $i++) { |
| 828 | $time = str_pad(strval(floor($i / 60)), 2, '0', STR_PAD_LEFT).':'. |
| 829 | str_pad(strval(floor($i % 60)), 2, '0', STR_PAD_LEFT).':'. |
| 830 | str_pad(strval(random_int(0, 59)), 2, '0', STR_PAD_LEFT).'.'. |
| 831 | str_pad(strval(random_int(0, 999999)), 6, '0', STR_PAD_LEFT); |
| 832 | $level = $log_levels[$i % $num_log_levels]; |
| 833 | $fill_up = ($i % ($num_log_levels + 1)) === 0 ? $long_line : ''; |
| 834 | $line = "[{$iso_date}T{$time}+01:00] Command:ProcessEmail.{$level}: Something happened... {$fill_up} [] []\n"; |
| 835 | fwrite($fp, $line); |
| 836 | } |
| 837 | fclose($fp); |
| 838 | } |
| 839 | |
| 840 | protected function enqueueForTouch(string $path): void { |
| 841 | $this->enqueuedForTouch[] = $path; |
| 842 | } |
| 843 | |
| 844 | protected function touchEnqueued(?int $timestamp): void { |
| 845 | foreach ($this->enqueuedForTouch as $path) { |
| 846 | touch($path, $timestamp, $timestamp); |
| 847 | } |
| 848 | } |
| 849 | |
| 850 | public static function fromEnv(): self { |
| 851 | return new self(); |
| 852 | } |
| 853 | } |