ModuleCode.php
2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<?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);
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;
}
}