/** * 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); }
/** * 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]); }
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); }
/** * 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); }
/** * 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; }
/** * 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')])); }
/** * 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')]); }
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; }
/** * 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); }
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); }
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'); } }
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]); }
/** * 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; }
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; }
/** * 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); }
/** * 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); }
/** * 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]); }
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.')]); }
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')]]); }
/** * 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']); }
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); }
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; }
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; }
/** * * @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')]); } }
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; }
/** * 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]); }
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; }
/** * 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]); }