summaryrefslogtreecommitdiff
path: root/framework/gii/generators/controller/ControllerCode.php
diff options
context:
space:
mode:
Diffstat (limited to 'framework/gii/generators/controller/ControllerCode.php')
-rw-r--r--framework/gii/generators/controller/ControllerCode.php130
1 files changed, 130 insertions, 0 deletions
diff --git a/framework/gii/generators/controller/ControllerCode.php b/framework/gii/generators/controller/ControllerCode.php
new file mode 100644
index 0000000..6cdc9fd
--- /dev/null
+++ b/framework/gii/generators/controller/ControllerCode.php
@@ -0,0 +1,130 @@
+<?php
+
+class ControllerCode extends CCodeModel
+{
+ public $controller;
+ public $baseClass='Controller';
+ public $actions='index';
+
+ public function rules()
+ {
+ return array_merge(parent::rules(), array(
+ array('controller, actions, baseClass', 'filter', 'filter'=>'trim'),
+ array('controller, baseClass', 'required'),
+ array('controller', 'match', 'pattern'=>'/^\w+[\w+\\/]*$/', 'message'=>'{attribute} should only contain word characters and slashes.'),
+ array('actions', 'match', 'pattern'=>'/^\w+[\w\s,]*$/', 'message'=>'{attribute} should only contain word characters, spaces and commas.'),
+ array('baseClass', 'match', 'pattern'=>'/^[a-zA-Z_]\w*$/', 'message'=>'{attribute} should only contain word characters.'),
+ array('baseClass', 'validateReservedWord', 'skipOnError'=>true),
+ array('baseClass, actions', 'sticky'),
+ ));
+ }
+
+ public function attributeLabels()
+ {
+ return array_merge(parent::attributeLabels(), array(
+ 'baseClass'=>'Base Class',
+ 'controller'=>'Controller ID',
+ 'actions'=>'Action IDs',
+ ));
+ }
+
+ public function requiredTemplates()
+ {
+ return array(
+ 'controller.php',
+ 'view.php',
+ );
+ }
+
+ public function successMessage()
+ {
+ $link=CHtml::link('try it now', Yii::app()->createUrl($this->controller), array('target'=>'_blank'));
+ return "The controller has been generated successfully. You may $link.";
+ }
+
+ public function prepare()
+ {
+ $this->files=array();
+ $templatePath=$this->templatePath;
+
+ $this->files[]=new CCodeFile(
+ $this->controllerFile,
+ $this->render($templatePath.'/controller.php')
+ );
+
+ foreach($this->getActionIDs() as $action)
+ {
+ $this->files[]=new CCodeFile(
+ $this->getViewFile($action),
+ $this->render($templatePath.'/view.php', array('action'=>$action))
+ );
+ }
+ }
+
+ public function getActionIDs()
+ {
+ $actions=preg_split('/[\s,]+/',$this->actions,-1,PREG_SPLIT_NO_EMPTY);
+ $actions=array_unique($actions);
+ sort($actions);
+ return $actions;
+ }
+
+ public function getControllerClass()
+ {
+ if(($pos=strrpos($this->controller,'/'))!==false)
+ return ucfirst(substr($this->controller,$pos+1)).'Controller';
+ else
+ return ucfirst($this->controller).'Controller';
+ }
+
+ public function getModule()
+ {
+ if(($pos=strpos($this->controller,'/'))!==false)
+ {
+ $id=substr($this->controller,0,$pos);
+ if(($module=Yii::app()->getModule($id))!==null)
+ return $module;
+ }
+ return Yii::app();
+ }
+
+ public function getControllerID()
+ {
+ if($this->getModule()!==Yii::app())
+ $id=substr($this->controller,strpos($this->controller,'/')+1);
+ else
+ $id=$this->controller;
+ if(($pos=strrpos($id,'/'))!==false)
+ $id[$pos+1]=strtolower($id[$pos+1]);
+ else
+ $id[0]=strtolower($id[0]);
+ return $id;
+ }
+
+ public function getUniqueControllerID()
+ {
+ $id=$this->controller;
+ if(($pos=strrpos($id,'/'))!==false)
+ $id[$pos+1]=strtolower($id[$pos+1]);
+ else
+ $id[0]=strtolower($id[0]);
+ return $id;
+ }
+
+ public function getControllerFile()
+ {
+ $module=$this->getModule();
+ $id=$this->getControllerID();
+ if(($pos=strrpos($id,'/'))!==false)
+ $id[$pos+1]=strtoupper($id[$pos+1]);
+ else
+ $id[0]=strtoupper($id[0]);
+ return $module->getControllerPath().'/'.$id.'Controller.php';
+ }
+
+ public function getViewFile($action)
+ {
+ $module=$this->getModule();
+ return $module->getViewPath().'/'.$this->getControllerID().'/'.$action.'.php';
+ }
+} \ No newline at end of file