AddShowRebroadcastDates.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?php
  2. class Application_Form_AddShowRebroadcastDates extends Zend_Form_SubForm
  3. {
  4. public function init()
  5. {
  6. $this->setDecorators(array(
  7. array('ViewScript', array('viewScript' => 'form/add-show-rebroadcast.phtml'))
  8. ));
  9. $relativeDates = array();
  10. $relativeDates[""] = "";
  11. for ($i=0; $i<=30; $i++) {
  12. $relativeDates["$i days"] = "+$i "._("days");
  13. }
  14. for ($i=1; $i<=10; $i++) {
  15. $select = new Zend_Form_Element_Select("add_show_rebroadcast_date_$i");
  16. $select->setAttrib('class', 'input_select');
  17. $select->setMultiOptions($relativeDates);
  18. $select->setRequired(false);
  19. $select->setDecorators(array('ViewHelper'));
  20. $this->addElement($select);
  21. $text = new Zend_Form_Element_Text("add_show_rebroadcast_time_$i");
  22. $text->setAttrib('class', 'input_text');
  23. $text->addFilter('StringTrim');
  24. $text->addValidator('date', false, array('HH:mm'));
  25. $text->addValidator('regex', false, array('/^[0-2]?[0-9]:[0-5][0-9]$/', 'messages' => _('Invalid character entered')));
  26. $text->setRequired(false);
  27. $text->setDecorators(array('ViewHelper'));
  28. $this->addElement($text);
  29. }
  30. }
  31. public function disable()
  32. {
  33. $elements = $this->getElements();
  34. foreach ($elements as $element) {
  35. if ($element->getType() != 'Zend_Form_Element_Hidden') {
  36. $element->setAttrib('disabled','disabled');
  37. }
  38. }
  39. }
  40. public function isValid($formData) {
  41. if (parent::isValid($formData)) {
  42. return $this->checkReliantFields($formData);
  43. } else {
  44. return false;
  45. }
  46. }
  47. public function checkReliantFields($formData)
  48. {
  49. $noError = true;
  50. for ($i=1; $i<=10; $i++) {
  51. $valid = true;
  52. $days = $formData['add_show_rebroadcast_date_'.$i];
  53. $time = $formData['add_show_rebroadcast_time_'.$i];
  54. if (trim($days) == "" && trim($time) == "") {
  55. continue;
  56. }
  57. if (trim($days) == "") {
  58. $this->getElement('add_show_rebroadcast_date_'.$i)->setErrors(array(_("Day must be specified")));
  59. $valid = false;
  60. }
  61. if (trim($time) == "") {
  62. $this->getElement('add_show_rebroadcast_time_'.$i)->setErrors(array(_("Time must be specified")));
  63. $valid = false;
  64. }
  65. if ($valid === false) {
  66. $noError = false;
  67. continue;
  68. }
  69. $days = explode(" ", $days);
  70. $day = $days[0];
  71. $show_start_time = $formData['add_show_start_date']." ".$formData['add_show_start_time'];
  72. $show_end = new DateTime($show_start_time);
  73. $duration = $formData['add_show_duration'];
  74. $duration = explode(":", $duration);
  75. $show_end->add(new DateInterval("PT$duration[0]H"));
  76. $show_end->add(new DateInterval("PT$duration[1]M"));
  77. $show_end->add(new DateInterval("PT1H"));//min time to wait until a rebroadcast
  78. $rebroad_start = $formData['add_show_start_date']." ".$formData['add_show_rebroadcast_time_'.$i];
  79. $rebroad_start = new DateTime($rebroad_start);
  80. $rebroad_start->add(new DateInterval("P".$day."D"));
  81. if ($rebroad_start < $show_end) {
  82. $this->getElement('add_show_rebroadcast_time_'.$i)->setErrors(array(_("Must wait at least 1 hour to rebroadcast")));
  83. $valid = false;
  84. $noError = false;
  85. }
  86. }
  87. return $noError;
  88. }
  89. }