public function formSucceeded(Form $form, $values)
 {
     try {
         $userManager = new Model\UserManager($this->user, $this->database);
         $userManager->saveprofile($form->getHttpData($form::DATA_TEXT, 'profile_email_input'), $form->getHttpData($form::DATA_TEXT, 'profile_telephone_input'), $form->getHttpData($form::DATA_TEXT, 'profile_address_input'), $form->getHttpData($form::DATA_TEXT | $form::DATA_KEYS, 'profile_comment_input'));
     } catch (Nette\Security\AuthenticationException $e) {
         $form->addError($e->getMessage());
     }
 }
 public function changeCategoryRankFormSucceeded(Form $form)
 {
     $values = (object) $form->getHttpData();
     $this->categoryFacade->changeRanks($values->categoryRank);
     $form->getPresenter()->flashMessage("Pořadí kategorií bylo úspěšně změněno.", "alert-success");
     $form->getPresenter()->redirect("this");
 }
Example #3
0
 public function addCommentFormSucceded(Form $form)
 {
     $values = (object) $form->getHttpData();
     if (isset($values->antispam) && $values->antispam != $values->firstAddend + $values->secondAddend) {
         $form->getPresenter()->getTemplate()->wrongAntispam = true;
         $form->getPresenter()->getTemplate()->needsAntispam = true;
         $form->getPresenter()->redrawControl("wrongAntispam");
     } else {
         $articleId = $form->getPresenter()->getParameter("id");
         $user = UserService::loadFromSession($form->getPresenter()->getUser());
         $newComment = CommentService::create($values->content, $user);
         $this->commentFacade->save($newComment, $articleId);
         if ($this->commentFacade->needsAntispam($user)) {
             $form->getPresenter()->getTemplate()->needsAntispam = true;
             $form->getPresenter()->getTemplate()->firstAddend = Antispam::generate();
             $form->getPresenter()->getTemplate()->secondAddend = Antispam::generate();
         }
         if (!$form->getPresenter()->isAjax()) {
             $form->getPresenter()->redirect("this");
         } else {
             $form->getPresenter()->redrawControl("addCommentForm");
             $form->getPresenter()->redrawControl("comments");
             $form->getPresenter()->redrawControl("metainfoArea");
             $form->getPresenter()->redrawControl("metainfo");
             $form->setValues([], TRUE);
         }
     }
 }
Example #4
0
 /**
  * @param  Form                           $form
  * @throws Exceptions\MissingTagException
  * @return Entities\TagEntity|null
  */
 protected function getSelectedTag(Form $form)
 {
     $tagId = $form->getHttpData(Form::DATA_LINE, 'tagId');
     $tag = $tagId ? $this->tagRepository->getById($tagId) : null;
     if (!$tag) {
         throw new Exceptions\MissingTagException($this->translator->translate('locale.error.missing_tag'));
     }
     return $tag;
 }
 public function processListingSharing(Form $form, $values)
 {
     $ignoredItems = $form->getHttpData(Form::DATA_TEXT, 'items[]');
     try {
         $this->newListings = $this->listingFacade->shareListing($this->listing, $values['description'], $values['recipients'], $ignoredItems);
     } catch (\DibiException $e) {
         $this->presenter->flashMessage('Nastala chyba při pokusu o sdílení výčetky. Zkuste akci opakovat později.', 'error');
         $this->redirect('this');
     }
     $this->presenter->flashMessage('Výčetka byla úspěšně sdílena.', 'success');
 }
Example #6
0
 public function updateSucceeded(Form $form)
 {
     $valuesForm = $form->getValues(true);
     $valuesHttp = $form->getHttpData();
     if (!$valuesForm['photo']->isImage() && $valuesForm['photo']->isOK()) {
         $form->addError('Toto není obrázek');
         return;
     }
     $valuesForm['underSubSection'] = (int) $valuesHttp['underSubSection'];
     $valuesForm['underSerial'] = (int) $valuesHttp['underSerial'];
     $values = Nette\Utils\ArrayHash::from($valuesForm);
     $this->articleManager->updateArticle($values);
 }
Example #7
0
 public function processPrivileges(Form $form)
 {
     if (!$this->authorizator->isAllowed($this->user, 'user_role', 'edit')) {
         $this->flashMessage('authorization.noPermission', FlashMessage::WARNING);
     }
     $values = $form->getHttpData();
     unset($values['save'], $values['do'], $values[Form::PROTECTOR_ID]);
     try {
         $this->userFacade->savePermissionDefinitions($this->role, $values);
         $this->flashMessage('users.roleDefinition.messages.success', FlashMessage::SUCCESS);
         $this->redirect('this');
     } catch (DBALException $e) {
         $this->flashMessage('users.roleDefinition.messages.success', FlashMessage::WARNING);
     }
 }
Example #8
0
 public function addPhotoFormSucceeded(Form $form)
 {
     if ($form->getPresenter()->isAjax()) {
         $values = (object) $form->getHttpData();
         if (!isset($values->tagPhotoList)) {
             $form->getPresenter()->getTemplate()->photoMessage = "noTags";
             $form->getPresenter()->redrawControl("articleWrapper");
             $form->getPresenter()->redrawControl("photoFlashes");
         } else {
             $this->addPhoto($form, $values);
         }
     } else {
         $form->getPresenter()->flashMessage("neeee");
         $form->getPresenter()->redirect("this");
     }
 }
Example #9
0
 public function validateEmailForm(Form $form)
 {
     $values = $form->getHttpData();
     $recaptchaSecret = $this->context->parameters["ReCaptchaSecret"];
     $recaptcha = new \ReCaptcha\ReCaptcha($recaptchaSecret);
     $httpRequest = $this->context->getByType('Nette\\Http\\Request');
     $resp = $recaptcha->verify($values["g-recaptcha-response"], $httpRequest->getRemoteAddress());
     if ($resp->isSuccess()) {
         // verified!
     } else {
         $errors = $resp->getErrorCodes();
         if (in_array("missing-input-response", $errors)) {
             $form->addError("Prosím, zaškrtněte políčko \"Nejsem robot\"");
         } else {
             $form->addError("Při odesílání zprávy došlo chybě, zkuste to prosím znovu.");
         }
     }
 }
 /**
  * Pass "sub"-form submission forward to custom submit function
  * @param  Form   $form
  * @return void
  */
 public function submitted(Form $form)
 {
     if (!isset($form['group_action']['submit']) || !$form['group_action']['submit']->isSubmittedBy()) {
         return;
     }
     $values = $form->getValues();
     $values = $values['group_action'];
     if ($values->group_action === 0 || is_null($values->group_action)) {
         return;
     }
     /**
      * @todo Define items IDs
      */
     $http_ids = $form->getHttpData(Form::DATA_LINE | Form::DATA_KEYS, 'group_action_item[]');
     $ids = array_keys($http_ids);
     $id = $values->group_action;
     $this->group_actions[$id]->onSelect($ids, isset($values->{$id}) ? $values->{$id} : NULL);
     $form['group_action']['group_action']->setValue(NULL);
 }
 public function processMassItemsChange(Form $form, $values)
 {
     $daysToChange = $form->getHttpData(Form::DATA_TEXT, 'items[]');
     if (empty($daysToChange)) {
         $this->flashMessage('Označte řádky, které chcete změnit.', 'warning');
         if ($this->presenter->isAjax()) {
             $this->redrawControl('flashMessage');
             return;
         } else {
             $this->redirect('this');
         }
     }
     try {
         $workedHours = new WorkedHours($values['workStart'], $values['workEnd'], $values['lunch'], $values['otherHours']);
         if ($values['newListing'] === true) {
             $newListing = $this->listingsFacade->baseListingOn($this->listing, $workedHours, $daysToChange);
         } else {
             $changedItems = $this->listingsFacade->changeItems($this->listing, $workedHours, $daysToChange);
         }
     } catch (ShiftEndBeforeStartException $s) {
         $form->addError('Nelze skončit směnu dříve, než začala. Zkontrolujte hodnoty
              v polích Začátek a Konec');
         return;
     } catch (NegativeResultOfTimeCalcException $e) {
         $form->addError('Položku nelze uložit. Musíte mít odpracováno více hodin,
              než kolik strávíte obědem.');
         return;
     }
     if ($values['newListing'] === true) {
         $this->presenter->redirect('Listing:overview', ['year' => $newListing->getYear(), 'month' => $newListing->getMonth()]);
     } else {
         if ($this->presenter->isAjax()) {
             $this->flashMessage('Hodnoty byly úspěšně hromadně změneny.', 'success');
             $this->redrawControl('flashMessage');
             $this->redrawControl('formErrors');
             $this['itemsTable']->refreshTable($changedItems);
         } else {
             $this->redirect('this');
         }
     }
 }
Example #12
0
 public function addReservationFormSucceded(Form $form)
 {
     $values = (object) $form->getHttpData();
     $reservation = $this->formValuesToEntity($form, $values);
     $this->reservationFacade->save($reservation);
     $form->getPresenter()->setupPaginator();
     if ($values->reservationId == 0) {
         $form->getPresenter()->flashMessage("Zápas byl úspěšně rezervován.", "alert-success");
     }
     if ($form->getPresenter()->isAjax()) {
         if ($values->reservationId == 0) {
             $form->getPresenter()->redrawControl("addReservation");
         } else {
             $form->getPresenter()->getTemplate()->edit = true;
             $form->getPresenter()->redrawControl("editReservation");
         }
         $form->getPresenter()->redrawControl("paginator");
         $form->getPresenter()->redrawControl("reservations");
         $form->getPresenter()->redrawControl("flashes");
     } else {
         $form->getPresenter()->redirect("this");
     }
 }
 public function processListingSharing(Form $form, $values)
 {
     $ignoredDays = $form->getHttpData(Form::DATA_TEXT, 'items[]');
     if (count($ignoredDays) == $this->listingResult->getWorkedDays()) {
         $form->addError('Nelze odeslat prázdnou výčetku!
              Nezapomeňte, zaškrtnutím se řádek výčetky nebude sdílet.');
         return;
     }
     try {
         $resultObject = $this->listingFacade->shareListing($this->listing, $values['recipient'], $values['description'], $ignoredDays);
         $this->presenter->flashMessage('Výčetka byla úspěšně sdílena.', 'success');
         if (!$resultObject->hasNoErrors()) {
             $err = $resultObject->getFirstError();
             $this->flashMessage($err['message'], $err['type']);
         }
     } catch (RecipientsNotFoundException $rnf) {
         $form->addError('Nelze zaslat výčetku vybranému uživateli.');
         return;
     } catch (DBALException $e) {
         $form->addError('Nastala chyba při pokusu o sdílení výčetky.
              Zkuste akci opakovat později.');
     }
     $this->redirect('this');
 }
Example #14
0
 public function processFiltering(Form $form)
 {
     $values = $form->getHttpData();
     if ($this->type === null or $this->type == $values['type']) {
         $this->event = $values['event'] === '' ? null : $values['event'];
     } else {
         $this->event = null;
     }
     $this->type = $values['type'];
     $this->redirect('this');
 }
Example #15
0
 public function komponentaUloz(Form $form)
 {
     $komponenta_spec_nazov = $form->getHttpData($form::DATA_TEXT, 'spec_nazov');
     $komponenta = $this->nastavenie["komponenty"][$komponenta_spec_nazov];
     $out = ['id_hlavne_menu' => $form->getHttpData($form::DATA_TEXT, 'id_hlavne_menu_clanku'), 'id_komponenty' => $komponenta['id'], 'spec_nazov' => $komponenta_spec_nazov, 'parametre' => ""];
     foreach ($komponenta['parametre'] as $k => $v) {
         $out["parametre"] .= $form->getHttpData($form::DATA_TEXT, $k) . ",";
     }
     $out["parametre"] = substr($out["parametre"], 0, strlen($out["parametre"]) - 1);
     $this->clanok_komponenty->pridaj($out);
     $this->flashRedirect("this", "Komponenta bola pridaná", "success");
 }
 public function editFormSucceeded(UI\Form $form, $values)
 {
     $reference = $this->context->moduleReferenceModel->find($this->params['id']);
     $this->load($reference->page_page_modules_id);
     if (is_null($form->getHttpData($form::DATA_TEXT, 'cancel'))) {
         if ($values['img']->name != NULL) {
             // delete old image:
             $this->deleteImageFile($reference->imagename);
             // upload new image:
             $data['imagename'] = $this->uploadOneImage();
         }
         $data['title'] = $values['title'];
         $data['subtitle'] = $values['subtitle'];
         $data['text'] = $values['text'];
         $data['client'] = $values['client'];
         $data['link'] = $values['link'];
         $reference->update($data);
         $this->flashMessage('Reference byla úspěšně editována.');
     }
     $this->redirect('Page:edit', array('id' => $this->module->page_id));
 }
Example #17
0
 public function moderateCommentFormSucceeded(Form $form, $values)
 {
     $sub = $form->getHttpData();
     try {
         $this->commentsManager->updateComment($values);
         $this->redrawAjax('commentContainerAll');
         if (isset($sub['subFor'])) {
             $this->template->currentSubComment = $sub['subFor'];
         }
         $this->template->closeModal = true;
     } catch (App\Model\NoAccessException $e) {
         $form->addError('Nemáte přístup');
     }
 }
Example #18
0
 public function processForm(UI\Form $form)
 {
     $allowRedirect = TRUE;
     // Process actions
     if (isset($form['_do_action'])) {
         /** @var SubmitButton $doActionSubmit */
         $doActionSubmit = $form['_do_action'];
         if ($doActionSubmit->isSubmittedBy()) {
             /** @var SelectBox $actionSelect */
             $actionSelect = $form['_action'];
             $callback = $this->actions[(string) $actionSelect->getValue()]->getCallback();
             $selected = $form->getHttpData(Form::DATA_TEXT, '_selected[]');
             call_user_func($callback, $selected, $this);
             $actionSelect->setValue(NULL);
         }
     }
     if (isset($form['edit'])) {
         if ($form['edit']['save']->isSubmittedBy()) {
             if ($form['edit']->isValid()) {
                 Callback::invokeArgs($this->editFormCallback, array($form['edit']));
             } else {
                 $this->editRowKey = $form['edit'][$this->rowPrimaryKey]->getValue();
                 $allowRedirect = FALSE;
             }
         }
         if ($form['edit']['cancel']->isSubmittedBy() || $form['edit']['save']->isSubmittedBy() && $form['edit']->isValid()) {
             $editRowKey = $form['edit'][$this->rowPrimaryKey]->getValue();
             $this->invalidateRow($editRowKey);
             $this->getData($editRowKey);
         }
         if ($this->editRowKey !== NULL) {
             $this->invalidateRow($this->editRowKey);
         }
     }
     if (isset($form['filter'])) {
         if ($form['filter']['filter']->isSubmittedBy()) {
             $values = $form['filter']->getValues(TRUE);
             unset($values['filter']);
             $values = $this->filterFormFilter($values);
             if ($this->paginator) {
                 $this->page = $this->paginator->page = 1;
             }
             $this->filter = $this->filterDataSource = $values;
             $this->invalidateControl('rows');
         } elseif ($form['filter']['cancel']->isSubmittedBy()) {
             if ($this->paginator) {
                 $this->page = $this->paginator->page = 1;
             }
             $this->filter = $this->filterDataSource = $this->filterDefaults;
             $form['filter']->setValues($this->filter, TRUE);
             $this->invalidateControl('rows');
         }
     }
     if (!$this->presenter->isAjax() && $allowRedirect) {
         $this->redirect('this');
     }
 }
Example #19
0
 /**
  * Set $this->filter values after filter form submitted
  * @param  Form $form
  * @return void
  */
 public function filterSucceeded(Form $form)
 {
     if ($this->snippets_set) {
         return;
     }
     $values = $form->getValues();
     if ($this->getPresenter()->isAjax()) {
         if (isset($form['group_action']['submit']) && $form['group_action']['submit']->isSubmittedBy()) {
             return;
         }
     }
     /**
      * Inline edit
      */
     $inline_edit = $form['inline_edit'];
     if (isset($inline_edit) && isset($inline_edit['submit']) && isset($inline_edit['cancel'])) {
         if ($inline_edit['submit']->isSubmittedBy() || $inline_edit['cancel']->isSubmittedBy()) {
             $id = $form->getHttpData(Form::DATA_LINE, 'inline_edit[_id]');
             $primary_where_column = $form->getHttpData(Form::DATA_LINE, 'inline_edit[_primary_where_column]');
             if ($inline_edit['submit']->isSubmittedBy()) {
                 $this->inlineEdit->onSubmit($id, $values->inline_edit);
                 if ($this->getPresenter()->isAjax()) {
                     $this->getPresenter()->payload->_datagrid_inline_edited = $id;
                 }
             }
             $this->redrawItem($id, $primary_where_column);
             return;
         }
     }
     /**
      * Inline add
      */
     $inline_add = $form['inline_add'];
     if (isset($inline_add) && isset($inline_add['submit']) && isset($inline_add['cancel'])) {
         if ($inline_add['submit']->isSubmittedBy() || $inline_add['cancel']->isSubmittedBy()) {
             if ($inline_add['submit']->isSubmittedBy()) {
                 $this->inlineAdd->onSubmit($values->inline_add);
                 if ($this->getPresenter()->isAjax()) {
                     $this->getPresenter()->payload->_datagrid_inline_added = TRUE;
                 }
             }
             return;
         }
     }
     /**
      * Filter itself
      */
     $values = $values['filter'];
     foreach ($values as $key => $value) {
         /**
          * Session stuff
          */
         $this->saveSessionData($key, $value);
         /**
          * Other stuff
          */
         $this->filter[$key] = $value;
     }
     if ($this->getPresenter()->isAjax()) {
         $this->getPresenter()->payload->_datagrid_sort = [];
         foreach ($this->columns as $key => $column) {
             if ($column->isSortable()) {
                 $this->getPresenter()->payload->_datagrid_sort[$key] = $this->link('sort!', ['sort' => $column->getSortNext()]);
             }
         }
     }
     $this->reload();
 }
Example #20
0
 public function ruleFormSuccess(Form $form)
 {
     $privilege = $form->getHttpData($form::DATA_TEXT, 'privilege');
     $role = $form->getHttpData($form::DATA_TEXT, 'role');
     $mode = $form->getHttpData($form::DATA_TEXT, 'mode');
     $resource = $form->getHttpData($form::DATA_TEXT, 'resource');
     $error = false;
     if (empty($role)) {
         $form['role']->addError("This field is required");
         $error = true;
     }
     if (!empty($resource)) {
         if ($privilege === null) {
             $form['privilege']->addError("This field is required");
             $error = true;
         }
     }
     if (empty($mode)) {
         $form['mode']->addError("This field is required");
         $error = true;
     }
     if ($error) {
         $this->presenter->redrawControl("privilegesSnippet");
     }
     $values = $form->getValues();
     $values->privilege = $privilege;
     try {
         switch ($this->getMode()) {
             case FormMode::CREATE_MODE:
                 $this->presenter->createRule($values);
                 break;
             case FormMode::UPDATE_MODE:
                 $this->presenter->updateRule($values);
                 break;
         }
     } catch (DuplicateEntryException $e) {
         $roleName = $this->getRoles();
         $this->addError($this->presenter->tt("securityModule.aclForm.messages.ruleRoleResExists", null, ["role" => $roleName[$values->role], "resource" => $values->resource]));
     }
 }
Example #21
0
 private function formValuesToEntity(Form $form)
 {
     $values = (object) $form->getHttpData();
     $user = UserService::loadFromSession($form->getPresenter()->getUser());
     $photo = PhotoService::loadForArticle($values->photoId);
     $tags = new TagCollection();
     foreach ($values->tagList as $tag) {
         $tags->addItem(TagService::create($tag));
     }
     $categories = new CategoryCollection();
     foreach ($values->categories as $categoryId) {
         $categories->addItem(CategoryService::loadForArticle($categoryId));
     }
     $articleId = $form->getPresenter()->getParameter("articleId");
     if ($articleId) {
         return ArticleService::loadForUpdate($articleId, $values, $user, $photo, $tags, $categories);
     } else {
         return ArticleService::create($values, $user, $photo, $tags, $categories);
     }
 }
Example #22
0
 public function processMergeListings(Form $form, $values)
 {
     $selectedCollisionItems = $form->getHttpData(Form::DATA_TEXT, 'itm[]');
     try {
         $this->listingFacade->mergeListings($this->listing, $this->listingToMerge, $selectedCollisionItems);
         $this->flashMessage('Výčetky byli úspěšně spojeny.', 'success');
         $this->redirect('Listing:overview', ['year' => $this->listing->year, 'month' => $this->listing->month]);
     } catch (NoCollisionListingItemSelectedException $ncis) {
         $form->addError('Ve výčetce se stále nachází kolizní řádek/řádky.');
         return;
     } catch (\DibiException $e) {
         $this->flashMessage('Při spojování výčetek došlo k chybě. Zkuste akci opakovat později.', 'error');
         $this->redirect('this', ['with' => null]);
     }
 }
 public function editFormSucceeded(\Nette\Application\UI\Form $form, $values)
 {
     $item = $this->context->moduleCarouselBootstrap3Model->find($this->params['id']);
     $this->loadModule($item->page_page_modules_id);
     if (is_null($form->getHttpData($form::DATA_TEXT, 'cancel'))) {
         if ($values['img']->name != NULL) {
             // upload new image:
             $imageUploader = new \ImageUploader($this->request->getFiles(), "module" . $this->moduleName . "/" . $this->module->page_id);
             $uploadedImages = $imageUploader->startUpload();
             if (isset($uploadedImages[0]["name"])) {
                 $data['image'] = $uploadedImages[0]["name"] . $uploadedImages[0]["extension"];
                 // delete old image:
                 if (NULL !== $item->image) {
                     $imageUploader->deleteImage($item->image);
                 }
             }
         }
         $data['title'] = $values['title'];
         $data['subtitle'] = $values['subtitle'];
         $data['text'] = $values['text'];
         $data['link'] = $values['link'];
         $data['link_text'] = $values['link_text'];
         $item->update($data);
         if (false === isset($uploadedImages[0]["error"])) {
             $this->flashMessage('Úprava proběhla úspěšně.');
         } else {
             $this->flashMessage("Error '" . $uploadedImages[0]["error"] . "' while uploading file '" . $uploadedImages[0]["original"] . "'.");
         }
     }
     $this->redirect('Page:edit', array('id' => $this->module->page_id));
 }
Example #24
0
 /**
  * @param  string  $name
  * @return Form
  */
 protected function createComponentForm($name)
 {
     $form = new Form($this, $name);
     $form->setTranslator($this->translator);
     $form->onSuccess[] = function (Form $form) {
         $values = array_diff_key($form->getHttpData(), ['_do' => NULL, '_submit' => NULL, '_forward' => NULL, '_back' => NULL]);
         $this->onFormStep($form, $values, $this);
         if ($form['_back']->isSubmittedBy()) {
             return $this->setStep($this->getStep() - 1);
         }
         $values = $values + $this->getValues();
         $this->setValues($values);
         if ($form['_forward']->isSubmittedBy()) {
             return $this->setStep($this->getStep() + 1);
         }
         $this->clearCache();
         $this->onFormSubmit($form, $values, $this);
     };
     $form->addSubmit('_back')->setValidationScope(FALSE);
     $form->addSubmit('_forward');
     $form->addSubmit('_submit');
     return $form;
 }
Example #25
0
 public function addSucceeded(Form $form)
 {
     $valuesForm = $form->getValues(true);
     $valuesHttp = $form->getHttpData();
     if (!$valuesForm['photo']->isImage() && $valuesForm['photo']->isOK()) {
         $form->addError('Toto není obrázek');
         return;
     }
     $valuesForm['underSubSection'] = (int) $valuesHttp['underSubSection'];
     $valuesForm['underSerial'] = (int) $valuesHttp['underSerial'];
     $values = Nette\Utils\ArrayHash::from($valuesForm);
     $id = $this->articleManager->addArticle($this->user->getId(), $values);
     $this->flashMessage('Článek úspěšně přidán');
     $this->redirect('Article:UpdateArticle', $id);
 }
Example #26
0
 protected function createComponentForm($name)
 {
     $form = new Form($this, $name);
     $form->getElementPrototype()->class = 'ajax';
     $form->setTranslator($this->translator);
     if ($this->hasOperations) {
         $operations = array();
         foreach ($this->operations as $name => $operation) {
             $operations[$name] = $operation->getAlias();
         }
         $form->addSelect('operation', 'Operation', $operations);
         $form->addSubmit('btnExecuteOperation', 'Execute')->onClick[] = callback($this, 'executeOperation');
         $records = $form->addContainer('records');
         if ($form->isSubmitted()) {
             if (isset($this->persister->recordCheckboxes)) {
                 $checkboxes = $this->persister->recordCheckboxes;
                 foreach ($checkboxes as $id) {
                     $records->addCheckbox($id);
                 }
             }
         }
     }
     if ($this->hasFilters) {
         $filters = $form->addContainer('filters');
         foreach ($this->getComponents(false, 'Gridder\\Columns\\IColumn') as $column) {
             if ($column->hasFilter()) {
                 $filters->addComponent($column->getFilter(), $column->name);
                 if ($form->isSubmitted()) {
                     $httpData = $form->getHttpData();
                     if (isset($httpData['btnCancelFilters'])) {
                         unset($this->persister->filters);
                         $filters[$column->name]->setValue(null);
                     }
                 } elseif (isset($this->persister->filters[$column->name])) {
                     $filters[$column->name]->setDefaultValue($this->persister->filters[$column->name]->getValue());
                 }
             }
         }
         $form->addSubmit('btnApplyFilters', 'Apply filters')->onClick[] = callback($this, 'saveFilters');
         $form['btnApplyFilters']->getControlPrototype()->class = 'button apply';
         $form->addSubmit('btnCancelFilters', 'Cancel filters')->onClick[] = callback($this, 'cancelFilters');
         $form['btnCancelFilters']->getControlPrototype()->class = 'button cancel';
     }
 }