Example #1
0
 /**
  * @param Request            $request
  * @param PhraseaApplication $app
  * @return RedirectResponse|null
  */
 public function redirectOnLogRequests(Request $request, PhraseaApplication $app)
 {
     if (!$request->query->has('LOG')) {
         return null;
     }
     if ($app->getAuthenticator()->isAuthenticated()) {
         $app->getAuthenticator()->closeAccount();
     }
     if (null === ($token = $app['repo.tokens']->findValidToken($request->query->get('LOG')))) {
         $app->addFlash('error', $app->trans('The URL you used is out of date, please login'));
         return $app->redirectPath('homepage');
     }
     /** @var Token $token */
     $app->getAuthenticator()->openAccount($token->getUser());
     switch ($token->getType()) {
         case TokenManipulator::TYPE_FEED_ENTRY:
             return $app->redirectPath('lightbox_feed_entry', ['entry_id' => $token->getData()]);
         case TokenManipulator::TYPE_VALIDATE:
         case TokenManipulator::TYPE_VIEW:
             return $app->redirectPath('lightbox_validation', ['basket' => $token->getData()]);
     }
     return null;
 }
Example #2
0
 public static function updateClientInfos(Application $app, $appId)
 {
     if (!$app->getAuthenticator()->isAuthenticated()) {
         return;
     }
     $session = $app['repo.sessions']->find($app['session']->get('session_id'));
     if (!$session) {
         throw new SessionNotFound('No session found');
     }
     if (!$session->hasModuleId($appId)) {
         $module = new SessionModule();
         $module->setModuleId($appId);
         $module->setSession($session);
         $session->addModule($module);
         $app['orm.em']->persist($module);
         $app['orm.em']->persist($session);
         $app['orm.em']->flush();
     }
     $appName = ['1' => 'Prod', '2' => 'Client', '3' => 'Admin', '4' => 'Report', '5' => 'Thesaurus', '6' => 'Compare', '7' => 'Validate', '8' => 'Upload', '9' => 'API'];
     if (isset($appName[$appId])) {
         $sbas_ids = array_keys($app->getAclForUser($app->getAuthenticatedUser())->get_granted_sbas());
         foreach ($sbas_ids as $sbas_id) {
             try {
                 $logger = $app['phraseanet.logger']($app->findDataboxById($sbas_id));
                 $databox = $app->findDataboxById($sbas_id);
                 $connbas = $databox->get_connection();
                 $sql = 'SELECT appli FROM log WHERE id = :log_id';
                 $stmt = $connbas->prepare($sql);
                 $stmt->execute([':log_id' => $logger->get_id()]);
                 $row3 = $stmt->fetch(PDO::FETCH_ASSOC);
                 $stmt->closeCursor();
                 if (!$row3) {
                     throw new Exception('no log');
                 }
                 $applis = unserialize($row3['appli']);
                 if (!in_array($appId, $applis)) {
                     $applis[] = $appId;
                 }
                 $sql = 'UPDATE log SET appli = :applis WHERE id = :log_id';
                 $params = [':applis' => serialize($applis), ':log_id' => $logger->get_id()];
                 $stmt = $connbas->prepare($sql);
                 $stmt->execute($params);
                 $stmt->closeCursor();
             } catch (\Exception $e) {
             }
         }
     }
     return;
 }
Example #3
0
 private function logoutUser(Application $app)
 {
     $app->getAuthenticator()->closeAccount();
 }
 /**
  * Creates options based on a Symfony Request object
  *
  * @param Application $app
  * @param Request     $request
  *
  * @return static
  */
 public static function fromRequest(Application $app, Request $request)
 {
     $options = new static();
     $options->disallowBusinessFields();
     $options->setLocale($app['locale']);
     /** @var Authenticator $authenticator */
     $authenticator = $app->getAuthenticator();
     $isAuthenticated = $authenticator->isAuthenticated();
     /** @var ACLProvider $aclProvider */
     $aclProvider = $app['acl'];
     $acl = $isAuthenticated ? $aclProvider->get($authenticator->getUser()) : null;
     $selected_bases = $request->get('bases');
     if (is_array($selected_bases)) {
         $bas = [];
         foreach ($selected_bases as $bas_id) {
             try {
                 $bas[$bas_id] = \collection::get_from_base_id($app, $bas_id);
             } catch (\Exception_Databox_CollectionNotFound $e) {
                 // Ignore
             }
         }
     } elseif (!$isAuthenticated) {
         $bas = $app->getOpenCollections();
     } else {
         $bas = $acl->get_granted_base();
     }
     // Filter out not found collections
     $bas = array_filter($bas);
     if ($acl) {
         $filter = function (\collection $collection) use($acl) {
             return $acl->has_access_to_base($collection->get_base_id());
         };
     } else {
         $openCollections = $app->getOpenCollections();
         $filter = function (\collection $collection) use($openCollections) {
             return in_array($collection, $openCollections);
         };
     }
     /** @var \collection[] $bas */
     $bas = array_filter($bas, $filter);
     if (!empty($selected_bases) && empty($bas)) {
         throw new BadRequestHttpException('No collections match your criteria');
     }
     $options->onCollections($bas);
     if ($isAuthenticated && $acl->has_right('modifyrecord')) {
         $bf = array_filter($bas, function (\collection $collection) use($acl) {
             return $acl->has_right_on_base($collection->get_base_id(), 'canmodifrecord');
         });
         $options->allowBusinessFieldsOn($bf);
     }
     $status = is_array($request->get('status')) ? $request->get('status') : [];
     $fields = is_array($request->get('fields')) ? $request->get('fields') : [];
     if (empty($fields)) {
         // Select all fields (business included)
         foreach ($options->getDataboxes() as $databox) {
             foreach ($databox->get_meta_structure() as $field) {
                 $fields[] = $field->get_name();
             }
         }
         $fields = array_unique($fields);
     }
     $databoxFields = [];
     $databoxes = $options->getDataboxes();
     foreach ($databoxes as $databox) {
         $metaStructure = $databox->get_meta_structure();
         foreach ($fields as $field) {
             try {
                 $databoxField = $metaStructure->get_element_by_name($field);
             } catch (\Exception $e) {
                 continue;
             }
             if ($databoxField) {
                 $databoxFields[] = $databoxField;
             }
         }
     }
     $options->setFields($databoxFields);
     $options->setStatus($status);
     $options->setSearchType($request->get('search_type'));
     $options->setRecordType($request->get('record_type'));
     $min_date = $max_date = null;
     if ($request->get('date_min')) {
         $min_date = \DateTime::createFromFormat('Y/m/d H:i:s', $request->get('date_min') . ' 00:00:00');
     }
     if ($request->get('date_max')) {
         $max_date = \DateTime::createFromFormat('Y/m/d H:i:s', $request->get('date_max') . ' 23:59:59');
     }
     $options->setMinDate($min_date);
     $options->setMaxDate($max_date);
     $databoxDateFields = [];
     foreach ($databoxes as $databox) {
         $metaStructure = $databox->get_meta_structure();
         foreach (explode('|', $request->get('date_field')) as $field) {
             try {
                 $databoxField = $metaStructure->get_element_by_name($field);
             } catch (\Exception $e) {
                 continue;
             }
             if ($databoxField) {
                 $databoxDateFields[] = $databoxField;
             }
         }
     }
     $options->setDateFields($databoxDateFields);
     $options->setSort($request->get('sort'), $request->get('ord', SearchEngineOptions::SORT_MODE_DESC));
     $options->setStemming((bool) $request->get('stemme'));
     return $options;
 }
 /**
  * Logout authenticated user from application.
  *
  * @param Application $app
  */
 protected function logout(Application $app)
 {
     $app['session']->clear();
     $app->getAuthenticator()->reinitUser();
 }