<?php 
namespace 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; 
    } 
} 
 
 |