diff --git a/lib/Alchemy/Phrasea/Controller/Prod/MoveCollectionController.php b/lib/Alchemy/Phrasea/Controller/Prod/MoveCollectionController.php index e838b61d5f..d89fc9ae32 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/MoveCollectionController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/MoveCollectionController.php @@ -36,6 +36,31 @@ class MoveCollectionController extends Controller } 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 = array(); + 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); + $parameters = [ 'records' => $records, 'message' => '', diff --git a/lib/Alchemy/Phrasea/Controller/Prod/UploadController.php b/lib/Alchemy/Phrasea/Controller/Prod/UploadController.php index 846b934fd7..85bd81def4 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/UploadController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/UploadController.php @@ -243,20 +243,45 @@ class UploadController extends Controller { $collections = []; - foreach ($acl->get_granted_base([\ACL::CANADDRECORD]) as $collection) { - $databox = $collection->get_databox(); - - if ( ! isset($collections[$databox->get_sbas_id()])) { - $collections[$databox->get_sbas_id()] = [ - 'databox' => $databox, - 'databox_collections' => [] - ]; + foreach ($acl->get_granted_sbas() as $databox) { + $sbasId = $databox->get_sbas_id(); + foreach ($acl->get_granted_base([\ACL::CANADDRECORD], [$sbasId]) as $collection) { + $databox = $collection->get_databox(); + if ( ! isset($collections[$sbasId])) { + $collections[$databox->get_sbas_id()] = [ + 'databox' => $databox, + 'databox_collections' => [] + ]; + } + $collections[$databox->get_sbas_id()]['databox_collections'][] = $collection; + /** @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[$databox->get_sbas_id()]['databox_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[$databox->get_sbas_id()]['databox_collections']); } - - $collections[$databox->get_sbas_id()]['databox_collections'][] = $collection; } - return $collections; + } /** diff --git a/lib/Alchemy/Phrasea/Core/Configuration/DisplaySettingService.php b/lib/Alchemy/Phrasea/Core/Configuration/DisplaySettingService.php index b82b3501e0..532c8cf247 100644 --- a/lib/Alchemy/Phrasea/Core/Configuration/DisplaySettingService.php +++ b/lib/Alchemy/Phrasea/Core/Configuration/DisplaySettingService.php @@ -15,6 +15,10 @@ use Alchemy\Phrasea\Model\Entities\User; class DisplaySettingService { + const ORDER_ALPHA_ASC = "ORDER_ALPHA_ASC"; + const ORDER_ALPHA_DESC = "ORDER_ALPHA_DESC"; + const ORDER_BY_ADMIN = "ORDER_BY_ADMIN"; + /** * The default user settings. * @@ -34,6 +38,7 @@ class DisplaySettingService 'client_basket_status' => '1', 'css' => '000000', 'start_page_query' => '', + 'order_collection_by' => self::ORDER_BY_ADMIN, 'start_page' => 'QUERY', 'rollover_thumbnail' => 'caption', 'technical_display' => '1', diff --git a/lib/Alchemy/Phrasea/Helper/Prod.php b/lib/Alchemy/Phrasea/Helper/Prod.php index 3537b367c0..54470f60ee 100644 --- a/lib/Alchemy/Phrasea/Helper/Prod.php +++ b/lib/Alchemy/Phrasea/Helper/Prod.php @@ -46,10 +46,34 @@ class Prod extends Helper $selected = $saveSettings ? ((isset($searchSet['bases']) && isset($searchSet['bases'][$sbasId])) ? (in_array($coll->get_base_id(), $searchSet['bases'][$sbasId])) : true) : true; $bases[$sbasId]['collections'][] = array( 'selected' => $selected, - 'base_id' => $coll->get_base_id() + 'base_id' => $coll->get_base_id(), + 'name' => $coll->get_name(), + 'order' => $coll->get_ord() ); } + /** @var DisplaySettingService $settings */ + $settings = $this->app['settings']; + $userOrderSetting = $settings->getUserSetting($this->app->getAuthenticatedUser(), 'order_collection_by'); + + // a temporary array to sort the collections + $aName = array(); + 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 ($bases[$sbasId]['collections'] as $key => $row) { + $aName[$key] = $row[$ukey]; + } + // sort the collections + array_multisort($aName, $uorder, SORT_REGULAR, $bases[$sbasId]['collections']); + foreach ($databox->get_meta_structure() as $fieldMeta) { if (!$fieldMeta->is_indexable()) { continue; diff --git a/templates/web/prod/index.html.twig b/templates/web/prod/index.html.twig index 07f711d72f..70b3b9e4dc 100644 --- a/templates/web/prod/index.html.twig +++ b/templates/web/prod/index.html.twig @@ -669,6 +669,19 @@ +