argv[0])) { $this->file = $this->argv[0]; } else { $this->file = TASKS_REGISTRY_FILE; } if (!file_exists($this->file) || !is_readable($this->file)) { printf("Tasks file \"%s\" does not exist or is not readable!\n", $this->file); exit(1); } $this->taskDao = DAORegistry::getDAO('ScheduledTaskDAO'); } /** * Print command usage information. */ public function usage() { echo "Script to run a set of scheduled tasks\n" . "Usage: {$this->scriptName} [tasks_file]\n"; } /** * Parse and execute the scheduled tasks. */ public function execute() { // Application is set to sandbox mode and will not run any schedule tasks if (Config::getVar('general', 'sandbox', false)) { error_log('Application is set to sandbox mode and will not run any schedule tasks'); return; } $this->parseTasks($this->file); } /** * Parse and execute the scheduled tasks in the specified file. * * @param string $file */ public function parseTasks($file) { $xmlParser = new PKPXMLParser(); $tree = $xmlParser->parse($file); if (!$tree) { printf("Unable to parse file \"%s\"!\n", $file); exit(1); } foreach ($tree->getChildren() as $task) { $className = $task->getAttribute('class'); $frequency = $task->getChildByName('frequency'); if (isset($frequency)) { $canExecute = ScheduledTaskHelper::checkFrequency($className, $frequency); } else { // Always execute if no frequency is specified $canExecute = true; } if ($canExecute) { $this->executeTask($className, ScheduledTaskHelper::getTaskArgs($task)); } } } /** * Execute the specified task. * * @param string $className the class name to execute * @param array $args the array of arguments to pass to the class constructors */ public function executeTask($className, $args) { // Load and execute the task if (preg_match('/^[a-zA-Z0-9_.]+$/', $className)) { // DEPRECATED as of 3.4.0: Use old class.name.style and import() function (pre-PSR classloading) pkp/pkp-lib#8186 if (!is_object($task = instantiate($className, null, null, 'execute', $args))) { fatalError('Cannot instantiate task class.'); } } else { $task = new $className($args); } $this->taskDao->updateLastRunTime($className); $task->execute(); } } if (!PKP_STRICT_MODE) { class_alias('\PKP\cliTool\ScheduledTaskTool', '\ScheduledTaskTool'); }