Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 4.1.x will end 13 November 2023 (12 months).
  • Bug fixes for security issues in 4.1.x will end 10 November 2025 (36 months).
  • PHP version: minimum PHP 7.4.0 Note: minimum PHP version has increased since Moodle 4.0. PHP 8.0.x is supported too.
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.

/**
 * Adhoc task abstract class.
 *
 * All background tasks should extend this class.
 *
 * @package    core
 * @category   task
 * @copyright  2013 Damyon Wiese
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */

namespace core\task;

/**
 * Abstract class defining an adhoc task.
 * @copyright  2013 Damyon Wiese
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
abstract class adhoc_task extends task_base {

    /** @var string $customdata - Custom data required for when this task is executed. */
    private $customdata = '';

    /** @var integer|null $id - Adhoc tasks each have their own database record id. */
    private $id = null;

    /** @var integer|null $userid - Adhoc tasks may choose to run as a specific user. */
    private $userid = null;

    /** @var \core\lock\lock The concurrency task lock for this task. */
    private $concurrencylock = null;

    /**
> * Provide default implementation of the task name for backward compatibility. Extending classes are expected to implement * Setter for $id. > * this method to provide a descriptive name for the task (shown to admins) * @param int|null $id > * */ > * @return string public function set_id($id) { > */ $this->id = $id; > public function get_name() { } > $classparts = explode('\\', get_called_class()); > $classname = end($classparts); /** > * Getter for $userid. > // Try to make human readable, capitalized and with spaces. * @return int|null $userid > return ucfirst(str_replace('_', ' ', $classname)); */ > } public function get_userid() { > return $this->userid; > /**
} /** * Setter for $customdata. * @param mixed $customdata (anything that can be handled by json_encode) */ public function set_custom_data($customdata) { $this->customdata = json_encode($customdata); } /** * Alternate setter for $customdata. Expects the data as a json_encoded string. * @param string $customdata json_encoded string */ public function set_custom_data_as_string($customdata) { $this->customdata = $customdata; } /** * Getter for $customdata. * @return mixed (anything that can be handled by json_decode). */ public function get_custom_data() { return json_decode($this->customdata); } /** * Alternate getter for $customdata. * @return string this is the raw json encoded version. */ public function get_custom_data_as_string() { return $this->customdata; } /** * Getter for $id. * @return int|null $id */ public function get_id() { return $this->id; } /** * Setter for $userid. * @param int|null $userid */ public function set_userid($userid) { $this->userid = $userid; } /** * Returns default concurrency limit for this task. * * @return int default concurrency limit */ protected function get_default_concurrency_limit(): int { global $CFG; if (isset($CFG->task_concurrency_limit_default)) { return (int) $CFG->task_concurrency_limit_default; } return 0; } /** * Returns effective concurrency limit for this task. * * @return int effective concurrency limit for this task */ final public function get_concurrency_limit(): int { global $CFG; $classname = get_class($this); if (isset($CFG->task_concurrency_limit[$classname])) { return (int) $CFG->task_concurrency_limit[$classname]; } return $this->get_default_concurrency_limit(); } /** * Sets concurrency task lock. * * @param \core\lock\lock $lock concurrency lock to be set */ final public function set_concurrency_lock(\core\lock\lock $lock): void { $this->concurrencylock = $lock; } /** * Release the concurrency lock for this task type. */ final public function release_concurrency_lock(): void { if ($this->concurrencylock) { $this->concurrencylock->release(); } } }