* @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Scheduler\Administrator\Task; use Joomla\CMS\Language\Text; use Joomla\CMS\Log\Log; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The TaskOption class is used as a utility container for available plugin-provided task routines. * Each task-supporting plugin calls the {@see TaskOptions::addOptions()} method with an array of TaskOption constructor * argument pairs as argument. Internally, the TaskOption object generates the routine title and description from the * language constant prefix. * * @since 4.1.0 * * @property-read string $desc The routine description. * @property-read string $id The routine ID. * @property-read string $langConstPrefix The routine's language constant prefix. * @property-read string $title The routine title. */ class TaskOption { /** * Task routine title * * @var string * @since 4.1.0 */ protected $title; /** * Task routine description. * * @var string * @since 4.1.0 */ protected $desc; /** * Routine type-ID. * * @var string * @since 4.1.0 */ protected $id; /** * @var string * @since 4.1.0 */ protected $langConstPrefix; /** * TaskOption constructor. * * @param string $type A unique ID string for a plugin task routine. * @param string $langConstPrefix The Language constant prefix $p. Expects $p . _TITLE and $p . _DESC to exist. * * @since 4.1.0 */ public function __construct(string $type, string $langConstPrefix) { $this->id = $type; $this->title = Text::_("${langConstPrefix}_TITLE"); $this->desc = Text::_("${langConstPrefix}_DESC"); $this->langConstPrefix = $langConstPrefix; } /** * Magic method to allow read-only access to private properties. * * @param string $name The object property requested. * * @return ?string * * @since 4.1.0 */ public function __get(string $name) { if (property_exists($this, $name)) { return $this->$name; } // Trigger a deprecation for the 'type' property (replaced with {@see id}). if ($name === 'type') { try { Log::add( sprintf( 'The %1$s property is deprecated. Use %2$s instead.', $name, 'id' ), Log::WARNING, 'deprecated' ); } catch (\RuntimeException $e) { // Pass } return $this->id; } return null; } }