22 private $views=[
"index"=>
"@framework/crud/index.html",
"form"=>
"@framework/crud/form.html",
"display"=>
"@framework/crud/display.html"];
24 abstract protected function _createMethod($access,$name,$parameters=
"",$return=
"",$content=
"",$comment=
"");
26 abstract protected function _createClass($template,$classname,$namespace,$uses,$extendsOrImplements,$classContent);
30 abstract protected function _createController($controllerName,$variables=[],$ctrlTemplate=
'controller.tpl',$hasView=
false,$jsCallback=
"");
36 $resources=\array_combine($resources, $resources);
37 $resourcesList=$this->jquery->semantic()->htmlDropdown(
"resources-list",
"",$resources);
38 $resourcesList->asSelect(
"crud-model");
39 $viewList=$this->jquery->semantic()->htmlDropdown(
"view-list",
"",$this->views);
40 $viewList->asSelect(
"crud-views",
true);
41 $viewList->setDefaultText(
"Select views");
42 $viewList->setProperty(
"style",
"display: none;");
43 $frm=$this->jquery->semantic()->htmlForm(
"crud-controller-frm");
44 $frm->addExtraFieldRule(
"crud-model",
"exactCount[1]");
45 $frm->addExtraFieldRules(
"crud-name", [
"empty",[
"checkController",
"Controller {value} already exists!"]]);
46 $this->jquery->exec(Rule::ajax($this->jquery,
"checkController", $this->
_getAdminFiles()->getAdminBaseRoute() .
"/_controllerExists/crud-name",
"{}",
"result=data.result;",
"postForm", [
"form" =>
"crud-controller-frm" ]),
true);
48 $frm->setValidationParams([
"on"=>
"blur",
"inline"=>
true]);
49 $frm->setSubmitParams($this->
_getAdminFiles()->getAdminBaseRoute().
"/addCrudController",
"#frm");
50 $this->jquery->change(
"#ck-add-route",
"$('#div-new-route').toggle($(this).is(':checked'));");
51 $this->jquery->jsonOn(
"change",
"#ck-add-route", $this->
_getAdminFiles()->getAdminBaseRoute() .
"/_addCRUDRoute",
"post", [
"context" =>
"$('#crud-controller-frm')",
"params" =>
"$('#crud-controller-frm').serialize()",
"jsCondition" =>
"$('#ck-add-route').is(':checked')" ]);
53 $this->jquery->click(
"#validate-btn",
'$("#crud-controller-frm").form("submit");');
54 $this->jquery->execOn(
"click",
"#cancel-btn",
'$("#frm").html("");');
55 $this->jquery->exec(
"$('#crud-viewer-ck').checkbox();",
true);
56 $this->jquery->exec(
"$('#crud-events-ck').checkbox();",
true);
57 $this->jquery->exec(
"$('#ck-add-route').checkbox();",
true);
60 $this->jquery->exec(
'$("#crud-files-ck").checkbox({onChange:function(){ $("#view-list").toggle($("#crud-files-ck").checkbox("is checked"));}});',
true);
69 $controller=
"\\".$_POST[
"crud-name"];
71 $result[
"route-path"]=$controller;
72 echo json_encode($result);
78 $route=
"";$routeName=
"";
83 $crudControllerName=ucfirst($_POST[
"crud-name"]);
84 $routeName=$crudControllerName;
86 $this->
_createMethod(
"public",
"__construct",
"",
"",
"\n\t\tparent::__construct();\n\$this->model=\"{$resource}\";");
87 if(isset($_POST[
"crud-viewer"])){
88 $uses[]=
"use controllers\\crud\\viewers\\{$crudControllerName}Viewer;";
89 $uses[]=
"use Ubiquity\\controllers\\admin\\viewers\\ModelViewer;";
91 $classContent.=$this->
_createMethod(
"protected",
"getModelViewer",
"",
": ModelViewer",
"\n\t\treturn new {$crudControllerName}Viewer(\$this);");
94 if(isset($_POST[
"crud-events"])){
95 $uses[]=
"use controllers\\crud\\events\\{$crudControllerName}Events;";
96 $uses[]=
"use Ubiquity\\controllers\\crud\\CRUDEvents;";
98 $classContent.=$this->
_createMethod(
"protected",
"getEvents",
"",
": CRUDEvents",
"\n\t\treturn new {$crudControllerName}Events();");
102 if(isset($_POST[
"crud-files"])){
103 $uses[]=
"use controllers\\crud\\files\\{$crudControllerName}Files;";
104 $uses[]=
"use Ubiquity\\controllers\\crud\\CRUDFiles;";
105 $classContent.=$this->
_createMethod(
"protected",
"getFiles",
"",
": CRUDFiles",
"\n\t\treturn new {$crudControllerName}Files();");
106 $crudFiles=$_POST[
"crud-views"];
107 $crudFiles=explode(
",", $crudFiles);
108 $classFilesContent=[];
109 foreach ($crudFiles as $file){
110 if(isset($this->views[$file])){
111 $frameworkViewname=$this->views[$file];
112 $this->
createCrudView($frameworkViewname,$crudControllerName, $file);
113 $classFilesContent[]=$this->
_createMethod(
"public",
"getView".ucfirst($file),
"",
"",
"\n\t\treturn \"".$crudControllerName.
"/".$file.
".html\";");
118 if(isset($_POST[
"ck-add-route"])){
119 $route=$_POST[
"route-path"];
125 $route=
"\n * @route(\"{$route}\",\"inherited\"=>true,\"automated\"=>true)";
128 $uses=implode(
"\n", $uses);
129 $messages[]=$this->
_createController($crudControllerName,[
"%routeName%"=>$routeName,
"%route%"=>$route,
"%resource%"=>$resource,
"%uses%"=>$uses,
"%namespace%"=>$controllerNS,
"%baseClass%"=>
"\\Ubiquity\\controllers\\crud\\CRUDController",
"%content%"=>$classContent],
"crudController.tpl");
130 echo implode(
"", $messages);
131 $this->jquery->get($this->
_getAdminFiles()->getAdminBaseRoute() .
"/_refreshControllers/refresh",
"#dtControllers", [
"jqueryDone" =>
"replaceWith",
"hasLoader" =>
false,
"dataType" =>
"html" ]);
132 echo $this->jquery->compile($this->view);
138 $uses=
"\nuse Ubiquity\\controllers\\admin\\viewers\\ModelViewer;";
139 return $this->
_createClass(
"class.tpl", $crudControllerName.
"Viewer", $ns, $uses,
"extends ModelViewer",
"\t//use override/implement Methods");
144 $uses=
"\nuse Ubiquity\\controllers\\crud\\CRUDEvents;";
145 return $this->
_createClass(
"class.tpl", $crudControllerName.
"Events", $ns, $uses,
"extends CRUDEvents",
"\t//use override/implement Methods");
150 $uses=
"\nuse Ubiquity\\controllers\\crud\\CRUDFiles;";
151 return $this->
_createClass(
"class.tpl", $crudControllerName.
"Files", $ns, $uses,
"extends CRUDFiles", $classContent);
155 $folder=ROOT . DS .
"views" . DS .$controllerName;
157 $blocks=$this->view->getBlockNames($frameworkName);
158 $content=[
"{% extends \"".$frameworkName.
"\" %}\n"];
159 foreach ($blocks as $blockname){
160 $content[]=
"{% block ".$blockname.
" %}\n\t{{ parent() }}\n{% endblock %}\n";
createCrudView($frameworkName, $controllerName, $newName)
static isPost()
Returns true if the request is sent by the POST method.
_createClass($template, $classname, $namespace, $uses, $extendsOrImplements, $classContent)
static asJSON()
Sets the response content-type to application/json.
createCRUDFilesClass($crudControllerName, $classContent="")
createEventsClass($crudControllerName)
static doubleBackSlashes($value)
static getModels(&$config, $silent=false)
static getNS($part="controllers")
_createMethod($access, $name, $parameters="", $return="", $content="", $comment="")
createModelViewerClass($crudControllerName)
_createController($controllerName, $variables=[], $ctrlTemplate='controller.tpl', $hasView=false, $jsCallback="")
static getClassSimpleName($classnameWithNamespace)
static startswith($hay, $needle)
static save($filename, $content, $flags=LOCK_EX)