/** * Rewrite resource model * * @param string $originNamespace * @param string $originPath * @param string $path * @param Mtool_Codegen_Entity_Module $module */ public function rewrite($originNamespace, $originPath, $path, Mtool_Codegen_Entity_Module $module) { // Find origin class prefix $resourceModel = $this->lookupOriginEntityClass($originNamespace, $module->findThroughModules('config.xml'), 'resourceModel'); $classPrefix = $this->lookupOriginEntityClass($resourceModel, $module->findThroughModules('config.xml')); // Create own class $originPathSteps = $this->_ucPath(explode('_', $originPath)); $originClassName = implode('_', $originPathSteps); $params = array('original_class_name' => "{$classPrefix}_{$originClassName}"); $className = $this->createClass($path, $this->_rewriteTemplate, $module, $params); //Register rewrite in config $config = new Mtool_Codegen_Config($module->getConfigPath('config.xml')); $config->set("global/{$this->_configNamespace}/{$resourceModel}/rewrite/{$originPath}", $className); }
/** * Create module upgrader * * @param string $name * @param string $mode * @param string $version * @return void */ public function upgrade($name = null, $mode = null, $version = null) { if ($name == null) { $name = $this->_ask('Enter the target module (like Mycompany/Mymodule)'); } if ($mode == null) { $mode = $this->_ask('How to upgrade - to exact version or increment existing? (enter "' . Mtool_Codegen_Entity_Module::UPGRADE_MODE_EXACT . '" or "' . Mtool_Codegen_Entity_Module::UPGRADE_MODE_INCREMENT . '")'); } if ($version == null) { switch ($mode) { case Mtool_Codegen_Entity_Module::UPGRADE_MODE_EXACT: $version = $this->_ask('Enter the module version (like 1.0.0)'); break; case Mtool_Codegen_Entity_Module::UPGRADE_MODE_INCREMENT: $version = $this->_ask('Enter the increment mask (like *.*.1 , * means same value as now)'); break; } } list($companyName, $moduleName) = explode('/', $name); $module = new Mtool_Codegen_Entity_Module(getcwd(), $moduleName, $companyName, $this->_getConfig()); $module->upgrade($mode, $version); $this->_answer('Done'); }
/** * Create class file * * @param string $path in format: class_path_string * @param string $template * @param Mtool_Codegen_Entity_Module $module * @param array $params * @return resulting class name */ public function createClass($path, $template, $module, $params = array()) { $pathSteps = $this->_ucPath(explode('_', $path)); $className = implode('_', $pathSteps); $classFilename = array_pop($pathSteps) . '.php'; // Create class dir under module $classDir = Mtool_Codegen_Filesystem::slash($module->getDir()) . $this->_folderName . DIRECTORY_SEPARATOR . implode(DIRECTORY_SEPARATOR, $pathSteps); Mtool_Codegen_Filesystem::mkdir($classDir); // Move class template file $classTemplate = new Mtool_Codegen_Template($template); $resultingClassName = "{$module->getName()}_{$this->_entityName}_{$className}"; if (strlen('class ' . $resultingClassName) >= self::RECOMMENDED_ZEND_CODING_STANDARD_LINE_LENGTH) { $resultingClassName .= "\n "; } $defaultParams = array('company_name' => $module->getCompanyName(), 'module_name' => $module->getModuleName(), 'class_name' => $resultingClassName, 'year' => date('Y')); $classTemplate->setParams(array_merge($defaultParams, $params, $module->getTemplateParams())); $classTemplate->move($classDir, $classFilename); return $resultingClassName; }