app, $request, false, [\ACL::CANDELETERECORD]); $sbas_ids = array_map(function (\databox $databox) { return $databox->get_sbas_id(); }, $records->databoxes()); $message = ''; $template = ''; $collections = $this->getAclForUser()->get_granted_base([\ACL::CANADDRECORD], $sbas_ids); if (count($records->databoxes()) > 1) { $success = false; $message = $this->app->trans('prod::Les enregistrements ne provienent pas tous de la meme base et ne peuvent donc etre traites ensemble'); } elseif (count($records) == 0) { $success = false; $message = $this->app->trans('prod::Vous n\'avez le droit d\'effectuer l\'operation sur aucun document'); } else { // is able to move: $success = true; /** @var DisplaySettingService $settings */ $settings = $this->app['settings']; $userOrderSetting = $settings->getUserSetting($this->app->getAuthenticatedUser(), 'order_collection_by'); // a temporary array to sort the collections $aName = []; list($ukey, $uorder) = ["order", SORT_ASC]; // default ORDER_BY_ADMIN switch ($userOrderSetting) { case $settings::ORDER_ALPHA_ASC : list($ukey, $uorder) = ["name", SORT_ASC]; break; case $settings::ORDER_ALPHA_DESC : list($ukey, $uorder) = ["name", SORT_DESC]; break; } foreach ($collections as $key => $row) { if ($ukey == "order") { $aName[$key] = $row->get_ord(); } else { $aName[$key] = $row->get_name(); } } // sort the collections array_multisort($aName, $uorder, SORT_REGULAR, $collections); $this->setSessionFormToken('prodMoveCollection'); $parameters = [ 'records' => $records, 'message' => '', 'collections' => $collections, ]; $template = $this->render('prod/actions/collection_default.html.twig', $parameters); } $datas = [ 'success' => $success, 'message' => $message, 'template' => $template ]; return $this->app->json($datas); } public function apply(Request $request) { if (!$this->isCrsfValid($request, 'prodMoveCollection')) { return $this->app->json(['success' => false, 'message' => 'invalid move collection form']); } /** @var \record_adapter[] $records */ $records = RecordsRequest::fromRequest($this->app, $request, false, [\ACL::CANDELETERECORD]); $datas = [ 'success' => false, 'message' => '', ]; try { if (null === $request->request->get('base_id')) { $datas['message'] = $this->app->trans('Missing target collection'); return $this->app->json($datas); } if (!$this->getAclForUser()->has_right_on_base($request->request->get('base_id'), \ACL::CANADDRECORD)) { $datas['message'] = $this->app->trans("You do not have the permission to move records to %collection%", ['%collection%', \phrasea::bas_labels($request->request->get('base_id'), $this->app)]); return $this->app->json($datas); } try { $collection = \collection::getByBaseId($this->app, $request->request->get('base_id')); } catch (\Exception_Databox_CollectionNotFound $e) { $datas['message'] = $this->app->trans('Invalid target collection'); return $this->app->json($datas); } /** @var \collection[] $trashCollectionsBySbasId */ $trashCollectionsBySbasId = []; foreach ($records as $record) { $oldCollectionId = $record->getCollection()->get_coll_id(); $record->move_to_collection($collection); if ($request->request->get("chg_coll_son") == "1") { /** @var \record_adapter $child */ foreach ($record->getChildren() as $child) { if ($this->getAclForUser()->has_right_on_base($child->getBaseId(), \ACL::CANDELETERECORD)) { $child->move_to_collection($collection); } } } $sbasId = $record->getDatabox()->get_sbas_id(); if (!array_key_exists($sbasId, $trashCollectionsBySbasId)) { $trashCollectionsBySbasId[$sbasId] = $record->getDatabox()->getTrashCollection(); } if ($trashCollectionsBySbasId[$sbasId] !== null) { if ($oldCollectionId == $trashCollectionsBySbasId[$sbasId]->get_coll_id() && $collection->get_coll_id() !== $trashCollectionsBySbasId[$sbasId]->get_coll_id()) { // record is already in trash so active it foreach ($record->get_subdefs() as $subdef) { if (($pl = $subdef->get_permalink())) { $pl->set_is_activated(true); } } if ($request->request->get("chg_coll_son") == "1") { /** @var \record_adapter $child */ foreach ($record->getChildren() as $child) { if ($this->getAclForUser()->has_right_on_base($child->getBaseId(), \ACL::CANDELETERECORD)) { foreach ($child->get_subdefs() as $childSubdef) { if (($childPl = $childSubdef->get_permalink())) { $childPl->set_is_activated(true); } } } } } } } } $ret = [ 'success' => true, 'message' => $this->app->trans('Records have been successfuly moved'), ]; } catch (\Exception $e) { $ret = [ 'success' => false, 'message' => $this->app->trans('An error occured'), ]; } return $this->app->json($ret); } }