/apps/frontend/modules/report/lib/form/NewReportForm.class.php

https://github.com/hoydaa/googlevolume.com · PHP · 205 lines · 166 code · 39 blank · 0 comment · 15 complexity · fd471ddc6f4e347691fa9fa770186891 MD5 · raw file

  1. <?php
  2. class NewReportForm extends ObjectForm
  3. {
  4. protected static $frequencies = array('N' => 'Never', 'D' => 'Daily', 'W' => 'Weekly', 'M' => 'Monthly');
  5. public function configure()
  6. {
  7. $is_hidden = !(sfContext::getInstance()->getUser()->isAuthenticated());
  8. $arr = array();
  9. $arr['id'] = new sfWidgetFormInputHidden();
  10. $arr['title'] = new sfWidgetFormInput();
  11. $arr['description'] = new sfWidgetFormTextarea();
  12. $arr['query_texts'] = new sfWidgetFormTextarea();
  13. $arr['query_titles'] = new sfWidgetFormTextarea();
  14. if (!$is_hidden)
  15. {
  16. $arr['private'] = new sfWidgetFormInputCheckbox();
  17. }
  18. $arr['tags'] = new sfWidgetFormInput(array(), array('autocomplete' => 'off'));
  19. if (!$is_hidden)
  20. {
  21. $arr['frequency']= new sfWidgetFormSelect(array('choices' => self::$frequencies));
  22. }
  23. $arr['user_id'] = new sfWidgetFormInputHidden();
  24. $this->setWidgets($arr);
  25. $this->widgetSchema->setLabels(array(
  26. 'title' => 'Title *',
  27. 'description' => 'Description',
  28. 'query_texts' => 'Query Texts *',
  29. 'query_titles' => 'Query Titles *',
  30. 'private' => 'Private',
  31. 'frequency' => 'Send By Mail',
  32. 'tags' => 'Tags',
  33. 'user_id' => 'User Id'
  34. ));
  35. $this->widgetSchema->setHelps(array(
  36. 'query_texts' => 'Seperate the queries you want to be searched with newlines.',
  37. 'query_titles' => 'Seperate the titles of your queries with newlines.',
  38. 'tags' => 'You can seperate your tags with comma.',
  39. 'frequency' => 'If you want you can schedule a mail for your report, just select a frequency.'
  40. ));
  41. $this->setValidators(array(
  42. 'id' => new sfValidatorString(array('required' => false)),
  43. 'title' => new sfValidatorString(array('required' => true), array('required' => 'Title is required.')),
  44. 'description' => new sfValidatorString(array('required' => false)),
  45. 'query_texts' => new sfValidatorString(array('required' => true), array('required' => 'You have to enter at least one query.')),
  46. 'query_titles' => new sfValidatorString(array('required' => true), array('required' => 'You have to enter at least one query.')),
  47. 'frequency' => new sfValidatorString(array('required' => false)),
  48. 'private' => new sfValidatorString(array('required' => false)),
  49. 'tags' => new sfValidatorString(array('required' => false)),
  50. 'user_id' => new sfValidatorString(array('required' => false))
  51. ));
  52. $this->validatorSchema->setPostValidator(
  53. new sfValidatorCallback(array('callback' => array($this, 'checkQueries')))
  54. );
  55. $this->widgetSchema->setNameFormat('report[%s]');
  56. }
  57. public function checkQueries($validator, $values)
  58. {
  59. $query_texts = explode("\n", str_replace("\r", "", $values['query_texts']));
  60. $query_titles = explode("\n", str_replace("\r", "", $values['query_titles']));
  61. if (sizeof($query_titles) > 10)
  62. {
  63. $error = new sfValidatorError($validator, 'You can enter up to 10 queries.');
  64. throw new sfValidatorErrorSchema($validator, array("query_titles" => $error));
  65. }
  66. if (sizeof($query_texts) > 10)
  67. {
  68. $error = new sfValidatorError($validator, 'You can enter up to 10 queries.');
  69. throw new sfValidatorErrorSchema($validator, array("query_texts" => $error));
  70. }
  71. if (sizeof($query_texts) != sizeof($query_titles))
  72. {
  73. $error = new sfValidatorError($validator, 'Query text and query title numbers do not match.');
  74. throw new sfValidatorErrorSchema($validator, array("query_titles" => $error, "query_texts" => $error));
  75. }
  76. return $values;
  77. }
  78. protected function updateDefaultsFromObject()
  79. {
  80. if (!$this->object)
  81. {
  82. return;
  83. }
  84. $defaults = array();
  85. $defaults['id'] = $this->object->getId();
  86. $defaults['title'] = $this->object->getTitle();
  87. $defaults['description'] = $this->object->getDescription();
  88. $defaults['tags'] = $this->object->getTag();
  89. $defaults['private'] = !$this->object->getPublicRecord();
  90. $defaults['frequency'] = $this->object->getMailFrequency() ? $this->object->getMailFrequency() : 'N';
  91. $query_texts = array();
  92. $query_titles = array();
  93. foreach ($this->object->getReportQuerys() as $report_query)
  94. {
  95. $query_texts[] = $report_query->getQuery()->getQuery();
  96. $query_titles[] = $report_query->getTitle();
  97. }
  98. $defaults['query_texts'] = implode("\n", $query_texts);
  99. $defaults['query_titles'] = implode("\n", $query_titles);
  100. $this->setDefaults($defaults);
  101. }
  102. protected function updateObjectFromForm()
  103. {
  104. if ($this->object->getId())
  105. {
  106. foreach ($this->object->getReportQuerys() as $report_query)
  107. {
  108. $report_query->delete();
  109. }
  110. foreach ($this->object->getReportTags() as $tag)
  111. {
  112. $tag->delete();
  113. }
  114. }
  115. $this->object->setTitle($this->getValue('title'));
  116. $this->object->setDescription($this->getValue('description'));
  117. $this->object->setMailFrequency($this->getValue('frequency'));
  118. if ($this->getValue('private') == 'on')
  119. {
  120. $this->object->setPublicRecord(false);
  121. }
  122. else
  123. {
  124. $this->object->setPublicRecord(true);
  125. }
  126. $tag_names = explode(',', $this->getValue('tags'));
  127. foreach ($tag_names as $tag_name)
  128. {
  129. if (!($tag_name = strtolower(trim($tag_name))))
  130. {
  131. continue;
  132. }
  133. $tag = new ReportTag();
  134. $tag->setName($tag_name);
  135. $this->object->addReportTag($tag);
  136. }
  137. $query_texts = explode("\n", str_replace("\r", "", $this->getValue('query_texts')));
  138. $query_titles = explode("\n", str_replace("\r", "", $this->getValue('query_titles')));
  139. for ($i = 0; $i < sizeof($query_texts); $i++)
  140. {
  141. $query_text = $query_texts[$i];
  142. $query_title = $query_titles[$i];
  143. if ($query_text)
  144. {
  145. $query = QueryPeer::retrieveByQUERY($query_text);
  146. if (!$query)
  147. {
  148. $query = new Query();
  149. $query->setQuery($query_text);
  150. }
  151. $report_query = new ReportQuery();
  152. $report_query->setQuery($query);
  153. $report_query->setTitle($query_title);
  154. $this->object->addReportQuery($report_query);
  155. }
  156. }
  157. if ($this->getValue('user_id'))
  158. {
  159. $this->object->setUserId($this->getValue('user_id'));
  160. }
  161. }
  162. public function getModelName()
  163. {
  164. return 'Report';
  165. }
  166. }