Ejemplo n.º 1
0
 public function buildWindow(core\request $path, core\argument $exts, $bUpdate = null, $bRun = true)
 {
     $this->setSettings($exts);
     $sExtension = strtolower($path->getExtension());
     if (!$sExtension) {
         $sExtension = self::EXTENSION_DEFAULT;
     }
     $settings = $this->get($sExtension);
     $sCurrent = (string) $path;
     $path->parse();
     $aPaths = $this->buildWindowStack($settings, $sCurrent);
     $aPaths[] = (string) $path->asFile();
     $bAccess = true;
     foreach ($aPaths as $sFile) {
         $file = $this->getFile($sFile, false);
         if (!$file || !$file->checkRights(\Sylma::MODE_EXECUTE)) {
             $bAccess = false;
             break;
         }
     }
     if (!$bAccess) {
         $this->getInitializer()->send404();
         $aPaths = $this->buildWindowStack($this->createArgument(array($this->get('error'))), '');
         $aPaths[] = $this->read('error/path');
     }
     $aPaths = array_reverse($aPaths);
     $sMain = array_pop($aPaths);
     $window = $this->getFile($sMain);
     $args = $path->getArguments();
     $args->set('sylma-paths', $aPaths);
     $builder = $this->getManager(self::PARSER_MANAGER);
     return $builder->load($window, array('arguments' => $args), $bUpdate, $bRun);
 }
Ejemplo n.º 2
0
 public function setScript(core\request $path, $sContext = '')
 {
     //$path->parse();
     $bError = null;
     $parser = \Sylma::getManager('parser');
     $messages = new html\context\Messages();
     $contexts = new core\argument\Readable(array('errors' => $this->initMessages(), 'messages' => $messages, 'js-common' => new html\context\JS(), 'js' => new html\context\JS(array('load' => new template\binder\context\Load()))));
     $this->setContexts($contexts);
     $parser->setContext('messages', $messages);
     $debug = $this->getManager('init')->getArgument('window');
     try {
         $result = $this->runScript($path->getFile(), $path->getArguments(), $this->getManager('init')->loadPOST(true), $debug);
     } catch (core\exception $e) {
         $result = '';
         $e->save(false);
         $bError = true;
         $messages->add(array('content' => 'An error has occured'));
     }
     if (\Sylma::isAdmin()) {
         $errors = $contexts->get('errors');
     } else {
         $errors = null;
     }
     $classes = $contexts->get('js/classes', false);
     $this->setSettings(array('content' => $this->formatContent($result), 'objects' => $contexts->get('js/load/objects', false), 'classes' => $classes ? $classes->asStringVar() : null, 'error' => $bError, 'errors' => $errors, 'messages' => $contexts->get('messages')));
 }
Ejemplo n.º 3
0
 protected function runScript(core\request $path)
 {
     $sResult = '';
     $bProfile = $this->readArgument('debug/profile');
     if ($bProfile) {
         $profiler = $this->create('profiler');
         $profiler->start();
         //xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE);
     }
     $sExtension = $path->parseExtension(true);
     if ($sExtension == $this->readArgument('redirect/extension')) {
         $path->parse();
         $redirect = $this->prepareScript($path->asFile(), $path->getArguments());
         if (!$redirect instanceof core\redirect) {
             $this->throwException('Cannot redirect at that adress');
         }
         $this->runRedirect($redirect);
     } else {
         if (in_array($sExtension, $this->query('executables'))) {
             $sResult = $this->runExecutable($path);
         } else {
             if (!$path->getExtension()) {
                 $builder = $this->createWindowBuilder();
                 $sResult = $builder->buildWindow($path, $this->get('window'), $this->read('debug/update', false), $this->read('debug/run'));
             } else {
                 $this->throwException('No valid window defined');
             }
         }
     }
     if ($bProfile) {
         $profiler->stop();
         $profiler->save();
         /*
              $data = xdebug_get_code_coverage();
              xdebug_stop_code_coverage();
         
              //print_r($data);
         */
     }
     return $sResult;
 }