protected function _execute(InputInterface $input, OutputInterface $output) { $module = $input->getArgument('module'); $daoname = $input->getArgument('daoname'); $classname = $input->getArgument('classname'); /* * Computing some paths and filenames */ $modulePath = $this->getModulePath($module); $sourceDaoPath = $modulePath . 'daos/'; $sourceDaoPath .= strtolower($daoname) . '.dao.xml'; if (!file_exists($sourceDaoPath)) { throw new \Exception("The file {$sourceDaoPath} doesn't exist"); } $targetClassPath = $modulePath . 'classes/'; $targetClassPath .= strtolower($classname) . '.class.php'; /* * Parsing the dao xml file */ $selector = new \jSelectorDao($module . '~' . $daoname, ''); $tools = \jDb::getConnection()->tools(); $doc = new \DOMDocument(); if (!$doc->load($sourceDaoPath)) { throw new \jException('jelix~daoxml.file.unknown', $sourceDaoPath); } if ($doc->documentElement->namespaceURI != JELIX_NAMESPACE_BASE . 'dao/1.0') { throw new \jException('jelix~daoxml.namespace.wrong', array($sourceDaoPath, $doc->namespaceURI)); } $parser = new \jDaoParser($selector); $parser->parse(simplexml_import_dom($doc), $tools); $properties = $parser->GetProperties(); /* * Generating the class */ $classContent = ''; foreach ($properties as $name => $property) { $classContent .= " public \${$name};\n"; } $this->createFile($targetClassPath, 'module/classfromdao.class.tpl', array('properties' => $classContent, 'name' => $classname), "Class"); }
public function run() { jxs_init_jelix_env(); $path = $this->getModulePath($this->_parameters['module']); $filename = $path . 'forms/'; $this->createDir($filename); $filename .= strtolower($this->_parameters['form']) . '.form.xml'; $submit = "\n\n<submit ref=\"_submit\">\n\t<label>ok</label>\n</submit>"; if (($dao = $this->getParam('dao')) === null) { $this->createFile($filename, 'form.xml.tpl', array('content' => '<!-- add control declaration here -->' . $submit)); return; } global $gJConfig; $gJConfig->startModule = $this->_parameters['module']; jContext::push($this->_parameters['module']); // we're going to parse the dao $selector = new jSelectorDao($dao, '', false); jDaoCompiler::$daoId = $selector->toString(); jDaoCompiler::$daoPath = $selector->getPath(); jDaoCompiler::$dbType = $selector->driver; $doc = new DOMDocument(); if (!$doc->load(jDaoCompiler::$daoPath)) { throw new jException('jelix~daoxml.file.unknow', jDaoCompiler::$daoPath); } if ($doc->documentElement->namespaceURI != JELIX_NAMESPACE_BASE . 'dao/1.0') { throw new jException('jelix~daoxml.namespace.wrong', array(jDaoCompiler::$daoPath, $doc->namespaceURI)); } $parser = new jDaoParser(); $parser->parse(simplexml_import_dom($doc)); // know we generate the form file $properties = $parser->GetProperties(); $table = $parser->GetPrimaryTable(); $content = ''; foreach ($properties as $name => $property) { if (!$property->ofPrimaryTable) { continue; } if ($property->isPK && ($property->datatype == 'autoincrement' || $property->datatype == 'bigautoincrement')) { continue; } $attr = ''; if ($property->required) { $attr .= ' required="true"'; } if ($property->defaultValue !== null) { $attr .= ' defaultvalue="' . htmlspecialchars($property->defaultValue) . '"'; } if ($property->maxlength !== null) { $attr .= ' maxlength="' . $property->maxlength . '"'; } if ($property->minlength !== null) { $attr .= ' minlength="' . $property->minlength . '"'; } //if(false) // $attr.=' defaultvalue=""'; $datatype = ''; $tag = 'input'; switch ($property->datatype) { case 'autoincrement': case 'bigautoincrement': case 'int': case 'integer': case 'numeric': $datatype = 'integer'; break; case 'datetime': $datatype = 'datetime'; break; case 'time': $datatype = 'time'; break; case 'date': $datatype = 'date'; break; case 'double': case 'float': $datatype = 'decimal'; break; case 'text': $tag = 'textarea'; break; case 'boolean': $tag = 'checkbox'; break; } if ($datatype != '') { $attr .= ' type="' . $datatype . '"'; } $content .= "\n\n<{$tag} ref=\"{$name}\"{$attr}>\n\t<label>{$name}</label>\n</{$tag}>"; } $this->createFile($filename, 'form.xml.tpl', array('content' => $content . $submit)); }
public function run() { $this->loadAppConfig(); #if ENABLE_OPTIMIZED_SOURCE require JELIX_LIB_PATH . 'dao/jDaoCompiler.class.php'; // jDaoParser is in jDaoCompiler file #endif $path = $this->getModulePath($this->_parameters['module']); $filename = $path . 'forms/'; $this->createDir($filename); $filename .= strtolower($this->_parameters['form']) . '.form.xml'; if ($this->getOption('-createlocales')) { $locale_content = ''; $locale_base = $this->_parameters['module'] . '~' . strtolower($this->_parameters['form']) . '.form.'; $locale_filename_fr = $path . 'locales/fr_FR/'; $this->createDir($locale_filename_fr); $locale_filename_fr .= strtolower($this->_parameters['form']) . '.UTF-8.properties'; $locale_filename_en = $path . 'locales/en_EN/'; $this->createDir($locale_filename_en); $locale_filename_en .= strtolower($this->_parameters['form']) . '.UTF-8.properties'; $submit = "\n\n<submit ref=\"_submit\">\n\t<label locale='" . $locale_base . "ok' />\n</submit>"; } else { $submit = "\n\n<submit ref=\"_submit\">\n\t<label>ok</label>\n</submit>"; } $dao = $this->getParam('dao'); if ($dao === null) { if ($this->getOption('-createlocales')) { $locale_content = "form.ok=OK\n"; $this->createFile($locale_filename_fr, 'locales.tpl', array('content' => $locale_content)); $this->createFile($locale_filename_en, 'locales.tpl', array('content' => $locale_content)); } $this->createFile($filename, 'module/form.xml.tpl', array('content' => '<!-- add control declaration here -->' . $submit)); return; } global $gJConfig; $gJConfig->startModule = $this->_parameters['module']; jContext::push($this->_parameters['module']); $tools = jDb::getConnection()->tools(); // we're going to parse the dao $selector = new jSelectorDao($dao, ''); $doc = new DOMDocument(); $daoPath = $selector->getPath(); if (!$doc->load($daoPath)) { throw new jException('jelix~daoxml.file.unknown', $daoPath); } if ($doc->documentElement->namespaceURI != JELIX_NAMESPACE_BASE . 'dao/1.0') { throw new jException('jelix~daoxml.namespace.wrong', array($daoPath, $doc->namespaceURI)); } $parser = new jDaoParser($selector); $parser->parse(simplexml_import_dom($doc), $tools); // now we generate the form file $properties = $parser->GetProperties(); $table = $parser->GetPrimaryTable(); $content = ''; foreach ($properties as $name => $property) { if (!$property->ofPrimaryTable) { continue; } if ($property->isPK && $property->autoIncrement) { continue; } $attr = ''; if ($property->required) { $attr .= ' required="true"'; } if ($property->defaultValue !== null) { $attr .= ' defaultvalue="' . htmlspecialchars($property->defaultValue) . '"'; } if ($property->maxlength !== null) { $attr .= ' maxlength="' . $property->maxlength . '"'; } if ($property->minlength !== null) { $attr .= ' minlength="' . $property->minlength . '"'; } $datatype = ''; $tag = 'input'; switch ($property->unifiedType) { case 'integer': case 'numeric': $datatype = 'integer'; break; case 'datetime': $datatype = 'datetime'; break; case 'time': $datatype = 'time'; break; case 'date': $datatype = 'date'; break; case 'double': case 'float': $datatype = 'decimal'; break; case 'text': case 'blob': $tag = 'textarea'; break; case 'boolean': $tag = 'checkbox'; break; } if ($datatype != '') { $attr .= ' type="' . $datatype . '"'; } if ($this->getOption('-createlocales')) { $locale_content .= 'form.' . $name . '=' . ucwords(str_replace('_', ' ', $name)) . "\n"; $content .= "\n\n<{$tag} ref=\"{$name}\"{$attr}>\n\t<label locale='" . $locale_base . $name . "' />\n</{$tag}>"; } else { $content .= "\n\n<{$tag} ref=\"{$name}\"{$attr}>\n\t<label>" . ucwords(str_replace('_', ' ', $name)) . "</label>\n</{$tag}>"; } } if ($this->getOption('-createlocales')) { $locale_content .= "form.ok=OK\n"; $this->createFile($locale_filename_fr, 'module/locales.tpl', array('content' => $locale_content)); $this->createFile($locale_filename_en, 'module/locales.tpl', array('content' => $locale_content)); } $this->createFile($filename, 'module/form.xml.tpl', array('content' => $content . $submit)); }
protected function _execute(InputInterface $input, OutputInterface $output) { $module = $input->getArgument('module'); $formName = $input->getArgument('form'); $daoName = $input->getArgument('dao'); require_once JELIX_LIB_PATH . 'dao/jDaoParser.class.php'; $path = $this->getModulePath($module); $formdir = $path . 'forms/'; $this->createDir($formdir); $formfile = strtolower($formName) . '.form.xml'; if ($input->getOption('createlocales')) { $locale_content = ''; $locale_base = $module . '~' . strtolower($formName) . '.form.'; $locale_filename_fr = 'locales/fr_FR/'; $this->createDir($path . $locale_filename_fr); $locale_filename_fr .= strtolower($formName) . '.UTF-8.properties'; $locale_filename_en = 'locales/en_US/'; $this->createDir($path . $locale_filename_en); $locale_filename_en .= strtolower($formName) . '.UTF-8.properties'; $submit = "\n\n<submit ref=\"_submit\">\n\t<label locale='" . $locale_base . "ok' />\n</submit>"; } else { $submit = "\n\n<submit ref=\"_submit\">\n\t<label>ok</label>\n</submit>"; } if ($daoName === null) { if ($input->getOption('createlocales')) { $locale_content = "form.ok=OK\n"; $this->createFile($path . $locale_filename_fr, 'locales.tpl', array('content' => $locale_content), "Locales file"); $this->createFile($path . $locale_filename_en, 'locales.tpl', array('content' => $locale_content), "Locales file"); } $this->createFile($formdir . $formfile, 'module/form.xml.tpl', array('content' => '<!-- add control declaration here -->' . $submit), "Form"); return; } \Jelix\Core\App::config()->startModule = $module; \Jelix\Core\App::pushCurrentModule($module); $tools = \jDb::getConnection()->tools(); // we're going to parse the dao $selector = new \jSelectorDao($daoName, ''); $doc = new \DOMDocument(); $daoPath = $selector->getPath(); if (!$doc->load($daoPath)) { throw new \jException('jelix~daoxml.file.unknown', $daoPath); } if ($doc->documentElement->namespaceURI != JELIX_NAMESPACE_BASE . 'dao/1.0') { throw new \jException('jelix~daoxml.namespace.wrong', array($daoPath, $doc->namespaceURI)); } $parser = new \jDaoParser($selector); $parser->parse(simplexml_import_dom($doc), $tools); // now we generate the form file $properties = $parser->GetProperties(); $table = $parser->GetPrimaryTable(); $content = ''; foreach ($properties as $name => $property) { if (!$property->ofPrimaryTable) { continue; } if ($property->isPK && $property->autoIncrement) { continue; } $attr = ''; if ($property->required) { $attr .= ' required="true"'; } if ($property->defaultValue !== null) { $attr .= ' defaultvalue="' . htmlspecialchars($property->defaultValue) . '"'; } if ($property->maxlength !== null) { $attr .= ' maxlength="' . $property->maxlength . '"'; } if ($property->minlength !== null) { $attr .= ' minlength="' . $property->minlength . '"'; } $datatype = ''; $tag = 'input'; switch ($property->unifiedType) { case 'integer': case 'numeric': $datatype = 'integer'; break; case 'datetime': $datatype = 'datetime'; break; case 'time': $datatype = 'time'; break; case 'date': $datatype = 'date'; break; case 'double': case 'float': $datatype = 'decimal'; break; case 'text': case 'blob': $tag = 'textarea'; break; case 'boolean': $tag = 'checkbox'; break; } if ($datatype != '') { $attr .= ' type="' . $datatype . '"'; } // use database comment to create form's label if ($property->comment != '' && $input->getOption('usecomments')) { if ($input->getOption('createlocales')) { // replace special chars by dot $locale_content .= 'form.' . $name . '=' . htmlspecialchars(utf8_decode($property->comment)) . "\n"; $content .= "\n\n<{$tag} ref=\"{$name}\"{$attr}>\n\t<label locale='" . $locale_base . $name . "' />\n</{$tag}>"; } else { // encoding special chars $content .= "\n\n<{$tag} ref=\"{$name}\"{$attr}>\n\t<label>" . htmlspecialchars($property->comment) . "</label>\n</{$tag}>"; } } else { if ($input->getOption('createlocales')) { $locale_content .= 'form.' . $name . '=' . ucwords(str_replace('_', ' ', $name)) . "\n"; $content .= "\n\n<{$tag} ref=\"{$name}\"{$attr}>\n\t<label locale='" . $locale_base . $name . "' />\n</{$tag}>"; } else { $content .= "\n\n<{$tag} ref=\"{$name}\"{$attr}>\n\t<label>" . ucwords(str_replace('_', ' ', $name)) . "</label>\n</{$tag}>"; } } } if ($input->getOption('createlocales')) { $locale_content .= "form.ok=OK\n"; $this->createFile($path . $locale_filename_fr, 'module/locales.tpl', array('content' => $locale_content), "Locales file"); $this->createFile($path . $locale_filename_en, 'module/locales.tpl', array('content' => $locale_content), "Locales file"); } $this->createFile($formdir . $formfile, 'module/form.xml.tpl', array('content' => $content . $submit), "Form file"); }