. * * In accordance with Section 7(b) of the GNU Affero General Public License * version 3, these Appropriate Legal Notices must retain the display of the * "Supercharged by SuiteCRM" logo. If the display of the logos is not reasonably * feasible for technical reasons, the Appropriate Legal Notices must display * the words "Supercharged by SuiteCRM". */ namespace App\UserPreferences\LegacyHandler; use ApiPlatform\Exception\InvalidArgumentException; use App\Authentication\LegacyHandler\UserHandler; use App\Engine\LegacyHandler\LegacyHandler; use App\Engine\LegacyHandler\LegacyScopeState; use App\Process\Entity\Process; use App\Process\Service\ProcessHandlerInterface; use Exception; use Symfony\Component\HttpFoundation\RequestStack; class SetUserLanguage extends LegacyHandler implements ProcessHandlerInterface { protected const MSG_OPTIONS_NOT_FOUND = 'Process options is not defined'; protected const PROCESS_TYPE = 'set-user-language'; /** * @var UserHandler */ private $userHandler; /** * LegacyHandler constructor. * @param string $projectDir * @param string $legacyDir * @param string $legacySessionName * @param string $defaultSessionName * @param LegacyScopeState $legacyScopeState * @param RequestStack $requestStack * @param UserHandler $userHandler */ public function __construct( string $projectDir, string $legacyDir, string $legacySessionName, string $defaultSessionName, LegacyScopeState $legacyScopeState, RequestStack $requestStack, UserHandler $userHandler ) { parent::__construct( $projectDir, $legacyDir, $legacySessionName, $defaultSessionName, $legacyScopeState, $requestStack ); $this->userHandler = $userHandler; } /** * @inheritDoc */ public function getHandlerKey(): string { return self::PROCESS_TYPE; } /** * @inheritDoc */ public function getProcessType(): string { return self::PROCESS_TYPE; } /** * @inheritDoc */ public function requiredAuthRole(): string { return 'ROLE_USER'; } /** * @inheritDoc */ public function getRequiredACLs(Process $process): array { return []; } /** * @inheritDoc */ public function configure(Process $process): void { //This process is synchronous //We aren't going to store a record on db //thus we will use process type as the id $process->setId(self::PROCESS_TYPE); $process->setAsync(false); } /** * @inheritDoc */ public function validate(Process $process): void { if (empty($process->getOptions())) { throw new InvalidArgumentException(self::MSG_OPTIONS_NOT_FOUND); } } /** * @inheritDoc * @throws Exception */ public function run(Process $process) { ['language' => $language] = $process->getOptions(); if (empty($language)) { $process->setStatus('success'); $process->setMessages([]); return; } $this->userHandler->setUserPreference('language', $language); $user = $this->userHandler->getCurrentUser(); $this->init(); $user->savePreferencesToDB(); $process->setStatus('success'); $process->setMessages([]); } }