/**
  * Bootstrap any application services.
  *
  * @return void
  */
 public function boot()
 {
     /**
      * Register custom Validator
      */
     Validator::extend('require_one_of_array', function ($attribute, $value, $parameters, $validator) {
         if (!is_array($value)) {
             return false;
         }
         foreach ($value as $k => $v) {
             if (!empty($v)) {
                 return true;
             }
         }
         return false;
     });
     /**
      * Get Admin Menu from DB
      */
     view()->composer('admin.layout.admin_index_layout', function ($view) {
         $adminMenu = new AdminMenu();
         $view->with('adminMenu', $adminMenu->getMenu());
         $controller = Util::getController();
         $view->with('controller', $controller);
         $view->with('controller_parent_id', $adminMenu->getParent($controller));
     });
     /**
      * Get Settings From DB
      */
     $settings = Cache::rememberForever('settings', function () {
         return Settings::all();
     });
     if (!$settings->isEmpty()) {
         foreach ($settings as $k => $v) {
             config(['dc.' . $v->setting_name => $v->setting_value]);
         }
     }
     /**
      * Get Custom Pages From DB, Get Central Banner
      */
     view()->composer('layout.index_layout', function ($view) {
         //header menu
         $headerMenu = Cache::rememberForever('headerMenu', function () {
             return Page::select('page_title', 'page_slug')->where('page_position', Page::HEADER_MENU)->where('page_active', 1)->orderBy('page_ord', 'ASC')->get();
         });
         $view->with('headerMenu', $headerMenu);
         //footer menu
         $footerMenu = Cache::rememberForever('footerMenu', function () {
             return Page::select('page_title', 'page_slug')->where('page_position', Page::FOOTER_MENU)->where('page_active', 1)->orderBy('page_ord', 'ASC')->get();
         });
         $view->with('footerMenu', $footerMenu);
         //get central banner if any
         $today = date('Y-m-d');
         $centralBanner = Banner::where('banner_active_from', '<=', $today)->where('banner_active_to', '>=', $today)->where('banner_position', Banner::BANNER_POSITION_LIST)->orderByRaw('rand()')->take(1)->first();
         if (!empty($centralBanner)) {
             $centralBanner->increment('banner_num_views');
         }
         $view->with('centralBanner', $centralBanner);
     });
     /**
      * get ad detail/ad contact banner
      */
     view()->composer(['ad.detail', 'ad.contact'], function ($view) {
         $today = date('Y-m-d');
         $adDetailBanner = Banner::where('banner_active_from', '<=', $today)->where('banner_active_to', '>=', $today)->where('banner_position', Banner::BANNER_POSITION_DETAIL)->orderByRaw('rand()')->take(1)->first();
         if (!empty($adDetailBanner)) {
             $adDetailBanner->increment('banner_num_views');
         }
         $view->with('adDetailBanner', $adDetailBanner);
     });
 }