PageRenderTime 46ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/profiler/app/Http/Requests/SurveyRequest.php

https://bitbucket.org/learn1thing/learn1thing
PHP | 226 lines | 134 code | 22 blank | 70 comment | 0 complexity | a23d68ad5116e482ce982aed3fb04f61 MD5 | raw file
Possible License(s): Apache-2.0, LGPL-2.1, BSD-3-Clause, GPL-3.0, MPL-2.0-no-copyleft-exception
  1. <?php
  2. namespace App\Http\Requests;
  3. use Illuminate\Foundation\Http\FormRequest;
  4. class SurveyRequest extends FormRequest
  5. {
  6. /**
  7. * Determine if the user is authorized to make this request.
  8. *
  9. * @return bool
  10. */
  11. public function authorize()
  12. {
  13. return true;
  14. }
  15. /**
  16. * Get the validation rules that apply to the request.
  17. *
  18. * @return array
  19. */
  20. public function rules()
  21. {
  22. return array_merge(
  23. $this->surveyRules(),
  24. $this->questionnaireRules(),
  25. $this->preliminaryRules(),
  26. $this->postRules()
  27. );
  28. }
  29. /**
  30. * Get the validation rules that apply to the request.
  31. *
  32. * @return array
  33. */
  34. public function surveyRules()
  35. {
  36. return [
  37. 'title' => 'required',
  38. 'batch_reference' => 'required|min:3|max:10',
  39. 'description' => 'required',
  40. 'period_start' => 'required|date|before:period_end',
  41. 'period_end' => 'required|date|after:period_start',
  42. 'type' => 'required_with:value|in:minute,hour,day,week,month',
  43. 'value' => 'required_with:type',
  44. // 'category_count' => 'required|numeric',
  45. 'category_count' => 'required_if:allow_set_observer,enable|numeric',
  46. 'observer_count' => 'required_if:allow_set_observer,enable|numeric',
  47. 'email_builder_id' => 'required|numeric|exists:email_builders,id',
  48. 'random_question' => 'required|in:yes,no',
  49. 'allow_set_observer' => 'required|in:enable,disable'
  50. ];
  51. }
  52. /**
  53. * Get the validation rules that apply to the request.
  54. *
  55. * @return array
  56. */
  57. public function questionnaireRules()
  58. {
  59. return [
  60. // <<<<<<< HEAD
  61. 'questionnaire.*.title' => 'required',
  62. 'questionnaire.*.description' => 'required',
  63. 'questionnaire.*.automatic_numbering' => 'required|in:yes,no',
  64. 'questionnaire.*.ordering_type' => 'required_if:questionnaire.*.automatic_numbering,yes|'.$this->orderingType(),
  65. 'questionnaire.*.type' => 'required_if:questionnaire.*.automatic_numbering,yes|'.$this->type(),
  66. 'questionnaire.*.question.*.question_number' => 'required_if:questionnaire.*.automatic_numbering,no|max:255',
  67. 'questionnaire.*.question.*.content' => 'required',
  68. 'questionnaire.*.question.*.answer_type' => 'required|'.$this->answerType(),
  69. 'questionnaire.*.question.*.coordinate' => 'required_if:questionnaire.*.question.*.answer_type,checkboxes,multichoice|in:horizontal,vertical',
  70. 'questionnaire.*.question.*.answer_configs.*' => 'required_if:questionnaire.*.question.*.answer_type,multichoice,checkboxes,boolean',
  71. 'questionnaire.*.question.*.answer_configs.*.label' => 'required_if:questionnaire.*.question.*.answer_type,matching,likert_scale',
  72. 'questionnaire.*.question.*.answer_configs.*.value' => 'required_if:questionnaire.*.question.*.answer_type,matching,likert_scale',
  73. 'questionnaire.*.question.*.answer_configs.minimal' => 'required_if:questionnaire.*.question.*.answer_type,ranking',
  74. 'questionnaire.*.question.*.answer_configs.interval' => 'required_if:questionnaire.*.question.*.answer_type,ranking',
  75. 'questionnaire.*.question.*.answer_configs.maximal' => 'required_if:questionnaire.*.question.*.answer_type,ranking',
  76. 'questionnaire.*.question.*.answer_configs.points' => 'required_if:questionnaire.*.question.*.answer_type,multiple_choice_with_constraint',
  77. 'questionnaire.*.question.*.answer_configs.point' => 'required_if:questionnaire.*.question.*.answer_type,distributed_points',
  78. 'questionnaire.*.question.*.answer_configs.options.*' => 'required_if:questionnaire.*.question.*.answer_type,distributed_points,multiple_choice_with_constraint'
  79. // 'questionnaire.*.question.*.is_required' => 'required',
  80. // =======
  81. // 'title' => 'required',
  82. // 'description' => 'required',
  83. // 'period_start' => 'required',
  84. // 'period_end' => 'required'
  85. // >>>>>>> dev-rangga
  86. ];
  87. }
  88. /**
  89. * Get the validation rules that apply to the request.
  90. *
  91. * @return array
  92. */
  93. public function preliminaryRules()
  94. {
  95. return [
  96. 'preliminary.*.title' => 'required',
  97. 'preliminary.*.description' => 'required',
  98. 'preliminary.*.automatic_numbering' => 'required|in:yes,no',
  99. 'preliminary.*.ordering_type' => 'required_if:preliminary.*.automatic_numbering,yes|'.$this->orderingType(),
  100. 'preliminary.*.type' => 'required_if:preliminary.*.automatic_numbering,yes|'.$this->type(),
  101. 'preliminary.*.question.*.question_number' => 'required_if:preliminary.*.automatic_numbering,no|max:255',
  102. 'preliminary.*.question.*.content' => 'required',
  103. 'preliminary.*.question.*.answer_type' => 'required|'.$this->answerType(),
  104. 'preliminary.*.question.*.coordinate' => 'required_if:preliminary.*.question.*.answer_type,checkboxes,multichoice|in:horizontal,vertical',
  105. 'preliminary.*.question.*.answer_configs.*' => 'required_if:preliminary.*.question.*.answer_type,multichoice,checkboxes,boolean',
  106. 'preliminary.*.question.*.answer_configs.*.label' => 'required_if:preliminary.*.question.*.answer_type,matching,likert_scale',
  107. 'preliminary.*.question.*.answer_configs.*.value' => 'required_if:preliminary.*.question.*.answer_type,matching,likert_scale',
  108. 'preliminary.*.question.*.answer_configs.minimal' => 'required_if:preliminary.*.question.*.answer_type,ranking',
  109. 'preliminary.*.question.*.answer_configs.interval' => 'required_if:preliminary.*.question.*.answer_type,ranking',
  110. 'preliminary.*.question.*.answer_configs.maximal' => 'required_if:preliminary.*.question.*.answer_type,ranking',
  111. 'preliminary.*.question.*.answer_configs.points' => 'required_if:preliminary.*.question.*.answer_type,multiple_choice_with_constraint',
  112. 'preliminary.*.question.*.answer_configs.point' => 'required_if:preliminary.*.question.*.answer_type,distributed_points',
  113. 'preliminary.*.question.*.answer_configs.options.*' => 'required_if:preliminary.*.question.*.answer_type,distributed_points,multiple_choice_with_constraint'
  114. ];
  115. // return $this->globalRules('preliminary');
  116. }
  117. /**
  118. * Get the validation rules that apply to the request.
  119. *
  120. * @return array
  121. */
  122. public function postRules()
  123. {
  124. return [
  125. 'post.*.title' => 'required',
  126. 'post.*.description' => 'required',
  127. 'post.*.automatic_numbering' => 'required|in:yes,no',
  128. 'post.*.ordering_type' => 'required_if:post.*.automatic_numbering,yes|'.$this->orderingType(),
  129. 'post.*.type' => 'required_if:post.*.automatic_numbering,yes|'.$this->type(),
  130. 'post.*.question.*.question_number' => 'required_if:post.*.automatic_numbering,no|max:255',
  131. 'post.*.question.*.content' => 'required',
  132. 'post.*.question.*.answer_type' => 'required|'.$this->answerType(),
  133. 'post.*.question.*.coordinate' => 'required_if:post.*.question.*.answer_type,checkboxes,multichoice|in:horizontal,vertical',
  134. 'post.*.question.*.answer_configs.*' => 'required_if:post.*.question.*.answer_type,multichoice,checkboxes,boolean',
  135. 'post.*.question.*.answer_configs.*.label' => 'required_if:post.*.question.*.answer_type,matching,likert_scale',
  136. 'post.*.question.*.answer_configs.*.value' => 'required_if:post.*.question.*.answer_type,matching,likert_scale',
  137. 'post.*.question.*.answer_configs.minimal' => 'required_if:post.*.question.*.answer_type,ranking',
  138. 'post.*.question.*.answer_configs.interval' => 'required_if:post.*.question.*.answer_type,ranking',
  139. 'post.*.question.*.answer_configs.maximal' => 'required_if:post.*.question.*.answer_type,ranking',
  140. 'post.*.question.*.answer_configs.points' => 'required_if:post.*.question.*.answer_type,multiple_choice_with_constraint',
  141. 'post.*.question.*.answer_configs.point' => 'required_if:post.*.question.*.answer_type,distributed_points',
  142. 'post.*.question.*.answer_configs.options.*' => 'required_if:post.*.question.*.answer_type,distributed_points,multiple_choice_with_constraint'
  143. ];
  144. // return $this->globalRules('post');
  145. }
  146. /**
  147. * Get the validation rules that apply to the request.
  148. *
  149. * @return array
  150. */
  151. private function globalRules($type)
  152. {
  153. return [
  154. // "{$type}.*.title" => 'required',
  155. // "{$type}.*.description" => 'required',
  156. "{$type}.*.ordering_type" => $this->orderingType(),
  157. "{$type}.*.type" => $this->type(),
  158. // "{$type}.*.question.*.content" => 'required',
  159. "{$type}.*.question.*.answer_type" => $this->answerType(),
  160. // "{$type}.*.question.*.is_required" => 'required',
  161. ];
  162. }
  163. /**
  164. * Get the validation rules that apply to the request.
  165. *
  166. * @return array
  167. */
  168. private function orderingType()
  169. {
  170. return 'in:reset,continue';
  171. }
  172. /**
  173. * Get the validation rules that apply to the request.
  174. *
  175. * @return array
  176. */
  177. private function type()
  178. {
  179. return 'in:arabic,alphabet,roman';
  180. }
  181. /**
  182. * Get the validation rules that apply to the request.
  183. *
  184. * @return array
  185. */
  186. private function answerType()
  187. {
  188. return 'in:free_text,multichoice,checkboxes,matching,likert_scale,boolean,ranking,multiple_choice_with_constraint,date,time,datetime,distributed_points';
  189. }
  190. /**
  191. * Get custom attributes for validator errors.
  192. *
  193. * @return array
  194. */
  195. public function attributes()
  196. {
  197. $attributes = [];
  198. foreach ($this->rules() as $attribute => $value) {
  199. $lang = str_replace(['post.*.', 'preliminary.*.', 'questionnaire.*.', 'question.*.', '_'], ' ', $attribute);
  200. $attributes[$attribute] = strtolower($lang);
  201. }
  202. return $attributes;
  203. }
  204. }