From d83c004fb9a3f864037804ccb1e9726000293e16 Mon Sep 17 00:00:00 2001 From: Naomi Date: Mon, 12 Aug 2013 15:06:26 -0400 Subject: [PATCH] subclassing the template types, files summary table is now fully configurable form wise. --- .../controllers/PlayouthistoryController.php | 12 +- airtime_mvc/application/forms/EditHistory.php | 211 +++++++++++++++++ .../application/forms/EditHistoryFile.php | 89 +------- .../application/forms/EditHistoryItem.php | 212 +----------------- .../application/services/HistoryService.php | 97 +++++--- .../scripts/form/edit-history-file.phtml | 40 +++- .../js/airtime/playouthistory/historytable.js | 8 +- 7 files changed, 345 insertions(+), 324 deletions(-) create mode 100644 airtime_mvc/application/forms/EditHistory.php diff --git a/airtime_mvc/application/controllers/PlayouthistoryController.php b/airtime_mvc/application/controllers/PlayouthistoryController.php index f9435e740..aa3e3c38e 100644 --- a/airtime_mvc/application/controllers/PlayouthistoryController.php +++ b/airtime_mvc/application/controllers/PlayouthistoryController.php @@ -6,14 +6,14 @@ class PlayouthistoryController extends Zend_Controller_Action { $ajaxContext = $this->_helper->getHelper('AjaxContext'); $ajaxContext - ->addActionContext('aggregate-history-feed', 'json') + ->addActionContext('file-history-feed', 'json') ->addActionContext('item-history-feed', 'json') - ->addActionContext('edit-aggregate-item', 'json') + ->addActionContext('edit-file-item', 'json') ->addActionContext('create-list-item', 'json') ->addActionContext('edit-list-item', 'json') ->addActionContext('delete-list-item', 'json') ->addActionContext('update-list-item', 'json') - ->addActionContext('update-aggregate-item', 'json') + ->addActionContext('update-file-item', 'json') ->addActionContext('create-template', 'json') ->addActionContext('update-template', 'json') ->addActionContext('delete-template', 'json') @@ -79,7 +79,7 @@ class PlayouthistoryController extends Zend_Controller_Action $this->view->headScript()->appendScript($script); } - public function aggregateHistoryFeedAction() + public function fileHistoryFeedAction() { try { $request = $this->getRequest(); @@ -136,7 +136,7 @@ class PlayouthistoryController extends Zend_Controller_Action } } - public function editAggregateItemAction() + public function editFileItemAction() { $file_id = $this->_getParam('id'); @@ -209,7 +209,7 @@ class PlayouthistoryController extends Zend_Controller_Action } } - public function updateAggregateItemAction() + public function updateFileItemAction() { $request = $this->getRequest(); $params = $request->getPost(); diff --git a/airtime_mvc/application/forms/EditHistory.php b/airtime_mvc/application/forms/EditHistory.php new file mode 100644 index 000000000..5c61a1125 --- /dev/null +++ b/airtime_mvc/application/forms/EditHistory.php @@ -0,0 +1,211 @@ + array( + "class" => "Zend_Form_Element_Text", + "attrs" => array( + "class" => self::TEXT_INPUT_CLASS + ), + "validators" => array( + array( + "class" => "Zend_Validate_Date", + "params" => array( + "format" => self::VALIDATE_DATE_FORMAT + ) + ) + ), + "filters" => array( + "StringTrim" + ) + ), + TEMPLATE_TIME => array( + "class" => "Zend_Form_Element_Text", + "attrs" => array( + "class" => self::TEXT_INPUT_CLASS + ), + "validators" => array( + array( + "class" => "Zend_Validate_Date", + "params" => array( + "format" => self::VALIDATE_TIME_FORMAT + ) + ) + ), + "filters" => array( + "StringTrim" + ) + ), + TEMPLATE_DATETIME => array( + "class" => "Zend_Form_Element_Text", + "attrs" => array( + "class" => self::TEXT_INPUT_CLASS + ), + "validators" => array( + array( + "class" => "Zend_Validate_Date", + "params" => array( + "format" => self::VALIDATE_DATETIME_FORMAT + ) + ) + ), + "filters" => array( + "StringTrim" + ) + ), + TEMPLATE_STRING => array( + "class" => "Zend_Form_Element_Text", + "attrs" => array( + "class" => self::TEXT_INPUT_CLASS + ), + "filters" => array( + "StringTrim" + ) + ), + TEMPLATE_BOOLEAN => array( + "class" => "Zend_Form_Element_Checkbox", + "validators" => array( + array( + "class" => "Zend_Validate_InArray", + "options" => array( + "haystack" => array(0,1) + ) + ) + ) + ), + TEMPLATE_INT => array( + "class" => "Zend_Form_Element_Text", + "validators" => array( + array( + "class" => "Zend_Validate_Int", + ) + ), + "attrs" => array( + "class" => self::TEXT_INPUT_CLASS + ) + ), + TEMPLATE_FLOAT => array( + "class" => "Zend_Form_Element_Text", + "attrs" => array( + "class" => self::TEXT_INPUT_CLASS + ), + "validators" => array( + array( + "class" => "Zend_Validate_Float", + ) + ) + ), + ); + + public function init() { + + $history_id = new Zend_Form_Element_Hidden($this::ID_PREFIX.'id'); + $history_id->setValidators(array( + new Zend_Validate_Int() + )); + $history_id->setDecorators(array('ViewHelper')); + $this->addElement($history_id); + + $dynamic_attrs = new Zend_Form_SubForm(); + $this->addSubForm($dynamic_attrs, $this::ID_PREFIX.'template'); + + // Add the submit button + $this->addElement('button', $this::ID_PREFIX.'save', array( + 'ignore' => true, + 'class' => 'btn '.$this::ID_PREFIX.'save', + 'label' => _('Save'), + 'decorators' => array( + 'ViewHelper' + ) + )); + + // Add the cancel button + $this->addElement('button', $this::ID_PREFIX.'cancel', array( + 'ignore' => true, + 'class' => 'btn '.$this::ID_PREFIX.'cancel', + 'label' => _('Cancel'), + 'decorators' => array( + 'ViewHelper' + ) + )); + } + + public function createFromTemplate($template, $required) { + + $templateSubForm = $this->getSubForm($this::ID_PREFIX.'template'); + + for ($i = 0, $len = count($template); $i < $len; $i++) { + + $item = $template[$i]; + //don't dynamically add this as it should be included in the + //init() function already if it should show up in the UI.. + if (in_array($item["name"], $required)) { + continue; + } + + $formElType = $this->formElTypes[$item[self::ITEM_TYPE]]; + + $label = $item[self::ITEM_ID_SUFFIX]; + $id = $this::ID_PREFIX.$label; + $el = new $formElType[self::ITEM_CLASS]($id); + $el->setLabel($item["label"]); + + if (isset($formElType["attrs"])) { + + $attrs = $formElType["attrs"]; + + foreach ($attrs as $key => $value) { + $el->setAttrib($key, $value); + } + } + + if (isset($formElType["filters"])) { + + $filters = $formElType["filters"]; + + foreach ($filters as $filter) { + $el->addFilter($filter); + } + } + + if (isset($formElType["validators"])) { + + $validators = $formElType["validators"]; + + foreach ($validators as $index => $arr) { + $options = isset($arr[self::ITEM_OPTIONS]) ? $arr[self::ITEM_OPTIONS] : null; + $validator = new $arr[self::ITEM_CLASS]($options); + + //extra validator info + if (isset($arr["params"])) { + + foreach ($arr["params"] as $key => $value) { + $method = "set".ucfirst($key); + $validator->$method($value); + } + } + + $el->addValidator($validator); + } + } + + $el->setDecorators(array('ViewHelper')); + $templateSubForm->addElement($el); + } + } +} \ No newline at end of file diff --git a/airtime_mvc/application/forms/EditHistoryFile.php b/airtime_mvc/application/forms/EditHistoryFile.php index 315033174..22bf1f24d 100644 --- a/airtime_mvc/application/forms/EditHistoryFile.php +++ b/airtime_mvc/application/forms/EditHistoryFile.php @@ -1,91 +1,22 @@ setDecorators( array( array('ViewScript', array('viewScript' => 'form/edit-history-file.phtml')) ) ); - */ - - $this->setMethod('post'); - - - $file_id = new Zend_Form_Element_Hidden('his_file_id'); - $file_id->setValidators(array( - new Zend_Validate_Int() - )); - $this->addElement($file_id); - - - /* Title form element */ - $title = new Zend_Form_Element_Text('his_file_title'); - $title->setLabel(_('Title:')); - $title->setAttrib('class', 'input_text'); - $title->addFilter('StringTrim'); - //$title->setDecorators(array('viewHelper')); - $this->addElement($title); - - /* Creator form element */ - $creator = new Zend_Form_Element_Text('his_file_creator'); - $creator->setLabel(_('Creator:')); - $creator->setAttrib('class', 'input_text'); - $creator->addFilter('StringTrim'); - //$creator->setDecorators(array('viewHelper')); - $this->addElement($creator); - - /* Composer form element */ - $composer = new Zend_Form_Element_Text('his_file_composer'); - $composer->setLabel(_('Composer:')); - $composer->setAttrib('class', 'input_text'); - $composer->addFilter('StringTrim'); - //$composer->setDecorators(array('viewHelper')); - $this->addElement($composer); - - /* Copyright form element */ - $copyright = new Zend_Form_Element_Text('his_file_copyright'); - $copyright->setLabel(_('Copyright:')); - $copyright->setAttrib('class', 'input_text'); - $copyright->addFilter('StringTrim'); - //$copyright->setDecorators(array('viewHelper')); - $this->addElement($copyright); - - // Add the submit button - $this->addElement('button', 'his_file_save', array( - 'ignore' => true, - 'class' => 'btn his_file_save', - 'label' => _('Save'), - 'decorators' => array( - 'ViewHelper' - ) - )); - - // Add the cancel button - $this->addElement('button', 'his_file_cancel', array( - 'ignore' => true, - 'class' => 'btn his_file_cancel', - 'label' => _('Cancel'), - 'decorators' => array( - 'ViewHelper' - ) - )); - - $this->addDisplayGroup( - array( - 'his_file_save', - 'his_file_cancel' - ), - 'submitButtons', - array( - 'decorators' => array( - 'FormElements', - 'DtDdWrapper' - ) - ) - ); + } + + public function createFromTemplate($template, $required) { + + parent::createFromTemplate($template, $required); } } \ No newline at end of file diff --git a/airtime_mvc/application/forms/EditHistoryItem.php b/airtime_mvc/application/forms/EditHistoryItem.php index b8ac03257..f0389eb8a 100644 --- a/airtime_mvc/application/forms/EditHistoryItem.php +++ b/airtime_mvc/application/forms/EditHistoryItem.php @@ -1,133 +1,18 @@ array( - "class" => "Zend_Form_Element_Text", - "attrs" => array( - "class" => self::TEXT_INPUT_CLASS - ), - "validators" => array( - array( - "class" => "Zend_Validate_Date", - "params" => array( - "format" => self::VALIDATE_DATE_FORMAT - ) - ) - ), - "filters" => array( - "StringTrim" - ) - ), - TEMPLATE_TIME => array( - "class" => "Zend_Form_Element_Text", - "attrs" => array( - "class" => self::TEXT_INPUT_CLASS - ), - "validators" => array( - array( - "class" => "Zend_Validate_Date", - "params" => array( - "format" => self::VALIDATE_TIME_FORMAT - ) - ) - ), - "filters" => array( - "StringTrim" - ) - ), - TEMPLATE_DATETIME => array( - "class" => "Zend_Form_Element_Text", - "attrs" => array( - "class" => self::TEXT_INPUT_CLASS - ), - "validators" => array( - array( - "class" => "Zend_Validate_Date", - "params" => array( - "format" => self::VALIDATE_DATETIME_FORMAT - ) - ) - ), - "filters" => array( - "StringTrim" - ) - ), - TEMPLATE_STRING => array( - "class" => "Zend_Form_Element_Text", - "attrs" => array( - "class" => self::TEXT_INPUT_CLASS - ), - "filters" => array( - "StringTrim" - ) - ), - TEMPLATE_BOOLEAN => array( - "class" => "Zend_Form_Element_Checkbox", - "validators" => array( - array( - "class" => "Zend_Validate_InArray", - "options" => array( - "haystack" => array(0,1) - ) - ) - ) - ), - TEMPLATE_INT => array( - "class" => "Zend_Form_Element_Text", - "validators" => array( - array( - "class" => "Zend_Validate_Int", - ) - ), - "attrs" => array( - "class" => self::TEXT_INPUT_CLASS - ) - ), - TEMPLATE_FLOAT => array( - "class" => "Zend_Form_Element_Text", - "attrs" => array( - "class" => self::TEXT_INPUT_CLASS - ), - "validators" => array( - array( - "class" => "Zend_Validate_Float", - ) - ) - ), - ); - public function init() { + + parent::init(); $this->setDecorators(array( 'PrepareElements', array('ViewScript', array('viewScript' => 'form/edit-history-item.phtml')) )); - $history_id = new Zend_Form_Element_Hidden(self::ID_PREFIX.'id'); - $history_id->setValidators(array( - new Zend_Validate_Int() - )); - $history_id->setDecorators(array('ViewHelper')); - $this->addElement($history_id); - $starts = new Zend_Form_Element_Text(self::ID_PREFIX.'starts'); $starts->setValidators(array( new Zend_Validate_Date(self::VALIDATE_DATETIME_FORMAT) @@ -151,95 +36,10 @@ class Application_Form_EditHistoryItem extends Zend_Form $ends->setDecorators(array('ViewHelper')); $ends->setRequired(true); $this->addElement($ends); - - $dynamic_attrs = new Zend_Form_SubForm(); - $this->addSubForm($dynamic_attrs, self::ID_PREFIX.'template'); - - // Add the submit button - $this->addElement('button', 'his_item_save', array( - 'ignore' => true, - 'class' => 'btn his_item_save', - 'label' => _('Save'), - 'decorators' => array( - 'ViewHelper' - ) - )); - - // Add the cancel button - $this->addElement('button', 'his_item_cancel', array( - 'ignore' => true, - 'class' => 'btn his_item_cancel', - 'label' => _('Cancel'), - 'decorators' => array( - 'ViewHelper' - ) - )); - } - - public function createFromTemplate($template, $required) { - - $templateSubForm = $this->getSubForm(self::ID_PREFIX.'template'); - - for ($i = 0, $len = count($template); $i < $len; $i++) { - - $item = $template[$i]; - //don't dynamically add this as it should be included in the init() function already. - if (in_array($item["name"], $required)) { - continue; - } - - $formElType = $this->formElTypes[$item[self::ITEM_TYPE]]; - - $label = $item[self::ITEM_ID_SUFFIX]; - $id = self::ID_PREFIX.$label; - $el = new $formElType[self::ITEM_CLASS]($id); - $el->setLabel($item["label"]); - - if (isset($formElType["attrs"])) { - - $attrs = $formElType["attrs"]; - - foreach ($attrs as $key => $value) { - $el->setAttrib($key, $value); - } - } - - if (isset($formElType["filters"])) { - - $filters = $formElType["filters"]; - - foreach ($filters as $filter) { - $el->addFilter($filter); - } - } - - if (isset($formElType["validators"])) { - - $validators = $formElType["validators"]; - - foreach ($validators as $index => $arr) { - $options = isset($arr[self::ITEM_OPTIONS]) ? $arr[self::ITEM_OPTIONS] : null; - $validator = new $arr[self::ITEM_CLASS]($options); - - //extra validator info - if (isset($arr["params"])) { - - foreach ($arr["params"] as $key => $value) { - $method = "set".ucfirst($key); - $validator->$method($value); - } - } - - $el->addValidator($validator); - } - } - - $el->setDecorators(array('ViewHelper')); - $templateSubForm->addElement($el); - } } - public function fillFields() { - + public function createFromTemplate($template, $required) { + + parent::createFromTemplate($template, $required); } } \ No newline at end of file diff --git a/airtime_mvc/application/services/HistoryService.php b/airtime_mvc/application/services/HistoryService.php index a4e34e6c8..6ddd136f6 100644 --- a/airtime_mvc/application/services/HistoryService.php +++ b/airtime_mvc/application/services/HistoryService.php @@ -517,17 +517,30 @@ class Application_Service_HistoryService try { $form = new Application_Form_EditHistoryFile(); + $template = $this->getConfiguredFileTemplate(); + $required = $this->mandatoryFileFields(); + $form->createFromTemplate($template["fields"], $required); $file = Application_Model_StoredFile::RecallById($id, $this->con); $md = $file->getDbColMetadata(); - - $form->populate(array( - 'his_file_id' => $id, - 'his_file_title' => $md[MDATA_KEY_TITLE], - 'his_file_creator' => $md[MDATA_KEY_CREATOR], - 'his_file_composer' => $md[MDATA_KEY_COMPOSER], - 'his_file_copyright' => $md[MDATA_KEY_COPYRIGHT] - )); + + $prefix = Application_Form_EditHistoryFile::ID_PREFIX; + $formValues = array(); + $formValues["{$prefix}id"] = $id; + + foreach($template["fields"] as $index => $field) { + + $key = $field["name"]; + + if (in_array($key, $required)) { + continue; + } + + $value = $md[$key]; + $formValues["$prefix{$key}"] = $value; + } + + $form->populate($formValues); return $form; } @@ -536,6 +549,35 @@ class Application_Service_HistoryService throw $e; } } + + public function populateTemplateFile($values, $id) { + + $this->con->beginTransaction(); + + try { + + $file = Application_Model_StoredFile::RecallById($id, $this->con); + + $prefix = Application_Form_EditHistoryFile::ID_PREFIX; + $prefix_len = strlen($prefix); + $templateValues = $values[$prefix."template"]; + + $md = array(); + + foreach ($templateValues as $index => $value) { + + $key = substr($index, $prefix_len); + $md[$key] = $value; + } + + $file->setDbColMetadata($md); + $this->con->commit(); + } + catch (Exception $e) { + $this->con->rollback(); + throw $e; + } + } public function populateTemplateItem($values, $id=null) { @@ -627,7 +669,6 @@ class Application_Service_HistoryService $this->con->rollback(); throw $e; } - } public function createPlayedItem($data) { @@ -702,28 +743,32 @@ class Application_Service_HistoryService /* id is an id in cc_files */ public function editPlayedFile($data) { - $this->con->beginTransaction(); - try { - $form = new Application_Form_EditHistoryFile(); + $id = $data["his_file_id"]; + $form = $form = $this->makeHistoryFileForm($id); + $history_id = $form->getElement("his_file_id"); + $history_id->setRequired(true); - $json = $form->processAjax($data); - Logging::info($json); + Logging::info($data); + $json = array(); if ($form->isValid($data)) { + $history_id->setIgnore(true); + $values = $form->getValues(); - $id = $data["his_file_id"]; - $file = Application_Model_StoredFile::RecallById($id, $this->con); - - $md = array( - MDATA_KEY_TITLE => $data['his_file_title'], - MDATA_KEY_CREATOR => $data['his_file_creator'], - MDATA_KEY_COMPOSER => $data['his_file_composer'], - MDATA_KEY_COPYRIGHT => $data['his_file_copyright'] - ); - - $file->setDbColMetadata($md); + Logging::info("edited list item"); + Logging::info($values); + + $this->populateTemplateFile($values, $id); } + else { + $msgs = $form->getMessages(); + Logging::info($msgs); + + $json["error"] = $msgs; + } + + return $json; $this->con->commit(); } @@ -819,7 +864,7 @@ class Application_Service_HistoryService public function mandatoryFileFields() { - $fields = array("played", MDATA_KEY_TITLE, MDATA_KEY_CREATOR); + $fields = array("played"); return $fields; } diff --git a/airtime_mvc/application/views/scripts/form/edit-history-file.phtml b/airtime_mvc/application/views/scripts/form/edit-history-file.phtml index 886790693..83272200c 100644 --- a/airtime_mvc/application/views/scripts/form/edit-history-file.phtml +++ b/airtime_mvc/application/views/scripts/form/edit-history-file.phtml @@ -1,3 +1,37 @@ -
- form; ?> -
\ No newline at end of file +
+element ?> + +
+ + +
+ getElement($name); ?> +
+ +getSubForm('his_file_template') as $index=>$el): ?> + getName(); ?> + +
+ +
+
+ + hasErrors()): ?> +
    + getMessages() as $error): ?> +
  • + +
+ +
+ + +
+ +getElement($name); ?> + +
+ +
+ +
\ No newline at end of file diff --git a/airtime_mvc/public/js/airtime/playouthistory/historytable.js b/airtime_mvc/public/js/airtime/playouthistory/historytable.js index 0f35a7005..c3bcce898 100644 --- a/airtime_mvc/public/js/airtime/playouthistory/historytable.js +++ b/airtime_mvc/public/js/airtime/playouthistory/historytable.js @@ -99,7 +99,7 @@ var AIRTIME = (function(AIRTIME) { fnRowCallback; fnRowCallback = function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) { - var editUrl = baseUrl+"Playouthistory/edit-aggregate-item/format/json/id/"+aData.file_id; + var editUrl = baseUrl+"Playouthistory/edit-file-item/format/json/id/"+aData.file_id; nRow.setAttribute('url-edit', editUrl); }; @@ -112,7 +112,7 @@ var AIRTIME = (function(AIRTIME) { "bProcessing": true, "bServerSide": true, - "sAjaxSource": baseUrl+"playouthistory/aggregate-history-feed", + "sAjaxSource": baseUrl+"playouthistory/file-history-feed", "sAjaxDataProp": "history", "fnServerData": fnServerData, "fnRowCallback": fnRowCallback, @@ -346,12 +346,12 @@ var AIRTIME = (function(AIRTIME) { var $form = $(this).parents("form"); var data = $form.serializeArray(); - var url = baseUrl+"Playouthistory/update-aggregate-item/format/json"; + var url = baseUrl+"Playouthistory/update-file-item/format/json"; $.post(url, data, function(json) { //TODO put errors on form. - if (json.data !== "true") { + if (json.error !== undefined) { //makeHistoryDialog(json.dialog); } else {