/** * Returns the form that this controller uses to manipulate the data stored * in its model. As stated earlier the form is either automatically generated * or it is loaded from an existing file which is located in the same * directory as the model and bears the model's name. * * @return Form */ protected function getForm() { // Load a local form if it exists. if ($this->redirected) { $formName = $this->redirectedPackageName . Application::camelize($this->mainRedirectedPackage) . "Form"; $formPath = $this->redirectPath . "/" . str_replace(".", "/", $this->mainRedirectedPackage) . "/" . $formName . ".php"; } else { $formName = Application::camelize($this->model->package) . "Form"; $formPath = $this->localPath . "/" . $formName . ".php"; } if (is_file($formPath)) { include_once $formPath; $form = new $formName(); } else { if (is_file($this->localPath . "/" . $this->name . "Form.php")) { include_once $this->localPath . "/" . $this->name . "Form.php"; $formclass = $this->name . "Form"; $form = new $formclass(); $form->setModel($this->model); } else { // Generate a form automatically $fieldNames = array(); $fields = $this->model->getFields(); $form = new Form(); $form->setModel($this->model); $names = array_keys($fields); for ($i = 0; $i < count($fields); $i++) { $field = $fields[$names[$i]]; if ($field['key'] == 'primary') { continue; } if ($fieldNames[$i]["renderer"] == "") { if ($field["reference"] == "") { switch ($field["type"]) { case "boolean": $element = new Checkbox($field["label"], $field["name"], $field["description"], 1); break; case "enum": $element = new SelectionList($field["label"], $field["name"]); foreach ($field["options"] as $value => $option) { $element->addOption($option, $value . ""); } break; case "date": case "datetime": $element = new DateField($field["label"], $field["name"]); break; case "integer": case "double": $element = new TextField($field["label"], $field["name"], $field["description"]); $element->setAsNumeric(); break; case "textarea": $element = new TextArea($field["label"], $field["name"], $field["description"]); break; default: $element = new TextField($field["label"], $field["name"], $field["description"]); break; } } else { $element = new ModelField($field["reference"], $field["referenceValue"]); } foreach ($field["validators"] as $validator) { switch ($validator["type"]) { case "required": $element->setRequired(true); break; case "unique": $element->setUnique(true); break; case "regexp": $element->setRegexp((string) $validator["parameter"]); break; } } } else { $renderer = (string) $fieldNames[$i]["renderer"]; $element = new $renderer(); } $form->add($element); } $form->addAttribute("style", "width:50%"); $form->useAjax(true, false); } } return $form; }
private function createDefaultForm() { // Generate a form automatically $fieldNames = array(); $fields = $this->model->getFields(); $form = new Form(); $names = array_keys($fields); for ($i = 0; $i < count($fields); $i++) { $field = $fields[$names[$i]]; if ($field['key'] == 'primary') { continue; } if ($fieldNames[$i]["renderer"] == "") { if ($field["reference"] == "") { switch ($field["type"]) { case "boolean": $element = new Checkbox($field["label"], $field["name"], $field["description"], 1); break; case "enum": $element = new SelectionList($field["label"], $field["name"]); foreach ($field["options"] as $value => $option) { $element->addOption($option, $value . ""); } break; case "date": case "datetime": $element = new DateField($field["label"], $field["name"]); break; case "integer": case "double": $element = new TextField($field["label"], $field["name"], $field["description"]); $element->setAsNumeric(); break; case "textarea": $element = new TextArea($field["label"], $field["name"], $field["description"]); break; default: $element = new TextField($field["label"], $field["name"], $field["description"]); break; } } else { $element = new ModelField($field["reference"], $field["referenceValue"]); } foreach ($field["validators"] as $validator) { switch ($validator["type"]) { case "required": $element->setRequired(true); break; case "unique": $element->setUnique(true); break; case "regexp": $element->setRegexp((string) $validator["parameter"]); break; } } } else { $renderer = (string) $fieldNames[$i]["renderer"]; $element = new $renderer(); } $form->add($element); } $form->addAttribute("style", "width:50%"); $form->useAjax(true, false); return $form; }