Passed
Push — master ( 1f5148...b68848 )
by Nils
09:49
created

runTask()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 13
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 10
c 0
b 0
f 0
nc 4
nop 3
dl 0
loc 13
rs 9.9332
1
<?php
2
/**
3
 * Teampass - a collaborative passwords manager.
4
 * ---
5
 * This library is distributed in the hope that it will be useful,
6
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
7
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
8
 * ---
9
 *
10
 * @project   Teampass
11
 * @file      scheduler.php
12
 * ---
13
 *
14
 * @author    Nils Laumaillé ([email protected])
15
 *
16
 * @copyright 2009-2023 Teampass.net
17
 *
18
 * @license   https://spdx.org/licenses/GPL-3.0-only.html#licenseText GPL-3.0
19
 * ---
20
 *
21
 * @see       https://www.teampass.net
22
 */
23
24
use GO\Scheduler;
25
26
require_once __DIR__.'/../sources/SecureHandler.php';
27
session_name('teampass_session');
28
session_start();
29
30
// Load config
31
require_once __DIR__.'/../includes/config/tp.config.php';
32
require_once $SETTINGS['cpassman_dir'].'/includes/config/include.php';
33
require_once $SETTINGS['cpassman_dir'].'/includes/config/settings.php';
34
35
// Load library
36
require_once $SETTINGS['cpassman_dir'] . '/sources/SplClassLoader.php';
37
require_once $SETTINGS['cpassman_dir'].'/sources/main.functions.php';
38
39
40
// Create a new scheduler
41
$assert = new SplClassLoader('Webmozart\Assert', $SETTINGS['cpassman_dir'] . '/includes/libraries');
42
$assert->register();
43
$cron = new SplClassLoader('Cron', $SETTINGS['cpassman_dir'] . '/includes/libraries');
44
$cron->register();
45
$scheduler = new SplClassLoader('GO', $SETTINGS['cpassman_dir'] . '/includes/libraries');
46
$scheduler->register();
47
$scheduler = new scheduler();
48
49
50
51
// Build the scheduler jobs
52
// https://github.com/peppeocchi/php-cron-scheduler
53
$scheduler->php($SETTINGS['cpassman_dir'] . '/scripts/background_tasks___user_keys_creation.php')->everyMinute($SETTINGS['user_keys_job_frequency'] ?? '1');
54
$scheduler->php($SETTINGS['cpassman_dir'] . '/scripts/background_tasks___sending_emails.php')->everyMinute($SETTINGS['sending_emails_job_frequency'] ?? '2');
55
$scheduler->php($SETTINGS['cpassman_dir'] . '/scripts/background_tasks___do_calculation.php')->everyMinute($SETTINGS['items_statistics_job_frequency'] ?? '5');
56
57
if (isset($SETTINGS['users_personal_folder_task']) === true && empty($SETTINGS['users_personal_folder_task']) === false) {
58
    runTask(
59
        explode(';', $SETTINGS['users_personal_folder_task']),
60
        $SETTINGS['cpassman_dir'] . '/scripts/task_maintenance_users_personal_folder.php',
61
        $scheduler
62
    );
63
}
64
65
if (isset($SETTINGS['clean_orphan_objects_task']) === true && empty($SETTINGS['clean_orphan_objects_task']) === false) {
66
    runTask(
67
        explode(';', $SETTINGS['clean_orphan_objects_task']),
68
        $SETTINGS['cpassman_dir'] . '/scripts/task_maintenance_clean_orphan_objects.php',
69
        $scheduler
70
    );
71
}
72
73
if (isset($SETTINGS['purge_temporary_files_task']) === true && empty($SETTINGS['purge_temporary_files_task']) === false) {
74
    runTask(
75
        explode(';', $SETTINGS['purge_temporary_files_task']),
76
        $SETTINGS['cpassman_dir'] . '/scripts/task_maintenance_purge_old_files.php',
77
        $scheduler
78
    );
79
}
80
81
if (isset($SETTINGS['reload_cache_table_task']) === true && empty($SETTINGS['reload_cache_table_task']) === false) {
82
    runTask(
83
        explode(';', $SETTINGS['reload_cache_table_task']),
84
        $SETTINGS['cpassman_dir'] . '/scripts/task_maintenance_reload_cache_table.php',
85
        $scheduler
86
    );
87
}
88
89
if (isset($SETTINGS['rebuild_config_file_task']) === true && empty($SETTINGS['rebuild_config_file_task']) === false) {
90
    runTask(
91
        explode(';', $SETTINGS['rebuild_config_file_task']),
92
        $SETTINGS['cpassman_dir'] . '/scripts/task_maintenance_rebuild_config_file.php',
93
        $scheduler
94
    );
95
}
96
97
// Let the scheduler execute jobs which are due.
98
$scheduler->run();
99
100
/**
101
 * Permits to prepare the task definition
102
 *
103
 * @param array $parameters
104
 * @param string $fileName
105
 * @return void
106
 */
107
function runTask($parameters, $fileName, $scheduler): void
108
{
109
    if (count($parameters) === 2) {
110
        if ($parameters[0] === 'hourly') {
111
            $time = explode(':', $parameters[1]);
112
            $scheduler->php($fileName)->hourly($time[1]);
113
        } elseif ($parameters[0] !== '') {
114
            $param = (string) $parameters[0];
115
            $scheduler->php($fileName)->$param($parameters[1]);
116
        }
117
    } else {
118
        $param = (string) $parameters[0];
119
        $scheduler->php($fileName)->$param('*', $parameters[2], $parameters[1]);
120
    }
121
}