94 lines
2.1 KiB
PHP
94 lines
2.1 KiB
PHP
<?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)==='.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;
|
|
}
|
|
} |