diff options
Diffstat (limited to 'framework/gii/generators/module/ModuleCode.php')
| -rw-r--r-- | framework/gii/generators/module/ModuleCode.php | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/framework/gii/generators/module/ModuleCode.php b/framework/gii/generators/module/ModuleCode.php new file mode 100644 index 0000000..4fb90f0 --- /dev/null +++ b/framework/gii/generators/module/ModuleCode.php @@ -0,0 +1,91 @@ +<?php + +class ModuleCode extends CCodeModel +{ + public $moduleID; + + public function rules() + { + return array_merge(parent::rules(), array( + array('moduleID', 'filter', 'filter'=>'trim'), + array('moduleID', 'required'), + array('moduleID', 'match', 'pattern'=>'/^\w+$/', 'message'=>'{attribute} should only contain word characters.'), + )); + } + + public function attributeLabels() + { + return array_merge(parent::attributeLabels(), array( + 'moduleID'=>'Module ID', + )); + } + + public function successMessage() + { + if(Yii::app()->hasModule($this->moduleID)) + return 'The module has been generated successfully. You may '.CHtml::link('try it now', Yii::app()->createUrl($this->moduleID), array('target'=>'_blank')).'.'; + + $output=<<<EOD +<p>The module has been generated successfully.</p> +<p>To access the module, you need to modify the application configuration as follows:</p> +EOD; + $code=<<<EOD +<?php +return array( + 'modules'=>array( + '{$this->moduleID}', + ), + ...... +); +EOD; + + return $output.highlight_string($code,true); + } + + public function prepare() + { + $this->files=array(); + $templatePath=$this->templatePath; + $modulePath=$this->modulePath; + $moduleTemplateFile=$templatePath.DIRECTORY_SEPARATOR.'module.php'; + + $this->files[]=new CCodeFile( + $modulePath.'/'.$this->moduleClass.'.php', + $this->render($moduleTemplateFile) + ); + + $files=CFileHelper::findFiles($templatePath,array( + 'exclude'=>array('.svn'), + )); + + foreach($files as $file) + { + if($file!==$moduleTemplateFile) + { + if(CFileHelper::getExtension($file)==='php') + $content=$this->render($file); + else if(basename($file)==='.yii') // an empty directory + { + $file=dirname($file); + $content=null; + } + else + $content=file_get_contents($file); + $this->files[]=new CCodeFile( + $modulePath.substr($file,strlen($templatePath)), + $content + ); + } + } + } + + public function getModuleClass() + { + return ucfirst($this->moduleID).'Module'; + } + + public function getModulePath() + { + return Yii::app()->modulePath.DIRECTORY_SEPARATOR.$this->moduleID; + } +}
\ No newline at end of file |
