payload class name, * 'runner' => task runner class name, * 'persistence' => persistence class name, * 'config' => [ * persistence options array * custom in function of needs * ], * * @param array $options * @throws BadTaskQueueOption */ public function __construct(array $options = []) { parent::__construct($options); if ($this->hasOption('runner')) { $classRunner = $this->getOption('runner'); if (!is_a($classRunner, TaskRunnerInterface::class, true)) { throw new BadTaskQueueOption('task runner must implement ' . TaskRunnerInterface::class); } $this->runner = new $classRunner(); } if ($this->hasOption('persistence') && $this->hasOption('config')) { $classPersistence = $this->getOption('persistence'); if (!is_a($classPersistence, TaskPersistenceInterface::class, true)) { throw new BadTaskQueueOption('task persistence must implement ' . TaskPersistenceInterface::class); } $configPersistence = $this->getOption('config'); $this->persistence = new $classPersistence($configPersistence); } } /** * set task runner * * @deprecated since version 7.10.0, to be removed in 8.0. * * @param TaskRunnerInterface $runner * @return $this */ public function setRunner(TaskRunnerInterface $runner) { $this->runner = $runner; return $this; } /** * set task persistence * * @deprecated since version 7.10.0, to be removed in 8.0. * * @param TaskPersistenceInterface $persistence * @return $this */ public function setPersistence(TaskPersistenceInterface $persistence) { $this->persistence = $persistence; return $this; } /** * return task runner * * @deprecated since version 7.10.0, to be removed in 8.0. * * @return TaskRunner */ public function getRunner() { $this->runner->setServiceLocator($this->getServiceLocator()); return $this->runner; } /** * return task persistence * * @deprecated since version 7.10.0, to be removed in 8.0. * * @return TaskPersistenceInterface */ public function getPersistence() { $this->persistence->setServiceLocator($this->getServiceLocator()); return $this->persistence; } /** * change task status using task persistence * * @deprecated since version 7.10.0, to be removed in 8.0. * * @param $taskId * @param $status * @return self */ public function updateTaskStatus($taskId, $status) { if ($this->getPersistence()->has($taskId)) { $this->getPersistence()->update($taskId, $status); } return $this; } /** * set task report using task persistence * * @deprecated since version 7.10.0, to be removed in 8.0. * * @param $taskId * @param $report * @return self */ public function updateTaskReport($taskId, $report) { if ($this->getPersistence()->has($taskId)) { $this->getPersistence()->setReport($taskId, $report); } return $this; } /** * get task from persistence * * @deprecated since version 7.10.0, to be removed in 8.0. * * @param $taskId * @return Task */ public function getTask($taskId) { return $this->getPersistence()->get($taskId); } /** * execute task with task runner * * @deprecated since version 7.10.0, to be removed in 8.0. * * @param Task $task * @return mixed */ public function runTask(Task $task) { return $this->getRunner()->run($task); } /** * return a new instance of payload * * @deprecated since version 7.10.0, to be removed in 8.0. * * @param $currentUserId * @return TaskPayLoad * @throws BadTaskQueueOption */ public function getPayload($currentUserId = null) { $class = $this->getOption('payload'); if (!is_a($class, TaskPayLoad::class, true)) { throw new BadTaskQueueOption('task payload must implement ' . TaskPayLoad::class); } /** * @var $payload TaskPayLoad */ $payload = new $class($this->getPersistence(), $currentUserId); $payload->setServiceLocator($this->getServiceLocator()); /** * @var TaskPayLoad $payload */ return $payload; } /** * Get resource from rdf storage which represents task in the task queue by linked resource * Returns null if there is no task linked to given resource * * @deprecated since version 7.10.0, to be removed in 8.0. * * @param \core_kernel_classes_Resource $resource * @return null|\core_kernel_classes_Resource */ public function getTaskResource(\core_kernel_classes_Resource $resource) { $tasksRootClass = $this->getClass(Task::TASK_CLASS); $task = $tasksRootClass->searchInstances([Task::PROPERTY_LINKED_RESOURCE => $resource->getUri()]); return empty($task) ? null : current($task); } /** * @deprecated since version 7.10.0, to be removed in 8.0. * * @param \core_kernel_classes_Resource $resource * @return \common_report_Report */ public function getReportByLinkedResource(\core_kernel_classes_Resource $resource) { $taskResource = $this->getTaskResource($resource); if ($taskResource !== null) { $report = $taskResource->getOnePropertyValue($this->getProperty(Task::PROPERTY_REPORT)); if ($report) { $report = \common_report_Report::jsonUnserialize($report->literal); } else { $task = $this->getTask($taskResource->getUri()); if ($task) { $report = \common_report_Report::createInfo(__('Task is in \'%s\' state', $task->getStatus())); } else { //this is an assumption. //in case if sync implementation is used task may not be found. $report = \common_report_Report::createInfo(__('Task is in progress')); } } } else { $report = \common_report_Report::createFailure(__('Resource is not the task placeholder')); } return $report; } /** * Create task resource in the rdf storage and link placeholder resource to it. * * @deprecated since version 7.10.0, to be removed in 8.0. * * @param Task $task * @param \core_kernel_classes_Resource|null $resource - placeholder resource to be linked with task. * @return \core_kernel_classes_Resource */ public function linkTask(Task $task, \core_kernel_classes_Resource $resource = null) { $taskResource = $this->getResource($task->getId()); if (!$taskResource->exists()) { $tasksRootClass = $this->getClass(Task::TASK_CLASS); $taskResource = $tasksRootClass->createInstance('', '', $task->getId()); } if ($resource !== null) { $taskResource->setPropertyValue( $this->getProperty(Task::PROPERTY_LINKED_RESOURCE), $resource->getUri() ); } return $taskResource; } }