Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 49 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 1 |
FeedbackController | |
0.00% |
0 / 49 |
|
0.00% |
0 / 3 |
272 | |
0.00% |
0 / 1 |
homeAction | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
formAction | |
0.00% |
0 / 40 |
|
0.00% |
0 / 1 |
182 | |||
prefillUserInfo | |
0.00% |
0 / 8 |
|
0.00% |
0 / 1 |
6 |
1 | <?php |
2 | |
3 | /** |
4 | * Controller for configurable forms (feedback etc). |
5 | * |
6 | * PHP version 8 |
7 | * |
8 | * @category VuFind |
9 | * @package Controller |
10 | * @author Josiah Knoll <jk1135@ship.edu> |
11 | * @author Samuli Sillanpää <samuli.sillanpaa@helsinki.fi> |
12 | * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License |
13 | * @link https://vufind.org Main Site |
14 | */ |
15 | |
16 | namespace VuFind\Controller; |
17 | |
18 | use Laminas\Log\LoggerAwareInterface; |
19 | use Laminas\View\Model\ViewModel; |
20 | use VuFind\Db\Entity\UserEntityInterface; |
21 | use VuFind\Form\Form; |
22 | use VuFind\Log\LoggerAwareTrait; |
23 | |
24 | /** |
25 | * Controller for configurable forms (feedback etc). |
26 | * |
27 | * @category VuFind |
28 | * @package Controller |
29 | * @author Josiah Knoll <jk1135@ship.edu> |
30 | * @author Samuli Sillanpää <samuli.sillanpaa@helsinki.fi> |
31 | * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License |
32 | * @link https://vufind.org/wiki/development Wiki |
33 | */ |
34 | class FeedbackController extends AbstractBase implements LoggerAwareInterface |
35 | { |
36 | use LoggerAwareTrait; |
37 | |
38 | /** |
39 | * Feedback form class |
40 | * |
41 | * @var string |
42 | */ |
43 | protected $formClass = \VuFind\Form\Form::class; |
44 | |
45 | /** |
46 | * Display Feedback home form. |
47 | * |
48 | * @return ViewModel |
49 | */ |
50 | public function homeAction() |
51 | { |
52 | return $this->forwardTo('Feedback', 'Form'); |
53 | } |
54 | |
55 | /** |
56 | * Handles rendering and submit of dynamic forms. |
57 | * Form configurations are specified in FeedbackForms.yaml. |
58 | * |
59 | * @return mixed |
60 | */ |
61 | public function formAction() |
62 | { |
63 | $formId = $this->params()->fromRoute('id', $this->params()->fromQuery('id')); |
64 | if (!$formId) { |
65 | $formId = 'FeedbackSite'; |
66 | } |
67 | |
68 | $user = $this->getUser(); |
69 | |
70 | $form = $this->getService($this->formClass); |
71 | $prefill = $this->params()->fromQuery(); |
72 | $params = []; |
73 | if ($refererHeader = $this->getRequest()->getHeader('Referer')) { |
74 | $params['referrer'] = $refererHeader->getFieldValue(); |
75 | } |
76 | if ($userAgentHeader = $this->getRequest()->getHeader('User-Agent')) { |
77 | $params['userAgent'] = $userAgentHeader->getFieldValue(); |
78 | } |
79 | $form->setFormId($formId, $params, $prefill); |
80 | |
81 | if (!$form->isEnabled()) { |
82 | throw new \VuFind\Exception\Forbidden("Form '$formId' is disabled"); |
83 | } |
84 | |
85 | if (!$user && $form->showOnlyForLoggedUsers()) { |
86 | return $this->forceLogin(); |
87 | } |
88 | |
89 | $view = $this->createViewModel(compact('form', 'formId', 'user')); |
90 | $view->useCaptcha |
91 | = $this->captcha()->active('feedback') && $form->useCaptcha(); |
92 | |
93 | $params = $this->params(); |
94 | $form->setData($params->fromPost()); |
95 | |
96 | if (!$this->formWasSubmitted(useCaptcha: $view->useCaptcha)) { |
97 | $form = $this->prefillUserInfo($form, $user); |
98 | return $view; |
99 | } |
100 | |
101 | if (!$form->isValid()) { |
102 | return $view; |
103 | } |
104 | |
105 | $primaryHandler = $form->getPrimaryHandler(); |
106 | $success = $primaryHandler->handle($form, $params, $user); |
107 | if ($success) { |
108 | $view->setVariable('successMessage', $form->getSubmitResponse()); |
109 | $view->setTemplate('feedback/response'); |
110 | } else { |
111 | $this->flashMessenger()->addErrorMessage( |
112 | $this->translate('could_not_process_feedback') |
113 | ); |
114 | } |
115 | |
116 | $handlers = $form->getSecondaryHandlers(); |
117 | foreach ($handlers as $handler) { |
118 | try { |
119 | $handler->handle($form, $params, $user); |
120 | } catch (\Exception $e) { |
121 | $this->logError($e->getMessage()); |
122 | } |
123 | } |
124 | |
125 | return $view; |
126 | } |
127 | |
128 | /** |
129 | * Prefill form sender fields for logged in users. |
130 | * |
131 | * @param Form $form Form |
132 | * @param ?UserEntityInterface $user User |
133 | * |
134 | * @return Form |
135 | */ |
136 | protected function prefillUserInfo(Form $form, ?UserEntityInterface $user) |
137 | { |
138 | if ($user) { |
139 | $form->setData( |
140 | [ |
141 | 'name' => $user->getFirstname() . ' ' . $user->getLastname(), |
142 | 'email' => $user->getEmail(), |
143 | ] |
144 | ); |
145 | } |
146 | return $form; |
147 | } |
148 | } |