'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=<<The module has been generated successfully.

To access the module, you need to modify the application configuration as follows:

EOD; $code=<<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', '.gitignore' ), )); foreach($files as $file) { if($file!==$moduleTemplateFile) { if(CFileHelper::getExtension($file)==='php') $content=$this->render($file); elseif(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; } }