/** * captura somente diretórios recursivamente * @param [type] $dir [description] * @param [type] $extra [description] * @return [type] [description] */ public function scanControllers($dir, $extra = null, $pathunion = null, $nivel = 0, $dirBase = null) { if ($extra == null) { $extra = function () { return true; }; } $dirAppArray = Functions::scanOnlyDir($dir, $extra); if (count($dirAppArray) < 1) { return null; } $pathunion = ''; foreach ($dirAppArray as $key => $value) { $path = $dir . $value . '/'; if ($pathunion == null) { if ($nivel == 0) { $dirBase = $dir; } $nivel++; } $pathunion = $pathunion . $value . '/'; //echo $value.'<br>'; $pathreplace = $path; //$pathreplace = str_replace(Globals::get('path/app/modules/path'), '', $path); // $pathreplace = str_replace($dirBase, '', $path); $dirArray[$value]['name'] = $value; $dirArray[$value]['controller'] = $pathreplace; //$pathreplace; $options = $this->getOptionsFile($pathreplace); $dirArray[$value]['inner'] = $this->scanControllers($path, $extra, $pathunion, $nivel, $dirBase); // $optionsSequence[] = $dirArray[$value]['inner']; $parent = str_replace($dirBase, '', $pathreplace); $dirArray[$value]['parent'] = $parent; if (count($options) > 0) { foreach ($options as $keyOptions => $valueOptions) { $dirArray[$value][$keyOptions] = $valueOptions; } // ajusta o atributo 'parent' em caso ser definido o atributo inner no options if (is_object($dirArray[$value][$keyOptions])) { $keyInner = key($dirArray[$value][$keyOptions]); if (is_object($dirArray[$value][$keyOptions]->{$keyInner})) { $innerParent = str_replace($dirBase, '', $pathreplace) . $keyInner; $dirArray[$value][$keyOptions]->{$keyInner}->parent = $innerParent; //str_replace($dirBase, '', $pathreplace); } } } } // ordena por prioridade no options $price = array(); foreach ($dirArray as $key => $row) { //echo print_r($row['priority']).'==<br>'; // $price[$key] = isset($row['priority']) ? $row['priority'] : 100; } array_multisort($price, SORT_ASC, $dirArray); return $dirArray; }
/** * verifica estrutura da aplicação esta correta * @return [type] [description] */ public function checkFirstAccess() { $pathApp = Globals::get('path/app/appbase/path'); $dirArray = Functions::scanOnlyDir($pathApp); if (count($dirArray) < 1) { return true; } else { return false; } }
public function load($options = null) { $suite = Globals::set()->suite = $this->optionsGlobals; Globals::$visibleall = true; // cria o container com as classes Globals::setPrivate('app')->container = array('settings' => function () { require_once 'Settings.php'; return new Settings(); }, 'http' => function () { require_once 'Http.php'; return new Http(); }, 'controller' => function () { require_once 'Controller.php'; return new Controller(); }, 'view' => function () { require_once 'View.php'; return new View(); }, 'path' => function () { require_once 'Path.php'; return new Path(); }, 'plugins' => function () { require_once 'Plugins.php'; return new Plugins(); }); $settings = Globals::getPrivate("app")->container->settings; $this->settings = $settings = $settings(); // inicializa a classe Http $http = Globals::getPrivate("app")->container->http; $this->http = $http = $http(); // inicializa a classe controller $controller = Globals::getPrivate("app")->container->controller; $this->controller = $controller = $controller(); // inicializa a classe controller $path = Globals::getPrivate("app")->container->path; $this->path = $path = $path(); // inicializa a classe controller $controller = Globals::getPrivate("app")->container->controller; $this->controller = $controller = $controller(); // inicializa a classe controller $plugins = Globals::getPrivate("app")->container->plugins; $this->plugins = $plugins = $plugins(); // registra as definições iniciais $settings->registerSettings($options); // ajusta as definições iniciais $settings->define(); // define requisição/Resposta HTTP $http->setAdapterSettings($settings); $getResponse = $http->getResponse(); Globals::set()->http = $getResponse; // define settings definido no load $getSettings = $settings->getSettings(); Globals::set()->settings = $getSettings; // define os caminhos atuais $path->setPath($settings); $getPath = $path->getPath(); Globals::set()->path = $getPath; //define e carrega o diretório dos arquivos observadores Events::setPaths(array(Globals::get('path/manager/path'), Globals::get('path/app/path'))); Events::loadObserver(); // define application base $getControllers = Globals::get('http/controllers'); if ($getControllers->list[0] == '!') { Globals::set('app')->run = "!"; } else { Globals::set('app')->run = "#" . Globals::get('path/app/name'); //$getPath->name; } if (Globals::get('app/run') == '!') { $HTTP_SUITE_PAR = isset($_SERVER['HTTP_SUITE_PAR']) ? $_SERVER['HTTP_SUITE_PAR'] : null; } else { $resultCheckFirstAccess = $settings->checkFirstAccess(); if ($resultCheckFirstAccess == true) { $resultEvents = Events::Attach('info[welcome]', array('value' => '', 'action' => '')); if (!$resultEvents) { $html = '<h1>Suite</h1>'; $html .= '<h3>First Access</h3>'; $html .= '<p>'; $html .= '</p>'; echo $html; exit; } } // verifica se a requisião atual é de origem do próprio Suite //$result = Functions::checkRequestBySuite(); //if($result == false){ // verifica as informações iniciais, como estrutura de diretórios e outros $resultCheckStruct = $settings->checkStruct(); if ($resultCheckStruct == false) { // anexa evento $resultEvents = Events::Attach('error[app_not_found]', array('value' => '', 'action' => '')); if (!$resultEvents) { $html = '<h1>Suite</h1>'; $html .= '<h3>Application not found</h3>'; $html .= '<p>'; $html .= '<strong>Name:</strong> ' . Globals::get('path/app/name'); $html .= '<br><strong>Path:</strong> ' . Globals::get('path/app/path'); $html .= '</p>'; echo $html; exit; } } //} } // captura a lista de plugins $pluginsList = $plugins->getList(); // redefine ordem dos plugins $pluginsList = $plugins->reDefinePlugins($pluginsList); // cria um objeto com todos os plugins $pluginsObj = $plugins->getPlugins($pluginsList); Globals::set("plugins")->inner('list', $pluginsList); Globals::set("plugins")->inner('action', $pluginsObj); // redireciona a página se foi setado um preixo para a url $http->checkPrefixUrl($settings, $path); // executa caso o plugin for chamado diretamente via url ou código $plugins->callDirect($http, $path); //captura todos os controllers e as options $controllersList = $controller->getControllers(); $appListArray = Functions::scanOnlyDir(Globals::get('path/app/appbase/path')); Globals::set('app')->list = $appListArray; Globals::set('app')->options = array('master' => $controller->getOptionMaster(), 'modules' => $controllersList); $controllersManagerList = $controller->getControllers(Globals::get()->path->manager->modules->path); Globals::set('manager')->options = array('master' => $controller->getOptionMaster(Globals::get('path/manager/modules/path')), 'modules' => $controllersManagerList); //Globals::set('manager')->access = ""; // verifica dependencias de plugins no controler Master $resultDependenceMaster = $plugins->checkDependence('_control'); $resultDependenceMasterObj = json_decode($resultDependenceMaster); Globals::set('plugins')->dependence = array("_control" => $resultDependenceMasterObj->data[0]); $lastaction = Globals::get('http/controllers/lastaction'); // verifica dependencias de plugins no controler Master $resultDependenceModules = $plugins->checkDependence($lastaction); $resultDependenceModulesObj = json_decode($resultDependenceModules); Globals::set('plugins')->inner('dependence')->add(array($lastaction => $resultDependenceModulesObj->data[0])); //Globals::set('plugins')->dependence = array("_control"=>$resultDependenceMasterObj->data[0]); if (Globals::get('app/run') == '!') { $result = Functions::checkModeAdmin(); if ($result == false) { $queryurl = Globals::get('http/query'); $queryurl = substr($queryurl, 4); header("location: " . Globals::get('path/manager/link') . "/manager/access&destin=" . $queryurl); return; } else { // verifica dependencia da aplicação //$plugins->checkDependence('_control'); } // verifica se esta online no Manager ------------------------------ $result = Functions::checkOnline(false); if ($result == true) { // cria um menu baseado nos controllers ----------------------- $controllerArray = Globals::get('manager/options/modules'); //$controller->getControllers(''); /*echo '<pre>'; print_r($controllerArray); echo '</pre>';*/ $menu = Menu::makeMenu($controllerArray, Globals::get('path/manager/modules/path'), true); Globals::set('manager')->menu = $menu; // registra a versão atual Globals::set("suite")->inner('update', array('status' => 'updated', 'version' => $suite['version'], 'link' => '', 'html' => '')); $resultCheckUpdateStatus = Functions::checkUpdateStatus($suite['version']); if ($resultCheckUpdateStatus != false) { $pathUpdate = Globals::get('path/manager/libs/url') . 'update.php'; Globals::set("suite")->inner('update', array('status' => 'outdated', 'version' => $resultCheckUpdateStatus->version, 'link' => $resultCheckUpdateStatus->link == '[auto]' ? $pathUpdate : $resultCheckUpdateStatus->link)); $alertHtml = Globals::get("alert/html"); $alertHtml .= Functions::requireToVar(Globals::get('path/controller/path') . '_html/update.php'); Globals::set("alert")->inner('html', $alertHtml); } } } else { $controllerArray = Globals::get('app/options/modules'); //$controller->getControllers('',Globals::get('path/app/path')); $menu = Menu::makeMenu($controllerArray, Globals::get('path/app/modules/path'), false); Globals::set('app')->menu = $menu; if ($resultDependenceModulesObj->status == 'found') { // anexa evento Events::Attach('plugin[founddependence]', array('value' => $resultDependenceMaster, 'action' => $lastaction)); } if ($resultDependenceMasterObj->status == 'found') { // anexa evento Events::Attach('plugin[founddependence]', array('value' => $resultDependenceMaster, 'action' => '')); } } if ($getSettings->mode == "page") { $this->pageMake(); } }
/** * captura somente diretórios recursivamente * @param [type] $dir [description] * @param [type] $extra [description] * @return [type] [description] */ public static function scanOnlyDirRecursive($dir, $extra = null) { if ($extra == null) { $extra = function () { return true; }; } $dirAppArray = Functions::scanOnlyDir($dir, $extra); if (count($dirAppArray) < 1) { return null; } foreach ($dirAppArray as $key => $value) { $path = $dir . $value . '/'; $dirArray[$value] = Functions::scanOnlyDirRecursive($path, $extra); } return $dirArray; }