<?php

/**
 * Interface for a generic build task. Does not support dependencies. This will simply
 * run a chunk of code when called.
 *
 * To disable the task (in the case of potentially destructive updates or deletes), declare
 * the $Disabled property on the subclass.
 *
 * @package framework
 * @subpackage dev
 */
abstract class BuildTask extends Object {

	/**
	 * @var bool $enabled If set to FALSE, keep it from showing in the list
	 * and from being executable through URL or CLI.
	 */
	protected $enabled = true;

	/**
	 * @var string $title Shown in the overview on the {@link TaskRunner}
	 * HTML or CLI interface. Should be short and concise, no HTML allowed.
	 */
	protected $title;

	/**
	 * @var string $description Describe the implications the task has,
	 * and the changes it makes. Accepts HTML formatting.
	 */
	protected $description = 'No description available';

	/**
 	 * Implement this method in the task subclass to
	 * execute via the TaskRunner
	 */
	abstract public function run($request);

	public function isEnabled() {
		return $this->enabled;
	}

	/**
	 * @return string
	 */
	public function getTitle() {
		return ($this->title) ? $this->title : $this->class;
	}

	/**
	 * @return string HTML formatted description
	 */
	public function getDescription() {
		return $this->description;
	}

}