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