Source of file Vision6FieldFactory.php
Size: 7,461 Bytes - Last Modified: 2021-12-23T10:38:15+00:00
/var/www/docs.ssmods.com/process/src/code/Vision6FieldFactory.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 | <?php /** * Class Vision6FieldFactory * * @author Reece Alexander <reece@steadlane.com.au> */ class Vision6FieldFactory extends Object { /** @var Vision6List */ protected $list; /** * @param Vision6List|DataObject|int $listOrId * * @return $this */ public function setList($listOrId) { if (!($listOrId instanceof Vision6List)) { $listFetch = Vision6List::get() ->filter( array( 'ListID' => (int)$listOrId ) ) ->first(); if (!$listFetch) { user_error( _t( 'Vision6.LIST_NOT_FOUND', 'The list with ID {list_id} could not be found, have you synced your lists yet?', '', array( 'list_id' => $listOrId ) ), E_USER_ERROR ); } $listOrId = $listFetch; } $this->list = $listOrId; return $this; } /** * @return FieldList */ public function build() { if (!($this->list instanceof Vision6List)) { user_error( _t( 'Vision6.LIST_NOT_SET', 'You must set the list with setList() before calling generateFields()' ), E_USER_ERROR ); } $fields = FieldList::create(HiddenField::create("ListID")->setAttribute("value", $this->list->ListID)); foreach ($this->list->Fields() as $field) { switch ($field->Type) { case "text": { if ($field->Name == 'Email') { $fields->push($this->emailFieldFor($field)); break; } $fields->push($this->textFieldFor($field)); } break; case "comment": { $fields->push($this->getTextareaFieldFor($field)); } break; case "checkbox": { if (strstr($field->ValuesArray, ",")) { // has multiple $fields->push($this->checkboxSetFor($field)); break; } $fields->push($this->getCheckboxFieldFor($field)); } break; } } return $fields; } /** * Handles text fields * * @param \Vision6Field $field * * @return TextField */ public function textFieldFor(Vision6Field $field) { if ($field->Type != "text") { throw new \RuntimeException("Field \"{$field->Name}\" is a {$field->Type} field but was provided to _textFieldFor()"); } $ssObj = TextField::create($field->Name, $field->Name, $field->DefaultValue); $this->handleAttributes($field, $ssObj); return $ssObj; } /** * Handles text fields that are of Email type * * @param Vision6Field $field * * @return Vision6EmailField */ public function emailFieldFor(Vision6Field $field) { if ($field->Type != "text") { user_error("Field \"{$field->Name}\" is a {$field->Type} field but was provided to ::emailFieldFor()", E_USER_ERROR); } $ssObj = Vision6EmailField::create($field->Name, $field->Name)->addExtraClass('text'); $this->handleAttributes($field, $ssObj); return $ssObj; } /** * Handles groups of checkboxes * * @param Vision6Field $field * * @return CheckboxSetField */ public function checkboxSetFor(Vision6Field $field) { if ($field->Type != "checkbox") { user_error("Field \"{$field->Name}\" is a {$field->Type} field but was provided to ::checkboxSetFor()", E_USER_ERROR); } if (!strstr($field->ValuesArray, ",")) { user_error("Field \"{$field->Name}\" is a singular checkbox but was provided to ::checkboxSetFor()", E_USER_ERROR); } $values = explode(",", $field->ValuesArray); $valuesArray = array(); foreach ($values as $value) { $valuesArray[$value] = $value; } $ssObj = CheckboxSetField::create($field->Name, $field->Name, $valuesArray); $this->handleAttributes($field, $ssObj); return $ssObj; } /** * Handles singular checkboxes * * @param \Vision6Field $field * * @return CheckboxField */ public function getCheckboxFieldFor(Vision6Field $field) { if ($field->Type != "checkbox") { user_error("Field \"{$field->Name}\" is a {$field->Type} field but was provided to ::checkboxFieldFor()", E_USER_ERROR); } if (strstr($field->ValuesArray, ",")) { user_error("Field \"{$field->Name}\" has multiple checkboxes but was provided to ::checkboxFieldFor()", E_USER_ERROR); } $ssObj = CheckboxField::create($field->Name, $field->Name); $this->handleAttributes($field, $ssObj); return $ssObj; } /** * Handles textarea/comment field creation * * @param Vision6Field $field * * @return TextareaField */ public function getTextareaFieldFor(Vision6Field $field) { if ($field->Type != "comment") { user_error("Field \"{$field->Name}\" is a {$field->Type} field but was provided to ::textareaFieldFor()", E_USER_ERROR); } $ssObj = TextareaField::create($field->Name, $field->Name); $this->handleAttributes($field, $ssObj); return $ssObj; } /** * Handles dropdown fields * * @param Vision6Field $field * * @return DropdownField */ public function getDropdownFieldFor(Vision6Field $field) { // havn't found a need for this yet } /** * Handles attributes required for each field such as mandatory, max length etc * * @param Vision6Field $field * @param FormField|EmailField $ssObj */ public function handleAttributes(Vision6Field $field, &$ssObj) { if ($field->Length) { $ssObj->setAttribute("maxlength", $field->Length); } } /** * @return RequiredFields|Validator */ public function getRequiredValidator() { $required = array(); foreach ($this->list->Fields() as $field) { if ((int)$field->IsMandatory) { $required[] = $field->Name; } } return RequiredFields::create($required); } /** * Adds a session message * * @param $listId * @param $message */ public function addSessionMessageFor($listId, $message) { $jar = Vision6::singleton()->getSession(); $jar[$listId] = $message; Vision6::singleton()->setSession($jar); } public function getSessionMessage($listId) { $jar = Vision6::singleton()->getSession(); $result = (isset($jar[$listId])) ? $jar[$listId] : false; $jar[$listId] = false; Vision6::singleton()->setSession($jar); return $result; } } |