| 
<?phpnamespace Jackbooted\Cron;
 
 use \Jackbooted\DB\ORM;
 use \Jackbooted\Util\Log4PHP;
 /**
 * @copyright Confidential and copyright (c) 2016 Jackbooted Software. All rights reserved.
 *
 * Written by Brett Dutton of Jackbooted Software
 * brett at brettdutton dot com
 *
 * This software is written and distributed under the GNU General Public
 * License which means that its source code is freely-distributed and
 * available to the general public.
 */
 
 class Scheduler extends ORM {
 
 private static $log = null;
 private static $dao = null;
 
 /**
 * @return void
 */
 public static function init () {
 self::$log = Log4PHP::logFactory ( __CLASS__ );
 self::$dao = new SchedulerDAO ();
 }
 
 public static function load ( $id ) {
 return new Scheduler ( self::$dao->oneRow ( $id ) );
 }
 
 public static function getList ( $all=false ) {
 if ( $all ) {
 $where =  [ 'where' =>  [ ] ];
 }
 else {
 $where =  [ 'where' =>  [ 'active' => SchedulerDAO::ACTIVE ] ];
 }
 
 $table = self::$dao->search ( $where );
 return self::tableToObjectList ( $table );
 }
 
 /**
 * @param  $data
 * @return void
 */
 public function __construct( $data ) {
 parent::__construct ( self::$dao, $data );
 }
 
 /**
 * Check if there are any upcoming schedules
 */
 public static function check () {
 $numAdded = 0;
 
 foreach ( self::getList () as $sheduleItem ) {
 
 $storedLastRunTime = strtotime( ( $sheduleItem->lastRun == '' ) ? $sheduleItem->start : $sheduleItem->lastRun );
 $previousCalculatedRunTime = CronParser::lastRun( $sheduleItem->cron );
 
 // This looks at when the item had run. If the stored value is less than
 // the calculated value means that we have past a run period. So need to run
 if ( $storedLastRunTime <  $previousCalculatedRunTime ) {
 
 // Update the run time to now
 $sheduleItem->lastRun = strftime ( '%Y-%m-%d %H:%M', $previousCalculatedRunTime );
 $sheduleItem->save ();
 
 // Enqueue a new item to run
 $job = new Cron (  [ 'ref' => $sheduleItem->id,
 'cmd' => $sheduleItem->cmd, ] );
 $job->save ();
 $numAdded ++;
 }
 }
 return $numAdded;
 }
 }
 
 |