PHP Classes

File: vendor/jackbooted/cron/SchedulerManager.php

Recommend this page to a friend!
  Classes of Brett Dutton   JackBooted PHP Framework   vendor/jackbooted/cron/SchedulerManager.php   Download  
File: vendor/jackbooted/cron/SchedulerManager.php
Role: Class source
Content type: text/plain
Description: Class source
Class: JackBooted PHP Framework
Web application framework using simplified MVC
Author: By
Last change:
Date: 8 years ago
Size: 6,945 bytes
 

Contents

Class file image Download
<?php
namespace Jackbooted\Cron;

use \
Jackbooted\Forms\Request;
use \
Jackbooted\Forms\Response;
use \
Jackbooted\Html\JS;
use \
Jackbooted\Html\Lists;
use \
Jackbooted\Html\Tag;
use \
Jackbooted\Html\Validator;
use \
Jackbooted\Html\WebPage;
use \
Jackbooted\Html\Widget;
/**
 * @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 SchedulerManager extends WebPage {

   
/**
     * @return string
     */
   
public static function hello () {
        return [
0, 'Hello World' ];
    }

    public function
index () {
       
$schedulerList = Scheduler::getList ( true );
       
$formName = 'SchedulerManager_index';
       
$id = 'SchedulerManager_table';

       
$js = "$().ready ( function () {\n";

       
$valid = Validator::factory ( $formName );

       
$html = Tag::table ( [ 'id' => $id ] ) .
                 
Tag::tr () .
                   
Tag::th () . 'Upd' . Tag::_th () .
                   
Tag::th () . 'Del' . Tag::_th () .
                   
Tag::th () . 'Command' . Tag::_th () .
                   
Tag::th () . 'Start Date'. Tag::_th () .
                   
Tag::th () . 'Cron' . Tag::_th () .
                   
Tag::th () . 'Active' . Tag::_th () .
                   
Tag::th () . 'Last Run' . Tag::_th () .
                 
Tag::_tr ();

        if (
count ( $schedulerList ) == 0 ) {
           
$html .= Tag::tr () .
                      
Tag::td ( [ 'colspan' => 20 ] ) .
                        
'No Scheduled Tasks' .
                      
Tag::_td () .
                    
Tag::_tr ();
        }
        else {
           
$js .= <<<JS
$('input[type=checkbox][name^=fldUpd]').shiftClick();

JS;
           
$rowIdx = 0;
            foreach (
$schedulerList as $idx => $schedulerItem ) {
               
$row = '_' . $idx;

               
$valid->addExists ( 'fldCommand' . $row, 'Command must exist' )
                      ->
addExists ( 'fldCron' . $row, 'Interval must exist' );

               
$js .= <<<JS
$( '#fldStartDate$row' ).datetimepicker({
                        dateFormat: 'yy-mm-dd',
                        timeFormat: 'HH:mm'
                    });
JS;
               
$lastRun = ( $schedulerItem->lastRun == '' ) ? '*Never*' : $schedulerItem->lastRun;

               
$html .= Tag::tr () .
                          
Tag::td () .
                            
Tag::checkBox( 'fldUpd[]', $idx, false, [ 'id' => 'U' . $rowIdx ] ) .
                          
Tag::_td () .
                          
Tag::td () .
                            
Tag::linkButton ( '?' . Response::factory()
                                                             ->
set ( 'fldID', $idx )
                                                             ->
action ( __CLASS__ . '->deleteItem()' ),
                                              
'Delete',
                                                [
'onClick' => "confirm('Are you sure?')" ] ) .
                          
Tag::_td () .
                          
Tag::td ( ['width' => '100%', 'nowrap' => 'nowrap' ]) .
                            
Tag::text ( 'fldCommand' . $row, $schedulerItem->cmd,
                                          [
'style' => 'width:100%;',
                                           
'onChange' => "$('#U$rowIdx').attr('checked',true)" ] ) .
                          
Tag::_td () .
                          
Tag::td ( ['nowrap' => 'nowrap' ] ) .
                            
Tag::text ( 'fldStartDate' . $row, $schedulerItem->start,
                                          [
'id' => 'fldStartDate' . $row,
                                           
'size' => '18',
                                           
'onChange' => "$('#U$rowIdx').attr('checked',true)" ] ) .
                          
Tag::_td () .
                          
Tag::td ( ['nowrap' => 'nowrap' ] ) .
                            
Tag::text ( 'fldCron' . $row, $schedulerItem->cron,
                                          [
'onChange' => "$('#U$rowIdx').attr('checked',true)" ] ) .
                          
Tag::_td () .
                          
Tag::td ( ['nowrap' => 'nowrap' ] ) .
                            
Lists::select ( 'fldActive' . $row, [ 'Yes', 'No' ],
                                               [
'default' => $schedulerItem->active,
                                                
'onChange' => "$('#U$rowIdx').attr('checked',true)" ] ) .
                          
Tag::_td () .
                          
Tag::td ( ['nowrap' => 'nowrap' ] ) . $lastRun . Tag::_td () .
                        
Tag::_tr ();
               
$rowIdx ++;
            }
        }

       
$html .= Tag::_table ();
       
$js .= '});';

        return
JS::libraryWithDependancies( JS::JQUERY_UI_DATETIME ) .
              
JS::library ( 'jquery.shiftclick.js' ) .
              
JS::javaScript( $js ) .
              
$valid->toHtml() .
              
Widget::styleTable ( '#' . $id ) .
              
Tag::form ( [ 'name' => $formName, 'onSubmit' => $valid->onSubmit() ] ) .
                
$html .
                
Response::factory()->action ( __CLASS__ . '->save()' )->toHidden() .
                
Tag::submit ( 'Save' ) .
                
Tag::linkButton ( '?' . Response::factory()->action ( __CLASS__ . '->newItem()' ), 'New Item' ) .
              
Tag::_form ();
    }

    public function
save () {
        foreach (
Request::get ( 'fldUpd', [] ) as $id ) {
           
$data = [ 'id' => $id,
                      
'cmd' => Request::get ( 'fldCommand_' . $id ),
                      
'start' => Request::get ( 'fldStartDate_' . $id ),
                      
'cron' => Request::get ( 'fldCron_' . $id ),
                      
'active' => Request::get ( 'fldActive_' . $id ) ];
           
Scheduler::factory ( $data )->save ();
        }

        return
Widget::popupWrapper ( 'Saved Item(s)' ) .
              
$this->index ();
    }
    public function
deleteItem () {
       
$id = Request::get ( 'fldID' );
       
Scheduler::factory ( [ 'id' => $id ] )->delete ();
        return
Widget::popupWrapper ( 'Deleted Item: ' . $id ) .
              
$this->index ();
    }

    public function
newItem () {
       
$defaults = [ 'cmd' => __CLASS__ . '::hello();',
                      
'start' => strftime ( '%Y-%m-%d %H:%M' ),
                      
'cron' => '* * * * *',
                      
'active' => 'No',
                      
'lastRun' => '' ];
       
Scheduler::factory ( $defaults )->save ();
        return
Widget::popupWrapper ( 'New Item Created' ) .
              
$this->index ();
    }
}