| 
<?phpnamespace App\Controllers;
 
 use \Jackbooted\DB\DB;
 use \Jackbooted\DB\DBTable;
 use \Jackbooted\Forms\Request;
 use \Jackbooted\Html\Tag;
 use \Jackbooted\Html\WebPage;
 use \Jackbooted\Html\Widget;
 use \Jackbooted\Util\MenuUtils;
 use \Jackbooted\Html\Lists;
 use \Jackbooted\Util\AutoLoader;
 use \Jackbooted\Util\ClassLocator;
 
 class JackMain extends WebPage {
 const DEF = '\App\Controllers\JackMain->index()';
 
 public static function menu ( $resp=null ) {
 if ( $resp == null ) $resp = MenuUtils::responseObject ();
 
 return [ [ 'name'    => 'Home',
 'url'     => '?' . $resp->action ( __CLASS__ . '->index()' ),
 'attribs' =>  [ 'title' => 'Home Page' ] ],
 [ 'name'    => 'Recent Alerts',
 'url'     => '?' . $resp->action ( __CLASS__ . '->recentAlarms()' ),
 'attribs' =>  [ 'title' => 'List of recent Alerts' ] ],
 [ 'name'    => 'TODO List',
 'url'     => '?' . $resp->action ( __CLASS__ . '->todo()' ),
 'attribs' =>  [ 'title' => 'List of outstanding items' ] ],
 [ 'name'    => 'Browse Classes',
 'url'     => '?' . $resp->action ( __CLASS__ . '->browse()' ),
 'slug'    => 'browse_classes',
 'attribs' => [ 'title' => 'Browse All Classes' ] ],
 [ 'name'    => 'Edit Account',
 'url'     => '?' . $resp->action ( '\Jackbooted\Admin\Admin->editAccount()' ),
 'attribs' =>  [ 'title' => 'Edit My Account Details' ] ],
 [ 'name'    => 'Logout',
 'url'     => 'ajax.php?' . $resp->action ( '\Jackbooted\Admin\Login::logout()' ),
 'attribs' =>  [ 'title' => 'Logout' ] ],
 ];
 }
 
 public function index () {
 $html = <<<HTML
 So if you are reading this then you have just installed Jackbooted framework. Yes I knmow why do you want another
 framework. Well I have been working on this one since 2000 and it has grown and evolved since then. It is very
 easy to create efficient web sites with just a few clicks.
 HTML;
 return '<h2>Welcome to Jackbooted PHP Framework</h2>' .
 $html;
 }
 
 public function recentAlarms() {
 $sql = <<<SQL
 SELECT *
 FROM tblModJackAlert
 WHERE fldStatus='new'
 ORDER BY fldTimeStamp
 LIMIT 50
 SQL;
 $html = '<h2>Recent Alerts</h2>';
 
 $tab = new DBTable( DB::DEF, $sql, null, DB::FETCH_ASSOC );
 if ( $tab->isEmpty() ) {
 $html .= "There are no alerts at the moment";
 }
 else {
 $html.= Tag::table() .
 Tag::tr () .
 Tag::th() . 'Type' . Tag::_th() .
 Tag::th() . 'Description' . Tag::_th() .
 Tag::th() . 'Time' . Tag::_th() .
 Tag::th() . 'Actions' . Tag::_th() .
 Tag::_tr();
 $resp = MenuUtils::responseObject()->action( __CLASS__ . '->recentAlarmsAck()' );
 foreach ( $tab as $row ) {
 $style = [ 'class' => $row['fldType'] . '_row' ];
 $html .=
 Tag::tr( $style ) .
 Tag::td( $style ) . Tag::e( $row['fldType'] ) . Tag::_td() .
 Tag::td( $style ) . Tag::e( $row['fldDescription'] ) . Tag::_td() .
 Tag::td( $style ) . Tag::e( $row['fldTimeStamp'] ) . Tag::_td() .
 Tag::td( $style ) .
 Tag::linkButton( '?' . $resp->set( 'fldModJackAlertID', $row['fldModJackAlertID'] )->toUrl(), 'Ack' ) .
 Tag::_td() .
 Tag::_tr();
 }
 $html .= Tag::_table();
 }
 return $html;
 }
 public function recentAlarmsAck () {
 if ( ( $id = Request::get( 'fldModJackAlertID' ) ) == '' ||
 ( $alert = Alerts::get( $id ) ) === false ) {
 return $this->index() .
 Widget::popupWrapper( 'Invalid Alert ID' );
 }
 
 $alert->status = Alerts::STATUS_SEEN;
 $alert->save();
 
 return $this->index() .
 Widget::popupWrapper( "Acknowledged Alert {$alert->id} - {$alert->desc}" );
 }
 
 public function todo () {
 $html = <<<HTML
 <table>
 <tr>
 <td>
 <h1>TODO</h1>
 <ol>
 <li>Item 1</li>
 <li>Item 2
 <ul>
 <li>Item 2.1</li>
 <li>Item 2.2</li>
 </ul>
 </li>
 </ol>
 </td>
 </tr>
 </table>
 HTML;
 return $html;
 }
 
 public function browse ( ) {
 $classes = array ();
 foreach ( ClassLocator::getDefaultClassLocator()->getLocatorArray() as $className => $fileName ) {
 if ( preg_match ( AutoLoader::THIRD_PARTY_REGEX, $fileName ) ) continue;
 $classes[$fileName] = $className;
 }
 asort ( $classes );
 
 $html = '<H4>Below are a list of classes, Click on class to view source</h4>' .
 Tag::form ( array ( 'method' => 'get' ) ) .
 MenuUtils::responseObject()->action ( __CLASS__ . '->' . __FUNCTION__ . '()' )->toHidden ( false ) .
 Lists::select ( 'fldFileName',
 $classes,
 array ( 'size' => '7','onClick' => 'submit();' ) ) .
 Tag::_form ();
 
 
 return $html .
 $this->sourceCode();
 }
 public function sourceCode (  ) {
 $fileName = Request::get( 'fldFileName', __FILE__ );
 $code = strtr( file_get_contents( $fileName ), array( '&' => '&','<' => '<' ) );
 // http://sunlightjs.com/
 $html = <<<HTML
 <link rel="stylesheet" type="text/css" href="http://www.brettdutton.com/prism/themes/sunlight.default.css" />
 <script type="text/javascript" src="http://www.brettdutton.com/prism/sunlight-min.js"></script>
 <script type="text/javascript" src="http://www.brettdutton.com/prism/lang/sunlight.php-min.js"></script>
 <pre class="sunlight-highlight-php">$code</pre>
 <script type="text/javascript">Sunlight.highlightAll( );</script>
 HTML;
 return $html;
 }
 }
 
 |