PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / 1.2.32
Booking for Appointments and Events Calendar – Amelia v1.2.32
2.4.9 2.4.8 2.4.7 2.4.6 2.4.5 2.4.4 2.4.3 2.4.2 2.4.1 2.4 trunk 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.15 1.2.16 1.2.17 1.2.18 1.2.19 1.2.2 1.2.20 1.2.21 1.2.22 1.2.23 1.2.24 1.2.25 1.2.26 1.2.27 1.2.28 1.2.29 1.2.3 1.2.30 1.2.31 1.2.32 1.2.33 1.2.34 1.2.35 1.2.36 1.2.37 1.2.38 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 2.0 2.0.1 2.0.2 2.1 2.1.1 2.1.2 2.1.3 2.2 2.2.1 2.3
ameliabooking / src / Application / Commands / Settings / UpdateSettingsCommandHandler.php
ameliabooking / src / Application / Commands / Settings Last commit date
GetSettingsCommand.php 1 year ago GetSettingsCommandHandler.php 2 years ago UpdateSettingsCommand.php 1 year ago UpdateSettingsCommandHandler.php 1 year ago
UpdateSettingsCommandHandler.php
544 lines
1 <?php
2
3 namespace AmeliaBooking\Application\Commands\Settings;
4
5 use AmeliaBooking\Application\Commands\CommandHandler;
6 use AmeliaBooking\Application\Commands\CommandResult;
7 use AmeliaBooking\Application\Common\Exceptions\AccessDeniedException;
8 use AmeliaBooking\Application\Services\Location\AbstractCurrentLocation;
9 use AmeliaBooking\Application\Services\Stash\StashApplicationService;
10 use AmeliaBooking\Domain\Collection\Collection;
11 use AmeliaBooking\Domain\Common\Exceptions\ForbiddenFileUploadException;
12 use AmeliaBooking\Domain\Entity\Entities;
13 use AmeliaBooking\Domain\Entity\User\AbstractUser;
14 use AmeliaBooking\Domain\Services\Api\BasicApiService;
15 use AmeliaBooking\Domain\Services\Settings\SettingsService;
16 use AmeliaBooking\Infrastructure\Services\Apple\AbstractAppleCalendarService;
17 use AmeliaBooking\Infrastructure\Services\Frontend\LessParserService;
18 use AmeliaBooking\Infrastructure\Services\LessonSpace\AbstractLessonSpaceService;
19 use AmeliaBooking\Infrastructure\WP\Integrations\WooCommerce\StarterWooCommerceService;
20 use Exception;
21 use Interop\Container\Exception\ContainerException;
22 use Less_Exception_Parser;
23 use Slim\Exception\ContainerValueNotFoundException;
24
25 /**
26 * Class UpdateSettingsCommandHandler
27 *
28 * @package AmeliaBooking\Application\Commands\Settings
29 */
30 class UpdateSettingsCommandHandler extends CommandHandler
31 {
32 /**
33 * @param UpdateSettingsCommand $command
34 *
35 * @return CommandResult
36 * @throws AccessDeniedException
37 * @throws Less_Exception_Parser
38 * @throws ContainerValueNotFoundException
39 * @throws ContainerException
40 * @throws Exception
41 */
42 public function handle(UpdateSettingsCommand $command)
43 {
44 $result = new CommandResult();
45
46 if (!$this->getContainer()->getPermissionsService()->currentUserCanWrite(Entities::SETTINGS)) {
47 /** @var AbstractUser $loggedInUser */
48 $loggedInUser = $this->container->get('logged.in.user');
49
50 if (
51 !$loggedInUser || !(
52 $loggedInUser->getType() === AbstractUser::USER_ROLE_ADMIN ||
53 $loggedInUser->getType() === AbstractUser::USER_ROLE_MANAGER
54 )
55 ) {
56 throw new AccessDeniedException('You are not allowed to write settings.');
57 }
58 }
59
60 /** @var SettingsService $settingsService */
61 $settingsService = $this->getContainer()->get('domain.settings.service');
62
63 /** @var AbstractCurrentLocation $locationService */
64 $locationService = $this->getContainer()->get('application.currentLocation.service');
65
66 /** @var LessParserService $lessParserService */
67 $lessParserService = $this->getContainer()->get('infrastructure.frontend.lessParser.service');
68
69 $settingsFields = $command->getFields();
70
71 if ($command->getField('customization')) {
72 $customizationData = $command->getField('customization');
73
74 $globalColors = $customizationData['globalColors'];
75
76 if (isset($settingsFields['customization']['forms']) && $settingsFields['customization']['forms']) {
77 $settingsService->fixCustomization($settingsFields['customization']);
78 }
79
80 //Sbs - Step by step
81 $useGlobalSbs = $customizationData['useGlobalColors']['stepByStepForm'];
82 $colorSbsSsf = $customizationData['forms']['stepByStepForm']['selectServiceForm']['globalSettings'];
83 $colorSbsCf = $customizationData['forms']['stepByStepForm']['calendarDateTimeForm']['globalSettings'];
84 $colorSbsRsf = $customizationData['forms']['stepByStepForm']['recurringSetupForm']['globalSettings'];
85 $colorSbsRdf = $customizationData['forms']['stepByStepForm']['recurringDatesForm']['globalSettings'];
86 $colorSbsCaf = $customizationData['forms']['stepByStepForm']['confirmBookingForm']['appointment']['globalSettings'];
87 $colorSbsCoa = $customizationData['forms']['stepByStepForm']['congratulationsForm']['appointment']['globalSettings'];
88 $colorSbsSpf = $customizationData['forms']['stepByStepForm']['selectPackageForm']['globalSettings'];
89 $colorSbsPif = $customizationData['forms']['stepByStepForm']['packageInfoForm']['globalSettings'];
90 $colorSbsPsf = $customizationData['forms']['stepByStepForm']['packageSetupForm']['globalSettings'];
91 $colorSbsPlf = $customizationData['forms']['stepByStepForm']['packageListForm']['globalSettings'];
92 $colorSbsCpf = $customizationData['forms']['stepByStepForm']['confirmBookingForm']['package']['globalSettings'];
93 $colorSbsCop = $customizationData['forms']['stepByStepForm']['congratulationsForm']['package']['globalSettings'];
94
95 // Cf - Catalog form
96 $useGlobalCf = $customizationData['useGlobalColors']['catalogForm'];
97 $colorCfSsf = $customizationData['forms']['catalogForm']['selectServiceForm']['globalSettings'];
98 $colorCfCf = $customizationData['forms']['catalogForm']['calendarDateTimeForm']['globalSettings'];
99 $colorCfRsf = $customizationData['forms']['catalogForm']['recurringSetupForm']['globalSettings'];
100 $colorCfRdf = $customizationData['forms']['catalogForm']['recurringDatesForm']['globalSettings'];
101 $colorCfCaf = $customizationData['forms']['catalogForm']['confirmBookingForm']['appointment']['globalSettings'];
102 $colorCfCoa = $customizationData['forms']['catalogForm']['congratulationsForm']['appointment']['globalSettings'];
103 $colorCfPsf = $customizationData['forms']['catalogForm']['packageSetupForm']['globalSettings'];
104 $colorCfPlf = $customizationData['forms']['catalogForm']['packageListForm']['globalSettings'];
105 $colorCfCpf = $customizationData['forms']['catalogForm']['confirmBookingForm']['package']['globalSettings'];
106 $colorCfCop = $customizationData['forms']['catalogForm']['congratulationsForm']['package']['globalSettings'];
107
108 // Elf - Event list form
109 $useGlobalElf = $customizationData['useGlobalColors']['eventListForm'];
110 $colorElf = $customizationData['forms']['eventListForm']['globalSettings'] ;
111
112 // Ecf - Event calendar form
113 $useGlobalEcf = $customizationData['useGlobalColors']['eventCalendarForm'];
114 $colorEcfCef = $customizationData['forms']['eventCalendarForm']['confirmBookingForm']['event']['globalSettings'];
115 $colorEcfCoe = $customizationData['forms']['eventCalendarForm']['congratulationsForm']['event']['globalSettings'];
116
117 $hasCustomFont = !empty($customizationData['customFontSelected']) &&
118 $customizationData['customFontSelected'] === 'selected';
119
120 $hash = $lessParserService->compileAndSave(
121 [
122 'color-accent' => $globalColors['primaryColor'],
123 'color-white' => $globalColors['textColorOnBackground'],
124 'color-text-prime' => $globalColors['formTextColor'],
125 'color-text-second' => $globalColors['formTextColor'],
126 'color-bgr' => $globalColors['formBackgroundColor'],
127 'color-gradient1' => $globalColors['formGradientColor1'],
128 'color-gradient2' => $globalColors['formGradientColor2'],
129 'color-dropdown' => $globalColors['formDropdownColor'],
130 'color-dropdown-text' => $globalColors['formDropdownTextColor'],
131 'color-input' => $globalColors['formInputColor'],
132 'color-input-text' => $globalColors['formInputTextColor'],
133 'font' => !empty($customizationData['font']) ?
134 $customizationData['font'] : '',
135 'custom-font-selected' => $hasCustomFont ? 'selected' : 'unselected',
136 'font-url' => !empty($customizationData['fontUrl']) ?
137 $customizationData['fontUrl'] : '',
138 // step by step
139 'sbs-ssf-bgr-color' => $useGlobalSbs ? $globalColors['formBackgroundColor'] : $colorSbsSsf['formBackgroundColor'],
140 'sbs-ssf-text-color' => $useGlobalSbs ? $globalColors['formTextColor'] : $colorSbsSsf['formTextColor'],
141 'sbs-ssf-input-color' => $useGlobalSbs ? $globalColors['formInputColor'] : $colorSbsSsf['formInputColor'],
142 'sbs-ssf-input-text-color' => $useGlobalSbs ? $globalColors['formInputTextColor'] : $colorSbsSsf['formInputTextColor'],
143 'sbs-ssf-dropdown-color' => $useGlobalSbs ? $globalColors['formDropdownColor'] : $colorSbsSsf['formDropdownColor'],
144 'sbs-ssf-dropdown-text-color' => $useGlobalSbs ? $globalColors['formDropdownTextColor'] : $colorSbsSsf['formDropdownTextColor'],
145 'sbs-cf-gradient1' => $useGlobalSbs ? $globalColors['formGradientColor1'] : $colorSbsCf['formGradientColor1'],
146 'sbs-cf-gradient2' => $useGlobalSbs ? $globalColors['formGradientColor2'] : $colorSbsCf['formGradientColor2'],
147 'sbs-cf-gradient-angle' => $useGlobalSbs ? $globalColors['formGradientAngle'] . 'deg' : $colorSbsCf['formGradientAngle'] . 'deg',
148 'sbs-cf-text-color' => $useGlobalSbs ? $globalColors['textColorOnBackground'] : $colorSbsCf['formTextColor'],
149 'sbs-rsf-gradient1' => $useGlobalSbs ? $globalColors['formGradientColor1'] : $colorSbsRsf['formGradientColor1'],
150 'sbs-rsf-gradient2' => $useGlobalSbs ? $globalColors['formGradientColor2'] : $colorSbsRsf['formGradientColor2'],
151 'sbs-rsf-gradient-angle' => $useGlobalSbs ? $globalColors['formGradientAngle'] . 'deg' : $colorSbsRsf['formGradientAngle'] . 'deg',
152 'sbs-rsf-text-color' => $useGlobalSbs ? $globalColors['textColorOnBackground'] : $colorSbsRsf['formTextColor'],
153 'sbs-rsf-input-color' => $useGlobalSbs ? $globalColors['formInputColor'] : $colorSbsRsf['formInputColor'],
154 'sbs-rsf-input-text-color' => $useGlobalSbs ? $globalColors['formInputTextColor'] : $colorSbsRsf['formInputTextColor'],
155 'sbs-rsf-dropdown-color' => $useGlobalSbs ? $globalColors['formDropdownColor'] : $colorSbsRsf['formDropdownColor'],
156 'sbs-rsf-dropdown-text-color' => $useGlobalSbs ? $globalColors['formDropdownTextColor'] : $colorSbsRsf['formDropdownTextColor'],
157 'sbs-rdf-bgr-color' => $useGlobalSbs ? $globalColors['formBackgroundColor'] : $colorSbsRdf['formBackgroundColor'],
158 'sbs-rdf-text-color' => $useGlobalSbs ? $globalColors['formTextColor'] : $colorSbsRdf['formTextColor'],
159 'sbs-rdf-input-color' => $useGlobalSbs ? $globalColors['formInputColor'] : $colorSbsRdf['formInputColor'],
160 'sbs-rdf-input-text-color' => $useGlobalSbs ? $globalColors['formInputTextColor'] : $colorSbsRdf['formInputTextColor'],
161 'sbs-rdf-dropdown-color' => $useGlobalSbs ? $globalColors['formDropdownColor'] : $colorSbsRdf['formDropdownColor'],
162 'sbs-rdf-dropdown-text-color' => $useGlobalSbs ? $globalColors['formDropdownTextColor'] : $colorSbsRdf['formDropdownTextColor'],
163 'sbs-caf-bgr-color' => $useGlobalSbs ? $globalColors['formBackgroundColor'] : $colorSbsCaf['formBackgroundColor'],
164 'sbs-caf-text-color' => $useGlobalSbs ? $globalColors['formTextColor'] : $colorSbsCaf['formTextColor'],
165 'sbs-caf-input-color' => $useGlobalSbs ? $globalColors['formInputColor'] : $colorSbsCaf['formInputColor'],
166 'sbs-caf-input-text-color' => $useGlobalSbs ? $globalColors['formInputTextColor'] : $colorSbsCaf['formInputTextColor'],
167 'sbs-caf-dropdown-color' => $useGlobalSbs ? $globalColors['formDropdownColor'] : $colorSbsCaf['formDropdownColor'],
168 'sbs-caf-dropdown-text-color' => $useGlobalSbs ? $globalColors['formDropdownTextColor'] : $colorSbsCaf['formDropdownTextColor'],
169 'sbs-spf-bgr-color' => $useGlobalSbs ? $globalColors['formBackgroundColor'] : $colorSbsSpf['formBackgroundColor'],
170 'sbs-spf-text-color' => $useGlobalSbs ? $globalColors['formTextColor'] : $colorSbsSpf['formTextColor'],
171 'sbs-spf-input-color' => $useGlobalSbs ? $globalColors['formInputColor'] : $colorSbsSpf['formInputColor'],
172 'sbs-spf-input-text-color' => $useGlobalSbs ? $globalColors['formInputTextColor'] : $colorSbsSpf['formInputTextColor'],
173 'sbs-spf-dropdown-color' => $useGlobalSbs ? $globalColors['formDropdownColor'] : $colorSbsSpf['formDropdownColor'],
174 'sbs-spf-dropdown-text-color' => $useGlobalSbs ? $globalColors['formDropdownTextColor'] : $colorSbsSpf['formDropdownTextColor'],
175 'sbs-pif-bgr-color' => $useGlobalSbs ? $globalColors['formBackgroundColor'] : $colorSbsPif['formBackgroundColor'],
176 'sbs-pif-text-color' => $useGlobalSbs ? $globalColors['formTextColor'] : $colorSbsPif['formTextColor'],
177 'sbs-psf-gradient1' => $useGlobalSbs ? $globalColors['formGradientColor1'] : $colorSbsPsf['formGradientColor1'],
178 'sbs-psf-gradient2' => $useGlobalSbs ? $globalColors['formGradientColor2'] : $colorSbsPsf['formGradientColor2'],
179 'sbs-psf-gradient-angle' => $useGlobalSbs ? $globalColors['formGradientAngle'] . 'deg' : $colorSbsPsf['formGradientAngle'] . 'deg',
180 'sbs-psf-text-color' => $useGlobalSbs ? $globalColors['textColorOnBackground'] : $colorSbsPsf['formTextColor'],
181 'sbs-psf-input-color' => $useGlobalSbs ? $globalColors['formInputColor'] : $colorSbsPsf['formInputColor'],
182 'sbs-psf-input-text-color' => $useGlobalSbs ? $globalColors['formInputTextColor'] : $colorSbsPsf['formInputTextColor'],
183 'sbs-psf-dropdown-color' => $useGlobalSbs ? $globalColors['formDropdownColor'] : $colorSbsPsf['formDropdownColor'],
184 'sbs-psf-dropdown-text-color' => $useGlobalSbs ? $globalColors['formDropdownTextColor'] : $colorSbsPsf['formDropdownTextColor'],
185 'sbs-plf-bgr-color' => $useGlobalSbs ? $globalColors['formBackgroundColor'] : $colorSbsPlf['formBackgroundColor'],
186 'sbs-plf-text-color' => $useGlobalSbs ? $globalColors['formTextColor'] : $colorSbsPlf['formTextColor'],
187 'sbs-cpf-bgr-color' => $useGlobalSbs ? $globalColors['formBackgroundColor'] : $colorSbsCpf['formBackgroundColor'],
188 'sbs-cpf-text-color' => $useGlobalSbs ? $globalColors['formTextColor'] : $colorSbsCpf['formTextColor'],
189 'sbs-cpf-input-color' => $useGlobalSbs ? $globalColors['formInputColor'] : $colorSbsCpf['formInputColor'],
190 'sbs-cpf-input-text-color' => $useGlobalSbs ? $globalColors['formInputTextColor'] : $colorSbsCpf['formInputTextColor'],
191 'sbs-cpf-dropdown-color' => $useGlobalSbs ? $globalColors['formDropdownColor'] : $colorSbsCpf['formDropdownColor'],
192 'sbs-cpf-dropdown-text-color' => $useGlobalSbs ? $globalColors['formDropdownTextColor'] : $colorSbsCpf['formDropdownTextColor'],
193 'sbs-coa-bgr-color' => $useGlobalSbs ? $globalColors['formBackgroundColor'] : $colorSbsCoa['formBackgroundColor'],
194 'sbs-coa-text-color' => $useGlobalSbs ? $globalColors['formTextColor'] : $colorSbsCoa['formTextColor'],
195 'sbs-coa-input-color' => $useGlobalSbs ? $globalColors['formInputColor'] : $colorSbsCoa['formInputColor'],
196 'sbs-coa-input-text-color' => $useGlobalSbs ? $globalColors['formInputTextColor'] : $colorSbsCoa['formInputTextColor'],
197 'sbs-coa-dropdown-color' => $useGlobalSbs ? $globalColors['formDropdownColor'] : $colorSbsCoa['formDropdownColor'],
198 'sbs-coa-dropdown-text-color' => $useGlobalSbs ? $globalColors['formDropdownTextColor'] : $colorSbsCoa['formDropdownTextColor'],
199 'sbs-cop-bgr-color' => $useGlobalSbs ? $globalColors['formBackgroundColor'] : $colorSbsCop['formBackgroundColor'],
200 'sbs-cop-text-color' => $useGlobalSbs ? $globalColors['formTextColor'] : $colorSbsCop['formTextColor'],
201 'sbs-cop-input-color' => $useGlobalSbs ? $globalColors['formInputColor'] : $colorSbsCop['formInputColor'],
202 'sbs-cop-input-text-color' => $useGlobalSbs ? $globalColors['formInputTextColor'] : $colorSbsCop['formInputTextColor'],
203 'sbs-cop-dropdown-color' => $useGlobalSbs ? $globalColors['formDropdownColor'] : $colorSbsCop['formDropdownColor'],
204 'sbs-cop-dropdown-text-color' => $useGlobalSbs ? $globalColors['formDropdownTextColor'] : $colorSbsCop['formDropdownTextColor'],
205 // catalog
206 'cf-ssf-bgr-color' => $useGlobalCf ? $globalColors['formBackgroundColor'] : $colorCfSsf['formBackgroundColor'],
207 'cf-ssf-text-color' => $useGlobalCf ? $globalColors['formTextColor'] : $colorCfSsf['formTextColor'],
208 'cf-ssf-input-color' => $useGlobalCf ? $globalColors['formInputColor'] : $colorCfSsf['formInputColor'],
209 'cf-ssf-input-text-color' => $useGlobalCf ? $globalColors['formInputTextColor'] : $colorCfSsf['formInputTextColor'],
210 'cf-ssf-dropdown-color' => $useGlobalCf ? $globalColors['formDropdownColor'] : $colorCfSsf['formDropdownColor'],
211 'cf-ssf-dropdown-text-color' => $useGlobalCf ? $globalColors['formDropdownTextColor'] : $colorCfSsf['formDropdownTextColor'],
212 'cf-cf-gradient1' => $useGlobalCf ? $globalColors['formGradientColor1'] : $colorCfCf['formGradientColor1'],
213 'cf-cf-gradient2' => $useGlobalCf ? $globalColors['formGradientColor2'] : $colorCfCf['formGradientColor2'],
214 'cf-cf-gradient-angle' => $useGlobalCf ? $globalColors['formGradientAngle'] . 'deg' : $colorCfCf['formGradientAngle'] . 'deg',
215 'cf-cf-text-color' => $useGlobalCf ? $globalColors['textColorOnBackground'] : $colorCfCf['formTextColor'],
216 'cf-rsf-gradient1' => $useGlobalCf ? $globalColors['formGradientColor1'] : $colorCfRsf['formGradientColor1'],
217 'cf-rsf-gradient2' => $useGlobalCf ? $globalColors['formGradientColor2'] : $colorCfRsf['formGradientColor2'],
218 'cf-rsf-gradient-angle' => $useGlobalCf ? $globalColors['formGradientAngle'] . 'deg' : $colorCfRsf['formGradientAngle'] . 'deg',
219 'cf-rsf-text-color' => $useGlobalCf ? $globalColors['textColorOnBackground'] : $colorCfRsf['formTextColor'],
220 'cf-rsf-input-color' => $useGlobalCf ? $globalColors['formInputColor'] : $colorCfRsf['formInputColor'],
221 'cf-rsf-input-text-color' => $useGlobalCf ? $globalColors['formInputTextColor'] : $colorCfRsf['formInputTextColor'],
222 'cf-rsf-dropdown-color' => $useGlobalCf ? $globalColors['formDropdownColor'] : $colorCfRsf['formDropdownColor'],
223 'cf-rsf-dropdown-text-color' => $useGlobalCf ? $globalColors['formDropdownTextColor'] : $colorCfRsf['formDropdownTextColor'],
224 'cf-rdf-bgr-color' => $useGlobalCf ? $globalColors['formBackgroundColor'] : $colorCfRdf['formBackgroundColor'],
225 'cf-rdf-text-color' => $useGlobalCf ? $globalColors['formTextColor'] : $colorCfRdf['formTextColor'],
226 'cf-rdf-input-color' => $useGlobalCf ? $globalColors['formInputColor'] : $colorCfRdf['formInputColor'],
227 'cf-rdf-input-text-color' => $useGlobalCf ? $globalColors['formInputTextColor'] : $colorCfRdf['formInputTextColor'],
228 'cf-rdf-dropdown-color' => $useGlobalCf ? $globalColors['formDropdownColor'] : $colorCfRdf['formDropdownColor'],
229 'cf-rdf-dropdown-text-color' => $useGlobalCf ? $globalColors['formDropdownTextColor'] : $colorCfRdf['formDropdownTextColor'],
230 'cf-caf-bgr-color' => $useGlobalCf ? $globalColors['formBackgroundColor'] : $colorCfCaf['formBackgroundColor'],
231 'cf-caf-text-color' => $useGlobalCf ? $globalColors['formTextColor'] : $colorCfCaf['formTextColor'],
232 'cf-caf-input-color' => $useGlobalCf ? $globalColors['formInputColor'] : $colorCfCaf['formInputColor'],
233 'cf-caf-input-text-color' => $useGlobalCf ? $globalColors['formInputTextColor'] : $colorCfCaf['formInputTextColor'],
234 'cf-caf-dropdown-color' => $useGlobalCf ? $globalColors['formDropdownColor'] : $colorCfCaf['formDropdownColor'],
235 'cf-caf-dropdown-text-color' => $useGlobalCf ? $globalColors['formDropdownTextColor'] : $colorCfCaf['formDropdownTextColor'],
236 'cf-psf-gradient1' => $useGlobalCf ? $globalColors['formGradientColor1'] : $colorCfPsf['formGradientColor1'],
237 'cf-psf-gradient2' => $useGlobalCf ? $globalColors['formGradientColor2'] : $colorCfPsf['formGradientColor2'],
238 'cf-psf-gradient-angle' => $useGlobalCf ? $globalColors['formGradientAngle'] . 'deg' : $colorCfPsf['formGradientAngle'] . 'deg',
239 'cf-psf-text-color' => $useGlobalCf ? $globalColors['textColorOnBackground'] : $colorCfPsf['formTextColor'],
240 'cf-psf-input-color' => $useGlobalCf ? $globalColors['formInputColor'] : $colorCfPsf['formInputColor'],
241 'cf-psf-input-text-color' => $useGlobalCf ? $globalColors['formInputTextColor'] : $colorCfPsf['formInputTextColor'],
242 'cf-psf-dropdown-color' => $useGlobalCf ? $globalColors['formDropdownColor'] : $colorCfPsf['formDropdownColor'],
243 'cf-psf-dropdown-text-color' => $useGlobalCf ? $globalColors['formDropdownTextColor'] : $colorCfPsf['formDropdownTextColor'],
244 'cf-plf-bgr-color' => $useGlobalCf ? $globalColors['formBackgroundColor'] : $colorCfPlf['formBackgroundColor'],
245 'cf-plf-text-color' => $useGlobalCf ? $globalColors['formTextColor'] : $colorCfPlf['formTextColor'],
246 'cf-cpf-bgr-color' => $useGlobalCf ? $globalColors['formBackgroundColor'] : $colorCfCpf['formBackgroundColor'],
247 'cf-cpf-text-color' => $useGlobalCf ? $globalColors['formTextColor'] : $colorCfCpf['formTextColor'],
248 'cf-cpf-input-color' => $useGlobalCf ? $globalColors['formInputColor'] : $colorCfCpf['formInputColor'],
249 'cf-cpf-input-text-color' => $useGlobalCf ? $globalColors['formInputTextColor'] : $colorCfCpf['formInputTextColor'],
250 'cf-cpf-dropdown-color' => $useGlobalCf ? $globalColors['formDropdownColor'] : $colorCfCpf['formDropdownColor'],
251 'cf-cpf-dropdown-text-color' => $useGlobalCf ? $globalColors['formDropdownTextColor'] : $colorCfCpf['formDropdownTextColor'],
252 'cf-coa-bgr-color' => $useGlobalCf ? $globalColors['formBackgroundColor'] : $colorCfCoa['formBackgroundColor'],
253 'cf-coa-text-color' => $useGlobalCf ? $globalColors['formTextColor'] : $colorCfCoa['formTextColor'],
254 'cf-coa-input-color' => $useGlobalCf ? $globalColors['formInputColor'] : $colorCfCoa['formInputColor'],
255 'cf-coa-input-text-color' => $useGlobalCf ? $globalColors['formInputTextColor'] : $colorCfCoa['formInputTextColor'],
256 'cf-coa-dropdown-color' => $useGlobalCf ? $globalColors['formDropdownColor'] : $colorCfCoa['formDropdownColor'],
257 'cf-coa-dropdown-text-color' => $useGlobalCf ? $globalColors['formDropdownTextColor'] : $colorCfCoa['formDropdownTextColor'],
258 'cf-cop-bgr-color' => $useGlobalCf ? $globalColors['formBackgroundColor'] : $colorCfCop['formBackgroundColor'],
259 'cf-cop-text-color' => $useGlobalCf ? $globalColors['formTextColor'] : $colorCfCop['formTextColor'],
260 'cf-cop-input-color' => $useGlobalCf ? $globalColors['formInputColor'] : $colorCfCop['formInputColor'],
261 'cf-cop-input-text-color' => $useGlobalCf ? $globalColors['formInputTextColor'] : $colorCfCop['formInputTextColor'],
262 'cf-cop-dropdown-color' => $useGlobalCf ? $globalColors['formDropdownColor'] : $colorCfCop['formDropdownColor'],
263 'cf-cop-dropdown-text-color' => $useGlobalCf ? $globalColors['formDropdownTextColor'] : $colorCfCop['formDropdownTextColor'],
264 // event list
265 'elf-bgr-color' => $useGlobalElf ? $globalColors['formBackgroundColor'] : $colorElf['formBackgroundColor'],
266 'elf-text-color' => $useGlobalElf ? $globalColors['formTextColor'] : $colorElf['formTextColor'],
267 'elf-input-color' => $useGlobalElf ? $globalColors['formInputColor'] : $colorElf['formInputColor'],
268 'elf-input-text-color' => $useGlobalElf ? $globalColors['formInputTextColor'] : $colorElf['formInputTextColor'],
269 'elf-dropdown-color' => $useGlobalElf ? $globalColors['formDropdownColor'] : $colorElf['formDropdownColor'],
270 'elf-dropdown-text-color' => $useGlobalElf ? $globalColors['formDropdownTextColor'] : $colorElf['formDropdownTextColor'],
271 // event calendar
272 'ecf-cef-bgr-color' => $useGlobalEcf ? $globalColors['formBackgroundColor'] : $colorEcfCef['formBackgroundColor'],
273 'ecf-cef-text-color' => $useGlobalEcf ? $globalColors['formTextColor'] : $colorEcfCef['formTextColor'],
274 'ecf-cef-input-color' => $useGlobalEcf ? $globalColors['formInputColor'] : $colorEcfCef['formInputColor'],
275 'ecf-cef-input-text-color' => $useGlobalEcf ? $globalColors['formInputTextColor'] : $colorEcfCef['formInputTextColor'],
276 'ecf-cef-dropdown-color' => $useGlobalEcf ? $globalColors['formDropdownColor'] : $colorEcfCef['formDropdownColor'],
277 'ecf-cef-dropdown-text-color' => $useGlobalEcf ? $globalColors['formDropdownTextColor'] : $colorEcfCef['formDropdownTextColor'],
278 'ecf-coe-bgr-color' => $useGlobalEcf ? $globalColors['formBackgroundColor'] : $colorEcfCoe['formBackgroundColor'],
279 'ecf-coe-text-color' => $useGlobalEcf ? $globalColors['formTextColor'] : $colorEcfCoe['formTextColor'],
280 'ecf-coe-input-color' => $useGlobalEcf ? $globalColors['formInputColor'] : $colorEcfCoe['formInputColor'],
281 'ecf-coe-input-text-color' => $useGlobalEcf ? $globalColors['formInputTextColor'] : $colorEcfCoe['formInputTextColor'],
282 'ecf-coe-dropdown-color' => $useGlobalEcf ? $globalColors['formDropdownColor'] : $colorEcfCoe['formDropdownColor'],
283 'ecf-coe-dropdown-text-color' => $useGlobalEcf ? $globalColors['formDropdownTextColor'] : $colorEcfCoe['formDropdownTextColor'],
284 ]
285 );
286
287 $settingsFields['customization']['hash'] = $hash;
288
289 $settingsFields['customization']['useGenerated'] = isset($customizationData['useGenerated']) ?
290 $customizationData['useGenerated'] : true;
291 }
292
293 if (
294 StarterWooCommerceService::isEnabled() &&
295 $command->getField('payments') &&
296 $command->getField('payments')['wc']['enabled']
297 ) {
298 $settingsFields['payments']['wc']['productId'] = StarterWooCommerceService::getIdForExistingOrNewProduct(
299 $settingsService->getCategorySettings('payments')['wc']['productId']
300 );
301 }
302
303
304 if ($command->getField('general') && $command->getField('general')['customFieldsUploadsPath']) {
305 $uploadPath = $command->getField('general')['customFieldsUploadsPath'];
306 if ($uploadPath[0] !== '/') {
307 throw new ForbiddenFileUploadException('Attachment upload path must be an absolute path, starting with a slash (/).');
308 }
309
310 !is_dir($uploadPath) && !mkdir($uploadPath, 0755, true);
311
312 if (!is_writable($uploadPath) || !is_dir($uploadPath)) {
313 throw new ForbiddenFileUploadException('Attachment upload path is not writable or does not exist.');
314 }
315
316 if (!file_exists("$uploadPath/index.html")) {
317 file_put_contents("$uploadPath/index.html", '');
318 }
319 }
320
321 if ($command->getField('sendAllCF') !== null) {
322 $notificationsSettings = $settingsService->getCategorySettings('notifications');
323
324 $settingsFields['notifications'] = $notificationsSettings;
325
326 $settingsFields['notifications']['sendAllCF'] = $command->getField('sendAllCF');
327
328 unset($settingsFields['sendAllCF']);
329 }
330
331 if ($command->getField('googleCalendar') !== null) {
332 $googleSettings = $command->getField('googleCalendar');
333
334 if (!$googleSettings['clientID'] || !$googleSettings['clientSecret']) {
335 $googleSettings['calendarEnabled'] = false;
336 }
337
338 $settingsFields['googleCalendar'] = array_merge(
339 $settingsService->getCategorySettings('googleCalendar'),
340 $googleSettings
341 );
342 }
343
344 if ($command->getField('outlookCalendar') !== null) {
345 $outlookSettings = $command->getField('outlookCalendar');
346
347 unset($outlookSettings['token']);
348
349 if (!$outlookSettings['clientID'] || !$outlookSettings['clientSecret']) {
350 $outlookSettings['calendarEnabled'] = false;
351 }
352
353 $settingsFields['outlookCalendar'] = array_merge(
354 $settingsService->getCategorySettings('outlookCalendar'),
355 $outlookSettings
356 );
357 }
358
359 if ($command->getField('providerBadges') !== null) {
360 $rolesSettings = $settingsService->getCategorySettings('roles');
361
362 $settingsFields['roles'] = $rolesSettings;
363
364 $settingsFields['roles']['providerBadges'] = $command->getField('providerBadges');
365
366 unset($settingsFields['providerBadges']);
367 }
368
369 if (
370 !$settingsService->getCategorySettings('activation')['stash'] &&
371 !empty($settingsFields['activation']['stash'])
372 ) {
373 /** @var StashApplicationService $stashApplicationService */
374 $stashApplicationService = $this->container->get('application.stash.service');
375
376 $stashApplicationService->setStash();
377 }
378
379 if (
380 isset($settingsFields['daysOff']) &&
381 $settingsService->getCategorySettings('activation')['stash'] &&
382 $settingsService->getCategorySettings('daysOff') !== $settingsFields['daysOff'] &&
383 $command->getField('daysOff') !== null
384 ) {
385 /** @var StashApplicationService $stashApplicationService */
386 $stashApplicationService = $this->container->get('application.stash.service');
387
388 $stashApplicationService->setStash($settingsFields['daysOff']);
389 }
390
391 $settingsFields['activation'] = array_merge(
392 $settingsService->getCategorySettings('activation'),
393 isset($settingsFields['activation']['deleteTables']) ? [
394 'deleteTables' => $settingsFields['activation']['deleteTables'] ? true : false
395 ] : [],
396 isset($settingsFields['activation']['envatoTokenEmail']) ? [
397 'envatoTokenEmail' => $settingsFields['activation']['envatoTokenEmail']
398 ] : [],
399 isset($settingsFields['activation']['active']) ? [
400 'active' => $settingsFields['activation']['active']
401 ] : [],
402 isset($settingsFields['activation']['stash']) ? [
403 'stash' => $settingsFields['activation']['stash']
404 ] : [],
405 isset($settingsFields['activation']['showAmeliaPromoCustomizePopup']) ? [
406 'showAmeliaPromoCustomizePopup' => $settingsFields['activation']['showAmeliaPromoCustomizePopup']
407 ] : [],
408 isset($settingsFields['activation']['showAmeliaSurvey']) ? [
409 'showAmeliaSurvey' => $settingsFields['activation']['showAmeliaSurvey']
410 ] : [],
411 isset($settingsFields['activation']['customUrl']) ? [
412 'customUrl' => $settingsFields['activation']['customUrl']
413 ] : [],
414 isset($settingsFields['activation']['v3AsyncLoading']) ? [
415 'v3AsyncLoading' => $settingsFields['activation']['v3AsyncLoading']
416 ] : [],
417 isset($settingsFields['activation']['v3RelativePath']) ? [
418 'v3RelativePath' => $settingsFields['activation']['v3RelativePath']
419 ] : [],
420 isset($settingsFields['activation']['enableThriveItems']) ? [
421 'enableThriveItems' => $settingsFields['activation']['enableThriveItems']
422 ] : [],
423 isset($settingsFields['activation']['responseErrorAsConflict']) ? [
424 'responseErrorAsConflict' => $settingsFields['activation']['responseErrorAsConflict']
425 ] : [],
426 isset($settingsFields['activation']['disableUrlParams']) ? [
427 'disableUrlParams' => $settingsFields['activation']['disableUrlParams']
428 ] : [],
429 isset($settingsFields['activation']['hideUnavailableFeatures']) ? [
430 'hideUnavailableFeatures' => $settingsFields['activation']['hideUnavailableFeatures']
431 ] : [],
432 isset($settingsFields['activation']['premiumBannerVisibility']) ? [
433 'premiumBannerVisibility' => $settingsFields['activation']['premiumBannerVisibility']
434 ] : [],
435 isset($settingsFields['activation']['dismissibleBannerVisibility']) ? [
436 'dismissibleBannerVisibility' => $settingsFields['activation']['dismissibleBannerVisibility']
437 ] : []
438 );
439
440 if ($command->getField('usedLanguages') !== null) {
441 $generalSettings = $settingsService->getCategorySettings('general');
442
443 $settingsFields['general'] = $generalSettings;
444
445 $settingsFields['general']['usedLanguages'] = $command->getField('usedLanguages');
446
447 unset($settingsFields['usedLanguages']);
448 }
449
450 if ($command->getField('lessonSpace') !== null && $settingsFields['lessonSpace']['apiKey']) {
451 if (!$settingsService->getCategorySettings('lessonSpace')['companyId']) {
452 /** @var AbstractLessonSpaceService $lessonSpaceService */
453 $lessonSpaceService = $this->container->get('infrastructure.lesson.space.service');
454
455 $companyDetails = $lessonSpaceService->getCompanyId($settingsFields['lessonSpace']['apiKey']);
456
457 $settingsFields['lessonSpace']['companyId'] = $companyDetails['id'];
458 } else {
459 $settingsFields['lessonSpace']['companyId'] = $settingsService->getCategorySettings('lessonSpace')['companyId'];
460 }
461 }
462
463 if ($command->getField('payments') && !empty($command->getField('payments')['square'])) {
464 $settingsFields['payments']['square']['accessToken'] = $settingsService->getCategorySettings('payments')['square']['accessToken'];
465 }
466
467 if (isset($settingsFields['apiKeys']) && isset($settingsFields['apiKeys']['apiKeys'])) {
468 /** @var BasicApiService $apiService */
469 $apiService = $this->getContainer()->get('domain.api.service');
470 foreach ($settingsFields['apiKeys']['apiKeys'] as $index => $apiKey) {
471 if (!empty($apiKey['isNew'])) {
472 $settingsFields['apiKeys']['apiKeys'][$index]['key'] = $apiService->createHash($settingsFields['apiKeys']['apiKeys'][$index]['key']);
473 }
474 unset($settingsFields['apiKeys']['apiKeys'][$index]['isNew']);
475 }
476 }
477
478 if (!empty($command->getField('appleCalendar')['clientID']) || !empty($command->getField('appleCalendar')['clientSecret'])) {
479 /** @var AbstractAppleCalendarService $appleCalendarService */
480 $appleCalendarService = $this->container->get('infrastructure.apple.calendar.service');
481
482 $appleId = $command->getField('appleCalendar')['clientID'];
483 $applePassword = $command->getField('appleCalendar')['clientSecret'];
484
485 $credentials = $appleCalendarService->handleAppleCredentials($appleId, $applePassword);
486
487 if (!$credentials) {
488 $result->setDataInResponse(true);
489 $result->setResult(CommandResult::RESULT_ERROR);
490 $result->setMessage('Make sure you are using the correct iCloud email address and app-specific password.');
491
492 return $result;
493 }
494 }
495
496 if (
497 $command->getField('appleCalendar') &&
498 empty($command->getField('appleCalendar')['clientID']) &&
499 empty($command->getField('appleCalendar')['clientSecret'])
500 ) {
501 $providerRepository = $this->container->get('domain.users.providers.repository');
502 /** @var Collection $providers */
503 $providers = $providerRepository->getAll();
504 foreach ($providers->getItems() as $provider) {
505 $providerRepository->updateFieldById($provider->getId()->getValue(), null, 'employeeAppleCalendar');
506 $providerRepository->updateFieldById($provider->getId()->getValue(), null, 'appleCalendarId');
507 }
508 }
509
510 if (!empty($command->getField('customizedData'))) {
511 $passedCustomizedData = $command->getField('customizedData');
512 $customizedData = $settingsService->getCategorySettings('customizedData');
513
514 foreach ($passedCustomizedData as $key => $value) {
515 $customizedData[$key] = $value;
516 }
517
518 $settingsFields['customizedData'] = $customizedData;
519 }
520
521 $settingsFields = apply_filters('amelia_before_settings_updated_filter', $settingsFields);
522
523 do_action('amelia_before_settings_updated', $settingsFields);
524
525 $settingsService->setAllSettings($settingsFields);
526
527 $settings = $settingsService->getAllSettingsCategorized();
528 $settings['general']['phoneDefaultCountryCode'] = $settings['general']['phoneDefaultCountryCode'] === 'auto' ?
529 $locationService->getCurrentLocationCountryIso($settings['general']['ipLocateApiKey']) : $settings['general']['phoneDefaultCountryCode'];
530
531 do_action('amelia_after_settings_updated', $settingsFields);
532
533 $result->setResult(CommandResult::RESULT_SUCCESS);
534 $result->setMessage('Successfully updated settings.');
535 $result->setData(
536 [
537 'settings' => $settings
538 ]
539 );
540
541 return $result;
542 }
543 }
544