protected function execute() { switch ($this->mode) { case self::MODE_DQL: $this->result = ''; $strQuery = trim($this->code); $lister = new \Cx\Core_Modules\Listing\Controller\ListingController(function (&$offset, &$count, &$criteria, &$order) use($strQuery) { return \Env::get('em')->createQuery($strQuery); }); try { $table = new \BackendTable($lister->getData()); $this->result = $table->toHtml() . $lister; } catch (\Exception $e) { $this->result = 'Could not execute query (' . $e->getMessage() . ')!'; } break; case self::MODE_PHP: $dbgMode = \DBG::getMode(); try { // This error handler catches all Warnings and Notices and some Strict errors \DBG::activate(DBG_PHP); set_error_handler(array($this, 'phpErrorsAsExceptionsHandler')); $this->errrorHandlerActive = true; // Since DBG catches the rest (E_PARSE) let's use that ob_start(); $function = create_function('$em, $cx', '' . $this->code . ';'); $dbgContents = ob_get_clean(); \DBG::activate($dbgMode); if (!is_callable($function)) { // parse exception throw new SandboxException($dbgContents); } $this->result = var_export($function(\Env::get('em'), \Env::get('cx')), true); restore_error_handler(); $this->errrorHandlerActive = false; } catch (\Exception $e) { \DBG::activate($dbgMode); restore_error_handler(); $this->errrorHandlerActive = false; $this->result = get_class($e) . ': ' . $e->getMessage(); } break; default: break; } }
public function __construct(&$language, $mode, &$arguments) { $this->template = new \Cx\Core\Html\Sigma(ASCMS_CORE_MODULE_PATH . '/Workbench/View/Template/Backend'); switch ($mode) { case 'yaml': \JS::activate('ace'); \Message::add('YAML toolbox is currently not working.', \Message::CLASS_WARN); \Message::add('Implement in ' . __METHOD__ . ' (' . __FILE__ . ')', \Message::CLASS_WARN); $this->template->loadTemplateFile('Yaml.html'); $res = \Env::get('db')->Execute('SHOW TABLES'); while (!$res->EOF) { $this->template->setVariable('TABLE', current($res->fields)); $this->template->parse('table_option'); $res->MoveNext(); } //if (mode = table) { $result = $this->loadSql($arguments['table']); //} else { //$result = sql //} //$result = $this->sql2Yaml($result); $this->template->setVariable(array('TXT_WORKBENCH_TOOLBOX_YAML_FROM_TABLE' => $language['TXT_WORKBENCH_TOOLBOX_YAML_FROM_TABLE'], 'TXT_WORKBENCH_TOOLBOX_YAML_FROM_SQL' => $language['TXT_WORKBENCH_TOOLBOX_YAML_FROM_SQL'], 'TXT_WORKBENCH_TOOLBOX_SUBMIT' => $language['TXT_WORKBENCH_TOOLBOX_SUBMIT'], 'RESULT' => $result)); break; case 'components': $this->template->loadTemplateFile('Components.html'); $query = ' SELECT `id`, `name`, `is_required`, `is_core` FROM `' . DBPREFIX . 'modules` ORDER BY `name` ASC '; $res = \Env::get('db')->Execute($query); $modules = array(); while (!$res->EOF) { $fsExists = $this->componentExistsInFileSystem($res->fields['is_core'], $res->fields['name']); $modules[$res->fields['name']] = array('id' => $res->fields['id'], 'name' => $res->fields['name'], 'type' => $res->fields['is_core'], 'exists_db' => 'true', 'exists_filesystem' => $fsExists, 'skeleton_version' => $this->getComponentStyle($res->fields['is_core'], $res->fields['name'])); $res->MoveNext(); } foreach (\Env::get('em')->getRepository('Cx\\Core\\Core\\Model\\Entity\\SystemComponent')->findAll() as $component) { if (isset($modules[$component->getName()])) { continue; } $name = $component->getName(); $type = $component->getType(); $modules[$component->getName()] = array('id' => $component->getId(), 'name' => $component->getName(), 'type' => $component->getType(), 'exists_db' => '<span style="color:red;">false</span>', 'exists_filesystem' => $this->componentExistsInFileSystem($type, $name), 'skeleton_version' => '3.1.0'); } foreach (array(ASCMS_CORE_FOLDER, ASCMS_CORE_MODULE_FOLDER, ASCMS_MODULE_FOLDER) as $basedir) { $dh = opendir(ASCMS_DOCUMENT_ROOT . $basedir); while ($file = readdir($dh)) { if (substr($file, 0, 1) == '.') { continue; } if (!is_dir(ASCMS_DOCUMENT_ROOT . $basedir . '/' . $file)) { continue; } if (isset($modules[$file])) { continue; } $modules[$file] = array('id' => '<span style="color:red;">(none)</span>', 'name' => $file, 'type' => preg_replace('/s/', '', substr(strtolower($basedir), 1)), 'exists_db' => '<span style="color:red;">false</span>', 'exists_filesystem' => '.' . $basedir . '/' . $file, 'skeleton_version' => '<span style="color:red;"><= 2.2.6</span>'); } closedir($dh); } // add all not-yet-listed components existing in filesystem $tableDefinition = array('fields' => array('id' => array('table' => array('parse' => function ($value) { return $value; })), 'exists_db' => array('table' => array('parse' => function ($value) { return $value; })), 'skeleton_version' => array('table' => array('parse' => function ($value) { return $value; })))); $table = new \BackendTable(new \Cx\Core_Modules\Listing\Model\Entity\DataSet($modules), $tableDefinition); $this->template->setVariable(array('RECORD_COUNT' => count($modules), 'RESULT' => $table->toHtml())); break; } }