Overview

Classes

  • Api1
  • Array1
  • ArrayObject1
  • Auth1
  • AuthModel1
  • Chat1
  • Class1
  • Color1
  • Console1
  • Controller1
  • Converter1
  • Cookie1
  • Date1
  • DateManager1
  • Db1
  • DbPref1
  • EasyBook
  • EasyCountry
  • EasyGenerator
  • EasyProduct
  • EasyProject
  • EasySchool
  • EasyStatus
  • exApiController1
  • exBlade1
  • exClass
  • exData1
  • exMail1
  • exRoute1
  • exTranslate1
  • exUrl1
  • FileManager1
  • FilePref1
  • Form1
  • Function1
  • Header1
  • Html1
  • HtmlAsset1
  • HtmlForm1
  • HtmlStyle1
  • HtmlWidget1
  • Math1
  • Model1
  • Model1FileLocator
  • Number1
  • Object1
  • Page1
  • Picture1
  • Popup1
  • QUESTION_TYPE
  • RecursiveArrayObject1
  • RegEx1
  • ResultObject1
  • ResultStatus1
  • ServerRequest1
  • Session1
  • SessionPreferenceSave1
  • String1
  • TaskManager1
  • Url1
  • Validation1
  • Value1

Interfaces

  • Controller1RouteInterface
  • Model1ActionInterface
  • Model1PageInterface

Functions

  • __
  • api_and_form_default_route
  • app
  • app_api_list
  • app_class_list
  • app_class_paths
  • app_class_with_interface
  • app_controller_list
  • app_dashboard_list
  • app_db_model_list
  • app_db_table_list
  • app_model_list
  • app_page_list
  • asset
  • csrf_token
  • current_layout_asset
  • current_plugin_asset
  • current_resources_asset_path
  • d
  • dd
  • file_base
  • file_session
  • file_session_get
  • file_session_remove
  • file_session_save
  • form_call_api
  • form_call_controller
  • form_token
  • get_all_view_in_directory
  • get_valid_view_path
  • is_token_valid
  • is_ajax_request
  • layout_asset
  • mailer
  • mailer_send_mail_to_list
  • make_default_route
  • makeRoute
  • normalizeSharedPath
  • now
  • now_date
  • now_time
  • old
  • paginate
  • path_app
  • path_asset
  • path_asset_url
  • path_clear_cache
  • path_main
  • path_main_url
  • path_shared
  • path_shared_app
  • path_shared_asset
  • path_shared_asset_url
  • path_shared_resources
  • path_to_viewpath
  • plugin_asset
  • pre
  • redirect
  • redirect_back
  • redirect_failed
  • redirect_to_view
  • register_path_for_layout_asset
  • request
  • resources_path
  • resources_path_asset
  • resources_path_cache
  • resources_path_plugin
  • resources_path_view
  • resources_path_view_cache
  • resources_path_view_layout
  • route
  • routes
  • shared_asset
  • token
  • translate_language
  • translated_language
  • url
  • view
  • view_exists
  • view_make
  • viewpath_to_path
  • Overview
  • Class
  1:   2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35:  36:  37:  38:  39:  40:  41:  42:  43:  44:  45:  46:  47:  48:  49:  50:  51:  52:  53:  54:  55:  56:  57:  58:  59:  60:  61:  62:  63:  64:  65:  66:  67:  68:  69:  70:  71:  72:  73:  74:  75:  76:  77:  78:  79:  80:  81:  82:  83:  84:  85:  86:  87:  88:  89:  90:  91:  92:  93:  94:  95:  96:  97:  98:  99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 
<?php
/**
 * Created by PhpStorm.
 * User: samtax
 * Date: 08/07/2018
 * Time: 7:47 AM
 */






/************************************************
 *  Blade
 * @see https://github.com/XiaoLer/blade
 *
 ************************************************/
    require PATH_LIBRARY . 'blade-5.4/src/Autoloader.php';

    Xiaoler\Blade\Autoloader::register();
    use Xiaoler\Blade\FileViewFinder;
    use Xiaoler\Blade\Factory;
    use Xiaoler\Blade\Compilers\BladeCompiler;
    use Xiaoler\Blade\Engines\CompilerEngine;
    use Xiaoler\Blade\Filesystem;
    use Xiaoler\Blade\Engines\EngineResolver;

    // your views file path, it's an array
    $view_path = [
        BASE_PATH.'resources/views',    // app view
        Config1::ENABLE_INCLUDES_SHARED?  PATH_SHARED_RESOURCE.'views' : null   // optional main view
    ];

    $view_cachePath = BASE_PATH.'resources/cache/views';     // compiled file path

    $view_file = new Filesystem;
    $view_compiler = new BladeCompiler($view_file, $view_cachePath);

    // you can add a custom directive if you want
    $view_compiler->directive('datetime', function($timestamp) {
        return preg_replace('/(\(\d+\))/', '<?php echo date("Y-m-d H:i:s", $1); ?>', $timestamp);
    });

    $view_resolver = new EngineResolver;
    $view_resolver->register('blade', function () use ($view_compiler) {
        return new CompilerEngine($view_compiler);
    });

    // get an instance of factory
    $view = new Factory($view_resolver, new FileViewFinder($view_file, $view_path));
    // if your views file extension is not php or blade.php, use this to add it
    //$views->addExtension('tpl', 'blade');


    /**
     * @param $view_name
     * @param array $param
     * @param bool $noPageAutoWrap
     * @return string
     * render the template file, stop the page and echo the view
     * @throws Throwable
     */
    function view($view_name, $param = [], $noPageAutoWrap = false){
        global $view;
        if(!$noPageAutoWrap && Config1::AUTO_PAGE_WRAPPER) { Page1::start(); }  // Page Wrapper Start
        echo $newView = $view->make($view_name, @array_merge(Config1::onPageStart(), String1::isset_or($_SESSION['__SHARED_VARIABLE'], []), $param))->render();
        // delete old request
        if(!Page1::$FLAG_KEEP_OLD_REQUEST) { unset($_SESSION['__old']); Session1::delete('__old'); }   // delete if reload
        // Page Wrapper End
        if(!$noPageAutoWrap && Config1::AUTO_PAGE_WRAPPER) { Page1::end(); } Config1::onPageEnd();
        return '';
    }


    /**
     * @param $view_name
     * @param array $param
     * @return string
     *
     * render the template file and just return it
     * Could be use for sending e-mails, or rendering multiple view
     * @throws Throwable
     */
    function view_make($view_name, $param = []){ global $view; return $view->make($view_name, $param)->render(); }

    function view_exists($view_name){ global $view; return $view->exists($view_name); }


    /**
     * @param $full_filename
     * @return mixed
     *
       Convert :
       "/Applications/MAMP/htdocs/Project-Ehex/easy-task@framework/resources/views/layouts/w3/pages/mail.blade.php"
       To :
       "layouts.w3.pages.mail"
     *
     */
    function path_to_viewpath($full_filename){
        $full_filename = FileManager1::normalizeFilePathSeparator($full_filename, DS);
        if(String1::contains('/resources/views/', $full_filename)){
            $delimiter = '/resources/views/';
            $full_filename = explode($delimiter, $full_filename)[1];
        }
        $full_filename = \String1::replaceEnd($full_filename, '.blade.php', '');
        $full_filename = \String1::replace($full_filename, DIRECTORY_SEPARATOR, '.');
        return $full_filename;
    }

    /**
     * Get View full path
     * @param $full_view_path
     * @param bool $validate (turn off if is directory)
     * @return string
     */
    function viewpath_to_path($full_view_path, $validate = true){
        if(!$validate){
            $fullPath = get_valid_view_path($full_view_path);
            return $fullPath? $fullPath: Console1::println("View Path [$full_view_path] Not Found in either AppView or SharedView", true);
        }
        global $view;  return $view->getViewFullPath($full_view_path);
    }
    /**
     * Get View full path
     * @param $full_viewfile_path
     * @return string
     */


    /**
     * @param string $full_filename
     * @param bool $view_name_only
     * @param bool $recursive
     * @return array|null Fetch all view from  :
     */
    function get_all_view_in_directory($full_filename = '/Applications/MAMP/htdocs/ex/', $view_name_only = false, $recursive = false){
        return array_map(
            function($path) use ($view_name_only) {
                if($view_name_only) {
                    $last = explode('/', $path);
                    $path = end($last);
                }
                return path_to_viewpath($path);
            }, FileManager1::getDirectoriesFiles($full_filename, [], [], -1, $recursive));
    }






    // directory list
    function resources_path($isShared = false){ return $isShared? PATH_SHARED_RESOURCE: PATH_RESOURCE; }
    /**
     * Automatic lookup for view in either app view folder or shared view folder. return null if folder not exist
     * @param string $view_path (passed in view name. e.g layouts.bootstrap)
     * @param bool $searchCurrentAppViewFirstThenSharedView ( choose if you preferred searching app view folder first or shared view folder)
     * @return null|string
     */
    function get_valid_view_path($view_path = '', $searchCurrentAppViewFirstThenSharedView = true){
        $full_view_path = String1::replace($view_path, '.', DIRECTORY_SEPARATOR);
        $lookupPath1 = resources_path_view(!$searchCurrentAppViewFirstThenSharedView).DIRECTORY_SEPARATOR.$full_view_path;
        $lookupPath2 = resources_path_view($searchCurrentAppViewFirstThenSharedView).DIRECTORY_SEPARATOR.$full_view_path;
        if(  is_dir($lookupPath1)  ) return $lookupPath1;
        else if(is_dir($lookupPath2)  ) return $lookupPath2;
        return null;
    }
    function resources_path_view($isShared = false){ return resources_path($isShared).'views' ; }
    function resources_path_view_layout($isShared = false){ return resources_path($isShared).'views/layouts' ; }
    function resources_path_plugin($isShared = false){ return resources_path($isShared).'plugins' ; }
    function resources_path_view_cache(){ global $view_cachePath; return $view_cachePath; }
    function resources_path_cache(){ return resources_path(false).'/cache'; }
    function resources_path_asset($isShared = false){ return resources_path($isShared).'/assets';  }
API documentation generated by ApiGen