Advertisement
Guest User

Untitled

a guest
Nov 14th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.89 KB | None | 0 0
  1. <?php
  2.  
  3. declare(strict_types = 1);
  4.  
  5. namespace App\WwwModule\Component;
  6.  
  7. use Nepttune\Component\BaseFormComponent;
  8. use Nette;
  9. use Nette\Application\UI\Form;
  10.  
  11. class ServiceForm extends \Nepttune\Component\BaseFormComponent
  12. {
  13. use \Nepttune\Model\TFileSaver;
  14.  
  15. protected const TEMPLATE_PATH = false;
  16.  
  17. /** @var \App\Table\CategoryTable */
  18. protected $categoryTable;
  19.  
  20. /** @var \App\Table\CategoryItemTable */
  21. protected $categoryItemTable;
  22.  
  23. /** @var */
  24. protected $form;
  25.  
  26. /** @var \Nette\Security\User */
  27. protected $user;
  28.  
  29. /** @var \App\Table\PhotoTable */
  30. protected $photoTable;
  31.  
  32. /** @var \App\Table\ServiceTable */
  33. protected $serviceTable;
  34.  
  35. /** @var \App\Table\ScheduleTable */
  36. protected $scheduleTable;
  37.  
  38. /** @var \App\Table\ServiceCategoryItemTable */
  39. protected $serviceCategoryItemTable;
  40.  
  41.  
  42. public function __construct(
  43. \App\Table\ServiceTable $serviceTable,
  44. \App\Table\CategoryTable $categoryTable,
  45. \App\Table\CategoryItemTable $categoryItemTable,
  46. \App\Table\PhotoTable $photoTable,
  47. \App\Table\ScheduleTable $scheduleTable,
  48. \App\Table\ServiceCategoryItemTable $serviceCategoryItemTable,
  49. \Nette\Security\User $user
  50. )
  51. {
  52. parent::__construct($serviceTable);
  53. $this->categoryTable = $categoryTable;
  54. $this->categoryItemTable = $categoryItemTable;
  55. $this->user = $user;
  56. $this->serviceTable = $serviceTable;
  57. $this->photoTable = $photoTable;
  58. $this->scheduleTable = $scheduleTable;
  59. $this->serviceCategoryItemTable = $serviceCategoryItemTable;
  60. }
  61.  
  62. protected function modifyForm(Form $form) : Form
  63. {
  64. $form->addSelect('category_id', 'Kategorie', $this->categoryTable->findActive()->fetchPairs('id', 'name'))
  65. ->setAttribute('onChange', 'categoryChanged()')
  66. ->setRequired();
  67. $form->addText('name', 'Jméno')
  68. ->setRequired();
  69. $form->addText('description', 'Popis')
  70. ->setRequired();
  71. $form->addText('address', 'Adresa')
  72. ->setRequired();
  73. $form->addText('manager_name', 'Kontaktní osoba')
  74. ->setRequired();
  75. $form->addText('phone', 'Telefon')
  76. ->setRequired();
  77. $form->addText('email', 'Email')
  78. ->setRequired();
  79. $form->addText('web', 'Web')
  80. ->setRequired();
  81. $form->addText('facebook', 'Facebook');
  82. $form->addText('twitter', 'Twitter');
  83. $form->addText('instagram', 'Instagram');
  84.  
  85. foreach(['monday' => 'Pondělí', 'tuesday' => 'Úterý', 'wednesday' => 'Středa', 'thursday' => 'Čtvrtek', 'friday' => 'Pátek', 'saturday' => 'Sobota', 'sunday' => 'Neděle'] as $day => $name) {
  86. $form->addRadioList($day, $name, [1 => '', 2 => 'Nonstop', 3 => 'Zavřeno']);
  87. $form->addText($day . '_from', 'Od');
  88. $form->addText($day . '_to', 'Do');
  89. }
  90.  
  91. foreach($this->categoryItemTable->findActive()->fetchAll() as $input) {
  92. switch($input->type) {
  93. case 'checkbox':
  94. $form->addRadioList('category_item_' . $input->id, $input->name, [0 => 'Ne', 1 => 'Ano']);
  95. break;
  96. case 'text':
  97. $form->addText('category_item_' . $input->id, $input->name);
  98. break;
  99. }
  100. }
  101.  
  102. $form->addUpload('main_photo', 'Hlavní fotka')
  103. ->setRequired();
  104.  
  105. $form->addMultiUpload('other_photo', 'Ostatní fotky');
  106.  
  107. $form->addSubmit('submit', 'Vytvořit službu');
  108.  
  109. return $form;
  110. }
  111.  
  112. public function formSuccess(\Nette\Application\UI\Form $form, \stdClass $values) : void
  113. {
  114. $serviceId = $this->serviceTable->upsert($this->rowId, [
  115. 'name' => $values->name,
  116. 'description' => $values->description,
  117. 'address' => $values->address,
  118. 'manager_name' => $values->manager_name,
  119. 'phone' => $values->phone,
  120. 'email' => $values->email,
  121. 'web' => $values->web,
  122. 'facebook' => $values->facebook,
  123. 'twitter' => $values->twitter,
  124. 'instagram' => $values->instagram,
  125. 'owner_id' => $this->user->getId(),
  126. 'category_id' => $values->category_id
  127. ]);
  128.  
  129. for($i = 1; $i <= 7; $i++)
  130. {
  131. $this->scheduleTable->upsert($this->rowId, [
  132. 'service_id' => $serviceId,
  133. 'day' => $i,
  134. 'open' => $values->$i . '_from',
  135. 'close' => $values->$i . '_to',
  136. 'nonstop' => $values->$i == 2 ? 1 : 0
  137. ]);
  138. }
  139.  
  140. $name = $values->main_photo->getSanitizedName();
  141. $size = $values->main_photo->getImageSize();
  142. $imagePath = $this->saveImage($values->main_photo);
  143.  
  144. $this->photoTable->upsert($this->rowId, [
  145. 'path' => $imagePath,
  146. 'name' => $name,
  147. 'width' => $size[0],
  148. 'height' => $size[1],
  149. 'type' => $size['mime'],
  150. 'service_id' => $serviceId
  151. ]);
  152.  
  153. if($values->other_photo instanceof \Nette\Http\FileUpload && $values->other_photo->isOk()) {
  154. foreach($values->other_photo as $photoNumber => $photo)
  155. {
  156. $name = $photo->getSanitizedName();
  157. $size = $photo->getImageSize();
  158. $imagePath = $this->saveImage($photo);
  159.  
  160. $this->photoTable->upsert($this->rowId, [
  161. 'path' => $imagePath,
  162. 'name' => $name,
  163. 'width' => $size[0],
  164. 'height' => $size[1],
  165. 'type' => $size['mime'],
  166. 'service_id' => $serviceId
  167. ]);
  168. }
  169. }
  170.  
  171. for($i = 0; $i <= \count($this->categoryItemTable->findActive()->fetchAll()); $i++)
  172. {
  173. if($values->category_item_ . $i) {
  174. $this->serviceCategoryItemTable->upsert($this->rowId, [
  175. 'service_id' => $serviceId,
  176. 'category_item_id' => $i,
  177. 'value' => $values->category_item . $i
  178. ]);
  179. }
  180. }
  181. }
  182.  
  183. public function beforeRender() : void
  184. {
  185. $this->template->categories = $this->categoryTable->findActive();
  186. $this->template->categoryItemTable = $this->categoryItemTable;
  187. }
  188.  
  189. public function handleCategoryItems() : void
  190. {
  191. $this->template->selectedOption = (int) $this->getPresenter()->getParameter('selectedOption');
  192.  
  193. $this->getPresenter()->redrawControl('categoryItems');
  194. $this->redrawControl('categoryItems');
  195.  
  196. $this->getPresenter()->redrawControl('serviceFormArea');
  197. $this->redrawControl('serviceFormArea');
  198. }
  199. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement