3 /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
6 * Galette saved searches controller
10 * Copyright © 2020 The Galette Team
12 * This file is part of Galette (http://galette.tuxfamily.org).
14 * Galette is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License as published by
16 * the Free Software Foundation, either version 3 of the License, or
17 * (at your option) any later version.
19 * Galette is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
24 * You should have received a copy of the GNU General Public License
25 * along with Galette. If not, see <http://www.gnu.org/licenses/>.
27 * @category Controllers
30 * @author Johan Cwiklinski <johan@x-tnd.be>
31 * @copyright 2020 The Galette Team
32 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
34 * @link http://galette.tuxfamily.org
35 * @since Available since 0.9.4dev - 2020-05-03
38 namespace Galette\Controllers\Crud
;
40 use Galette\Controllers\CrudController
;
42 use Slim\Http\Request
;
43 use Slim\Http\Response
;
44 use Galette\Entity\SavedSearch
;
45 use Galette\Filters\AdvancedMembersList
;
46 use Galette\Filters\MembersList
;
47 use Galette\Filters\SavedSearchesList
;
48 use Galette\Repository\SavedSearches
;
52 * Galette saved searches controller
54 * @category Controllers
55 * @name SavedSearchesController
57 * @author Johan Cwiklinski <johan@x-tnd.be>
58 * @copyright 2020 The Galette Team
59 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
60 * @link http://galette.tuxfamily.org
61 * @since Available since 0.9.4dev - 2020-05-03
64 class SavedSearchesController
extends CrudController
71 * @param Request $request PSR Request
72 * @param Response $response PSR Response
73 * @param array $args Request arguments
77 public function add(Request
$request, Response
$response, array $args = []) :Response
79 //no new page (included on list), just to satisfy inheritance
85 * @param Request $request PSR Request
86 * @param Response $response PSR Response
87 * @param array $args Request arguments
91 public function doAdd(Request
$request, Response
$response, array $args = []) :Response
93 if ($request->isPost()) {
94 $post = $request->getParsedBody();
96 $post = $request->getQueryParams();
100 if (isset($post['search_title'])) {
101 $name = $post['search_title'];
102 unset($post['search_title']);
105 //when using advanced search, no parameters are sent
106 if (isset($post['advanced_search'])) {
108 $filters = $this->session
->filter_members
;
109 foreach ($filters->search_fields
as $field) {
110 $post[$field] = $filters->$field;
114 //reformat, add required infos
116 'parameters' => $post,
117 'form' => 'Adherent',
121 $sco = new SavedSearch($this->zdb
, $this->login
);
122 if ($check = $sco->check($post)) {
123 if (!$res = $sco->store()) {
124 if ($res === false) {
125 $this->flash
->addMessage(
127 _T("An SQL error has occurred while storing search.")
130 $this->flash
->addMessage(
132 _T("This search is already saved.")
136 $this->flash
->addMessage(
138 _T("Search has been saved.")
143 foreach ($sco->getErrors() as $error) {
144 $this->flash
->addMessage(
151 if ($request->isGet()) {
154 ->withHeader('Location', $this->router
->pathFor('members'));
156 //called from ajax, return json
157 return $response->withJson(['success' => $check]);
167 * @param Request $request PSR Request
168 * @param Response $response PSR Response
169 * @param array $args Request arguments
173 public function list(Request
$request, Response
$response, array $args = []) :Response
176 if (isset($args['option'])) {
177 $option = $args['option'];
180 if (isset($args['value'])) {
181 $value = $args['value'];
184 if (isset($this->session
->filter_savedsearch
)) {
185 $filters = $this->session
->filter_savedsearch
;
187 $filters = new SavedSearchesList();
190 if ($option !== null) {
193 $filters->current_page
= (int)$value;
196 $filters->orderby
= $value;
201 $searches = new SavedSearches($this->zdb
, $this->login
, $filters);
202 $list = $searches->getList(true);
204 //assign pagination variables to the template and add pagination links
205 $filters->setSmartyPagination($this->router
, $this->view
->getSmarty(), false);
207 $this->session
->filter_savedsearch
= $filters;
212 'saved_searches.tpl',
214 'page_title' => _T("Saved searches"),
216 'nb' => $searches->getCount(),
217 'filters' => $filters
226 * @param Request $request PSR Request
227 * @param Response $response PSR Response
231 public function filter(Request
$request, Response
$response) :Response
242 * @param Request $request PSR Request
243 * @param Response $response PSR Response
244 * @param array $args Request arguments
248 public function edit(Request
$request, Response
$response, array $args = []) :Response
256 * @param Request $request PSR Request
257 * @param Response $response PSR Response
258 * @param array $args Request arguments
262 public function doEdit(Request
$request, Response
$response, array $args = []) :Response
271 * Get redirection URI
273 * @param array $args Route arguments
277 public function redirectUri(array $args = [])
279 return $this->router
->pathFor('searches');
285 * @param array $args Route arguments
289 public function formUri(array $args = [])
291 return $this->router
->pathFor(
293 ['id' => $args['id'] ??
null]
298 * Get confirmation removal page title
300 * @param array $args Route arguments
304 public function confirmRemoveTitle(array $args = [])
306 if (isset($args['id'])) {
307 return _T('Remove saved search');
309 //batch saved search removal
310 $filters = $this->session
->filter_savedsearch
;
313 count($filters->selected
),
314 _T('You are about to remove %count searches.')
322 * @param array $args Route arguments
323 * @param array $post POST values
327 protected function doDelete(array $args, array $post)
329 if (isset($this->session
->filter_savedsearch
)) {
330 $filters = $this->session
->filter_savedsearch
;
332 $filters = new SavedSearchesList();
334 $searches = new SavedSearches($this->zdb
, $this->login
, $filters);
336 if (!is_array($post['id'])) {
337 $ids = (array)$post['id'];
342 $del = $searches->remove($ids, $this->history
);
351 * @param Request $request PSR Request
352 * @param Response $response PSR Response
353 * @param array $args Request arguments
357 public function load(Request
$request, Response
$response, array $args = []) :Response
360 $sco = new SavedSearch($this->zdb
, $this->login
, (int)$args['id']);
361 $this->flash
->addMessage(
363 _T("Saved search loaded")
365 } catch (\Exception
$e) {
366 $this->flash
->addMessage(
368 _T("An SQL error has occurred while loading search.")
371 $parameters = (array)$sco->parameters
;
374 if (isset($parameters['free_search'])) {
375 $filters = new AdvancedMembersList();
377 $filters = new MembersList();
380 foreach ($parameters as $key => $value) {
381 $filters->$key = $value;
383 $this->session
->filter_members
= $filters;
387 ->withHeader('Location', $this->router
->pathFor('members'));