Example #1
0
 /**
  * Display admin dashboard page
  *
  * @param  Application $app
  * @param  Request     $request
  * @return Response
  */
 public function slash(Application $app, Request $request)
 {
     switch ($emailStatus = $request->query->get('email')) {
         case 'sent':
             $emailStatus = $app->trans('Mail sent');
             break;
         case 'error':
             $emailStatus = $app->trans('Could not send email');
             break;
     }
     $parameters = ['cache_flushed' => $request->query->get('flush_cache') === 'ok', 'admins' => $app['repo.users']->findAdmins(), 'email_status' => $emailStatus];
     return $app['twig']->render('admin/dashboard.html.twig', $parameters);
 }
Example #2
0
 /**
  *  Save user preferenes
  *
  * @param  Application  $app
  * @param  Request      $request
  * @return JsonResponse
  */
 public function saveUserPref(Application $app, Request $request)
 {
     if (!$request->isXmlHttpRequest()) {
         $app->abort(400);
     }
     $msg = $app->trans('Error while saving preference');
     $prop = $request->request->get('prop');
     $value = $request->request->get('value');
     $success = false;
     if (null !== $prop && null !== $value) {
         $app['manipulator.user']->setUserSetting($app['authentication']->getUser(), $prop, $value);
         $success = true;
         $msg = $app->trans('Preference saved !');
     }
     return new JsonResponse(['success' => $success, 'message' => $msg]);
 }
Example #3
0
 public function getScheduler(Application $app, Request $request)
 {
     if ($request->getRequestFormat() !== "json") {
         $app->abort(406, 'Only JSON format is accepted.');
     }
     $scheduler = array_replace($app['task-manager.live-information']->getManager(), ['name' => $app->trans('Task Scheduler'), 'urls' => ['start' => $app->path('admin_tasks_scheduler_start'), 'stop' => $app->path('admin_tasks_scheduler_stop'), 'log' => $app->path('admin_tasks_scheduler_log')]]);
     return $app->json($scheduler);
 }
Example #4
0
 /**
  * Check session state
  *
  * @param  Application  $app
  * @param  Request      $request
  * @return JsonResponse
  */
 public function updateSession(Application $app, Request $request)
 {
     if (!$request->isXmlHttpRequest()) {
         $app->abort(400);
     }
     $ret = ['status' => 'unknown', 'message' => '', 'notifications' => false, 'changed' => []];
     if ($app['authentication']->isAuthenticated()) {
         $usr_id = $app['authentication']->getUser()->getId();
         if ($usr_id != $request->request->get('usr')) {
             // I logged with another user
             $ret['status'] = 'disconnected';
             return $app->json($ret);
         }
     } else {
         $ret['status'] = 'disconnected';
         return $app->json($ret);
     }
     try {
         $app['phraseanet.appbox']->get_connection();
     } catch (\Exception $e) {
         return $app->json($ret);
     }
     if (1 > ($moduleId = (int) $request->request->get('module'))) {
         $ret['message'] = 'Missing or Invalid `module` parameter';
         return $app->json($ret);
     }
     $session = $app['EM']->find('Phraseanet:Session', $app['session']->get('session_id'));
     $session->setUpdated(new \DateTime());
     if (!$session->hasModuleId($moduleId)) {
         $module = new SessionModule();
         $module->setModuleId($moduleId);
         $module->setSession($session);
         $app['EM']->persist($module);
     } else {
         $app['EM']->persist($session->getModuleById($moduleId)->setUpdated(new \DateTime()));
     }
     $app['EM']->persist($session);
     $app['EM']->flush();
     $ret['status'] = 'ok';
     $ret['notifications'] = $app['twig']->render('prod/notifications.html.twig', ['notifications' => $app['events-manager']->get_notifications()]);
     $baskets = $app['EM']->getRepository('Phraseanet:Basket')->findUnreadActiveByUser($app['authentication']->getUser());
     foreach ($baskets as $basket) {
         $ret['changed'][] = $basket->getId();
     }
     if (in_array($app['session']->get('phraseanet.message'), ['1', null])) {
         if ($app['conf']->get(['main', 'maintenance'])) {
             $ret['message'] .= $app->trans('The application is going down for maintenance, please logout.');
         }
         if ($app['conf']->get(['registry', 'maintenance', 'enabled'])) {
             $ret['message'] .= strip_tags($app['conf']->get(['registry', 'maintenance', 'message']));
         }
     }
     return $app->json($ret);
 }
Example #5
0
 /**
  * Return detailed informations about one story
  *
  * @param  Request       $request
  * @param  int           $databox_id
  * @param  int           $story_id
  * @return API_V1_result
  */
 public function get_story(Request $request, $databox_id, $story_id)
 {
     $result = new API_V1_result($this->app, $request, $this);
     $databox = $this->app['phraseanet.appbox']->get_databox($databox_id);
     try {
         $story = $databox->get_record($story_id);
         $result->set_datas(['story' => $this->list_story($story)]);
     } catch (NotFoundHttpException $e) {
         $result->set_error_message(API_V1_result::ERROR_BAD_REQUEST, $this->app->trans('Story Not Found'));
     } catch (\Exception $e) {
         $result->set_error_message(API_V1_result::ERROR_BAD_REQUEST, $this->app->trans('An error occured'));
     }
     return $result;
 }
Example #6
0
 /**
  * Display database terms of use
  *
  * @param  Application $app
  * @param  Request     $request
  * @return Response
  */
 public function displayTermsOfUse(Application $app, Request $request)
 {
     $toDisplay = $request->query->get('to_display', []);
     $data = [];
     foreach ($app['phraseanet.appbox']->get_databoxes() as $databox) {
         if (count($toDisplay) > 0 && !in_array($databox->get_sbas_id(), $toDisplay)) {
             continue;
         }
         $cgus = $databox->get_cgus();
         if (!isset($cgus[$app['locale']])) {
             continue;
         }
         $data[$databox->get_label($app['locale'])] = $cgus[$app['locale']]['value'];
     }
     return new Response($app['twig']->render('/prod/TOU.html.twig', ['TOUs' => $data, 'local_title' => $app->trans('Terms of use')]));
 }
Example #7
0
 /**
  * Get Databases control panel
  *
  * @param           $app     Application $app
  * @param           $request Request $request
  * @return Response
  */
 public function getDatabases(Application $app, Request $request)
 {
     $sbasIds = array_merge(array_keys($app['acl']->get($app['authentication']->getUser())->get_granted_sbas(['bas_manage'])), array_keys($app['acl']->get($app['authentication']->getUser())->get_granted_sbas(['bas_modify_struct'])));
     $sbas = [];
     foreach ($sbasIds as $sbasId) {
         $sbas[$sbasId] = ['version' => 'unknown', 'image' => '/skins/icons/db-remove.png', 'server_info' => '', 'name' => $app->trans('Unreachable server')];
         try {
             $databox = $app['phraseanet.appbox']->get_databox($sbasId);
             $sbas[$sbasId] = ['version' => $databox->get_version(), 'image' => '/skins/icons/foldph20close_0.gif', 'server_info' => $databox->get_connection()->getWrappedConnection()->getAttribute(\PDO::ATTR_SERVER_VERSION), 'name' => \phrasea::sbas_labels($sbasId, $app)];
         } catch (\Exception $e) {
         }
     }
     switch ($errorMsg = $request->query->get('error')) {
         case 'scheduler-started':
             $errorMsg = $app->trans('Veuillez arreter le planificateur avant la mise a jour');
             break;
         case 'already-started':
             $errorMsg = $app->trans('The upgrade is already started');
             break;
         case 'unknow':
             $errorMsg = $app->trans('An error occured');
             break;
         case 'bad-email':
             $errorMsg = $app->trans('Please fix the database before starting');
             break;
         case 'special-chars':
             $errorMsg = $app->trans('Database name can not contains special characters');
             break;
         case 'base-failed':
             $errorMsg = $app->trans('Base could not be created');
             break;
         case 'database-failed':
             $errorMsg = $app->trans('Database does not exists or can not be accessed');
             break;
         case 'no-empty':
             $errorMsg = $app->trans('Database can not be empty');
             break;
         case 'mount-failed':
             $errorMsg = $app->trans('Database could not be mounted');
             break;
     }
     $upgrader = new \Setup_Upgrade($app);
     return $app['twig']->render('admin/databases.html.twig', ['files' => new \DirectoryIterator($app['root.path'] . '/lib/conf.d/data_templates'), 'sbas' => $sbas, 'error_msg' => $errorMsg, 'recommendations' => $upgrader->getRecommendations(), 'advices' => $request->query->get('advices', []), 'reloadTree' => (bool) $request->query->get('reload-tree')]);
 }
Example #8
0
 private function doSearchCandidate(Application $app, $bid, $pid, $t, $k, $piv)
 {
     $ret = new \DOMDocument("1.0", "UTF-8");
     $ret->standalone = true;
     $ret->preserveWhiteSpace = false;
     $root = $ret->appendChild($ret->createElement("result"));
     $root->appendChild($ret->createCDATASection(var_export(["bid" => $bid, "pid" => $pid, "t" => $t, "k" => $k, "piv" => $piv], true)));
     $ctlist = $root->appendChild($ret->createElement("candidates_list"));
     try {
         $databox = $app['phraseanet.appbox']->get_databox((int) $bid);
         $domstruct = $databox->get_dom_structure();
         $domth = $databox->get_dom_thesaurus();
         $domct = $databox->get_dom_cterms();
         if ($domstruct && $domth && $domct) {
             $xpathth = new \DOMXPath($domth);
             $xpathct = new \DOMXPath($domct);
             // on cherche les champs d'ou peut provenir un candidat, en fct de l'endroit oe on veut inserer le nouveau terme
             $fields = array();
             $xpathstruct = new \DOMXPath($domstruct);
             $nodes = $xpathstruct->query("/record/description/*[@tbranch]");
             for ($i = 0; $i < $nodes->length; $i++) {
                 $fieldname = $nodes->item($i)->nodeName;
                 $tbranch = $nodes->item($i)->getAttribute("tbranch");
                 if ($pid != "") {
                     $q = "(" . $tbranch . ")/descendant-or-self::te[@id='" . $pid . "']";
                 } else {
                     $q = "(" . $tbranch . ")/descendant-or-self::te[not(@id)]";
                 }
                 $fields[$fieldname] = ["name" => $fieldname, "tbranch" => $tbranch, "cid" => null, "sourceok" => false];
                 if (!$tbranch) {
                     continue;
                 }
                 $l = $xpathth->query($q)->length;
                 if ($l > 0) {
                     // le pt d'insertion du nvo terme se trouve dans la tbranch du champ,
                     // donc ce champ peut etre source de candidats
                     $fields[$fieldname]["sourceok"] = true;
                 } else {
                     // le pt d'insertion du nvo terme ne se trouve PAS dans la tbranch du champ,
                     // donc ce champ ne peut pas etre source de candidats
                 }
             }
             // on considere que la source 'deleted' est toujours valide
             $fields["[deleted]"] = ["name" => $app->trans('thesaurus:: corbeille'), "tbranch" => null, "cid" => null, "sourceok" => true];
             if (count($fields) > 0) {
                 $q = "@w='" . \thesaurus::xquery_escape($app['unicode']->remove_indexer_chars($t)) . "'";
                 if ($k) {
                     if ($k != "*") {
                         $q .= " and @k='" . \thesaurus::xquery_escape($app['unicode']->remove_indexer_chars($k)) . "'";
                     }
                 } else {
                     $q .= " and not(@k)";
                 }
                 $q = "/cterms//te[./sy[{$q}]]";
                 $nodes = $xpathct->query($q);
                 // le terme peut etre present dans plusieurs candidats
                 for ($i = 0; $i < $nodes->length; $i++) {
                     // on a trouve le terme dans les candidats, mais en provenance de quel champ ?.. on remonte au champ candidat
                     for ($n = $nodes->item($i)->parentNode; $n && $n->parentNode && $n->parentNode->nodeName != "cterms"; $n = $n->parentNode) {
                     }
                     if ($n && array_key_exists($f = $n->getAttribute("field"), $fields)) {
                         $fields[$f]["cid"] = $nodes->item($i)->getAttribute("id");
                     }
                 }
             }
             foreach ($fields as $kfield => $field) {
                 if ($field["cid"] === null) {
                     continue;
                 }
                 $ct = $ctlist->appendChild($ret->createElement("ct"));
                 $ct->setAttribute("field", $field["name"]);
                 $ct->setAttribute("sourceok", $field["sourceok"] ? "1" : "0");
                 if ($field["cid"] !== null) {
                     $ct->setAttribute("id", $field["cid"]);
                 }
             }
         }
     } catch (\Exception $e) {
     }
     return $ret;
 }
Example #9
0
 /**
  * Get number of indexed items for a databox
  *
  * @param  Application  $app        The silex application
  * @param  Request      $request    The current HTTP request
  * @param  integer      $databox_id The requested databox
  * @return JsonResponse
  */
 public function progressBarInfos(Application $app, Request $request, $databox_id)
 {
     if (!$app['request']->isXmlHttpRequest() || 'json' !== $app['request']->getRequestFormat()) {
         $app->abort(400, $app->trans('Bad request format, only JSON is allowed'));
     }
     $app['phraseanet.appbox'] = $app['phraseanet.appbox'];
     $ret = ['success' => false, 'msg' => $app->trans('An error occured'), 'sbas_id' => null, 'indexable' => false, 'records' => 0, 'xml_indexed' => 0, 'thesaurus_indexed' => 0, 'viewname' => null, 'printLogoURL' => null];
     try {
         $databox = $app['phraseanet.appbox']->get_databox($databox_id);
         $datas = $databox->get_indexed_record_amount();
         $ret['indexable'] = $app['phraseanet.appbox']->is_databox_indexable($databox);
         $ret['viewname'] = $databox->get_dbname() == $databox->get_viewname() ? $app->trans('admin::base: aucun alias') : $databox->get_viewname();
         $ret['records'] = $databox->get_record_amount();
         $ret['sbas_id'] = $databox_id;
         $ret['xml_indexed'] = $datas['xml_indexed'];
         $ret['thesaurus_indexed'] = $datas['thesaurus_indexed'];
         $ret['jeton_subdef'] = $datas['jeton_subdef'];
         if ($app['filesystem']->exists($app['root.path'] . '/config/minilogos/logopdf_' . $databox_id . '.jpg')) {
             $ret['printLogoURL'] = '/custom/minilogos/logopdf_' . $databox_id . '.jpg';
         }
         $ret['success'] = true;
         $ret['msg'] = $app->trans('Successful update');
     } catch (\Exception $e) {
     }
     return $app->json($ret);
 }
Example #10
0
 public function unshareWithUser(Application $app, $list_id, $usr_id)
 {
     try {
         $repository = $app['EM']->getRepository('Phraseanet:UsrList');
         $list = $repository->findUserListByUserAndId($app['authentication']->getUser(), $list_id);
         /* @var $list UsrList */
         if ($list->getOwner($app['authentication']->getUser())->getRole() < UsrListOwner::ROLE_ADMIN) {
             throw new \Exception($app->trans('You are not authorized to do this'));
         }
         $owners_repository = $app['EM']->getRepository('Phraseanet:UsrListOwner');
         $owner = $owners_repository->findByListAndUsrId($list, $usr_id);
         $app['EM']->remove($owner);
         $app['EM']->flush();
         $datas = ['success' => true, 'message' => $app->trans('Owner removed from list')];
     } catch (ControllerException $e) {
         $datas = ['success' => false, 'message' => $e->getMessage()];
     } catch (\Exception $e) {
         $datas = ['success' => false, 'message' => $app->trans('Unable to remove usr from list')];
     }
     return $app->json($datas);
 }
Example #11
0
 public function stealElements(Application $app, Request $request, BasketEntity $basket)
 {
     $n = 0;
     foreach ($request->request->get('elements') as $bask_element_id) {
         try {
             $basket_element = $app['repo.basket-elements']->findUserElement($bask_element_id, $app['authentication']->getUser());
         } catch (\Exception $e) {
             continue;
         }
         $basket_element->getBasket()->removeElement($basket_element);
         $basket_element->setBasket($basket);
         $basket->addElement($basket_element);
         $n++;
     }
     $app['EM']->flush();
     $data = ['success' => true, 'message' => $app->trans('%quantity% records moved', ['%quantity%' => $n])];
     if ($request->getRequestFormat() === 'json') {
         return $app->json($data);
     } else {
         return $app->redirectPath('prod_workzone_show');
     }
 }
Example #12
0
 public function labels(Application $app, Request $request, $bas_id)
 {
     if (null === ($labels = $request->request->get('labels'))) {
         $app->abort(400, $app->trans('Missing labels parameter'));
     }
     if (false === is_array($labels)) {
         $app->abort(400, $app->trans('Invalid labels parameter'));
     }
     $collection = \collection::get_from_base_id($app, $bas_id);
     $success = true;
     try {
         foreach ($app['locales.available'] as $code => $language) {
             if (!isset($labels[$code])) {
                 continue;
             }
             $value = $labels[$code] ?: null;
             $collection->set_label($code, $value);
         }
     } catch (\Exception $e) {
         $success = false;
     }
     if ('json' === $app['request']->getRequestFormat()) {
         return $app->json(['success' => $success, 'msg' => $success ? $app->trans('Successful update') : $app->trans('An error occured')]);
     }
     return $app->redirectPath('admin_display_collection', ['bas_id' => $collection->get_base_id(), 'success' => (int) $success, 'reload-tree' => 1]);
 }
Example #13
0
 /**
  * Set Report configuration according to request parameters
  *
  * @param  Application    $app     An application instance
  * @param  Request        $request A request instance
  * @param  \module_report $report  A report instance
  * @param  Array          $conf    A report column configuration
  * @param  Boolean        $what    Whether to group on a particular field or not
  * @return Array
  */
 private function doReport(Application $app, Request $request, \module_report $report, $conf, $what = false)
 {
     if ($app['conf']->get(['registry', 'modules', 'anonymous-report']) == true) {
         if (isset($conf['user'])) {
             unset($conf['user']);
         }
         if (isset($conf['ip'])) {
             unset($conf['ip']);
         }
     }
     //save initial conf
     $base_conf = $conf;
     //format conf according user preferences
     if ('' !== ($columnsList = $request->request->get('list_column', ''))) {
         $new_conf = $conf;
         $columns = explode(',', $columnsList);
         foreach (array_keys($conf) as $col) {
             if (!in_array($col, $columns)) {
                 unset($new_conf[$col]);
             }
         }
         $conf = $new_conf;
     }
     //display content of a table column when user click on it
     if ($request->request->get('conf') == 'on') {
         return $app->json(['liste' => $app['twig']->render('report/listColumn.html.twig', ['conf' => $base_conf]), 'title' => $app->trans('configuration')]);
     }
     //set order
     if ('' !== ($order = $request->request->get('order', '')) && '' !== ($field = $request->request->get('champ', ''))) {
         $report->setOrder($field, $order);
     }
     //work on filters
     $mapColumnTitleToSqlField = $report->getTransQueryString();
     $currentfilter = [];
     if ('' !== ($serializedFilter = $request->request->get('liste_filter', ''))) {
         $currentfilter = @unserialize(urldecode($serializedFilter));
     }
     $filter = new \module_report_filter($app, $currentfilter, $mapColumnTitleToSqlField);
     if ('' !== ($filterColumn = $request->request->get('filter_column', ''))) {
         $field = current(explode(' ', $filterColumn));
         $value = $request->request->get('filter_value', '');
         if ($request->request->get('liste') == 'on') {
             return $app->json(['diag' => $app['twig']->render('report/colFilter.html.twig', ['result' => $report->colFilter($field), 'field' => $field]), 'title' => $app->trans('filtrer les resultats sur la colonne %colonne%', ['%colonne%' => $field])]);
         }
         if ($field === $value) {
             $filter->removeFilter($field);
         } else {
             $filter->addFilter($field, '=', $value);
         }
     }
     //set new request filter if user asking for them
     if ($request->request->get('precise') == 1) {
         $filter->addFilter('xml', 'LIKE', $request->request->get('word', ''));
     } elseif ($request->request->get('precise') == 2) {
         $filter->addFilter('record_id', '=', $request->request->get('word', ''));
     }
     //set filters to current report
     $report->setFilter($filter->getTabFilter());
     $report->setActiveColumn($filter->getActiveColumn());
     $report->setPostingFilter($filter->getPostingFilter());
     // display a new arraywhere results are group
     if ('' !== ($groupby = $request->request->get('groupby', ''))) {
         $report->setConfig(false);
         $groupby = current(explode(' ', $groupby));
         $reportArray = $report->buildReport(false, $groupby);
         if (count($reportArray['allChamps']) > 0 && count($reportArray['display']) > 0) {
             $groupField = isset($reportArray['display'][$reportArray['allChamps'][0]]['title']) ? $reportArray['display'][$reportArray['allChamps'][0]]['title'] : '';
         } else {
             $groupField = isset($conf[strtolower($groupby)]['title']) ? $conf[strtolower($groupby)]['title'] : '';
         }
         return $app->json(['rs' => $app['twig']->render('report/ajax_data_content.html.twig', ['result' => isset($reportArray['report']) ? $reportArray['report'] : $reportArray, 'is_infouser' => false, 'is_nav' => false, 'is_groupby' => true, 'is_plot' => false, 'is_doc' => false]), 'display_nav' => false, 'title' => $app->trans('Groupement des resultats sur le champ %name%', ['%name%' => $groupField])]);
     }
     //set Limit
     if ($report->getEnableLimit() && '' !== ($page = $request->request->get('page', '')) && '' !== ($limit = $request->request->get('limit', ''))) {
         $report->setLimit($page, $limit);
     } else {
         $report->setLimit(false, false);
     }
     //time to build our report
     if (false === $what) {
         $reportArray = $report->buildReport($conf);
     } else {
         $reportArray = $report->buildReport($conf, $what, $request->request->get('tbl', false));
     }
     return $reportArray;
 }
Example #14
0
 public function connect(Application $app)
 {
     $app['controller.prod.language'] = $this;
     $controller = $app['controllers_factory'];
     $controller->get("/", function (Application $app) {
         $out = [];
         $out['thesaurusBasesChanged'] = $app->trans('prod::recherche: Attention : la liste des bases selectionnees pour la recherche a ete changee.');
         $out['confirmDel'] = $app->trans('paniers::Vous etes sur le point de supprimer ce panier. Cette action est irreversible. Souhaitez-vous continuer ?');
         $out['serverError'] = $app->trans('phraseanet::erreur: Une erreur est survenue, si ce probleme persiste, contactez le support technique');
         $out['serverName'] = $app['conf']->get('servername');
         $out['serverTimeout'] = $app->trans('phraseanet::erreur: La connection au serveur Phraseanet semble etre indisponible');
         $out['serverDisconnected'] = $app->trans('phraseanet::erreur: Votre session est fermee, veuillez vous re-authentifier');
         $out['hideMessage'] = $app->trans('phraseanet::Ne plus afficher ce message');
         $out['confirmGroup'] = $app->trans('Supprimer egalement les documents rattaches a ces regroupements');
         $out['confirmDelete'] = $app->trans('reponses:: Ces enregistrements vont etre definitivement supprimes et ne pourront etre recuperes. Etes vous sur ?');
         $out['cancel'] = $app->trans('boutton::annuler');
         $out['deleteTitle'] = $app->trans('boutton::supprimer');
         $out['deleteRecords'] = $app->trans('Delete records');
         $out['edit_hetero'] = $app->trans('prod::editing valeurs heterogenes, choisir \'remplacer\', \'ajouter\' ou \'annuler\'');
         $out['confirm_abandon'] = $app->trans('prod::editing::annulation: abandonner les modification ?');
         $out['loading'] = $app->trans('phraseanet::chargement');
         $out['valider'] = $app->trans('boutton::valider');
         $out['annuler'] = $app->trans('boutton::annuler');
         $out['create'] = $app->trans('boutton::creer');
         $out['rechercher'] = $app->trans('boutton::rechercher');
         $out['renewRss'] = $app->trans('boutton::renouveller');
         $out['candeletesome'] = $app->trans('Vous n\'avez pas les droits pour supprimer certains documents');
         $out['candeletedocuments'] = $app->trans('Vous n\'avez pas les droits pour supprimer ces documents');
         $out['needTitle'] = $app->trans('Vous devez donner un titre');
         $out['newPreset'] = $app->trans('Nouveau modele');
         $out['fermer'] = $app->trans('boutton::fermer');
         $out['feed_require_fields'] = $app->trans('Vous n\'avez pas rempli tous les champ requis');
         $out['feed_require_feed'] = $app->trans('Vous n\'avez pas selectionne de fil de publication');
         $out['removeTitle'] = $app->trans('panier::Supression d\'un element d\'un reportage');
         $out['confirmRemoveReg'] = $app->trans('panier::Attention, vous etes sur le point de supprimer un element du reportage. Merci de confirmer votre action.');
         $out['advsearch_title'] = $app->trans('phraseanet::recherche avancee');
         $out['bask_rename'] = $app->trans('panier:: renommer le panier');
         $out['reg_wrong_sbas'] = $app->trans('panier:: Un reportage ne peux recevoir que des elements provenants de la base ou il est enregistre');
         $out['error'] = $app->trans('phraseanet:: Erreur');
         $out['warningDenyCgus'] = $app->trans('cgus :: Attention, si vous refuser les CGUs de cette base, vous n\'y aures plus acces');
         $out['cgusRelog'] = $app->trans('cgus :: Vous devez vous reauthentifier pour que vos parametres soient pris en compte.');
         $out['editDelMulti'] = $app->trans('edit:: Supprimer %s du champ dans les records selectionnes');
         $out['editAddMulti'] = $app->trans('edit:: Ajouter %s au champ courrant pour les records selectionnes');
         $out['editDelSimple'] = $app->trans('edit:: Supprimer %s du champ courrant');
         $out['editAddSimple'] = $app->trans('edit:: Ajouter %s au champ courrant');
         $out['cantDeletePublicOne'] = $app->trans('panier:: vous ne pouvez pas supprimer un panier public');
         $out['wrongsbas'] = $app->trans('panier:: Un reportage ne peux recevoir que des elements provenants de la base ou il est enregistre');
         $out['max_record_selected'] = $app->trans('Vous ne pouvez pas selectionner plus de 800 enregistrements');
         $out['confirmRedirectAuth'] = $app->trans('invite:: Redirection vers la zone d\'authentification, cliquez sur OK pour continuer ou annulez');
         $out['error_test_publi'] = $app->trans('Erreur : soit les parametres sont incorrects, soit le serveur distant ne repond pas');
         $out['test_publi_ok'] = $app->trans('Les parametres sont corrects, le serveur distant est operationnel');
         $out['some_not_published'] = $app->trans('Certaines publications n\'ont pu etre effectuees, verifiez vos parametres');
         $out['error_not_published'] = $app->trans('Aucune publication effectuee, verifiez vos parametres');
         $out['warning_delete_publi'] = $app->trans('Attention, en supprimant ce preregalge, vous ne pourrez plus modifier ou supprimer de publications prealablement effectues avec celui-ci');
         $out['some_required_fields'] = $app->trans('edit::certains documents possedent des champs requis non remplis. Merci de les remplir pour valider votre editing');
         $out['nodocselected'] = $app->trans('Aucun document selectionne');
         $out['sureToRemoveList'] = $app->trans('Are you sure you want to delete this list ?');
         $out['newListName'] = $app->trans('New list name ?');
         $out['listNameCannotBeEmpty'] = $app->trans('List name can not be empty');
         $out['FeedBackName'] = $app->trans('Name');
         $out['FeedBackMessage'] = $app->trans('Message');
         $out['FeedBackDuration'] = $app->trans('Time for feedback (days)');
         $out['FeedBackNameMandatory'] = $app->trans('Please provide a name for this selection.');
         $out['send'] = $app->trans('Send');
         $out['Recept'] = $app->trans('Accuse de reception');
         $out['nFieldsChanged'] = $app->trans('%d fields have been updated');
         $out['FeedBackNoUsersSelected'] = $app->trans('No users selected');
         $out['errorFileApi'] = $app->trans('An error occurred reading this file');
         $out['errorFileApiTooBig'] = $app->trans('This file is too big');
         $out['selectOneRecord'] = $app->trans('Please select one record');
         $out['onlyOneRecord'] = $app->trans('You can choose only one record');
         $out['errorAjaxRequest'] = $app->trans('An error occured, please retry');
         $out['fileBeingDownloaded'] = $app->trans('Some files are being downloaded');
         $out['warning'] = $app->trans('Attention');
         $out['browserFeatureSupport'] = $app->trans('This feature is not supported by your browser');
         $out['noActiveBasket'] = $app->trans('No active basket');
         $out['pushUserCanDownload'] = $app->trans('User can download HD');
         $out['feedbackCanContribute'] = $app->trans('User contribute to the feedback');
         $out['feedbackCanSeeOthers'] = $app->trans('User can see others choices');
         $out['forceSendDocument'] = $app->trans('Force sending of the document ?');
         $out['export'] = $app->trans('Export');
         $out['share'] = $app->trans('Share');
         $out['move'] = $app->trans('Move');
         $out['push'] = $app->trans('Push');
         $out['feedback'] = $app->trans('Feedback');
         $out['toolbox'] = $app->trans('Tool box');
         $out['print'] = $app->trans('Print');
         $out['attention'] = $app->trans('Attention !');
         return $app->json($out);
     });
     return $controller;
 }
Example #15
0
 /**
  * Gets client language
  *
  * @param  Application  $app
  * @param  Request      $request
  * @return JsonResponse
  */
 public function getClientLanguage(Application $app, Request $request)
 {
     $out = [];
     $out['createWinInvite'] = $app->trans('paniers:: Quel nom souhaitez vous donner a votre panier ?');
     $out['chuNameEmpty'] = $app->trans('paniers:: Quel nom souhaitez vous donner a votre panier ?');
     $out['noDLok'] = $app->trans('export:: aucun document n\'est disponible au telechargement');
     $out['confirmRedirectAuth'] = $app->trans('invite:: Redirection vers la zone d\'authentification, cliquez sur OK pour continuer ou annulez');
     $out['serverName'] = $app['conf']->get('servername');
     $out['serverError'] = $app->trans('phraseanet::erreur: Une erreur est survenue, si ce probleme persiste, contactez le support technique');
     $out['serverTimeout'] = $app->trans('phraseanet::erreur: La connection au serveur Phraseanet semble etre indisponible');
     $out['serverDisconnected'] = $app->trans('phraseanet::erreur: Votre session est fermee, veuillez vous re-authentifier');
     $out['confirmDelBasket'] = $app->trans('paniers::Vous etes sur le point de supprimer ce panier. Cette action est irreversible. Souhaitez-vous continuer ?');
     $out['annuler'] = $app->trans('boutton::annuler');
     $out['fermer'] = $app->trans('boutton::fermer');
     $out['renewRss'] = $app->trans('boutton::renouveller');
     $out['print'] = $app->trans('Print');
     $out['no_basket'] = $app->trans('Please create a basket before adding an element');
     return $app->json($out);
 }
Example #16
0
 /**
  * Substitute a record element by a lazaret element
  *
  * @param Application $app     A Silex application where the controller is mounted on
  * @param Request     $request The current request
  * @param int         $file_id A lazaret element id
  *
  * @return Response
  */
 public function acceptElement(Application $app, Request $request, $file_id)
 {
     $ret = ['success' => false, 'message' => '', 'result' => []];
     //Mandatory parameter
     if (null === ($recordId = $request->request->get('record_id'))) {
         $ret['message'] = $app->trans('You must give a destination record');
         return $app->json($ret);
     }
     $lazaretFile = $app['EM']->find('Phraseanet:LazaretFile', $file_id);
     /* @var $lazaretFile LazaretFile */
     if (null === $lazaretFile) {
         $ret['message'] = $app->trans('File is not present in quarantine anymore, please refresh');
         return $app->json($ret);
     }
     $found = false;
     //Check if the choosen record is eligible to the substitution
     foreach ($lazaretFile->getRecordsToSubstitute($app) as $record) {
         if ($record->get_record_id() !== (int) $recordId) {
             continue;
         }
         $found = true;
         break;
     }
     if (!$found) {
         $ret['message'] = $app->trans('The destination record provided is not allowed');
         return $app->json($ret);
     }
     $lazaretFileName = $app['root.path'] . '/tmp/lazaret/' . $lazaretFile->getFilename();
     $lazaretThumbFileName = $app['root.path'] . '/tmp/lazaret/' . $lazaretFile->getThumbFilename();
     try {
         $media = $app['mediavorus']->guess($lazaretFileName);
         $record = $lazaretFile->getCollection($app)->get_databox()->get_record($recordId);
         $app['subdef.substituer']->substitute($record, 'document', $media);
         $app['phraseanet.logger']($record->get_databox())->log($record, \Session_Logger::EVENT_SUBSTITUTE, 'HD', '');
         //Delete lazaret file
         $app['EM']->remove($lazaretFile);
         $app['EM']->flush();
         $ret['success'] = true;
     } catch (\Exception $e) {
         $ret['message'] = $app->trans('An error occured');
     }
     try {
         $app['filesystem']->remove([$lazaretFileName, $lazaretThumbFileName]);
     } catch (IOException $e) {
     }
     return $app->json($ret);
 }
Example #17
0
 /**
  * Display authorized applications that can access user informations
  *
  * @param Application $app            A Silex application where the controller is mounted on
  * @param Request     $request        The current request
  * @param Integer     $application_id The application id
  *
  * @return JsonResponse
  */
 public function grantAccess(Application $app, Request $request, $application_id)
 {
     if (!$request->isXmlHttpRequest() || !array_key_exists($request->getMimeType('json'), array_flip($request->getAcceptableContentTypes()))) {
         $app->abort(400, $app->trans('Bad request format, only JSON is allowed'));
     }
     $error = false;
     try {
         $account = \API_OAuth2_Account::load_with_user($app, new \API_OAuth2_Application($app, $application_id), $app['authentication']->getUser());
         $account->set_revoked((bool) $request->query->get('revoke'), false);
     } catch (NotFoundHttpException $e) {
         $error = true;
     }
     return $app->json(['success' => !$error]);
 }
Example #18
0
 public function getLanguage(Application $app, Request $request)
 {
     return $app->json(['something_wrong' => $app->trans('Something wrong happened, please try again or contact an admin.'), 'created_success' => $app->trans('%s field has been created with success.'), 'deleted_success' => $app->trans('%s field has been deleted with success.'), 'are_you_sure_delete' => $app->trans('Do you really want to delete the field %s ?'), 'validation_blank' => $app->trans('Field can not be blank.'), 'validation_name_exists' => $app->trans('Field name already exists.'), 'validation_name_invalid' => $app->trans('Field name is not valid.'), 'validation_tag_invalid' => $app->trans('Field source is not valid.'), 'field_error' => $app->trans('Field %s contains errors.'), 'fields_save' => $app->trans('Your configuration has been successfuly saved.')]);
 }
Example #19
0
 public function getScheduler(Application $app, Request $request)
 {
     if (false === $app['phraseanet.configuration']['main']['task-manager']['enabled']) {
         throw new RuntimeException('The use of the task manager is disabled on this instance.');
     }
     if ($request->getRequestFormat() !== "json") {
         $app->abort(406, 'Only JSON format is accepted.');
     }
     return $app->json(['name' => $app->trans('Task Scheduler'), 'configuration' => $app['task-manager.status']->getStatus(), 'urls' => ['start' => $app->path('admin_tasks_scheduler_start'), 'stop' => $app->path('admin_tasks_scheduler_stop'), 'log' => $app->path('admin_tasks_scheduler_log')]]);
 }
Example #20
0
 /**
  * Deny an order
  *
  * @param  Application                   $app
  * @param  Request                       $request
  * @param  integer                       $order_id
  * @return RedirectResponse|JsonResponse
  */
 public function denyOrder(Application $app, Request $request, $order_id)
 {
     $success = false;
     $order = $app['EM']->getRepository('Phraseanet:Order')->find($order_id);
     if (null === $order) {
         throw new NotFoundHttpException('Order not found');
     }
     $n = 0;
     $elements = $request->request->get('elements', []);
     foreach ($order->getElements() as $orderElement) {
         if (in_array($orderElement->getId(), $elements)) {
             $orderElement->setOrderMaster($app['authentication']->getUser());
             $orderElement->setDeny(true);
             $app['EM']->persist($orderElement);
             $n++;
         }
     }
     try {
         if ($n > 0) {
             $order->setTodo($order->getTodo() - $n);
             $app['events-manager']->trigger('__ORDER_NOT_DELIVERED__', ['from' => $app['authentication']->getUser()->getId(), 'to' => $order->getUser()->getId(), 'n' => $n]);
         }
         $success = true;
         $app['EM']->persist($order);
         $app['EM']->flush();
     } catch (\Exception $e) {
     }
     if ('json' === $app['request']->getRequestFormat()) {
         return $app->json(['success' => $success, 'msg' => $success ? $app->trans('Order has been denied') : $app->trans('An error occured while denying, please retry  or contact an admin if problem persists'), 'order_id' => $order_id]);
     }
     return $app->redirectPath('prod_orders', ['success' => (int) $success, 'action' => 'send']);
 }
Example #21
0
 public function ReplaceCandidateJson(Application $app, Request $request)
 {
     $tsbas = [];
     $ret = ['ctermsDeleted' => [], 'maxRecsUpdatable' => self::SEARCH_REPLACE_MAXREC, 'nRecsToUpdate' => 0, 'nRecsUpdated' => 0, 'msg' => ''];
     foreach ($request->get('id') as $id) {
         $id = explode('.', $id);
         $sbas_id = array_shift($id);
         if (!array_key_exists('b' . $sbas_id, $tsbas)) {
             $tsbas['b' . $sbas_id] = ['sbas_id' => (int) $sbas_id, 'tids' => [], 'domct' => null, 'tvals' => [], 'lid' => '', 'trids' => []];
         }
         $tsbas['b' . $sbas_id]['tids'][] = implode('.', $id);
     }
     $appbox = $app['phraseanet.appbox'];
     // first, count the number of records to update
     foreach ($tsbas as $ksbas => $sbas) {
         /* @var $databox databox */
         try {
             $databox = $appbox->get_databox($sbas['sbas_id']);
             $connbas = $databox->get_connection();
             $tsbas[$ksbas]['domct'] = $databox->get_dom_cterms();
         } catch (\Exception $e) {
             continue;
         }
         if (!$tsbas[$ksbas]['domct']) {
             continue;
         }
         $lid = '';
         $xpathct = new \DOMXPath($tsbas[$ksbas]['domct']);
         foreach ($sbas['tids'] as $tid) {
             $xp = '//te[@id="' . $tid . '"]/sy';
             $nodes = $xpathct->query($xp);
             if ($nodes->length == 1) {
                 $sy = $nodes->item(0);
                 $syid = str_replace('.', 'd', $sy->getAttribute('id')) . 'd';
                 $lid .= ($lid ? ',' : '') . "'" . $syid . "'";
                 $field = $sy->parentNode->parentNode->getAttribute('field');
                 if (!array_key_exists($field, $tsbas[$ksbas]['tvals'])) {
                     $tsbas[$ksbas]['tvals'][$field] = [];
                 }
                 $tsbas[$ksbas]['tvals'][$field][] = $sy;
             }
         }
         if ($lid == '') {
             // no cterm was found
             continue;
         }
         $tsbas[$ksbas]['lid'] = $lid;
         // count records
         $sql = 'SELECT DISTINCT record_id AS r
                 FROM thit WHERE value IN (' . $lid . ')
                 ORDER BY record_id';
         $stmt = $connbas->prepare($sql);
         $stmt->execute();
         $tsbas[$ksbas]['trids'] = $stmt->fetchAll(\PDO::FETCH_COLUMN, 0);
         $stmt->closeCursor();
         $ret['nRecsToUpdate'] += count($tsbas[$ksbas]['trids']);
     }
     if ($ret['nRecsToUpdate'] <= self::SEARCH_REPLACE_MAXREC) {
         foreach ($tsbas as $sbas) {
             /* @var $databox databox */
             try {
                 $databox = $appbox->get_databox($sbas['sbas_id']);
                 $connbas = $databox->get_connection();
             } catch (\Exception $e) {
                 continue;
             }
             // fix caption of records
             foreach ($sbas['trids'] as $rid) {
                 try {
                     $record = $databox->get_record($rid);
                     $metadatask = [];
                     // datas to keep
                     $metadatasd = [];
                     // datas to delete
                     /* @var $field caption_field */
                     foreach ($record->get_caption()->get_fields(null, true) as $field) {
                         $meta_struct_id = $field->get_meta_struct_id();
                         /* @var $v caption_Field_Value */
                         $fname = $field->get_name();
                         if (!array_key_exists($fname, $sbas['tvals'])) {
                             foreach ($field->get_values() as $v) {
                                 $metadatask[] = ['meta_struct_id' => $meta_struct_id, 'meta_id' => $v->getId(), 'value' => $v->getValue()];
                             }
                         } else {
                             foreach ($field->get_values() as $v) {
                                 $keep = true;
                                 $vtxt = $app['unicode']->remove_indexer_chars($v->getValue());
                                 foreach ($sbas['tvals'][$fname] as $sy) {
                                     if ($sy->getAttribute('w') == $vtxt) {
                                         $keep = false;
                                     }
                                 }
                                 if ($keep) {
                                     $metadatask[] = ['meta_struct_id' => $meta_struct_id, 'meta_id' => $v->getId(), 'value' => $v->getValue()];
                                 } else {
                                     $metadatasd[] = ['meta_struct_id' => $meta_struct_id, 'meta_id' => $v->getId(), 'value' => $request->get('t') ? $request->get('t') : ''];
                                 }
                             }
                         }
                     }
                     if (count($metadatasd) > 0) {
                         if (!$request->get('debug')) {
                             $record->set_metadatas($metadatasd, true);
                             $ret['nRecsUpdated']++;
                         }
                     }
                 } catch (\Exception $e) {
                     continue;
                 }
             }
             foreach ($sbas['tvals'] as $tval) {
                 foreach ($tval as $sy) {
                     // remove candidate from cterms
                     $te = $sy->parentNode;
                     $te->parentNode->removeChild($te);
                     $ret['ctermsDeleted'][] = $sbas['sbas_id'] . '.' . $te->getAttribute('id');
                 }
             }
             if (!$request->get('debug')) {
                 $databox->saveCterms($sbas['domct']);
             }
         }
         $ret['msg'] = $app->trans('prod::thesaurusTab:dlg:%number% record(s) updated', ['%number%' => $ret['nRecsUpdated']]);
     } else {
         // too many records to update
         $ret['msg'] = $app->trans('prod::thesaurusTab:dlg:too many (%number%) records to update (limit=%maximum%)', ['%number%' => $ret['nRecsToUpdate'], '%maximum%' => self::SEARCH_REPLACE_MAXREC]);
     }
     return $app->json($ret);
 }
Example #22
0
 public function getLanguage(Application $app, Request $request)
 {
     $response = $app->json(['validation_blank' => $app->trans('Please provide a value.'), 'validation_choice_min' => $app->trans('Please select at least %s choice.'), 'validation_email' => $app->trans('Please provide a valid email address.'), 'validation_ip' => $app->trans('Please provide a valid IP address.'), 'validation_length_min' => $app->trans('Please provide a longer value. It should have %s character or more.'), 'password_match' => $app->trans('Please provide the same passwords.'), 'email_match' => $app->trans('Please provide the same emails.'), 'accept_tou' => $app->trans('Please accept the terms of use to register.'), 'no_collection_selected' => $app->trans('No collection selected'), 'one_collection_selected' => $app->trans('%d collection selected'), 'collections_selected' => $app->trans('%d collections selected'), 'all_collections' => $app->trans('Select all collections'), 'weak' => $app->trans('Weak'), 'ordinary' => $app->trans('Ordinary'), 'good' => $app->trans('Good'), 'great' => $app->trans('Great')]);
     $response->setExpires(new \DateTime('+1 day'));
     return $response;
 }
Example #23
0
 public function connect(SilexApplication $app)
 {
     $app['controller.lightbox'] = $this;
     $controllers = $app['controllers_factory'];
     $controllers->before(function (Request $request) use($app) {
         if (!$request->query->has('LOG')) {
             return;
         }
         if ($app['authentication']->isAuthenticated()) {
             $app['authentication']->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');
         }
         $app['authentication']->openAccount($token->getUser());
         switch ($token->getType()) {
             case TokenManipulator::TYPE_FEED_ENTRY:
                 return $app->redirectPath('lightbox_feed_entry', ['entry_id' => $token->getData()]);
                 break;
             case TokenManipulator::TYPE_VALIDATE:
             case TokenManipulator::TYPE_VIEW:
                 return $app->redirectPath('lightbox_validation', ['basket' => $token->getData()]);
                 break;
         }
     });
     $app['firewall']->addMandatoryAuthentication($controllers);
     $controllers->before($app['middleware.basket.converter'])->before($app['middleware.basket.user-access']);
     $controllers->get('/', function (SilexApplication $app) {
         try {
             \Session_Logger::updateClientInfos($app, 6);
         } catch (SessionNotFound $e) {
             return $app->redirectPath('logout');
         }
         $repository = $app['repo.baskets'];
         $basket_collection = array_merge($repository->findActiveByUser($app['authentication']->getUser()), $repository->findActiveValidationByUser($app['authentication']->getUser()));
         $template = 'lightbox/index.html.twig';
         if (!$app['browser']->isNewGeneration() && !$app['browser']->isMobile()) {
             $template = 'lightbox/IE6/index.html.twig';
         }
         return new Response($app['twig']->render($template, ['baskets_collection' => $basket_collection, 'module_name' => 'Lightbox', 'module' => 'lightbox']));
     })->bind('lightbox');
     $controllers->get('/ajax/NOTE_FORM/{sselcont_id}/', function (SilexApplication $app, $sselcont_id) {
         if (!$app['browser']->isMobile()) {
             return new Response('');
         }
         $basketElement = $app['repo.basket-elements']->findUserElement($sselcont_id, $app['authentication']->getUser());
         $parameters = ['basket_element' => $basketElement, 'module_name' => ''];
         return $app['twig']->render('lightbox/note_form.html.twig', $parameters);
     })->bind('lightbox_ajax_note_form')->assert('sselcont_id', '\\d+');
     $controllers->get('/ajax/LOAD_BASKET_ELEMENT/{sselcont_id}/', function (SilexApplication $app, $sselcont_id) {
         $repository = $app['repo.basket-elements'];
         $BasketElement = $repository->findUserElement($sselcont_id, $app['authentication']->getUser());
         if ($app['browser']->isMobile()) {
             $output = $app['twig']->render('lightbox/basket_element.html.twig', ['basket_element' => $BasketElement, 'module_name' => $BasketElement->getRecord($app)->get_title()]);
             return new Response($output);
         } else {
             $template_options = 'lightbox/sc_options_box.html.twig';
             $template_agreement = 'lightbox/agreement_box.html.twig';
             $template_selector = 'lightbox/selector_box.html.twig';
             $template_note = 'lightbox/sc_note.html.twig';
             $template_preview = 'common/preview.html.twig';
             $template_caption = 'common/caption.html.twig';
             if (!$app['browser']->isNewGeneration()) {
                 $template_options = 'lightbox/IE6/sc_options_box.html.twig';
                 $template_agreement = 'lightbox/IE6/agreement_box.html.twig';
             }
             $Basket = $BasketElement->getBasket();
             $ret = [];
             $ret['number'] = $BasketElement->getRecord($app)->get_number();
             $ret['title'] = $BasketElement->getRecord($app)->get_title();
             $ret['preview'] = $app['twig']->render($template_preview, ['record' => $BasketElement->getRecord($app), 'not_wrapped' => true]);
             $ret['options_html'] = $app['twig']->render($template_options, ['basket_element' => $BasketElement]);
             $ret['agreement_html'] = $app['twig']->render($template_agreement, ['basket' => $Basket, 'basket_element' => $BasketElement]);
             $ret['selector_html'] = $app['twig']->render($template_selector, ['basket_element' => $BasketElement]);
             $ret['note_html'] = $app['twig']->render($template_note, ['basket_element' => $BasketElement]);
             $ret['caption'] = $app['twig']->render($template_caption, ['view' => 'preview', 'record' => $BasketElement->getRecord($app)]);
             return $app->json($ret);
         }
     })->bind('lightbox_ajax_load_basketelement')->assert('sselcont_id', '\\d+');
     $controllers->get('/ajax/LOAD_FEED_ITEM/{entry_id}/{item_id}/', function (SilexApplication $app, $entry_id, $item_id) {
         $entry = $app['repo.feed-entries']->find($entry_id);
         $item = $entry->getItem($item_id);
         if ($app['browser']->isMobile()) {
             $output = $app['twig']->render('lightbox/feed_element.html.twig', ['feed_element' => $item, 'module_name' => $item->getRecord($app)->get_title()]);
             return new Response($output);
         } else {
             $template_options = 'lightbox/feed_options_box.html.twig';
             $template_preview = 'common/preview.html.twig';
             $template_caption = 'common/caption.html.twig';
             if (!$app['browser']->isNewGeneration()) {
                 $template_options = 'lightbox/IE6/feed_options_box.html.twig';
             }
             $ret = [];
             $ret['number'] = $item->getRecord($app)->get_number();
             $ret['title'] = $item->getRecord($app)->get_title();
             $ret['preview'] = $app['twig']->render($template_preview, ['record' => $item->getRecord($app), 'not_wrapped' => true]);
             $ret['options_html'] = $app['twig']->render($template_options, ['feed_element' => $item]);
             $ret['caption'] = $app['twig']->render($template_caption, ['view' => 'preview', 'record' => $item->getRecord($app)]);
             $ret['agreement_html'] = $ret['selector_html'] = $ret['note_html'] = '';
             return $app->json($ret);
         }
     })->bind('lightbox_ajax_load_feeditem')->assert('entry_id', '\\d+')->assert('item_id', '\\d+');
     $controllers->get('/validate/{basket}/', function (SilexApplication $app, $basket) {
         try {
             \Session_Logger::updateClientInfos($app, 6);
         } catch (SessionNotFound $e) {
             return $app->redirectPath('logout');
         }
         $repository = $app['repo.baskets'];
         $basket_collection = $repository->findActiveValidationAndBasketByUser($app['authentication']->getUser());
         if ($basket->getIsRead() === false) {
             $basket = $app['EM']->merge($basket);
             $basket->setIsRead(true);
             $app['EM']->flush();
         }
         if ($basket->getValidation() && $basket->getValidation()->getParticipant($app['authentication']->getUser())->getIsAware() === false) {
             $basket = $app['EM']->merge($basket);
             $basket->getValidation()->getParticipant($app['authentication']->getUser())->setIsAware(true);
             $app['EM']->flush();
         }
         $template = 'lightbox/validate.html.twig';
         if (!$app['browser']->isNewGeneration() && !$app['browser']->isMobile()) {
             $template = 'lightbox/IE6/validate.html.twig';
         }
         $response = new Response($app['twig']->render($template, ['baskets_collection' => $basket_collection, 'basket' => $basket, 'local_title' => strip_tags($basket->getName()), 'module' => 'lightbox', 'module_name' => $app->trans('admin::monitor: module validation')]));
         $response->setCharset('UTF-8');
         return $response;
     })->bind('lightbox_validation')->assert('basket', '\\d+');
     $controllers->get('/compare/{basket}/', function (SilexApplication $app, Basket $basket) {
         try {
             \Session_Logger::updateClientInfos($app, 6);
         } catch (SessionNotFound $e) {
             return $app->redirectPath('logout');
         }
         $repository = $app['repo.baskets'];
         $basket_collection = $repository->findActiveValidationAndBasketByUser($app['authentication']->getUser());
         if ($basket->getIsRead() === false) {
             $basket = $app['EM']->merge($basket);
             $basket->setIsRead(true);
             $app['EM']->flush();
         }
         if ($basket->getValidation() && $basket->getValidation()->getParticipant($app['authentication']->getUser())->getIsAware() === false) {
             $basket = $app['EM']->merge($basket);
             $basket->getValidation()->getParticipant($app['authentication']->getUser())->setIsAware(true);
             $app['EM']->flush();
         }
         $template = 'lightbox/validate.html.twig';
         if (!$app['browser']->isNewGeneration() && !$app['browser']->isMobile()) {
             $template = 'lightbox/IE6/validate.html.twig';
         }
         $response = new Response($app['twig']->render($template, ['baskets_collection' => $basket_collection, 'basket' => $basket, 'local_title' => strip_tags($basket->getName()), 'module' => 'lightbox', 'module_name' => $app->trans('admin::monitor: module validation')]));
         $response->setCharset('UTF-8');
         return $response;
     })->bind('lightbox_compare')->assert('basket', '\\d+');
     $controllers->get('/feeds/entry/{entry_id}/', function (SilexApplication $app, $entry_id) {
         try {
             \Session_Logger::updateClientInfos($app, 6);
         } catch (SessionNotFound $e) {
             return $app->redirectPath('logout');
         }
         $feed_entry = $app['repo.feed-entries']->find($entry_id);
         $template = 'lightbox/feed.html.twig';
         if (!$app['browser']->isNewGeneration() && !$app['browser']->isMobile()) {
             $template = 'lightbox/IE6/feed.html.twig';
         }
         $content = $feed_entry->getItems();
         $first = $content->first();
         $output = $app['twig']->render($template, ['feed_entry' => $feed_entry, 'first_item' => $first, 'local_title' => $feed_entry->getTitle(), 'module' => 'lightbox', 'module_name' => $app->trans('admin::monitor: module validation')]);
         $response = new Response($output, 200);
         $response->setCharset('UTF-8');
         return $response;
     })->bind('lightbox_feed_entry')->assert('entry_id', '\\d+');
     $controllers->get('/ajax/LOAD_REPORT/{basket}/', function (SilexApplication $app, Basket $basket) {
         return new Response($app['twig']->render('lightbox/basket_content_report.html.twig', ['basket' => $basket]));
     })->bind('lightbox_ajax_report')->assert('basket', '\\d+');
     $controllers->post('/ajax/SET_NOTE/{sselcont_id}/', function (SilexApplication $app, $sselcont_id) {
         $output = ['error' => true, 'datas' => $app->trans('Erreur lors de l\'enregistrement des donnees')];
         $request = $app['request'];
         $note = $request->request->get('note');
         if (is_null($note)) {
             return new Response('You must provide a note value', 400);
         }
         $repository = $app['repo.basket-elements'];
         $basket_element = $repository->findUserElement($sselcont_id, $app['authentication']->getUser());
         $validationDatas = $basket_element->getUserValidationDatas($app['authentication']->getUser());
         $validationDatas->setNote($note);
         $app['EM']->merge($validationDatas);
         $app['EM']->flush();
         if ($app['browser']->isMobile()) {
             $datas = $app['twig']->render('lightbox/sc_note.html.twig', ['basket_element' => $basket_element]);
             $output = ['error' => false, 'datas' => $datas];
         } else {
             $template = 'lightbox/sc_note.html.twig';
             $datas = $app['twig']->render($template, ['basket_element' => $basket_element]);
             $output = ['error' => false, 'datas' => $datas];
         }
         return $app->json($output);
     })->bind('lightbox_ajax_set_note')->assert('sselcont_id', '\\d+');
     $controllers->post('/ajax/SET_ELEMENT_AGREEMENT/{sselcont_id}/', function (SilexApplication $app, $sselcont_id) {
         $request = $app['request'];
         $agreement = $request->request->get('agreement');
         if (is_null($agreement)) {
             return new Response('You must provide an agreement value', 400);
         }
         $agreement = $agreement > 0;
         $releasable = false;
         try {
             $ret = ['error' => true, 'releasable' => false, 'datas' => $app->trans('Erreur lors de la mise a jour des donnes')];
             $repository = $app['repo.basket-elements'];
             $basket_element = $repository->findUserElement($sselcont_id, $app['authentication']->getUser());
             /* @var $basket_element BasketElement */
             $validationDatas = $basket_element->getUserValidationDatas($app['authentication']->getUser());
             if (!$basket_element->getBasket()->getValidation()->getParticipant($app['authentication']->getUser())->getCanAgree()) {
                 throw new ControllerException('You can not agree on this');
             }
             $validationDatas->setAgreement($agreement);
             $participant = $basket_element->getBasket()->getValidation()->getParticipant($app['authentication']->getUser());
             $app['EM']->merge($basket_element);
             $app['EM']->flush();
             $releasable = false;
             if ($participant->isReleasable() === true) {
                 $releasable = $app->trans('Do you want to send your report ?');
             }
             $ret = ['error' => false, 'datas' => '', 'releasable' => $releasable];
         } catch (ControllerException $e) {
             $ret['datas'] = $e->getMessage();
         }
         return $app->json($ret);
     })->bind('lightbox_ajax_set_element_agreement')->assert('sselcont_id', '\\d+');
     $controllers->post('/ajax/SET_RELEASE/{basket}/', function (SilexApplication $app, Basket $basket) {
         $datas = ['error' => true, 'datas' => ''];
         try {
             if (!$basket->getValidation()) {
                 throw new ControllerException('There is no validation session attached to this basket');
             }
             if (!$basket->getValidation()->getParticipant($app['authentication']->getUser())->getCanAgree()) {
                 throw new ControllerException('You have not right to agree');
             }
             $agreed = false;
             /* @var $basket Basket */
             foreach ($basket->getElements() as $element) {
                 if (null !== $element->getUserValidationDatas($app['authentication']->getUser())->getAgreement()) {
                     $agreed = true;
                 }
             }
             if (!$agreed) {
                 throw new ControllerException($app->trans('You have to give your feedback at least on one document to send a report'));
             }
             /* @var $basket Basket */
             $participant = $basket->getValidation()->getParticipant($app['authentication']->getUser());
             $token = $app['manipulator.token']->createBasketValidationToken($basket);
             $url = $app->url('lightbox', ['LOG' => $token->getValue()]);
             $to = $basket->getValidation()->getInitiator($app)->getId();
             $app['dispatcher']->dispatch(PhraseaEvents::VALIDATION_DONE, new ValidationEvent($participant, $basket, $url));
             $participant->setIsConfirmed(true);
             $app['EM']->merge($participant);
             $app['EM']->flush();
             $datas = ['error' => false, 'datas' => $app->trans('Envoie avec succes')];
         } catch (ControllerException $e) {
             $datas = ['error' => true, 'datas' => $e->getMessage()];
         }
         return $app->json($datas);
     })->bind('lightbox_ajax_set_release')->assert('basket', '\\d+');
     return $controllers;
 }
Example #24
0
 /**
  *
  * @param  Application  $app
  * @param  Request      $request
  * @return JsonResponse
  */
 public function exportFtp(Application $app, Request $request)
 {
     $download = new \set_exportftp($app, $request->request->get('lst'), $request->request->get('ssttid'));
     $mandatoryParameters = ['address', 'login', 'obj'];
     foreach ($mandatoryParameters as $parameter) {
         if (!$request->request->get($parameter)) {
             $app->abort(400, sprintf('required parameter `%s` is missing', $parameter));
         }
     }
     if (count($download->get_display_ftp()) == 0) {
         return $app->json(['success' => false, 'message' => $app->trans("You do not have required rights to send these documents over FTP")]);
     }
     try {
         $download->prepare_export($app['authentication']->getUser(), $app['filesystem'], $request->request->get('obj'), false, $request->request->get('businessfields'));
         $download->export_ftp($request->request->get('user_dest'), $request->request->get('address'), $request->request->get('login'), $request->request->get('password', ''), $request->request->get('ssl'), $request->request->get('max_retry'), $request->request->get('passive'), $request->request->get('dest_folder'), $request->request->get('prefix_folder'), $request->request->get('logfile'));
         return $app->json(['success' => true, 'message' => $app->trans('Export saved in the waiting queue')]);
     } catch (\Exception $e) {
         return $app->json(['success' => false, 'message' => $app->trans('Something went wrong')]);
     }
 }
Example #25
0
 public function connect(Application $app)
 {
     $app['controller.oauth2'] = $this;
     $controllers = $app['controllers_factory'];
     /**
      * AUTHORIZE ENDPOINT
      *
      * Authorization endpoint - used to obtain authorization from the
      * resource owner via user-agent redirection.
      */
     $authorize_func = function () use($app) {
         $request = $app['request'];
         $oauth2Adapter = $app['oauth2-server'];
         $context = new Context(Context::CONTEXT_OAUTH2_NATIVE);
         $app['dispatcher']->dispatch(PhraseaEvents::PRE_AUTHENTICATE, new PreAuthenticate($request, $context));
         //Check for auth params, send error or redirect if not valid
         $params = $oauth2Adapter->getAuthorizationRequestParameters($request);
         $appAuthorized = false;
         $error = $request->get('error', '');
         if (null === ($client = $app['repo.api-applications']->findByClientId($params['client_id']))) {
             throw new NotFoundHttpException(sprintf('Application with client id %s could not be found', $params['client_id']));
         }
         $oauth2Adapter->setClient($client);
         $actionAccept = $request->get("action_accept");
         $actionLogin = $request->get("action_login");
         $template = "api/auth/end_user_authorization.html.twig";
         $custom_template = sprintf("%s/config/templates/web/api/auth/end_user_authorization/%s.html.twig", $app['root.path'], $client->getId());
         if (file_exists($custom_template)) {
             $template = sprintf('api/auth/end_user_authorization/%s.html.twig', $client->getId());
         }
         if (!$app['authentication']->isAuthenticated()) {
             if ($actionLogin !== null) {
                 try {
                     if (null === ($usrId = $app['auth.native']->getUsrId($request->get("login"), $request->get("password"), $request))) {
                         $app['session']->getFlashBag()->set('error', $app->trans('login::erreur: Erreur d\'authentification'));
                         return $app->redirectPath('oauth2_authorize', array_merge(array('error' => 'login'), $params));
                     }
                 } catch (RequireCaptchaException $e) {
                     return $app->redirectPath('oauth2_authorize', array_merge(array('error' => 'captcha'), $params));
                 } catch (AccountLockedException $e) {
                     return $app->redirectPath('oauth2_authorize', array_merge(array('error' => 'account-locked'), $params));
                 }
                 $user = $app['repo.users']->find($usrId);
                 $app['authentication']->openAccount($user);
                 $event = new PostAuthenticate($request, new Response(), $user, $context);
                 $app['dispatcher']->dispatch(PhraseaEvents::POST_AUTHENTICATE, $event);
             } else {
                 $r = new Response($app['twig']->render($template, array('error' => $error, "auth" => $oauth2Adapter)));
                 $r->headers->set('Content-Type', 'text/html');
                 return $r;
             }
         }
         //check if current client is already authorized by current user
         $clients = $app['repo.api-applications']->findAuthorizedAppsByUser($app['authentication']->getUser());
         foreach ($clients as $authClient) {
             if ($client->getClientId() == $authClient->getClientId()) {
                 $appAuthorized = true;
                 break;
             }
         }
         $account = $oauth2Adapter->updateAccount($app['authentication']->getUser());
         $params['account_id'] = $account->getId();
         if (!$appAuthorized && $actionAccept === null) {
             $params = ["auth" => $oauth2Adapter, "error" => $error];
             $r = new Response($app['twig']->render($template, $params));
             $r->headers->set('Content-Type', 'text/html');
             return $r;
         } elseif (!$appAuthorized && $actionAccept !== null) {
             $appAuthorized = (bool) $actionAccept;
             if ($appAuthorized) {
                 $app['manipulator.api-account']->authorizeAccess($account);
             } else {
                 $app['manipulator.api-account']->revokeAccess($account);
             }
         }
         //if native app show template
         if ($oauth2Adapter->isNativeApp($params['redirect_uri'])) {
             $params = $oauth2Adapter->finishNativeClientAuthorization($appAuthorized, $params);
             $r = new Response($app['twig']->render("api/auth/native_app_access_token.html.twig", $params));
             $r->headers->set('Content-Type', 'text/html');
             return $r;
         }
         $oauth2Adapter->finishClientAuthorization($appAuthorized, $params);
         // As OAuth2 library already outputs response content, we need to send an empty
         // response to avoid breaking silex controller
         return '';
     };
     $controllers->match('/authorize', $authorize_func)->method('GET|POST')->bind('oauth2_authorize');
     /**
      *  TOKEN ENDPOINT
      *  Token endpoint - used to exchange an authorization grant for an access token.
      */
     $controllers->post('/token', function (\Silex\Application $app, Request $request) {
         if (!$request->isSecure()) {
             throw new HttpException(400, 'This route requires the use of the https scheme', null, ['content-type' => 'application/json']);
         }
         $app['oauth2-server']->grantAccessToken($request);
         ob_flush();
         flush();
         // As OAuth2 library already outputs response content, we need to send an empty
         // response to avoid breaking silex controller
         return '';
     });
     return $controllers;
 }
Example #26
0
 /**
  * Display informations about a document
  *
  * @param  Application  $app
  * @param  Request      $request
  * @return JsonResponse
  */
 public function doReportInformationsDocument(Application $app, Request $request)
 {
     $config = ['photo' => [$app->trans('report:: document'), 0, 0, 0, 0], 'record_id' => [$app->trans('report:: record id'), 0, 0, 0, 0], 'date' => [$app->trans('report:: date'), 0, 0, 0, 0], 'type' => [$app->trans('phrseanet:: sous definition'), 0, 0, 0, 0], 'titre' => [$app->trans('report:: titre'), 0, 0, 0, 0], 'taille' => [$app->trans('report:: poids'), 0, 0, 0, 0]];
     $config_dl = ['ddate' => [$app->trans('report:: date'), 0, 0, 0, 0], 'user' => [$app->trans('report:: utilisateurs'), 0, 0, 0, 0], 'final' => [$app->trans('phrseanet:: sous definition'), 0, 0, 0, 0], 'coll_id' => [$app->trans('report:: collections'), 0, 0, 0, 0], 'comment' => [$app->trans('report:: commentaire'), 0, 0, 0, 0], 'fonction' => [$app->trans('report:: fonction'), 0, 0, 0, 0], 'activite' => [$app->trans('report:: activite'), 0, 0, 0, 0], 'pays' => [$app->trans('report:: pays'), 0, 0, 0, 0], 'societe' => [$app->trans('report:: societe'), 0, 0, 0, 0]];
     //format conf according user preferences
     if ('' !== ($columnsList = $request->request->get('list_column', ''))) {
         $new_conf = $config_dl;
         $columns = explode(',', $columnsList);
         foreach (array_keys($config_dl) as $col) {
             if (!in_array($col, $columns)) {
                 unset($new_conf[$col]);
             }
         }
         $config_dl = $new_conf;
     }
     try {
         $record = new \record_adapter($app, $request->request->get('sbasid'), $request->request->get('rid'));
     } catch (\Exception $e) {
         $app->abort(404);
     }
     $what = new \module_report_nav($app, $request->request->get('dmin'), $request->request->get('dmax'), $request->request->get('sbasid'), $request->request->get('collection'));
     $what->setPeriode('');
     $what->setCsv(false);
     $what->setPrint(false);
     $reportArray = $what->buildTabUserWhat($record->get_base_id(), $record->get_record_id(), $config);
     $title = $what->getTitle();
     $html = $app['twig']->render('report/ajax_data_content.html.twig', ['result' => isset($reportArray['report']) ? $reportArray['report'] : $reportArray, 'is_infouser' => false, 'is_nav' => false, 'is_groupby' => false, 'is_plot' => false, 'is_doc' => false]);
     $from = $request->request->get('from', '');
     if ('TOOL' === $from) {
         $what->setTitle('');
         return $app->json(['rs' => $html, 'display_nav' => false, 'title' => $title]);
     }
     if ('DASH' !== $from && 'PUSHDOC' !== $from) {
         $download = new \module_report_download($app, $request->request->get('dmin'), $request->request->get('dmax'), $request->request->get('sbasid'), $request->request->get('collection'));
         $mapColumnTitleToSqlField = $download->getTransQueryString();
         $currentfilter = [];
         if ('' !== ($serializedFilter = $request->request->get('liste_filter', ''))) {
             $currentfilter = @unserialize(urldecode($serializedFilter));
         }
         $filter = new \module_report_filter($app, $currentfilter, $mapColumnTitleToSqlField);
         if ('' !== ($filterColumn = $request->request->get('filter_column', ''))) {
             $field = current(explode(' ', $filterColumn));
             $value = $request->request->get('filter_value', '');
             if ($request->request->get('liste') == 'on') {
                 return $app->json(['diag' => $app['twig']->render('report/colFilter.html.twig', ['result' => $download->colFilter($field), 'field' => $field]), 'title' => $app->trans('filtrer les resultats sur la colonne %colonne%', ['%colonne%' => $field])]);
             }
             if ($field === $value) {
                 $filter->removeFilter($field);
             } else {
                 $filter->addFilter($field, '=', $value);
             }
         }
         $filter->addfilter('record_id', '=', $record->get_record_id());
         $download->setFilter($filter->getTabFilter());
         $download->setOrder('ddate', 'DESC');
         $download->setTitle($app->trans('report:: historique des telechargements'));
         $download->setConfig(false);
         $reportArray = $download->buildReport($config_dl);
         if ($request->request->get('printcsv') == 'on') {
             $download->setPrettyString(false);
             try {
                 $csv = \format::arr_to_csv($download->getResult(), $download->getDisplay());
             } catch (\Exception $e) {
                 $csv = '';
             }
             return $app->json(['rs' => $csv]);
         }
         $html .= $app['twig']->render('report/ajax_data_content.html.twig', ['result' => isset($reportArray['report']) ? $reportArray['report'] : $reportArray, 'is_infouser' => false, 'is_nav' => false, 'is_groupby' => false, 'is_plot' => false, 'is_doc' => false]);
         return $app->json(['rs' => $html, 'display_nav' => false, 'title' => $title]);
     }
     if ($app['conf']->get(['registry', 'modules', 'anonymous-report']) == false && $from !== 'DOC' && $from !== 'DASH' && $from !== 'GEN' && $from !== 'PUSHDOC') {
         $conf = ['identifiant' => [$app->trans('report:: identifiant'), 0, 0, 0, 0], 'nom' => [$app->trans('report:: nom'), 0, 0, 0, 0], 'mail' => [$app->trans('report:: email'), 0, 0, 0, 0], 'adresse' => [$app->trans('report:: adresse'), 0, 0, 0, 0], 'tel' => [$app->trans('report:: telephone'), 0, 0, 0, 0]];
         $info = new \module_report_nav($app, $request->request->get('dmin'), $request->request->get('dmax'), $request->request->get('sbasid'), $request->request->get('collection'));
         $info->setPeriode('');
         $info->setConfig(false);
         $info->setTitle($app->trans('report:: utilisateur'));
         $reportArray = $info->buildTabGrpInfo(false, [], $request->request->get('user'), $conf, false);
         if ($request->request->get('printcsv') == 'on' && isset($download)) {
             $download->setPrettyString(false);
             try {
                 $csv = \format::arr_to_csv($download->getResult(), $download->getDisplay());
             } catch (\Exception $e) {
                 $csv = '';
             }
             return $app->json(['rs' => $csv]);
         }
         $html .= $app['twig']->render('report/ajax_data_content.html.twig', ['result' => isset($reportArray['report']) ? $reportArray['report'] : $reportArray, 'is_infouser' => false, 'is_nav' => false, 'is_groupby' => false, 'is_plot' => false, 'is_doc' => false]);
         return $app->json(['rs' => $html, 'display_nav' => false, 'title' => $title]);
     }
     return $app->json(['rs' => $html, 'display_nav' => false, 'title' => $title]);
 }
Example #27
0
 public function connect(Application $app)
 {
     $app['controller.admin.users'] = $this;
     $controllers = $app['controllers_factory'];
     $app['firewall']->addMandatoryAuthentication($controllers);
     $controllers->before(function (Request $request) use($app) {
         $app['firewall']->requireAccessToModule('admin')->requireRight('manageusers');
     });
     $controllers->post('/rights/', function (Application $app) {
         $rights = new UserHelper\Edit($app, $app['request']);
         return $app['twig']->render('admin/editusers.html.twig', $rights->get_users_rights());
     });
     $controllers->get('/rights/', function (Application $app) {
         $rights = new UserHelper\Edit($app, $app['request']);
         return $app['twig']->render('admin/editusers.html.twig', $rights->get_users_rights());
     });
     $controllers->post('/rights/reset/', function (Application $app, Request $request) {
         try {
             $datas = ['error' => false];
             $helper = new UserHelper\Edit($app, $request);
             $helper->resetRights();
         } catch (\Exception $e) {
             $datas['error'] = true;
             $datas['message'] = $e->getMessage();
         }
         return $app->json($datas);
     })->bind('admin_users_rights_reset');
     $controllers->post('/delete/', function (Application $app) {
         $module = new UserHelper\Edit($app, $app['request']);
         $module->delete_users();
         return $app->redirectPath('admin_users_search');
     });
     $controllers->post('/rights/apply/', function (Application $app) {
         $datas = ['error' => true];
         try {
             $rights = new UserHelper\Edit($app, $app['request']);
             if (!$app['request']->request->get('reset_before_apply')) {
                 $rights->apply_rights();
             }
             if ($app['request']->request->get('template')) {
                 if ($app['request']->request->get('reset_before_apply')) {
                     $rights->resetRights();
                 }
                 $rights->apply_template();
             }
             $rights->apply_infos();
             $datas = ['error' => false];
         } catch (\Exception $e) {
             $datas['message'] = $e->getMessage();
         }
         return $app->json($datas);
     })->bind('admin_users_rights_apply');
     $controllers->post('/rights/quotas/', function (Application $app) {
         $rights = new UserHelper\Edit($app, $app['request']);
         return $app['twig']->render('admin/editusers_quotas.html.twig', $rights->get_quotas());
     });
     $controllers->post('/rights/quotas/apply/', function (Application $app) {
         $rights = new UserHelper\Edit($app, $app['request']);
         $rights->apply_quotas();
         return $app->json(['message' => '', 'error' => false]);
     });
     $controllers->post('/rights/time/', function (Application $app) {
         $rights = new UserHelper\Edit($app, $app['request']);
         return $app['twig']->render('admin/editusers_timelimit.html.twig', $rights->get_time());
     });
     $controllers->post('/rights/time/sbas/', function (Application $app) {
         $rights = new UserHelper\Edit($app, $app['request']);
         return $app['twig']->render('admin/editusers_timelimit_sbas.html.twig', $rights->get_time_sbas());
     });
     $controllers->post('/rights/time/apply/', function (Application $app) {
         $rights = new UserHelper\Edit($app, $app['request']);
         $rights->apply_time();
         return $app->json(['message' => '', 'error' => false]);
     });
     $controllers->post('/rights/masks/', function (Application $app) {
         $rights = new UserHelper\Edit($app, $app['request']);
         return $app['twig']->render('admin/editusers_masks.html.twig', $rights->get_masks());
     });
     $controllers->post('/rights/masks/apply/', function (Application $app) {
         $rights = new UserHelper\Edit($app, $app['request']);
         $rights->apply_masks();
         return $app->json(['message' => '', 'error' => false]);
     });
     $controllers->match('/search/', function (Application $app) {
         $users = new UserHelper\Manage($app, $app['request']);
         return $app['twig']->render('admin/users.html.twig', $users->search());
     })->bind('admin_users_search');
     $controllers->post('/search/export/', function () use($app) {
         $request = $app['request'];
         $users = new UserHelper\Manage($app, $app['request']);
         $userTable = [['ID', 'Login', 'Last Name', 'First Name', 'E-Mail', 'Created', 'Updated', 'Address', 'City', 'Zip', 'Country', 'Phone', 'Fax', 'Job', 'Company', 'Position']];
         foreach ($users->export() as $user) {
             $userTable[] = [$user->getId(), $user->getLogin(), $user->getLastName(), $user->getFirstName(), $user->getEmail(), $user->getCreated()->format(DATE_ATOM), $user->getUpdated()->format(DATE_ATOM), $user->getAddress(), $user->getCity(), $user->getZipCode(), $user->getCountry(), $user->getPhone(), $user->getFax(), $user->getJob(), $user->getCompany(), $user->getActivity()];
         }
         $CSVDatas = \format::arr_to_csv($userTable);
         $response = new Response($CSVDatas, 200, ['Content-Type' => 'text/csv']);
         $response->headers->set('Content-Disposition', 'attachment; filename=export.csv');
         return $response;
     })->bind('admin_users_search_export');
     $controllers->post('/apply_template/', function () use($app) {
         $users = new UserHelper\Edit($app, $app['request']);
         if ($app['request']->request->get('reset_before_apply')) {
             $users->resetRights();
         }
         $users->apply_template();
         return $app->redirectPath('admin_users_search');
     })->bind('admin_users_apply_template');
     $controllers->get('/typeahead/search/', function (Application $app) {
         $request = $app['request'];
         $user_query = new \User_Query($app);
         $like_value = $request->query->get('term');
         $rights = $request->query->get('filter_rights') ?: [];
         $have_right = $request->query->get('have_right') ?: [];
         $have_not_right = $request->query->get('have_not_right') ?: [];
         $on_base = $request->query->get('on_base') ?: [];
         $elligible_users = $user_query->on_sbas_where_i_am($app['acl']->get($app['authentication']->getUser()), $rights)->like(\User_Query::LIKE_EMAIL, $like_value)->like(\User_Query::LIKE_FIRSTNAME, $like_value)->like(\User_Query::LIKE_LASTNAME, $like_value)->like(\User_Query::LIKE_LOGIN, $like_value)->like_match(\User_Query::LIKE_MATCH_OR)->who_have_right($have_right)->who_have_not_right($have_not_right)->on_base_ids($on_base)->execute()->get_results();
         $datas = [];
         foreach ($elligible_users as $user) {
             $datas[] = ['email' => $user->getEmail() ?: '', 'login' => $user->getLogin() ?: '', 'name' => $user->getDisplayName(), 'id' => $user->getId()];
         }
         return $app->json($datas);
     });
     $controllers->post('/create/', function (Application $app) {
         $datas = ['error' => false, 'message' => '', 'data' => null];
         try {
             $request = $app['request'];
             $module = new UserHelper\Manage($app, $app['request']);
             if ($request->request->get('template') == '1') {
                 $user = $module->create_template();
             } else {
                 $user = $module->create_newuser();
             }
             if (!$user instanceof User) {
                 throw new \Exception('Unknown error');
             }
             $datas['data'] = $user->getId();
         } catch (\Exception $e) {
             $datas['error'] = true;
             if ($request->request->get('template') == '1') {
                 $datas['message'] = $app->trans('Unable to create template, the name is already used.');
             } else {
                 $datas['message'] = $app->trans('Unable to create the user.');
             }
         }
         return $app->json($datas);
     });
     $controllers->post('/export/csv/', function (Application $app) {
         $request = $app['request'];
         $user_query = new \User_Query($app);
         $like_value = $request->request->get('like_value');
         $like_field = $request->request->get('like_field');
         $on_base = $request->request->get('base_id') ?: null;
         $on_sbas = $request->request->get('sbas_id') ?: null;
         $elligible_users = $user_query->on_bases_where_i_am($app['acl']->get($app['authentication']->getUser()), ['canadmin'])->like($like_field, $like_value)->on_base_ids($on_base)->on_sbas_ids($on_sbas);
         $offset = 0;
         $buffer = [];
         $buffer[] = ['ID', 'Login', $app->trans('admin::compte-utilisateur nom'), $app->trans('admin::compte-utilisateur prenom'), $app->trans('admin::compte-utilisateur email'), 'CreationDate', 'ModificationDate', $app->trans('admin::compte-utilisateur adresse'), $app->trans('admin::compte-utilisateur ville'), $app->trans('admin::compte-utilisateur code postal'), $app->trans('admin::compte-utilisateur pays'), $app->trans('admin::compte-utilisateur telephone'), $app->trans('admin::compte-utilisateur fax'), $app->trans('admin::compte-utilisateur poste'), $app->trans('admin::compte-utilisateur societe'), $app->trans('admin::compte-utilisateur activite')];
         do {
             $elligible_users->limit($offset, 20);
             $offset += 20;
             $results = $elligible_users->execute()->get_results();
             foreach ($results as $user) {
                 $buffer[] = [$user->getId(), $user->getLogin(), $user->getLastName(), $user->getFirstName(), $user->getEmail(), $app['date-formatter']->format_mysql($user->getCreated()), $app['date-formatter']->format_mysql($user->getUpdated()), $user->getAddress(), $user->getCity(), $user->getZipCode(), $user->getCountry(), $user->getPhone(), $user->getFax(), $user->getJob(), $user->getCompany(), $user->getActivity()];
             }
         } while (count($results) > 0);
         $out = \format::arr_to_csv($buffer);
         $response = new Response($out, 200, ['Content-type' => 'text/csv', 'Content-Disposition' => 'attachment; filename=export.csv']);
         $response->setCharset('UTF-8');
         return $response;
     })->bind('admin_users_export_csv');
     $controllers->get('/registrations/', function (Application $app) {
         $app['manipulator.registration']->deleteOldRegistrations();
         $models = $app['manipulator.user']->getRepository()->findModelOf($app['authentication']->getUser());
         $userRegistrations = [];
         foreach ($app['manipulator.registration']->getRepository()->getUserRegistrations($app['authentication']->getUser(), $app['acl']->get($app['authentication']->getUser())->get_granted_base(['canadmin'])) as $registration) {
             $user = $registration->getUser();
             $userRegistrations[$user->getId()]['user'] = $user;
             $userRegistrations[$user->getId()]['registrations'][$registration->getBaseid()] = $registration;
         }
         return $app['twig']->render('admin/user/registrations.html.twig', ['user_registrations' => $userRegistrations, 'models' => $models]);
     })->bind('users_display_registrations');
     $controllers->post('/registrations/', function (Application $app, Request $request) {
         $templates = $deny = $accept = $options = [];
         foreach ($request->request->get('template', []) as $tmp) {
             if ('' === trim($tmp)) {
                 continue;
             }
             $tmp = explode('_', $tmp);
             if (count($tmp) == 2) {
                 $templates[$tmp[0]] = $tmp[1];
             }
         }
         foreach ($request->request->get('deny', []) as $den) {
             $den = explode('_', $den);
             if (count($den) == 2 && !isset($templates[$den[0]])) {
                 $deny[$den[0]][$den[1]] = $den[1];
             }
         }
         foreach ($request->request->get('accept', []) as $acc) {
             $acc = explode('_', $acc);
             if (count($acc) == 2 && !isset($templates[$acc[0]])) {
                 $accept[$acc[0]][$acc[1]] = $acc[1];
                 $options[$acc[0]][$acc[1]] = ['HD' => false, 'WM' => false];
             }
         }
         foreach ($request->request->get('accept_hd', []) as $accHD) {
             $accHD = explode('_', $accHD);
             if (count($accHD) == 2 && isset($accept[$accHD[0]]) && isset($options[$accHD[0]][$accHD[1]])) {
                 $options[$accHD[0]][$accHD[1]]['HD'] = true;
             }
         }
         foreach ($request->request->get('watermark', []) as $wm) {
             $wm = explode('_', $wm);
             if (count($wm) == 2 && isset($accept[$wm[0]]) && isset($options[$wm[0]][$wm[1]])) {
                 $options[$wm[0]][$wm[1]]['WM'] = true;
             }
         }
         if (count($templates) > 0 || count($deny) > 0 || count($accept) > 0) {
             $cacheToUpdate = $done = [];
             foreach ($templates as $usr => $template_id) {
                 if (null === ($user = $app['manipulator.user']->getRepository()->find($usr))) {
                     $app->abort(400, srpintf("User with id % in provided in 'template' request variable could not be found", $usr));
                 }
                 $cacheToUpdate[$usr] = $user;
                 $user_template = $app['manipulator.user']->getRepository()->find($template_id);
                 $collections = $app['acl']->get($user_template)->get_granted_base();
                 $baseIds = array_keys($collections);
                 $app['acl']->get($user)->apply_model($user_template, $baseIds);
                 foreach ($collections as $collection) {
                     $done[$usr][$collection->get_base_id()] = true;
                 }
                 $app['manipulator.registration']->deleteUserRegistrations($user, $collections);
             }
             foreach ($deny as $usr => $bases) {
                 if (null === ($user = $app['manipulator.user']->getRepository()->find($usr))) {
                     $app->abort(400, srpintf("User with id % in provided in 'deny' request variable could not be found", $usr));
                 }
                 $cacheToUpdate[$usr] = $user;
                 foreach ($app['manipulator.registration']->getRepository()->getUserRegistrations($user, array_map(function ($baseId) use($app) {
                     return \collection::get_from_base_id($app, $baseId);
                 }, $bases)) as $registration) {
                     $app['manipulator.registration']->rejectRegistration($registration);
                     $done[$usr][$registration->getBaseId()] = false;
                 }
             }
             foreach ($accept as $usr => $bases) {
                 if (null === ($user = $app['manipulator.user']->getRepository()->find($usr))) {
                     $app->abort(400, srpintf("User with id % in provided in 'accept' request variable could not be found", $usr));
                 }
                 $cacheToUpdate[$usr] = $user;
                 foreach ($app['manipulator.registration']->getRepository()->getUserRegistrations($user, array_map(function ($baseId) use($app) {
                     return \collection::get_from_base_id($app, $baseId);
                 }, $bases)) as $registration) {
                     $done[$usr][$registration->getBaseId()] = true;
                     $app['manipulator.registration']->acceptRegistration($registration, $options[$usr][$registration->getBaseId()]['HD'], $options[$usr][$registration->getBaseId()]['WM']);
                 }
             }
             array_walk($cacheToUpdate, function (User $user) use($app) {
                 $app['acl']->get($user)->delete_data_from_cache();
             });
             unset($cacheToUpdate);
             foreach ($done as $usr => $bases) {
                 $user = $app['manipulator.user']->getRepository()->find($usr);
                 $acceptColl = $denyColl = [];
                 foreach ($bases as $bas => $isok) {
                     $collection = \collection::get_from_base_id($app, $bas);
                     if ($isok) {
                         $acceptColl[] = $collection->get_label($app['locale']);
                         continue;
                     }
                     $denyColl[] = $collection->get_label($app['locale']);
                 }
                 if (0 !== count($acceptColl) || 0 !== count($denyColl)) {
                     $message = '';
                     if (0 !== count($acceptColl)) {
                         $message .= "\n" . $app->trans('login::register:email: Vous avez ete accepte sur les collections suivantes : ') . implode(', ', $acceptColl) . "\n";
                     }
                     if (0 !== count($denyColl)) {
                         $message .= "\n" . $app->trans('login::register:email: Vous avez ete refuse sur les collections suivantes : ') . implode(', ', $denyColl) . "\n";
                     }
                     $receiver = new Receiver(null, $user->getEmail());
                     $mail = MailSuccessEmailUpdate::create($app, $receiver, null, $message);
                     $app['notification.deliverer']->deliver($mail);
                 }
             }
         }
         return $app->redirectPath('users_display_registrations', ['success' => 1]);
     })->bind('users_submit_registrations');
     $controllers->get('/import/file/', function (Application $app, Request $request) {
         return $app['twig']->render('admin/user/import/file.html.twig');
     })->bind('users_display_import_file');
     $controllers->post('/import/file/', function (Application $app, Request $request) {
         if (null === ($file = $request->files->get('files')) || !$file->isValid()) {
             return $app->redirectPath('users_display_import_file', ['error' => 'file-invalid']);
         }
         $equivalenceToMysqlField = self::getEquivalenceToMysqlField();
         $loginDefined = $pwdDefined = $mailDefined = false;
         $loginNew = [];
         $out = ['ignored_row' => [], 'errors' => []];
         $nbUsrToAdd = 0;
         $lines = \format::csv_to_arr($file->getPathname());
         $roughColumns = array_shift($lines);
         $columnsSanitized = array_map(function ($columnName) {
             return trim(mb_strtolower($columnName));
         }, $roughColumns);
         $columns = array_filter($columnsSanitized, function ($columnName) use(&$out, $equivalenceToMysqlField) {
             if (!isset($equivalenceToMysqlField[$columnName])) {
                 $out['ignored_row'][] = $columnName;
                 return false;
             }
             return true;
         });
         foreach ($columns as $columnName) {
             if ($equivalenceToMysqlField[$columnName] === 'usr_login') {
                 $loginDefined = true;
             }
             if ($equivalenceToMysqlField[$columnName] === 'usr_password') {
                 $pwdDefined = true;
             }
             if ($equivalenceToMysqlField[$columnName] === 'usr_mail') {
                 $mailDefined = true;
             }
         }
         if (!$loginDefined) {
             return $app->redirectPath('users_display_import_file', ['error' => 'row-login']);
         }
         if (!$pwdDefined) {
             return $app->redirectPath('users_display_import_file', ['error' => 'row-pwd']);
         }
         if (!$mailDefined) {
             return $app->redirectPath('users_display_import_file', ['error' => 'row-mail']);
         }
         foreach ($lines as $nbLine => $line) {
             $loginValid = false;
             $pwdValid = false;
             $mailValid = false;
             foreach ($columns as $nbCol => $colName) {
                 if (!isset($equivalenceToMysqlField[$colName])) {
                     unset($lines[$nbCol]);
                     continue;
                 }
                 $sqlField = $equivalenceToMysqlField[$colName];
                 $value = $line[$nbCol];
                 if ($sqlField === 'usr_login') {
                     $loginToAdd = $value;
                     if ($loginToAdd === "") {
                         $out['errors'][] = $app->trans("Login line %line% is empty", ['%line%' => $nbLine + 1]);
                     } elseif (in_array($loginToAdd, $loginNew)) {
                         $out['errors'][] = $app->trans("Login %login% is already defined in the file at line %line%", ['%login%' => $loginToAdd, '%line%' => $nbLine]);
                     } else {
                         if (null !== $app['manipulator.user']->getRepository()->findByLogin($loginToAdd)) {
                             $out['errors'][] = $app->trans("Login %login% already exists in database", ['%login%' => $loginToAdd]);
                         } else {
                             $loginValid = true;
                         }
                     }
                 }
                 if ($loginValid && $sqlField === 'usr_mail') {
                     $mailToAdd = $value;
                     if ($mailToAdd === "") {
                         $out['errors'][] = $app->trans("Mail line %line% is empty", ['%line%' => $nbLine + 1]);
                     } elseif (null !== $app['manipulator.user']->getRepository()->findByEmail($mailToAdd)) {
                         $out['errors'][] = $app->trans("Email '%email%' for login '%login%' already exists in database", ['%email%' => $mailToAdd, '%login%' => $loginToAdd]);
                     } else {
                         $mailValid = true;
                     }
                 }
                 if ($sqlField === 'usr_password') {
                     $passwordToVerif = $value;
                     if ($passwordToVerif === "") {
                         $out['errors'][] = $app->trans("Password is empty at line %line%", ['%line%' => $nbLine]);
                     } else {
                         $pwdValid = true;
                     }
                 }
             }
             if ($loginValid && $pwdValid && $mailValid) {
                 $loginNew[] = $loginToAdd;
                 $nbUsrToAdd++;
             }
         }
         if (count($out['errors']) > 0 && $nbUsrToAdd === 0) {
             return $app['twig']->render('admin/user/import/file.html.twig', ['errors' => $out['errors']]);
         }
         if ($nbUsrToAdd === 0) {
             return $app->redirectPath('users_display_import_file', ['error' => 'no-user']);
         }
         $basList = array_keys($app['acl']->get($app['authentication']->getUser())->get_granted_base(['manage']));
         $models = $app['EM.native-query']->getModelForUser($app['authentication']->getUser(), $basList);
         return $app['twig']->render('/admin/user/import/view.html.twig', ['nb_user_to_add' => $nbUsrToAdd, 'models' => $models, 'lines_serialized' => serialize($lines), 'columns_serialized' => serialize($columns), 'errors' => $out['errors']]);
     })->bind('users_submit_import_file');
     $controllers->post('/import/', function (Application $app, Request $request) {
         $nbCreation = 0;
         if (null === ($serializedColumns = $request->request->get('sr_columns')) || '' === $serializedColumns) {
             $app->abort(400);
         }
         if (null === ($serializedLines = $request->request->get('sr_lines')) || '' === $serializedLines) {
             $app->abort(400);
         }
         if (null === ($model = $request->request->get("modelToApply"))) {
             $app->abort(400);
         }
         $lines = unserialize($serializedLines);
         $columns = unserialize($serializedColumns);
         $equivalenceToMysqlField = Users::getEquivalenceToMysqlField();
         foreach ($lines as $nbLine => $line) {
             $curUser = [];
             foreach ($columns as $nbCol => $colName) {
                 if (!isset($equivalenceToMysqlField[$colName]) || !isset($line[$nbCol])) {
                     continue;
                 }
                 $sqlField = $equivalenceToMysqlField[$colName];
                 $value = trim($line[$nbCol]);
                 if ($sqlField === "usr_sexe") {
                     switch ($value) {
                         case "Mlle":
                         case "Mlle.":
                         case "mlle":
                         case "Miss":
                         case "miss":
                         case "0":
                             $curUser[$sqlField] = 0;
                             break;
                         case "Mme":
                         case "Madame":
                         case "Ms":
                         case "Ms.":
                         case "1":
                             $curUser[$sqlField] = 1;
                             break;
                         case "M":
                         case "M.":
                         case "Mr":
                         case "Mr.":
                         case "Monsieur":
                         case "Mister":
                         case "2":
                             $curUser[$sqlField] = 2;
                             break;
                     }
                 } else {
                     $curUser[$sqlField] = $value;
                 }
             }
             if (isset($curUser['usr_login']) && trim($curUser['usr_login']) !== '' && isset($curUser['usr_password']) && trim($curUser['usr_password']) !== '' && isset($curUser['usr_mail']) && trim($curUser['usr_mail']) !== '') {
                 if (null === $app['manipulator.user']->getRepository()->findByLogin($curUser['usr_login']) && false === $app['manipulator.user']->getRepository()->findByEmail($curUser['usr_mail'])) {
                     $newUser = $app['manipulator.user']->createUser($curUser['usr_login'], $curUser['usr_password'], $curUser['usr_mail']);
                     $ftpCredential = new FtpCredential();
                     $ftpCredential->setUser($newUser);
                     if (isset($curUser['activeFTP'])) {
                         $ftpCredential->setActive((int) $curUser['activeFTP']);
                     }
                     if (isset($curUser['addrFTP'])) {
                         $ftpCredential->setAddress((string) $curUser['addrFTP']);
                     }
                     if (isset($curUser['passifFTP'])) {
                         $ftpCredential->setPassive((int) $curUser['passifFTP']);
                     }
                     if (isset($curUser['destFTP'])) {
                         $ftpCredential->setReceptionFolder($curUser['destFTP']);
                     }
                     if (isset($curUser['prefixFTPfolder'])) {
                         $ftpCredential->setRepositoryPrefixName($curUser['prefixFTPfolder']);
                     }
                     if (isset($curUser['usr_prenom'])) {
                         $newUser->setFirstName($curUser['usr_prenom']);
                     }
                     if (isset($curUser['usr_nom'])) {
                         $newUser->setLastName($curUser['usr_nom']);
                     }
                     if (isset($curUser['adresse'])) {
                         $newUser->setAdress($curUser['adresse']);
                     }
                     if (isset($curUser['cpostal'])) {
                         $newUser->setZipCode($curUser['cpostal']);
                     }
                     if (isset($curUser['usr_sexe'])) {
                         $newUser->setGender((int) $curUser['usr_sexe']);
                     }
                     if (isset($curUser['tel'])) {
                         $newUser->setPhone($curUser['tel']);
                     }
                     if (isset($curUser['fax'])) {
                         $newUser->setFax($curUser['fax']);
                     }
                     if (isset($curUser['activite'])) {
                         $newUser->setJob($curUser['activite']);
                     }
                     if (isset($curUser['fonction'])) {
                         $newUser->setPosition($curUser['fonction']);
                     }
                     if (isset($curUser['societe'])) {
                         $newUser->setCompany($curUser['societe']);
                     }
                     $app['acl']->get($newUser)->apply_model($app['manipulator.user']->getRepository()->find($model), array_keys($app['acl']->get($app['authentication']->getUser())->get_granted_base(['manage'])));
                     $nbCreation++;
                 }
             }
         }
         return $app->redirectPath('admin_users_search', ['user-updated' => $nbCreation]);
     })->bind('users_submit_import');
     $controllers->get('/import/example/csv/', function (Application $app) {
         $file = new \SplFileInfo($app['root.path'] . '/lib/Fixtures/exampleImportUsers.csv');
         if (!$file->isFile()) {
             $app->abort(400);
         }
         $response = new Response();
         $response->setStatusCode(200);
         $response->headers->set('Pragma', 'public');
         $response->headers->set('Content-Disposition', 'attachment; filename=' . $file->getFilename());
         $response->headers->set('Content-Length', $file->getSize());
         $response->headers->set('Content-Type', 'text/csv');
         $response->setContent(file_get_contents($file->getPathname()));
         return $response;
     })->bind('users_import_csv');
     $controllers->get('/import/example/rtf/', function (Application $app) {
         $file = new \SplFileInfo($app['root.path'] . '/lib/Fixtures/Fields.rtf');
         if (!$file->isFile()) {
             $app->abort(400);
         }
         $response = new Response();
         $response->setStatusCode(200);
         $response->headers->set('Pragma', 'public');
         $response->headers->set('Content-Disposition', 'attachment; filename=' . $file->getFilename());
         $response->headers->set('Content-Length', $file->getSize());
         $response->headers->set('Content-Type', 'text/rtf');
         $response->setContent(file_get_contents($file->getPathname()));
         return $response;
     })->bind('users_import_rtf');
     return $controllers;
 }
Example #28
0
 /**
  * Display authorized applications that can access user informations
  *
  * @param Application    $app
  * @param Request        $request
  * @param ApiApplication $application
  *
  * @return JsonResponse
  */
 public function grantAccess(Application $app, Request $request, ApiApplication $application)
 {
     if (!$request->isXmlHttpRequest() || !array_key_exists($request->getMimeType('json'), array_flip($request->getAcceptableContentTypes()))) {
         $app->abort(400, $app->trans('Bad request format, only JSON is allowed'));
     }
     if (null === ($account = $app['repo.api-accounts']->findByUserAndApplication($app['authentication']->getUser(), $application))) {
         return $app->json(['success' => false]);
     }
     if (false === (bool) $request->query->get('revoke')) {
         $app['manipulator.api-account']->authorizeAccess($account);
     } else {
         $app['manipulator.api-account']->revokeAccess($account);
     }
     return $app->json(['success' => true]);
 }