From 1e09b0fa904a176e087ef1d4eabc8c16e8f71612 Mon Sep 17 00:00:00 2001
From: "kevin.dezaphi" <kevin.dezaphi@maarch.org>
Date: Fri, 19 Oct 2018 14:42:17 +0200
Subject: [PATCH] fix priority order when set by admin

---
 .../documents_list_copies.php                 | 17 +++++++++--
 .../documents_list_with_attachments.php       | 14 +++++++--
 .../attachments/frame_list_attachments.php    |  3 +-
 modules/avis/documents_list_with_avis.php     | 29 +++++++++++++++----
 .../visa/documents_list_with_signatory.php    | 14 +++++++--
 5 files changed, 64 insertions(+), 13 deletions(-)

diff --git a/apps/maarch_entreprise/documents_list_copies.php b/apps/maarch_entreprise/documents_list_copies.php
index 224a3135ccc..54e840ec009 100755
--- a/apps/maarch_entreprise/documents_list_copies.php
+++ b/apps/maarch_entreprise/documents_list_copies.php
@@ -159,8 +159,19 @@ if (!empty($order_field) && !empty($order)) {
 } else {
     if (!empty($_SESSION['current_basket']['basket_res_order'])) {
         if (count($arr_order) == 1) {
-            $list->setOrder();
-            $list->setOrderField($arr_order[0]);
+            $orders = explode(' ', $arr_order[0]);
+            if (!empty($orders[1])) {
+                $list->setOrder($orders[1]);
+            } else {
+                $list->setOrder();
+            }
+            $list->setOrderField($orders[0]);
+        }
+        $orderstr = 'order by '.str_replace('alt_identifier', 'order_alphanum(alt_identifier)', $_SESSION['current_basket']['basket_res_order']);
+        if (strpos($_SESSION['current_basket']['basket_res_order'], 'priority') !== false) {
+            $where .= ' and '.$table.'.priority = priorities.id';
+            $select['priorities'] = ['order', 'id'];
+            $orderstr = 'order by priorities.order '.$order;
         }
         $_SESSION['last_order_basket'] = $_SESSION['current_basket']['basket_res_order'];
     } else {
@@ -176,7 +187,7 @@ if (isset($_REQUEST['lines'])) {
     $limit = 'default';
 }
 //Request
-$tab = $request->PDOselect($select, $where, $arrayPDO, $orderstr, $_SESSION['config']['databasetype'], $limit, false, '', '', '', false, false, false, $_SESSION['save_list']['start']);
+$tab = $request->PDOselect($select, $where, $arrayPDO, $orderstr, $_SESSION['config']['databasetype'], $limit, false, '', '', '', false, false, 'distinct', $_SESSION['save_list']['start']);
 
 $_SESSION['current_basket']['last_query'] = array();
 $_SESSION['current_basket']['last_query']['select'] = $select;
diff --git a/apps/maarch_entreprise/documents_list_with_attachments.php b/apps/maarch_entreprise/documents_list_with_attachments.php
index e03355a8694..0d3c577cb50 100755
--- a/apps/maarch_entreprise/documents_list_with_attachments.php
+++ b/apps/maarch_entreprise/documents_list_with_attachments.php
@@ -158,10 +158,20 @@ if (!empty($order_field) && !empty($order)) {
 } else {
     if (!empty($_SESSION['current_basket']['basket_res_order'])) {
         if (count($arr_order) == 1) {
-            $list->setOrder();
-            $list->setOrderField($arr_order[0]);
+            $orders = explode(' ', $arr_order[0]);
+            if (!empty($orders[1])) {
+                $list->setOrder($orders[1]);
+            } else {
+                $list->setOrder();
+            }
+            $list->setOrderField($orders[0]);
         }
         $orderstr = 'order by '.str_replace('alt_identifier', 'order_alphanum(alt_identifier)', $_SESSION['current_basket']['basket_res_order']);
+        if (strpos($_SESSION['current_basket']['basket_res_order'], 'priority') !== false) {
+            $where .= ' and '.$table.'.priority = priorities.id';
+            $select['priorities'] = ['order', 'id'];
+            $orderstr = 'order by priorities.order '.$order;
+        }
         $_SESSION['last_order_basket'] = $_SESSION['current_basket']['basket_res_order'];
     } else {
         $list->setOrder();
diff --git a/modules/attachments/frame_list_attachments.php b/modules/attachments/frame_list_attachments.php
index 7357f432760..f827b9a1b2a 100755
--- a/modules/attachments/frame_list_attachments.php
+++ b/modules/attachments/frame_list_attachments.php
@@ -115,8 +115,9 @@ if (!empty($order_field) && !empty($order)) {
     if ($_REQUEST['order_field'] == 'identifier') {
         $orderstr = "order by order_alphanum(identifier)"." ".$order;
     } else if ($_REQUEST['order_field'] == 'priority') {
+        $where .= ' and res_view_attachments.priority = priorities.id';
         $select['priorities'] = ['order', 'id'];
-        $orderstr = 'order by (select priorities.order from priorities where priorities.id = priority) '.$order;
+        $orderstr = 'order by priorities.order '.$order;
     } else {
         $orderstr = "order by ".$order_field." ".$order;
     }
diff --git a/modules/avis/documents_list_with_avis.php b/modules/avis/documents_list_with_avis.php
index 4c8476c8274..ba8d7eeaa53 100755
--- a/modules/avis/documents_list_with_avis.php
+++ b/modules/avis/documents_list_with_avis.php
@@ -152,10 +152,29 @@ if (!empty($order_field) && !empty($order)) {
     }
     $_SESSION['last_order_basket'] = $orderstr;
 } else {
-    $list->setOrder();
-    $list->setOrderField('modification_date');
-    $orderstr = 'order by modification_date desc';
-    $_SESSION['last_order_basket'] = $orderstr;
+    if (!empty($_SESSION['current_basket']['basket_res_order'])) {
+        if (count($arr_order) == 1) {
+            $orders = explode(' ', $arr_order[0]);
+            if (!empty($orders[1])) {
+                $list->setOrder($orders[1]);
+            } else {
+                $list->setOrder();
+            }
+            $list->setOrderField($orders[0]);
+        }
+        $orderstr = 'order by '.str_replace('alt_identifier', 'order_alphanum(alt_identifier)', $_SESSION['current_basket']['basket_res_order']);
+        if (strpos($_SESSION['current_basket']['basket_res_order'], 'priority') !== false) {
+            $where .= ' and '.$table.'.priority = priorities.id';
+            $select['priorities'] = ['order', 'id'];
+            $orderstr = 'order by priorities.order '.$order;
+        }
+        $_SESSION['last_order_basket'] = $_SESSION['current_basket']['basket_res_order'];
+    } else {
+        $list->setOrder();
+        $list->setOrderField('modification_date');
+        $orderstr = 'order by modification_date desc';
+        $_SESSION['last_order_basket'] = $orderstr;
+    }
 }
 if (isset($_REQUEST['lines'])) {
     $limit = $_REQUEST['lines'];
@@ -163,7 +182,7 @@ if (isset($_REQUEST['lines'])) {
     $limit = 'default';
 }
 //Request
-$tab = $request->PDOselect($select, $where, $arrayPDO, $orderstr, $_SESSION['config']['databasetype'], $limit, false, '', '', '', false, false, false, $_SESSION['save_list']['start']);
+$tab = $request->PDOselect($select, $where, $arrayPDO, $orderstr, $_SESSION['config']['databasetype'], $limit, false, '', '', '', false, false, 'distinct', $_SESSION['save_list']['start']);
 
 //Templates
 $defaultTemplate = 'documents_list_with_avis';
diff --git a/modules/visa/documents_list_with_signatory.php b/modules/visa/documents_list_with_signatory.php
index 7fbb39f26d7..c886afc5675 100755
--- a/modules/visa/documents_list_with_signatory.php
+++ b/modules/visa/documents_list_with_signatory.php
@@ -156,10 +156,20 @@ if (!empty($order_field) && !empty($order)) {
 } else {
     if (!empty($_SESSION['current_basket']['basket_res_order'])) {
         if (count($arr_order) == 1) {
-            $list->setOrder();
-            $list->setOrderField($arr_order[0]);
+            $orders = explode(' ', $arr_order[0]);
+            if (!empty($orders[1])) {
+                $list->setOrder($orders[1]);
+            } else {
+                $list->setOrder();
+            }
+            $list->setOrderField($orders[0]);
         }
         $orderstr = 'order by '.str_replace('alt_identifier', 'order_alphanum(alt_identifier)', $_SESSION['current_basket']['basket_res_order']);
+        if (strpos($_SESSION['current_basket']['basket_res_order'], 'priority') !== false) {
+            $where .= ' and '.$table.'.priority = priorities.id';
+            $select['priorities'] = ['order', 'id'];
+            $orderstr = 'order by priorities.order '.$order;
+        }
         $_SESSION['last_order_basket'] = $_SESSION['current_basket']['basket_res_order'];
     } else {
         $list->setOrder();
-- 
GitLab