<?php
/**
 * Base class invoked from CLI rather than the webserver (Cron jobs, handling email bounces).
 * You can call subclasses of CliController directly, which will trigger a
 * call to {@link process()} on every sub-subclass. For instance, calling
 * "sake DailyTask" from the commandline will call {@link process()} on every subclass
 * of DailyTask.
 * 
 * @package sapphire
 * @subpackage cron
 */
abstract class CliController extends Controller {
    function init() {
		$this->disableBasicAuth();
		parent::init();
		// Unless called from the command line, all CliControllers need ADMIN privileges
		if(!Director::is_cli() && !Permission::check("ADMIN")) return Security::permissionFailure();
    }
  
    function index() {
        foreach( ClassInfo::subclassesFor( $this->class ) as $subclass ) {
        	echo $subclass . "\n";
        
            $task = new $subclass();
			$task->init();
            $task->process();
        }
    }
    
	/**
	 * Overload this method to contain the task logic.
	 */
    function process() {}
}

?>