summaryrefslogtreecommitdiff
path: root/framework/gii/generators/module/ModuleCode.php
diff options
context:
space:
mode:
Diffstat (limited to 'framework/gii/generators/module/ModuleCode.php')
-rw-r--r--framework/gii/generators/module/ModuleCode.php91
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