Phalcon Framework 3.2.3

PDOException: SQLSTATE[HY000] [2006] MySQL server has gone away

/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/Bootstrap.php (302)
#0PDO->__construct(mysql:host=127.0.0.1;dbname=nubotica_vr_demo, nubotica_vr_demo, DBNub0t1c4#2022, Array([1002] => SET SESSION group_concat_max_len = 10000000;, [3] => 2))
#1Phalcon\Db\Adapter\Pdo->connect(Array([host] => 127.0.0.1, [username] => nubotica_vr_demo, [password] => DBNub0t1c4#2022, [dbname] => nubotica_vr_demo, [dialectClass] => Object(Phalcon\Db\Dialect\Mysql), [options] => Array([1002] => SET SESSION group_concat_max_len = 10000000;)))
#2Phalcon\Db\Adapter\Pdo->__construct(Array([host] => 127.0.0.1, [username] => nubotica_vr_demo, [password] => DBNub0t1c4#2022, [dbname] => nubotica_vr_demo, [dialectClass] => Object(Phalcon\Db\Dialect\Mysql), [options] => Array([1002] => SET SESSION group_concat_max_len = 10000000;)))
/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/Bootstrap.php (302)
<?php
 
namespace Nube;
 
class Bootstrap
{
    private static $_cl = false;
    private static $_argv;
    
    public static function commandline($argv)
    {
        self::$_cl = true;
        self::$_argv = $argv;
    }
    
    public static function run()
    {
        if (!getenv('APPLICATION_ENV')) {
            putenv("APPLICATION_ENV=production");
        }
 
        $config = new \Phalcon\Config\Adapter\Ini(__DIR__ . "/config/".getenv('APPLICATION_ENV').".ini");
        
        if ($config->global->debug_mode) {
            $debug = new \Phalcon\Debug();
            $debug->listen();
        }
 
        \Phalcon\Tag::setAutoescape(false);
 
        // Global configurations
        date_default_timezone_set('Europe/Madrid');
        if ((isset($config->global->alternative_domains))&&(isset($_SERVER['HTTP_ORIGIN']))) {
            $httpOrigin = $_SERVER['HTTP_ORIGIN'];
            $allowedDomains = explode(',', $config->global->alternative_domains);
            if (in_array($httpOrigin, $allowedDomains)) {
                header("Access-Control-Allow-Origin: $httpOrigin");
            } else {
                header("Access-Control-Allow-Origin: http://localhost");
            }
        } else {
            header("Access-Control-Allow-Origin: http://localhost");
        }
        header("Access-Control-Allow-Credentials: true");
        error_reporting(E_ALL);
        ini_set('display_errors', $config->global->debug_mode);
 
        // DI Container
        $di = new \Phalcon\DI\FactoryDefault();
        
        if (self::$_cl) {
            $argv = self::$_argv;
            $di->set('commandline', function () use ($argv) {
                return $argv;
            });
        }
 
        // Loader, registering namespaces
        $loader = new \Phalcon\Loader();
        $loader->registerNamespaces(array(
            'Nube\Module' => __DIR__ . '/library/Nube/Module'
        ));
        $loader->register();
 
        $di->setShared('nimodules', function () use ($config) {
            $modules = null;
            $params = array();
 
            if (isset($config->modules->load)) {
                $modules = $config->modules->load->toArray();
                
                if (isset($config->moduleparams)) {
                    $params = $config->moduleparams->toArray();
                }
            }
 
            return new \Nube\Module\Loader(__DIR__, $modules, $params);
        });
 
        $loader->registerNamespaces(array(
            'Nube\Core' => __DIR__ . '/core/',
            'Nube\Core\Controllers' => __DIR__ . '/core/controllers/',
            'Nube\Core\Forms' => __DIR__ . '/core/forms/',
            'Nube\Core\Models' => __DIR__ . '/core/models/',
            'Nube\Assets' => __DIR__ . '/library/Nube/Assets/',
            'Nube\Forms' => __DIR__ . '/library/Nube/Forms/',
            'Nube\Mvc' => __DIR__ . '/library/Nube/Mvc/',
            'Nube\Translate' => __DIR__ . '/library/Nube/Translate/',
            'Nube\Utils' => __DIR__ . '/library/Nube/Utils/',
        ), true);
 
        $niNamespaces = $di->get('nimodules')->getNamespaces();
        if (count($niNamespaces)) {
            $loader->registerNamespaces($niNamespaces, true);
        }
        
        if (is_file(__DIR__ . '/library/composer/composer/autoload_namespaces.php')) {
            $namespacesMap = require __DIR__ . '/library/composer/composer/autoload_namespaces.php';
 
            foreach ($namespacesMap as $k => $values) {
                $k = trim(str_replace('_', '\\', $k), '\\');
                if (!isset($namespaces[$k])) {
                    $dir = '/' . str_replace('\\', '/', $k) . '/';
                    $namespaces[$k] = implode($dir . ';', $values) . $dir;
                }
                if (!isset($dirs[$k])) {
                    $dirs[$k] = implode($dir . ';', $values);
                }
            }
        }
        
        if (is_file(__DIR__ . '/library/composer/composer/autoload_psr4.php')) {
            $namespacesMapPsr4 = require __DIR__ . '/library/composer/composer/autoload_psr4.php';
 
            foreach ($namespacesMapPsr4 as $k => $values) {
                $k = trim($k, '\\');
                if (!isset($namespaces[$k])) {
                    $dir = '/' . str_replace('\\', '/', $k) . '/';
                    $namespaces[$k] = $values;//implode($dir . ';', $values);
                }
            }
        }
        
        if (!empty($namespaces)) {
            $loader->registerNamespaces($namespaces, true);
        }
        if (!empty($dirs)) {
            $loader->registerDirs($dirs, true);
        }
 
        if (is_file(__DIR__ . '/library/composer/composer/autoload_classmap.php')) {
            $classMap = require __DIR__ . '/library/composer/composer/autoload_classmap.php';
            if ($classMap) {
                $loader->registerClasses($classMap, true);
            }
        }
 
        if (is_file(__DIR__ . '/library/composer/composer/autoload_files.php')) {
            $includeFiles = require __DIR__ . '/library/composer/composer/autoload_files.php';
            foreach ($includeFiles as $file) {
                $filesToRegister[] = $file;
            }
            $loader->registerFiles($filesToRegister, true);
            $loader->loadFiles();
        }
        
        $loaderEventsManager = new \Phalcon\Events\Manager();
        $loaderEventsManager->attach(
            'loader:afterCheckClass',
            function (\Phalcon\Events\Event $event, \Phalcon\Loader $loader, $className) {
                if ((strpos($className, '_') !== false) && (!class_exists($className))) {
                    $className = str_replace('_', '\\', $className);
                    $event->stop();
                    $loader->autoLoad($className);
                }
            }
        );
        
        $loader->setEventsManager($loaderEventsManager);
        
        $loader->register();
        
        $di->set('globalconfig', $config->global);
        
        $di->set('login_url', function () use ($config) {
            $url = $config->global->frontUri;
            if (!empty($config->global->prefix->forbackend)) {
                $url .= $config->global->prefix->forbackend;
            }
            return $url;
        });
 
        // Database
        $di->setShared('db', function () use ($config) {
            $eventsManager = new \Phalcon\Events\Manager();
 
            if ($config->global->debug_mode) {
                $logger = new \Phalcon\Logger\Adapter\File(__DIR__."/logs/debug.log");
 
                //Listen all the database events
                $eventsManager->attach('db', function ($event, $connection) use ($logger) {
                    if ($event->getType() == 'beforeQuery') {
                        $logger->log($connection->getSQLStatement(), \Phalcon\Logger::INFO);
                    }
                });
            }
 
            $dialect = new \Phalcon\Db\Dialect\MySQL();
            $dialect->registerCustomFunction(
                'GROUP_CONCAT',
                function ($dialect, $expression) {
                    $arguments = $expression['arguments'];
                    $distinct = ((isset($expression['distinct'])) && ($expression['distinct'] == 1))? 'DISTINCT ' : '';
                    if (!empty($arguments[3])) {
                        if ($dialect->getSqlExpression($arguments[3]) == "'DESC'") {
                            return sprintf(
                                " GROUP_CONCAT($distinct%s ORDER BY %s DESC SEPARATOR %s)",
                                $dialect->getSqlExpression($arguments[0]),
                                $dialect->getSqlExpression($arguments[2]),
                                $dialect->getSqlExpression($arguments[1])
                            );
                        } else {
                            return sprintf(
                                " GROUP_CONCAT($distinct%s ORDER BY %s SEPARATOR %s)",
                                $dialect->getSqlExpression($arguments[0]),
                                $dialect->getSqlExpression($arguments[2]),
                                $dialect->getSqlExpression($arguments[1])
                            );
                        }
                    } elseif (!empty($arguments[2])) {
                        return sprintf(
                            " GROUP_CONCAT($distinct%s ORDER BY %s SEPARATOR %s)",
                            $dialect->getSqlExpression($arguments[0]),
                            $dialect->getSqlExpression($arguments[2]),
                            $dialect->getSqlExpression($arguments[1])
                        );
                    } elseif (!empty($arguments[1])) {
                        return sprintf(
                            " GROUP_CONCAT($distinct%s SEPARATOR %s)",
                            $dialect->getSqlExpression($arguments[0]),
                            $dialect->getSqlExpression($arguments[1])
                        );
                    } else {
                        return sprintf(
                            " GROUP_CONCAT($distinct%s)",
                            $dialect->getSqlExpression($arguments[0])
                        );
                    }
                }
            );
            $dialect->registerCustomFunction(
                'TRIM',
                function ($dialect, $expression) {
                    $arguments = $expression['arguments'];
                    if (!empty($arguments[1])) {
                        return sprintf(
                            " TRIM(BOTH %s FROM %s)",
                            $dialect->getSqlExpression($arguments[0]),
                            $dialect->getSqlExpression($arguments[1])
                        );
                    } else {
                        return sprintf(
                            " TRIM(%s)",
                            $dialect->getSqlExpression($arguments[0])
                        );
                    }
                }
            );
            $dialect->registerCustomFunction(
                'RTRIM',
                function ($dialect, $expression) {
                    $arguments = $expression['arguments'];
                    if (!empty($arguments[1])) {
                        return sprintf(
                            " TRIM(TRAILING %s FROM %s)",
                            $dialect->getSqlExpression($arguments[0]),
                            $dialect->getSqlExpression($arguments[1])
                        );
                    } else {
                        return sprintf(
                            " RTRIM(%s)",
                            $dialect->getSqlExpression($arguments[0])
                        );
                    }
                }
            );
            $dialect->registerCustomFunction(
                'LTRIM',
                function ($dialect, $expression) {
                    $arguments = $expression['arguments'];
                    if (!empty($arguments[1])) {
                        return sprintf(
                            " TRIM(LEADING %s FROM %s)",
                            $dialect->getSqlExpression($arguments[0]),
                            $dialect->getSqlExpression($arguments[1])
                        );
                    } else {
                        return sprintf(
                            " LTRIM(%s)",
                            $dialect->getSqlExpression($arguments[0])
                        );
                    }
                }
            );
            $dialect->registerCustomFunction(
                'CLEARFLOAT',
                function ($dialect, $expression) {
                    $arguments = $expression['arguments'];
                    return sprintf(
                        " TRIM(TRAILING '.' FROM TRIM(TRAILING 0 FROM %s))",
                        $dialect->getSqlExpression($arguments[0])
                    );
                }
            );
            
            $connection = new \Phalcon\Db\Adapter\Pdo\Mysql(array(
                'host' => $config->database->host,
                'username' => $config->database->username,
                'password' => $config->database->password,
                'dbname' => $config->database->dbname,
                'dialectClass' => $dialect,
                'options' => [\PDO::MYSQL_ATTR_INIT_COMMAND => 'SET SESSION group_concat_max_len = 10000000;']
            ));
 
            //Assign the eventsManager to the db adapter instance
            $connection->setEventsManager($eventsManager);
 
            return $connection;
        });
        
        $di->set('modelsManager', function () {
            return new \Nube\Mvc\Model\Manager();
        });
 
//        $modelsMetadata = new \Phalcon\Mvc\Model\Metadata\Memory();
//        $di->set('modelsMetadata', $modelsMetadata);
 
        $application = new \Phalcon\Mvc\Application();
 
        /**
         * Register application modules
         */
        $application->registerModules(array(
            'core' => array(
                'className' => 'Nube\Core\Module',
                'path' => __DIR__ . '/core/Module.php'
            ),
            'frontend' => array(
                'className' => 'Nube\Frontend\Module',
                'path' => __DIR__ . '/frontend/Module.php'
                )
        ));
 
        $niModules = $di->get('nimodules')->getModulesReg();
        if (count($niModules)) {
            $application->registerModules($niModules, true);
        }
 
        // Routing
        $di->setShared('router', function () use ($di, $config, $application) {
            $router = new \Phalcon\Mvc\Router();
 
            $defaultModule = (isset($config->modules->default)? $config->modules->default->module : 'frontend');
            $router->setDefaultModule($defaultModule);
            $router->setDefaultController(
                isset($config->modules->default->controller) ? $config->modules->default->controller : 'index'
            );
            $router->setDefaultAction(
                isset($config->modules->default->action) ? $config->modules->default->action : 'index'
            );
 
            $defaultNamespace = $di->get('nimodules')->getNamespace($defaultModule);
            if ($defaultNamespace === false) {
                $defaultNamespace = '\\Nube\\'.mb_convert_case($defaultModule, MB_CASE_TITLE);
            }
            $routesClassName = $defaultNamespace.'\Routes';
            if (class_exists($routesClassName)) {
                $routesClass = new $routesClassName();
                $router = $routesClass->add($router, $config);
            }
 
            foreach ($application->getModules() as $name => $module) {
                if ($name !== $defaultModule) {
                    $routesClassName = preg_replace('/Module$/', 'Routes', $module['className']);
                    if (class_exists($routesClassName)) {
                        $routesClass = new $routesClassName();
                        $router = $routesClass->add($router, $config);
                    }
                }
            }
            return $router;
        });
 
        // URL component
        $di->setShared('url', function () use ($config) {
            $url = new \Nube\Mvc\Url();
            $url->setBaseUri($config->path->uri);
            return $url;
        });
 
 
        // Translator
        $di->set('translator', function () use ($di) {
            //Ask browser what is the best language
            $language = str_replace('-', '_', $di->get('request')->getBestLanguage());
 
            //Check if it is fixed (to test) at global settings
            if (isset($di->get('globalconfig')->language)) {
                $language = $di->get('globalconfig')->language;
            }
 
            //Check if we have a translation file for that lang
            if (!file_exists(__DIR__ . '/languages/'.$language)) {
                $language = 'es_ES';
            }
            $translate = new \Nube\Translate\Adapter\Gettext([
                'locale' => $language,
                'file' => 'messages',
                'directory' => __DIR__ . '/languages/'
            ]);
            $domains = $di->get('nimodules')->getTranslations();
            foreach ($domains as $domain => $folder) {
                $translate->addDomain([
                    'locale' => $language,
                    'file' => $domain,
                    'directory' => $folder
                ]);
            }
            return $translate;
        });
 
        // Session
        $di->setShared('session', function () use ($config, $di) {
            if ($di->get('request')->getScheme() == 'https') {
                ini_set("session.cookie_samesite", 'None');
                ini_set("session.cookie_secure", 'true');
            } else {
                ini_set("session.cookie_samesite", 'Lax');
            }
            ini_set("session.cookie_lifetime", 0);
            ini_set("session.gc_maxlifetime", ($config->global->session_timeout*24));
            ini_set("session.gc_probability", 1);
            ini_set("session.gc_divisor", 1000);
            ini_set("session.save_path", realpath($config->global->frontDir.'/../apps/tmp/'));
            if (isset($config->global->session_cookiedomain)) {
                ini_set('session.cookie_domain', $config->global->session_cookiedomain);
            }
            if (isset($config->global->session_cookiepath)) {
                ini_set('session.cookie_path', $config->global->session_cookiepath);
            }
            $session = new \Phalcon\Session\Adapter\Files();
            $session->start();
            return $session;
        });
//        $di->getShared('session');
 
        // Permissions
        $di->setShared('acl', function () use ($di) {
            if ($di->get('session')->has('auth')) {
                $user = unserialize($di->get('session')->get('user'));
                if (!file_exists(__DIR__ . "/cache/acl.data.".$user->id)) {
                    $acl = new \Phalcon\Acl\Adapter\Memory();
                    $acl->setDefaultAction(\Phalcon\Acl::DENY);
 
                    $acl->addRole('r'.$user->id);
 
                    $resources = \Nube\Core\Models\ACLResources::find();
                    foreach ($resources as $resource) {
                        $customersResource = new \Phalcon\Acl\Resource($resource->controller);
                        $acl->addResource($customersResource, $resource->action);
                    }
 
                    $permissions = \Nube\Core\Models\ACLPermissions::find([
                        "conditions" => "id_usuario = ?1",
                        "bind" => [1 => $user->id]
                    ]);
                    foreach ($permissions as $permission) {
                        if ($permission->resourceObj !== false) {
                            $acl->allow(
                                'r'.$user->id,
                                $permission->resourceObj->controller,
                                $permission->resourceObj->action
                            );
                        }
                    }
                } else {
                    //Restore acl object from serialized file
                     $acl = unserialize(file_get_contents(__DIR__ . "/cache/acl.data.".$user->id));
                }
                return $acl;
            }
            return null;
        });
 
 
        // Flash messenger
        $di->set('flash', function () {
            $flash = new \Phalcon\Flash\Session([
                'error' => 'alert alert-error',
                'success' => 'alert alert-success',
                'notice' => 'alert alert-info',
            ]);
            $flash->setAutoescape(false);
            return $flash;
        });
 
        // Assets
        $di->setShared('assets', function () use ($di) {
            $assetsManager = new \Nube\Assets\Manager();
 
            $assetsManager->collection('js')
                    ->addJs('components/jquery/dist/jquery.min.js')
                    ->addJs('components/jquery-ui/jquery-ui.min.js')
                    ->addJs('components/knockout/dist/knockout.js')
                    ->addJs('components/knockout-mapping/knockout.mapping.js')
                    ->addJs('js/jquery.custom-select.js')
                    ->addJs('js/jquery.custom-checkbox.js')
                    ->addJs('js/jquery.custom-radio.js')
                    ->addJs('js/main.js');
 
            $language = 'es_ES';
            //Check if it is fixed (to test) at global settings
            if (isset($di->get('globalconfig')->language) &&
                file_exists($di->get('globalconfig')->frontDir.'/js/languages/'.$di->get('globalconfig')->language.'.js')) {
                $language = $di->get('globalconfig')->language;
            }
            $assetsManager->collection('js')->addJs("js/languages/$language.js");
            $assetsManager->collection('jsltie9');
 
            $assetsManager->collection('jsMin')
                          ->setLocal(true)
                          ->join(true);
 
            $assetsManager->collection('css')->addCss('components/jquery-ui/themes/base/jquery-ui.css');
 
            $assetsManager->collection('css')->addCss('css/ni-template/style.css');
 
            if (file_exists($di->get('globalconfig')->frontDir.'/modules/0-project/css/style.css')) {
                $assetsManager->collection('css')->addCss('modules/0-project/css/style.css');
            }
 
            $assetsManager->collection('cssMin')
                          ->setLocal(true)
                          ->join(true);
 
            $assetsManager->collection('csslteie9');
 
            return $assetsManager;
        });
 
        $di->setShared('dispatcher', function () {
            $dispatcher = new \Phalcon\Mvc\Dispatcher();
 
            $eventsManager = new \Phalcon\Events\Manager();
            $eventsManager->attach("dispatch", function ($event, $dispatcher, $exception) {
                if ($event->getType() == 'beforeDispatchLoop') {
                    $dispatcher->setActionName(\Phalcon\Text::camelize($dispatcher->getActionName()));
                    return false;
                }
                if ($event->getType() == 'beforeNotFoundAction') {
                    $dispatcher->forward([
                        'module' => 'core',
                        'controller' => 'error',
                        'action' => 'notFound'
                    ]);
                    return false;
                }
                if ($event->getType() == 'beforeException') {
                    switch ($exception->getCode()) {
                        case \Phalcon\Dispatcher::EXCEPTION_HANDLER_NOT_FOUND:
                        case \Phalcon\Dispatcher::EXCEPTION_ACTION_NOT_FOUND:
                            $dispatcher->forward([
                                'module' => 'core',
                                'controller' => 'error',
                                'action' => 'notFound'
                            ]);
                            return false;
                    }
                }
            });
 
            $dispatcher->setEventsManager($eventsManager);
            return $dispatcher;
        });
 
        $di->set('debug', function () {
            $debugger = new \Nube\Utils\Debug();
            return $debugger;
        });
 
        // Handle the request
        $application->setDI($di);
 
        // The core of all the work of the controller occurs when handle() is invoked:
        echo $application->handle($di->get('url')->resolve())->getContent();
    }
}
#3Nube\Bootstrap->Nube\{closure}()
#4Phalcon\Di\Service->resolve(null, Object(Phalcon\Di\FactoryDefault))
#5Phalcon\Di->get(db, null)
#6Phalcon\Di->getShared(db)
#7Phalcon\Mvc\Model\Manager->_getConnection(Object(Nube\Modules\Cms\Models\LanguageVariants: [id] => (empty string), [name] => (empty string), [language] => (empty string), [parent] => (empty string), [url_prefix] => (empty string), [_skipBehaviourUpdate] => ), null)
#8Phalcon\Mvc\Model\Manager->getReadConnection(Object(Nube\Modules\Cms\Models\LanguageVariants: [id] => (empty string), [name] => (empty string), [language] => (empty string), [parent] => (empty string), [url_prefix] => (empty string), [_skipBehaviourUpdate] => ))
#9Phalcon\Mvc\Model->getReadConnection()
#10Phalcon\Mvc\Model\Query->_executeSelect(Array([models] => Array([0] => Nube\Modules\Cms\Models\LanguageVariants), [tables] => Array([0] => CMS_language_variants), [columns] => Array([nube\Modules\Cms\Models\LanguageVariants] => Array([type] => object, [model] => Nube\Modules\Cms\Models\LanguageVariants, [column] => CMS_language_variants, [balias] => nube\Modules\Cms\Models\LanguageVariants))), null, null)
#11Phalcon\Mvc\Model\Query->execute()
#12Phalcon\Mvc\Model::find()
/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/module-webvrnubotica/apps/modules/webvrnubotica/Routes.php (134)
<?php
 
namespace Nube\Modules\Webvrnubotica;
 
class Routes
{
 
    public function add($router, $config = array())
    {
        $routergroup = new \Phalcon\Mvc\Router\Group(array(
            'module' => 'frontend'
        ));
        $prefix = '';
        
        //HOME
        $routergroup->add($prefix.'(/)?', array(
            'controller' => 'index',
            'action' => 'index',
            'm_module' => 'webvrnubotica',
            'm_controller' => 'cms',
            'm_action' => 'index',
            'language' => 'es'
        ))->setName('webindex');
        
        $routergroup->add($prefix.'/{language:[a-zA-Z]{2}}(/)?', array(
            'controller' => 'index',
            'action' => 'index',
            'm_module' => 'webvrnubotica',
            'm_controller' => 'cms',
            'm_action' => 'index'
        ))->setName('webindexlang');
        
        $routergroup->add($prefix .'/{language:[a-zA-Z]{2}}/contactoSend/:params', array(
            'controller' => 'index',
            'action' => 'index',
            'm_module' => 'webvrnubotica',
            'm_controller' => 'index',
            'm_action' => 'contactoSendAjax',
            'params' => 2
        ))->setName('websendemail');
        
        $routergroup->add($prefix .'/{language:[a-zA-Z]{2}}/reservation/validate/:params', array(
            'controller' => 'index',
            'action' => 'index',
            'm_module' => 'webvrnubotica',
            'm_controller' => 'payment',
            'm_action' => 'validarPago',
            'params' => 2
        ))->setName('paymentvalidate');
 
        $routergroup->add($prefix .'/{language:[a-zA-Z]{2}}/reservation/cancelled/:params', array(
            'controller' => 'index',
            'action' => 'index',
            'm_module' => 'webvrnubotica',
            'm_controller' => 'payment',
            'm_action' => 'pagoOnlineCancelado',
            'params' => 2
        ))->setName('paymentcancel');
 
        $routergroup->add($prefix .'/{language:[a-zA-Z]{2}}/reservation/success/:params', array(
            'controller' => 'index',
            'action' => 'index',
            'm_module' => 'webvrnubotica',
            'm_controller' => 'payment',
            'm_action' => 'pagoOnlineRealizado',
            'params' => 2
        ))->setName('paymentsuccess');
        
        $routergroup->add($prefix .'/DiasSinDisponibilidad', array(
            'controller' => 'index',
            'action' => 'index',
            'm_module' => 'webvrnubotica',
            'm_controller' => 'operaciones',
            'm_action' => 'obtenerDiasSinDisponibilidad'
        ))->setName('obtenerDiasSinDisponibilidad');
        
        $routergroup->add($prefix .'/checkCupon/:params', array(
            'controller' => 'index',
            'action' => 'index',
            'm_module' => 'webvrnubotica',
            'm_controller' => 'index',
            'm_action' => 'checkCuponAjax',
            'params' => 1
        ))->setName('checkcupon');
        
        $routergroup->add($prefix .'/getProductSchedule', array(
            'controller' => 'index',
            'action' => 'index',
            'm_module' => 'webvrnubotica',
            'm_controller' => 'index',
            'm_action' => 'getProductoHorarios',
        ))->setName('getProductSchedule');
        
        $routergroup->add($prefix .'/getProductPax', array(
            'controller' => 'index',
            'action' => 'index',
            'm_module' => 'webvrnubotica',
            'm_controller' => 'index',
            'm_action' => 'getProductoPax',
        ))->setName('getProductPax');
        
        $routergroup->add($prefix .'/reserva', array(
            'controller' => 'index',
            'action' => 'index',
            'm_module' => 'webvrnubotica',
            'm_controller' => 'operaciones',
            'm_action' => 'indexReservaWeb'
        ))->setName('webformreserva');
        
        $routergroup->add($prefix .'/robots.txt(/)?', array(
            'controller' => 'index',
            'action' => 'index',
            'm_module' => 'webvrnubotica',
            'm_controller' => 'seo',
            'm_action' => 'robots'
        ))->setName('webrobots');
        
        $routergroup->add($prefix .'/sitemap.xml(/)?', array(
            'controller' => 'index',
            'action' => 'index',
            'm_module' => 'webvrnubotica',
            'm_controller' => 'seo',
            'm_action' => 'sitemap'
        ))->setName('webrobots');
        
        $routergroup->add($prefix .'/reserva', array(
            'controller' => 'index',
            'action' => 'index',
            'm_module' => 'webvrnubotica',
            'm_controller' => 'operaciones',
            'm_action' => 'indexReservaWeb'
        ))->setName('webformreserva');
        
        $languages = \Nube\Modules\Cms\Models\LanguageVariants::find();
        $pages = \Nube\Modules\Cms\Models\Page::find(array('conditions' => 'ctrl_active = ?1 AND ctrl_deleted = ?2', 'bind' => array(1 => 1, 2 => 0)));
        $pageRoutes = array();
        foreach ($pages as $page) {
            if ($page->have_url) {
                $pageRoutes[$page->id] = array();
                $metas = $page->getactiveversionObj()->getmetaObj();
                foreach ($metas as $meta) {
                    foreach ($languages as $language) {
                        if ($meta->meta_key == '_'.$language->language.'_slug') {
                            $pageRoutes[$page->id][$language->language] = '/'.$language->language.'/'.$meta->meta_value.'/:params';
                        }
//                        elseif (($language->parent !== 0)&&($meta->meta_key == '_'.$language->parentObj->language.'_slug')&&(!isset($pageRoutes[$page->id][$language->language]))) {
//                            $pageRoutes[$page->id][$language->language] = '/'.$language->language.'/'.$meta->meta_value.'/:params';
//                        }
                    }
                }
            }
        }
        
        foreach ($pageRoutes as $pageId => $route) {
            foreach ($route as $language => $slug) {
                $routergroup->add($slug, array(
                    'controller' => 'index',
                    'action' => 'index',
                    'm_module' => 'webvrnubotica',
                    'm_controller' => 'cms',
                    'm_action' => 'page',
                    'language' => $language,
                    'page_id' => "".$pageId,
                    'params' => 1
                ))->setName('webcms'.$pageId.$language);
            }
        }
        
        $router->mount($routergroup);
        return $router;
    }
}
#13Nube\Modules\Webvrnubotica\Routes->add(Object(Phalcon\Mvc\Router), Object(Phalcon\Config\Adapter\Ini))
/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/Bootstrap.php (359)
<?php
 
namespace Nube;
 
class Bootstrap
{
    private static $_cl = false;
    private static $_argv;
    
    public static function commandline($argv)
    {
        self::$_cl = true;
        self::$_argv = $argv;
    }
    
    public static function run()
    {
        if (!getenv('APPLICATION_ENV')) {
            putenv("APPLICATION_ENV=production");
        }
 
        $config = new \Phalcon\Config\Adapter\Ini(__DIR__ . "/config/".getenv('APPLICATION_ENV').".ini");
        
        if ($config->global->debug_mode) {
            $debug = new \Phalcon\Debug();
            $debug->listen();
        }
 
        \Phalcon\Tag::setAutoescape(false);
 
        // Global configurations
        date_default_timezone_set('Europe/Madrid');
        if ((isset($config->global->alternative_domains))&&(isset($_SERVER['HTTP_ORIGIN']))) {
            $httpOrigin = $_SERVER['HTTP_ORIGIN'];
            $allowedDomains = explode(',', $config->global->alternative_domains);
            if (in_array($httpOrigin, $allowedDomains)) {
                header("Access-Control-Allow-Origin: $httpOrigin");
            } else {
                header("Access-Control-Allow-Origin: http://localhost");
            }
        } else {
            header("Access-Control-Allow-Origin: http://localhost");
        }
        header("Access-Control-Allow-Credentials: true");
        error_reporting(E_ALL);
        ini_set('display_errors', $config->global->debug_mode);
 
        // DI Container
        $di = new \Phalcon\DI\FactoryDefault();
        
        if (self::$_cl) {
            $argv = self::$_argv;
            $di->set('commandline', function () use ($argv) {
                return $argv;
            });
        }
 
        // Loader, registering namespaces
        $loader = new \Phalcon\Loader();
        $loader->registerNamespaces(array(
            'Nube\Module' => __DIR__ . '/library/Nube/Module'
        ));
        $loader->register();
 
        $di->setShared('nimodules', function () use ($config) {
            $modules = null;
            $params = array();
 
            if (isset($config->modules->load)) {
                $modules = $config->modules->load->toArray();
                
                if (isset($config->moduleparams)) {
                    $params = $config->moduleparams->toArray();
                }
            }
 
            return new \Nube\Module\Loader(__DIR__, $modules, $params);
        });
 
        $loader->registerNamespaces(array(
            'Nube\Core' => __DIR__ . '/core/',
            'Nube\Core\Controllers' => __DIR__ . '/core/controllers/',
            'Nube\Core\Forms' => __DIR__ . '/core/forms/',
            'Nube\Core\Models' => __DIR__ . '/core/models/',
            'Nube\Assets' => __DIR__ . '/library/Nube/Assets/',
            'Nube\Forms' => __DIR__ . '/library/Nube/Forms/',
            'Nube\Mvc' => __DIR__ . '/library/Nube/Mvc/',
            'Nube\Translate' => __DIR__ . '/library/Nube/Translate/',
            'Nube\Utils' => __DIR__ . '/library/Nube/Utils/',
        ), true);
 
        $niNamespaces = $di->get('nimodules')->getNamespaces();
        if (count($niNamespaces)) {
            $loader->registerNamespaces($niNamespaces, true);
        }
        
        if (is_file(__DIR__ . '/library/composer/composer/autoload_namespaces.php')) {
            $namespacesMap = require __DIR__ . '/library/composer/composer/autoload_namespaces.php';
 
            foreach ($namespacesMap as $k => $values) {
                $k = trim(str_replace('_', '\\', $k), '\\');
                if (!isset($namespaces[$k])) {
                    $dir = '/' . str_replace('\\', '/', $k) . '/';
                    $namespaces[$k] = implode($dir . ';', $values) . $dir;
                }
                if (!isset($dirs[$k])) {
                    $dirs[$k] = implode($dir . ';', $values);
                }
            }
        }
        
        if (is_file(__DIR__ . '/library/composer/composer/autoload_psr4.php')) {
            $namespacesMapPsr4 = require __DIR__ . '/library/composer/composer/autoload_psr4.php';
 
            foreach ($namespacesMapPsr4 as $k => $values) {
                $k = trim($k, '\\');
                if (!isset($namespaces[$k])) {
                    $dir = '/' . str_replace('\\', '/', $k) . '/';
                    $namespaces[$k] = $values;//implode($dir . ';', $values);
                }
            }
        }
        
        if (!empty($namespaces)) {
            $loader->registerNamespaces($namespaces, true);
        }
        if (!empty($dirs)) {
            $loader->registerDirs($dirs, true);
        }
 
        if (is_file(__DIR__ . '/library/composer/composer/autoload_classmap.php')) {
            $classMap = require __DIR__ . '/library/composer/composer/autoload_classmap.php';
            if ($classMap) {
                $loader->registerClasses($classMap, true);
            }
        }
 
        if (is_file(__DIR__ . '/library/composer/composer/autoload_files.php')) {
            $includeFiles = require __DIR__ . '/library/composer/composer/autoload_files.php';
            foreach ($includeFiles as $file) {
                $filesToRegister[] = $file;
            }
            $loader->registerFiles($filesToRegister, true);
            $loader->loadFiles();
        }
        
        $loaderEventsManager = new \Phalcon\Events\Manager();
        $loaderEventsManager->attach(
            'loader:afterCheckClass',
            function (\Phalcon\Events\Event $event, \Phalcon\Loader $loader, $className) {
                if ((strpos($className, '_') !== false) && (!class_exists($className))) {
                    $className = str_replace('_', '\\', $className);
                    $event->stop();
                    $loader->autoLoad($className);
                }
            }
        );
        
        $loader->setEventsManager($loaderEventsManager);
        
        $loader->register();
        
        $di->set('globalconfig', $config->global);
        
        $di->set('login_url', function () use ($config) {
            $url = $config->global->frontUri;
            if (!empty($config->global->prefix->forbackend)) {
                $url .= $config->global->prefix->forbackend;
            }
            return $url;
        });
 
        // Database
        $di->setShared('db', function () use ($config) {
            $eventsManager = new \Phalcon\Events\Manager();
 
            if ($config->global->debug_mode) {
                $logger = new \Phalcon\Logger\Adapter\File(__DIR__."/logs/debug.log");
 
                //Listen all the database events
                $eventsManager->attach('db', function ($event, $connection) use ($logger) {
                    if ($event->getType() == 'beforeQuery') {
                        $logger->log($connection->getSQLStatement(), \Phalcon\Logger::INFO);
                    }
                });
            }
 
            $dialect = new \Phalcon\Db\Dialect\MySQL();
            $dialect->registerCustomFunction(
                'GROUP_CONCAT',
                function ($dialect, $expression) {
                    $arguments = $expression['arguments'];
                    $distinct = ((isset($expression['distinct'])) && ($expression['distinct'] == 1))? 'DISTINCT ' : '';
                    if (!empty($arguments[3])) {
                        if ($dialect->getSqlExpression($arguments[3]) == "'DESC'") {
                            return sprintf(
                                " GROUP_CONCAT($distinct%s ORDER BY %s DESC SEPARATOR %s)",
                                $dialect->getSqlExpression($arguments[0]),
                                $dialect->getSqlExpression($arguments[2]),
                                $dialect->getSqlExpression($arguments[1])
                            );
                        } else {
                            return sprintf(
                                " GROUP_CONCAT($distinct%s ORDER BY %s SEPARATOR %s)",
                                $dialect->getSqlExpression($arguments[0]),
                                $dialect->getSqlExpression($arguments[2]),
                                $dialect->getSqlExpression($arguments[1])
                            );
                        }
                    } elseif (!empty($arguments[2])) {
                        return sprintf(
                            " GROUP_CONCAT($distinct%s ORDER BY %s SEPARATOR %s)",
                            $dialect->getSqlExpression($arguments[0]),
                            $dialect->getSqlExpression($arguments[2]),
                            $dialect->getSqlExpression($arguments[1])
                        );
                    } elseif (!empty($arguments[1])) {
                        return sprintf(
                            " GROUP_CONCAT($distinct%s SEPARATOR %s)",
                            $dialect->getSqlExpression($arguments[0]),
                            $dialect->getSqlExpression($arguments[1])
                        );
                    } else {
                        return sprintf(
                            " GROUP_CONCAT($distinct%s)",
                            $dialect->getSqlExpression($arguments[0])
                        );
                    }
                }
            );
            $dialect->registerCustomFunction(
                'TRIM',
                function ($dialect, $expression) {
                    $arguments = $expression['arguments'];
                    if (!empty($arguments[1])) {
                        return sprintf(
                            " TRIM(BOTH %s FROM %s)",
                            $dialect->getSqlExpression($arguments[0]),
                            $dialect->getSqlExpression($arguments[1])
                        );
                    } else {
                        return sprintf(
                            " TRIM(%s)",
                            $dialect->getSqlExpression($arguments[0])
                        );
                    }
                }
            );
            $dialect->registerCustomFunction(
                'RTRIM',
                function ($dialect, $expression) {
                    $arguments = $expression['arguments'];
                    if (!empty($arguments[1])) {
                        return sprintf(
                            " TRIM(TRAILING %s FROM %s)",
                            $dialect->getSqlExpression($arguments[0]),
                            $dialect->getSqlExpression($arguments[1])
                        );
                    } else {
                        return sprintf(
                            " RTRIM(%s)",
                            $dialect->getSqlExpression($arguments[0])
                        );
                    }
                }
            );
            $dialect->registerCustomFunction(
                'LTRIM',
                function ($dialect, $expression) {
                    $arguments = $expression['arguments'];
                    if (!empty($arguments[1])) {
                        return sprintf(
                            " TRIM(LEADING %s FROM %s)",
                            $dialect->getSqlExpression($arguments[0]),
                            $dialect->getSqlExpression($arguments[1])
                        );
                    } else {
                        return sprintf(
                            " LTRIM(%s)",
                            $dialect->getSqlExpression($arguments[0])
                        );
                    }
                }
            );
            $dialect->registerCustomFunction(
                'CLEARFLOAT',
                function ($dialect, $expression) {
                    $arguments = $expression['arguments'];
                    return sprintf(
                        " TRIM(TRAILING '.' FROM TRIM(TRAILING 0 FROM %s))",
                        $dialect->getSqlExpression($arguments[0])
                    );
                }
            );
            
            $connection = new \Phalcon\Db\Adapter\Pdo\Mysql(array(
                'host' => $config->database->host,
                'username' => $config->database->username,
                'password' => $config->database->password,
                'dbname' => $config->database->dbname,
                'dialectClass' => $dialect,
                'options' => [\PDO::MYSQL_ATTR_INIT_COMMAND => 'SET SESSION group_concat_max_len = 10000000;']
            ));
 
            //Assign the eventsManager to the db adapter instance
            $connection->setEventsManager($eventsManager);
 
            return $connection;
        });
        
        $di->set('modelsManager', function () {
            return new \Nube\Mvc\Model\Manager();
        });
 
//        $modelsMetadata = new \Phalcon\Mvc\Model\Metadata\Memory();
//        $di->set('modelsMetadata', $modelsMetadata);
 
        $application = new \Phalcon\Mvc\Application();
 
        /**
         * Register application modules
         */
        $application->registerModules(array(
            'core' => array(
                'className' => 'Nube\Core\Module',
                'path' => __DIR__ . '/core/Module.php'
            ),
            'frontend' => array(
                'className' => 'Nube\Frontend\Module',
                'path' => __DIR__ . '/frontend/Module.php'
                )
        ));
 
        $niModules = $di->get('nimodules')->getModulesReg();
        if (count($niModules)) {
            $application->registerModules($niModules, true);
        }
 
        // Routing
        $di->setShared('router', function () use ($di, $config, $application) {
            $router = new \Phalcon\Mvc\Router();
 
            $defaultModule = (isset($config->modules->default)? $config->modules->default->module : 'frontend');
            $router->setDefaultModule($defaultModule);
            $router->setDefaultController(
                isset($config->modules->default->controller) ? $config->modules->default->controller : 'index'
            );
            $router->setDefaultAction(
                isset($config->modules->default->action) ? $config->modules->default->action : 'index'
            );
 
            $defaultNamespace = $di->get('nimodules')->getNamespace($defaultModule);
            if ($defaultNamespace === false) {
                $defaultNamespace = '\\Nube\\'.mb_convert_case($defaultModule, MB_CASE_TITLE);
            }
            $routesClassName = $defaultNamespace.'\Routes';
            if (class_exists($routesClassName)) {
                $routesClass = new $routesClassName();
                $router = $routesClass->add($router, $config);
            }
 
            foreach ($application->getModules() as $name => $module) {
                if ($name !== $defaultModule) {
                    $routesClassName = preg_replace('/Module$/', 'Routes', $module['className']);
                    if (class_exists($routesClassName)) {
                        $routesClass = new $routesClassName();
                        $router = $routesClass->add($router, $config);
                    }
                }
            }
            return $router;
        });
 
        // URL component
        $di->setShared('url', function () use ($config) {
            $url = new \Nube\Mvc\Url();
            $url->setBaseUri($config->path->uri);
            return $url;
        });
 
 
        // Translator
        $di->set('translator', function () use ($di) {
            //Ask browser what is the best language
            $language = str_replace('-', '_', $di->get('request')->getBestLanguage());
 
            //Check if it is fixed (to test) at global settings
            if (isset($di->get('globalconfig')->language)) {
                $language = $di->get('globalconfig')->language;
            }
 
            //Check if we have a translation file for that lang
            if (!file_exists(__DIR__ . '/languages/'.$language)) {
                $language = 'es_ES';
            }
            $translate = new \Nube\Translate\Adapter\Gettext([
                'locale' => $language,
                'file' => 'messages',
                'directory' => __DIR__ . '/languages/'
            ]);
            $domains = $di->get('nimodules')->getTranslations();
            foreach ($domains as $domain => $folder) {
                $translate->addDomain([
                    'locale' => $language,
                    'file' => $domain,
                    'directory' => $folder
                ]);
            }
            return $translate;
        });
 
        // Session
        $di->setShared('session', function () use ($config, $di) {
            if ($di->get('request')->getScheme() == 'https') {
                ini_set("session.cookie_samesite", 'None');
                ini_set("session.cookie_secure", 'true');
            } else {
                ini_set("session.cookie_samesite", 'Lax');
            }
            ini_set("session.cookie_lifetime", 0);
            ini_set("session.gc_maxlifetime", ($config->global->session_timeout*24));
            ini_set("session.gc_probability", 1);
            ini_set("session.gc_divisor", 1000);
            ini_set("session.save_path", realpath($config->global->frontDir.'/../apps/tmp/'));
            if (isset($config->global->session_cookiedomain)) {
                ini_set('session.cookie_domain', $config->global->session_cookiedomain);
            }
            if (isset($config->global->session_cookiepath)) {
                ini_set('session.cookie_path', $config->global->session_cookiepath);
            }
            $session = new \Phalcon\Session\Adapter\Files();
            $session->start();
            return $session;
        });
//        $di->getShared('session');
 
        // Permissions
        $di->setShared('acl', function () use ($di) {
            if ($di->get('session')->has('auth')) {
                $user = unserialize($di->get('session')->get('user'));
                if (!file_exists(__DIR__ . "/cache/acl.data.".$user->id)) {
                    $acl = new \Phalcon\Acl\Adapter\Memory();
                    $acl->setDefaultAction(\Phalcon\Acl::DENY);
 
                    $acl->addRole('r'.$user->id);
 
                    $resources = \Nube\Core\Models\ACLResources::find();
                    foreach ($resources as $resource) {
                        $customersResource = new \Phalcon\Acl\Resource($resource->controller);
                        $acl->addResource($customersResource, $resource->action);
                    }
 
                    $permissions = \Nube\Core\Models\ACLPermissions::find([
                        "conditions" => "id_usuario = ?1",
                        "bind" => [1 => $user->id]
                    ]);
                    foreach ($permissions as $permission) {
                        if ($permission->resourceObj !== false) {
                            $acl->allow(
                                'r'.$user->id,
                                $permission->resourceObj->controller,
                                $permission->resourceObj->action
                            );
                        }
                    }
                } else {
                    //Restore acl object from serialized file
                     $acl = unserialize(file_get_contents(__DIR__ . "/cache/acl.data.".$user->id));
                }
                return $acl;
            }
            return null;
        });
 
 
        // Flash messenger
        $di->set('flash', function () {
            $flash = new \Phalcon\Flash\Session([
                'error' => 'alert alert-error',
                'success' => 'alert alert-success',
                'notice' => 'alert alert-info',
            ]);
            $flash->setAutoescape(false);
            return $flash;
        });
 
        // Assets
        $di->setShared('assets', function () use ($di) {
            $assetsManager = new \Nube\Assets\Manager();
 
            $assetsManager->collection('js')
                    ->addJs('components/jquery/dist/jquery.min.js')
                    ->addJs('components/jquery-ui/jquery-ui.min.js')
                    ->addJs('components/knockout/dist/knockout.js')
                    ->addJs('components/knockout-mapping/knockout.mapping.js')
                    ->addJs('js/jquery.custom-select.js')
                    ->addJs('js/jquery.custom-checkbox.js')
                    ->addJs('js/jquery.custom-radio.js')
                    ->addJs('js/main.js');
 
            $language = 'es_ES';
            //Check if it is fixed (to test) at global settings
            if (isset($di->get('globalconfig')->language) &&
                file_exists($di->get('globalconfig')->frontDir.'/js/languages/'.$di->get('globalconfig')->language.'.js')) {
                $language = $di->get('globalconfig')->language;
            }
            $assetsManager->collection('js')->addJs("js/languages/$language.js");
            $assetsManager->collection('jsltie9');
 
            $assetsManager->collection('jsMin')
                          ->setLocal(true)
                          ->join(true);
 
            $assetsManager->collection('css')->addCss('components/jquery-ui/themes/base/jquery-ui.css');
 
            $assetsManager->collection('css')->addCss('css/ni-template/style.css');
 
            if (file_exists($di->get('globalconfig')->frontDir.'/modules/0-project/css/style.css')) {
                $assetsManager->collection('css')->addCss('modules/0-project/css/style.css');
            }
 
            $assetsManager->collection('cssMin')
                          ->setLocal(true)
                          ->join(true);
 
            $assetsManager->collection('csslteie9');
 
            return $assetsManager;
        });
 
        $di->setShared('dispatcher', function () {
            $dispatcher = new \Phalcon\Mvc\Dispatcher();
 
            $eventsManager = new \Phalcon\Events\Manager();
            $eventsManager->attach("dispatch", function ($event, $dispatcher, $exception) {
                if ($event->getType() == 'beforeDispatchLoop') {
                    $dispatcher->setActionName(\Phalcon\Text::camelize($dispatcher->getActionName()));
                    return false;
                }
                if ($event->getType() == 'beforeNotFoundAction') {
                    $dispatcher->forward([
                        'module' => 'core',
                        'controller' => 'error',
                        'action' => 'notFound'
                    ]);
                    return false;
                }
                if ($event->getType() == 'beforeException') {
                    switch ($exception->getCode()) {
                        case \Phalcon\Dispatcher::EXCEPTION_HANDLER_NOT_FOUND:
                        case \Phalcon\Dispatcher::EXCEPTION_ACTION_NOT_FOUND:
                            $dispatcher->forward([
                                'module' => 'core',
                                'controller' => 'error',
                                'action' => 'notFound'
                            ]);
                            return false;
                    }
                }
            });
 
            $dispatcher->setEventsManager($eventsManager);
            return $dispatcher;
        });
 
        $di->set('debug', function () {
            $debugger = new \Nube\Utils\Debug();
            return $debugger;
        });
 
        // Handle the request
        $application->setDI($di);
 
        // The core of all the work of the controller occurs when handle() is invoked:
        echo $application->handle($di->get('url')->resolve())->getContent();
    }
}
#14Nube\Bootstrap->Nube\{closure}()
#15Phalcon\Di\Service->resolve(null, Object(Phalcon\Di\FactoryDefault))
#16Phalcon\Di->get(router, null)
#17Phalcon\Di->getShared(router)
#18Phalcon\Mvc\Application->handle()
/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/Bootstrap.php (575)
<?php
 
namespace Nube;
 
class Bootstrap
{
    private static $_cl = false;
    private static $_argv;
    
    public static function commandline($argv)
    {
        self::$_cl = true;
        self::$_argv = $argv;
    }
    
    public static function run()
    {
        if (!getenv('APPLICATION_ENV')) {
            putenv("APPLICATION_ENV=production");
        }
 
        $config = new \Phalcon\Config\Adapter\Ini(__DIR__ . "/config/".getenv('APPLICATION_ENV').".ini");
        
        if ($config->global->debug_mode) {
            $debug = new \Phalcon\Debug();
            $debug->listen();
        }
 
        \Phalcon\Tag::setAutoescape(false);
 
        // Global configurations
        date_default_timezone_set('Europe/Madrid');
        if ((isset($config->global->alternative_domains))&&(isset($_SERVER['HTTP_ORIGIN']))) {
            $httpOrigin = $_SERVER['HTTP_ORIGIN'];
            $allowedDomains = explode(',', $config->global->alternative_domains);
            if (in_array($httpOrigin, $allowedDomains)) {
                header("Access-Control-Allow-Origin: $httpOrigin");
            } else {
                header("Access-Control-Allow-Origin: http://localhost");
            }
        } else {
            header("Access-Control-Allow-Origin: http://localhost");
        }
        header("Access-Control-Allow-Credentials: true");
        error_reporting(E_ALL);
        ini_set('display_errors', $config->global->debug_mode);
 
        // DI Container
        $di = new \Phalcon\DI\FactoryDefault();
        
        if (self::$_cl) {
            $argv = self::$_argv;
            $di->set('commandline', function () use ($argv) {
                return $argv;
            });
        }
 
        // Loader, registering namespaces
        $loader = new \Phalcon\Loader();
        $loader->registerNamespaces(array(
            'Nube\Module' => __DIR__ . '/library/Nube/Module'
        ));
        $loader->register();
 
        $di->setShared('nimodules', function () use ($config) {
            $modules = null;
            $params = array();
 
            if (isset($config->modules->load)) {
                $modules = $config->modules->load->toArray();
                
                if (isset($config->moduleparams)) {
                    $params = $config->moduleparams->toArray();
                }
            }
 
            return new \Nube\Module\Loader(__DIR__, $modules, $params);
        });
 
        $loader->registerNamespaces(array(
            'Nube\Core' => __DIR__ . '/core/',
            'Nube\Core\Controllers' => __DIR__ . '/core/controllers/',
            'Nube\Core\Forms' => __DIR__ . '/core/forms/',
            'Nube\Core\Models' => __DIR__ . '/core/models/',
            'Nube\Assets' => __DIR__ . '/library/Nube/Assets/',
            'Nube\Forms' => __DIR__ . '/library/Nube/Forms/',
            'Nube\Mvc' => __DIR__ . '/library/Nube/Mvc/',
            'Nube\Translate' => __DIR__ . '/library/Nube/Translate/',
            'Nube\Utils' => __DIR__ . '/library/Nube/Utils/',
        ), true);
 
        $niNamespaces = $di->get('nimodules')->getNamespaces();
        if (count($niNamespaces)) {
            $loader->registerNamespaces($niNamespaces, true);
        }
        
        if (is_file(__DIR__ . '/library/composer/composer/autoload_namespaces.php')) {
            $namespacesMap = require __DIR__ . '/library/composer/composer/autoload_namespaces.php';
 
            foreach ($namespacesMap as $k => $values) {
                $k = trim(str_replace('_', '\\', $k), '\\');
                if (!isset($namespaces[$k])) {
                    $dir = '/' . str_replace('\\', '/', $k) . '/';
                    $namespaces[$k] = implode($dir . ';', $values) . $dir;
                }
                if (!isset($dirs[$k])) {
                    $dirs[$k] = implode($dir . ';', $values);
                }
            }
        }
        
        if (is_file(__DIR__ . '/library/composer/composer/autoload_psr4.php')) {
            $namespacesMapPsr4 = require __DIR__ . '/library/composer/composer/autoload_psr4.php';
 
            foreach ($namespacesMapPsr4 as $k => $values) {
                $k = trim($k, '\\');
                if (!isset($namespaces[$k])) {
                    $dir = '/' . str_replace('\\', '/', $k) . '/';
                    $namespaces[$k] = $values;//implode($dir . ';', $values);
                }
            }
        }
        
        if (!empty($namespaces)) {
            $loader->registerNamespaces($namespaces, true);
        }
        if (!empty($dirs)) {
            $loader->registerDirs($dirs, true);
        }
 
        if (is_file(__DIR__ . '/library/composer/composer/autoload_classmap.php')) {
            $classMap = require __DIR__ . '/library/composer/composer/autoload_classmap.php';
            if ($classMap) {
                $loader->registerClasses($classMap, true);
            }
        }
 
        if (is_file(__DIR__ . '/library/composer/composer/autoload_files.php')) {
            $includeFiles = require __DIR__ . '/library/composer/composer/autoload_files.php';
            foreach ($includeFiles as $file) {
                $filesToRegister[] = $file;
            }
            $loader->registerFiles($filesToRegister, true);
            $loader->loadFiles();
        }
        
        $loaderEventsManager = new \Phalcon\Events\Manager();
        $loaderEventsManager->attach(
            'loader:afterCheckClass',
            function (\Phalcon\Events\Event $event, \Phalcon\Loader $loader, $className) {
                if ((strpos($className, '_') !== false) && (!class_exists($className))) {
                    $className = str_replace('_', '\\', $className);
                    $event->stop();
                    $loader->autoLoad($className);
                }
            }
        );
        
        $loader->setEventsManager($loaderEventsManager);
        
        $loader->register();
        
        $di->set('globalconfig', $config->global);
        
        $di->set('login_url', function () use ($config) {
            $url = $config->global->frontUri;
            if (!empty($config->global->prefix->forbackend)) {
                $url .= $config->global->prefix->forbackend;
            }
            return $url;
        });
 
        // Database
        $di->setShared('db', function () use ($config) {
            $eventsManager = new \Phalcon\Events\Manager();
 
            if ($config->global->debug_mode) {
                $logger = new \Phalcon\Logger\Adapter\File(__DIR__."/logs/debug.log");
 
                //Listen all the database events
                $eventsManager->attach('db', function ($event, $connection) use ($logger) {
                    if ($event->getType() == 'beforeQuery') {
                        $logger->log($connection->getSQLStatement(), \Phalcon\Logger::INFO);
                    }
                });
            }
 
            $dialect = new \Phalcon\Db\Dialect\MySQL();
            $dialect->registerCustomFunction(
                'GROUP_CONCAT',
                function ($dialect, $expression) {
                    $arguments = $expression['arguments'];
                    $distinct = ((isset($expression['distinct'])) && ($expression['distinct'] == 1))? 'DISTINCT ' : '';
                    if (!empty($arguments[3])) {
                        if ($dialect->getSqlExpression($arguments[3]) == "'DESC'") {
                            return sprintf(
                                " GROUP_CONCAT($distinct%s ORDER BY %s DESC SEPARATOR %s)",
                                $dialect->getSqlExpression($arguments[0]),
                                $dialect->getSqlExpression($arguments[2]),
                                $dialect->getSqlExpression($arguments[1])
                            );
                        } else {
                            return sprintf(
                                " GROUP_CONCAT($distinct%s ORDER BY %s SEPARATOR %s)",
                                $dialect->getSqlExpression($arguments[0]),
                                $dialect->getSqlExpression($arguments[2]),
                                $dialect->getSqlExpression($arguments[1])
                            );
                        }
                    } elseif (!empty($arguments[2])) {
                        return sprintf(
                            " GROUP_CONCAT($distinct%s ORDER BY %s SEPARATOR %s)",
                            $dialect->getSqlExpression($arguments[0]),
                            $dialect->getSqlExpression($arguments[2]),
                            $dialect->getSqlExpression($arguments[1])
                        );
                    } elseif (!empty($arguments[1])) {
                        return sprintf(
                            " GROUP_CONCAT($distinct%s SEPARATOR %s)",
                            $dialect->getSqlExpression($arguments[0]),
                            $dialect->getSqlExpression($arguments[1])
                        );
                    } else {
                        return sprintf(
                            " GROUP_CONCAT($distinct%s)",
                            $dialect->getSqlExpression($arguments[0])
                        );
                    }
                }
            );
            $dialect->registerCustomFunction(
                'TRIM',
                function ($dialect, $expression) {
                    $arguments = $expression['arguments'];
                    if (!empty($arguments[1])) {
                        return sprintf(
                            " TRIM(BOTH %s FROM %s)",
                            $dialect->getSqlExpression($arguments[0]),
                            $dialect->getSqlExpression($arguments[1])
                        );
                    } else {
                        return sprintf(
                            " TRIM(%s)",
                            $dialect->getSqlExpression($arguments[0])
                        );
                    }
                }
            );
            $dialect->registerCustomFunction(
                'RTRIM',
                function ($dialect, $expression) {
                    $arguments = $expression['arguments'];
                    if (!empty($arguments[1])) {
                        return sprintf(
                            " TRIM(TRAILING %s FROM %s)",
                            $dialect->getSqlExpression($arguments[0]),
                            $dialect->getSqlExpression($arguments[1])
                        );
                    } else {
                        return sprintf(
                            " RTRIM(%s)",
                            $dialect->getSqlExpression($arguments[0])
                        );
                    }
                }
            );
            $dialect->registerCustomFunction(
                'LTRIM',
                function ($dialect, $expression) {
                    $arguments = $expression['arguments'];
                    if (!empty($arguments[1])) {
                        return sprintf(
                            " TRIM(LEADING %s FROM %s)",
                            $dialect->getSqlExpression($arguments[0]),
                            $dialect->getSqlExpression($arguments[1])
                        );
                    } else {
                        return sprintf(
                            " LTRIM(%s)",
                            $dialect->getSqlExpression($arguments[0])
                        );
                    }
                }
            );
            $dialect->registerCustomFunction(
                'CLEARFLOAT',
                function ($dialect, $expression) {
                    $arguments = $expression['arguments'];
                    return sprintf(
                        " TRIM(TRAILING '.' FROM TRIM(TRAILING 0 FROM %s))",
                        $dialect->getSqlExpression($arguments[0])
                    );
                }
            );
            
            $connection = new \Phalcon\Db\Adapter\Pdo\Mysql(array(
                'host' => $config->database->host,
                'username' => $config->database->username,
                'password' => $config->database->password,
                'dbname' => $config->database->dbname,
                'dialectClass' => $dialect,
                'options' => [\PDO::MYSQL_ATTR_INIT_COMMAND => 'SET SESSION group_concat_max_len = 10000000;']
            ));
 
            //Assign the eventsManager to the db adapter instance
            $connection->setEventsManager($eventsManager);
 
            return $connection;
        });
        
        $di->set('modelsManager', function () {
            return new \Nube\Mvc\Model\Manager();
        });
 
//        $modelsMetadata = new \Phalcon\Mvc\Model\Metadata\Memory();
//        $di->set('modelsMetadata', $modelsMetadata);
 
        $application = new \Phalcon\Mvc\Application();
 
        /**
         * Register application modules
         */
        $application->registerModules(array(
            'core' => array(
                'className' => 'Nube\Core\Module',
                'path' => __DIR__ . '/core/Module.php'
            ),
            'frontend' => array(
                'className' => 'Nube\Frontend\Module',
                'path' => __DIR__ . '/frontend/Module.php'
                )
        ));
 
        $niModules = $di->get('nimodules')->getModulesReg();
        if (count($niModules)) {
            $application->registerModules($niModules, true);
        }
 
        // Routing
        $di->setShared('router', function () use ($di, $config, $application) {
            $router = new \Phalcon\Mvc\Router();
 
            $defaultModule = (isset($config->modules->default)? $config->modules->default->module : 'frontend');
            $router->setDefaultModule($defaultModule);
            $router->setDefaultController(
                isset($config->modules->default->controller) ? $config->modules->default->controller : 'index'
            );
            $router->setDefaultAction(
                isset($config->modules->default->action) ? $config->modules->default->action : 'index'
            );
 
            $defaultNamespace = $di->get('nimodules')->getNamespace($defaultModule);
            if ($defaultNamespace === false) {
                $defaultNamespace = '\\Nube\\'.mb_convert_case($defaultModule, MB_CASE_TITLE);
            }
            $routesClassName = $defaultNamespace.'\Routes';
            if (class_exists($routesClassName)) {
                $routesClass = new $routesClassName();
                $router = $routesClass->add($router, $config);
            }
 
            foreach ($application->getModules() as $name => $module) {
                if ($name !== $defaultModule) {
                    $routesClassName = preg_replace('/Module$/', 'Routes', $module['className']);
                    if (class_exists($routesClassName)) {
                        $routesClass = new $routesClassName();
                        $router = $routesClass->add($router, $config);
                    }
                }
            }
            return $router;
        });
 
        // URL component
        $di->setShared('url', function () use ($config) {
            $url = new \Nube\Mvc\Url();
            $url->setBaseUri($config->path->uri);
            return $url;
        });
 
 
        // Translator
        $di->set('translator', function () use ($di) {
            //Ask browser what is the best language
            $language = str_replace('-', '_', $di->get('request')->getBestLanguage());
 
            //Check if it is fixed (to test) at global settings
            if (isset($di->get('globalconfig')->language)) {
                $language = $di->get('globalconfig')->language;
            }
 
            //Check if we have a translation file for that lang
            if (!file_exists(__DIR__ . '/languages/'.$language)) {
                $language = 'es_ES';
            }
            $translate = new \Nube\Translate\Adapter\Gettext([
                'locale' => $language,
                'file' => 'messages',
                'directory' => __DIR__ . '/languages/'
            ]);
            $domains = $di->get('nimodules')->getTranslations();
            foreach ($domains as $domain => $folder) {
                $translate->addDomain([
                    'locale' => $language,
                    'file' => $domain,
                    'directory' => $folder
                ]);
            }
            return $translate;
        });
 
        // Session
        $di->setShared('session', function () use ($config, $di) {
            if ($di->get('request')->getScheme() == 'https') {
                ini_set("session.cookie_samesite", 'None');
                ini_set("session.cookie_secure", 'true');
            } else {
                ini_set("session.cookie_samesite", 'Lax');
            }
            ini_set("session.cookie_lifetime", 0);
            ini_set("session.gc_maxlifetime", ($config->global->session_timeout*24));
            ini_set("session.gc_probability", 1);
            ini_set("session.gc_divisor", 1000);
            ini_set("session.save_path", realpath($config->global->frontDir.'/../apps/tmp/'));
            if (isset($config->global->session_cookiedomain)) {
                ini_set('session.cookie_domain', $config->global->session_cookiedomain);
            }
            if (isset($config->global->session_cookiepath)) {
                ini_set('session.cookie_path', $config->global->session_cookiepath);
            }
            $session = new \Phalcon\Session\Adapter\Files();
            $session->start();
            return $session;
        });
//        $di->getShared('session');
 
        // Permissions
        $di->setShared('acl', function () use ($di) {
            if ($di->get('session')->has('auth')) {
                $user = unserialize($di->get('session')->get('user'));
                if (!file_exists(__DIR__ . "/cache/acl.data.".$user->id)) {
                    $acl = new \Phalcon\Acl\Adapter\Memory();
                    $acl->setDefaultAction(\Phalcon\Acl::DENY);
 
                    $acl->addRole('r'.$user->id);
 
                    $resources = \Nube\Core\Models\ACLResources::find();
                    foreach ($resources as $resource) {
                        $customersResource = new \Phalcon\Acl\Resource($resource->controller);
                        $acl->addResource($customersResource, $resource->action);
                    }
 
                    $permissions = \Nube\Core\Models\ACLPermissions::find([
                        "conditions" => "id_usuario = ?1",
                        "bind" => [1 => $user->id]
                    ]);
                    foreach ($permissions as $permission) {
                        if ($permission->resourceObj !== false) {
                            $acl->allow(
                                'r'.$user->id,
                                $permission->resourceObj->controller,
                                $permission->resourceObj->action
                            );
                        }
                    }
                } else {
                    //Restore acl object from serialized file
                     $acl = unserialize(file_get_contents(__DIR__ . "/cache/acl.data.".$user->id));
                }
                return $acl;
            }
            return null;
        });
 
 
        // Flash messenger
        $di->set('flash', function () {
            $flash = new \Phalcon\Flash\Session([
                'error' => 'alert alert-error',
                'success' => 'alert alert-success',
                'notice' => 'alert alert-info',
            ]);
            $flash->setAutoescape(false);
            return $flash;
        });
 
        // Assets
        $di->setShared('assets', function () use ($di) {
            $assetsManager = new \Nube\Assets\Manager();
 
            $assetsManager->collection('js')
                    ->addJs('components/jquery/dist/jquery.min.js')
                    ->addJs('components/jquery-ui/jquery-ui.min.js')
                    ->addJs('components/knockout/dist/knockout.js')
                    ->addJs('components/knockout-mapping/knockout.mapping.js')
                    ->addJs('js/jquery.custom-select.js')
                    ->addJs('js/jquery.custom-checkbox.js')
                    ->addJs('js/jquery.custom-radio.js')
                    ->addJs('js/main.js');
 
            $language = 'es_ES';
            //Check if it is fixed (to test) at global settings
            if (isset($di->get('globalconfig')->language) &&
                file_exists($di->get('globalconfig')->frontDir.'/js/languages/'.$di->get('globalconfig')->language.'.js')) {
                $language = $di->get('globalconfig')->language;
            }
            $assetsManager->collection('js')->addJs("js/languages/$language.js");
            $assetsManager->collection('jsltie9');
 
            $assetsManager->collection('jsMin')
                          ->setLocal(true)
                          ->join(true);
 
            $assetsManager->collection('css')->addCss('components/jquery-ui/themes/base/jquery-ui.css');
 
            $assetsManager->collection('css')->addCss('css/ni-template/style.css');
 
            if (file_exists($di->get('globalconfig')->frontDir.'/modules/0-project/css/style.css')) {
                $assetsManager->collection('css')->addCss('modules/0-project/css/style.css');
            }
 
            $assetsManager->collection('cssMin')
                          ->setLocal(true)
                          ->join(true);
 
            $assetsManager->collection('csslteie9');
 
            return $assetsManager;
        });
 
        $di->setShared('dispatcher', function () {
            $dispatcher = new \Phalcon\Mvc\Dispatcher();
 
            $eventsManager = new \Phalcon\Events\Manager();
            $eventsManager->attach("dispatch", function ($event, $dispatcher, $exception) {
                if ($event->getType() == 'beforeDispatchLoop') {
                    $dispatcher->setActionName(\Phalcon\Text::camelize($dispatcher->getActionName()));
                    return false;
                }
                if ($event->getType() == 'beforeNotFoundAction') {
                    $dispatcher->forward([
                        'module' => 'core',
                        'controller' => 'error',
                        'action' => 'notFound'
                    ]);
                    return false;
                }
                if ($event->getType() == 'beforeException') {
                    switch ($exception->getCode()) {
                        case \Phalcon\Dispatcher::EXCEPTION_HANDLER_NOT_FOUND:
                        case \Phalcon\Dispatcher::EXCEPTION_ACTION_NOT_FOUND:
                            $dispatcher->forward([
                                'module' => 'core',
                                'controller' => 'error',
                                'action' => 'notFound'
                            ]);
                            return false;
                    }
                }
            });
 
            $dispatcher->setEventsManager($eventsManager);
            return $dispatcher;
        });
 
        $di->set('debug', function () {
            $debugger = new \Nube\Utils\Debug();
            return $debugger;
        });
 
        // Handle the request
        $application->setDI($di);
 
        // The core of all the work of the controller occurs when handle() is invoked:
        echo $application->handle($di->get('url')->resolve())->getContent();
    }
}
#19Nube\Bootstrap::run()
/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/public/index.php (5)
<?php
 
include __DIR__ . '/../apps/Bootstrap.php';
 
\Nube\Bootstrap::run();
KeyValue
_url/Notre-Dame
KeyValue
USERnubedemo
HOME/var/www/vhosts/nubedemos.com
SCRIPT_NAME/nube-interactiva/public/index.php
REQUEST_URI/Notre-Dame
QUERY_STRING_url=/Notre-Dame
REQUEST_METHODGET
SERVER_PROTOCOLHTTP/1.0
GATEWAY_INTERFACECGI/1.1
REDIRECT_QUERY_STRING_url=/Notre-Dame
REDIRECT_URL/nube-interactiva/public/Notre-Dame
REMOTE_PORT37752
SCRIPT_FILENAME/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/public/index.php
SERVER_ADMIN[no address given]
CONTEXT_DOCUMENT_ROOT/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com
CONTEXT_PREFIX
REQUEST_SCHEMEhttp
DOCUMENT_ROOT/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com
REMOTE_ADDR3.148.250.255
SERVER_PORT80
SERVER_ADDR10.5.0.4
SERVER_NAMEvr.nubotica-stg.nubedemos.com
SERVER_SOFTWAREApache
SERVER_SIGNATURE<address>Apache Server at vr.nubotica-stg.nubedemos.com Port 80</address>\n
PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HTTP_ACCEPT_ENCODINGgzip, zstd, deflate
HTTP_USER_AGENTMozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
HTTP_ACCEPT*/*
HTTP_CONNECTIONclose
HTTP_X_ACCEL_INTERNAL/internal-nginx-static-location
HTTP_X_REAL_IP3.148.250.255
HTTP_HOSTvr.nubotica-stg.nubedemos.com
proxy-nokeepalive1
APPLICATION_ENVstaging
REDIRECT_STATUS200
REDIRECT_APPLICATION_ENVstaging
REDIRECT_REDIRECT_STATUS200
REDIRECT_REDIRECT_MWD/
FCGI_ROLERESPONDER
PHP_SELF/nube-interactiva/public/index.php
REQUEST_TIME_FLOAT1747369854.3286
REQUEST_TIME1747369854
#Path
0/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/public/index.php
1/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/Bootstrap.php
2/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/Nube/Module/Loader.php
3/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/composer/autoload_namespaces.php
4/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/composer/autoload_psr4.php
5/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/composer/autoload_classmap.php
6/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/composer/autoload_files.php
7/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/myclabs/deep-copy/src/DeepCopy/deep_copy.php
8/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/abs.php
9/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/acos.php
10/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/acosh.php
11/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/acot.php
12/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/acoth.php
13/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/acsc.php
14/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/acsch.php
15/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/argument.php
16/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/asec.php
17/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/asech.php
18/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/asin.php
19/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/asinh.php
20/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/atan.php
21/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/atanh.php
22/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/conjugate.php
23/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/cos.php
24/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/cosh.php
25/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/cot.php
26/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/coth.php
27/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/csc.php
28/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/csch.php
29/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/exp.php
30/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/inverse.php
31/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/ln.php
32/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/log2.php
33/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/log10.php
34/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/negative.php
35/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/pow.php
36/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/rho.php
37/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/sec.php
38/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/sech.php
39/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/sin.php
40/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/sinh.php
41/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/sqrt.php
42/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/tan.php
43/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/tanh.php
44/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/functions/theta.php
45/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/operations/add.php
46/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/operations/subtract.php
47/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/operations/multiply.php
48/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/operations/divideby.php
49/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/complex/classes/src/operations/divideinto.php
50/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/matrix/classes/src/Functions/adjoint.php
51/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/matrix/classes/src/Functions/antidiagonal.php
52/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/matrix/classes/src/Functions/cofactors.php
53/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/matrix/classes/src/Functions/determinant.php
54/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/matrix/classes/src/Functions/diagonal.php
55/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/matrix/classes/src/Functions/identity.php
56/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/matrix/classes/src/Functions/inverse.php
57/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/matrix/classes/src/Functions/minors.php
58/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/matrix/classes/src/Functions/trace.php
59/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/matrix/classes/src/Functions/transpose.php
60/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/matrix/classes/src/Operations/add.php
61/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/matrix/classes/src/Operations/directsum.php
62/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/matrix/classes/src/Operations/subtract.php
63/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/matrix/classes/src/Operations/multiply.php
64/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/matrix/classes/src/Operations/divideby.php
65/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/markbaker/matrix/classes/src/Operations/divideinto.php
66/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/swiftmailer/swiftmailer/lib/swift_required.php
67/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/composer/swiftmailer/swiftmailer/lib/classes/Swift.php
68/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/Nube/Mvc/Url.php
69/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/module-webvrnubotica/apps/modules/webvrnubotica/Routes.php
70/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/module-cms/apps/modules/cms/models/LanguageVariants.php
71/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/Nube/Mvc/Model.php
72/var/www/vhosts/nubedemos.com/vr.nubotica-stg.nubedemos.com/nube-interactiva/apps/library/Nube/Mvc/Model/Manager.php
Memory
Usage2097152