ajaxUser.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. <?php
  2. $res = 0;
  3. // Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined)
  4. if (!$res && !empty ($_SERVER["CONTEXT_DOCUMENT_ROOT"])) {
  5. $res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"] . "/main.inc.php";
  6. }
  7. // Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME
  8. $tmp = empty ($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME'];
  9. $tmp2 = realpath(__FILE__);
  10. $i = strlen($tmp) - 1;
  11. $j = strlen($tmp2) - 1;
  12. while ($i > 0 && $j > 0 && isset ($tmp[$i]) && isset ($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) {
  13. $i--;
  14. $j--;
  15. }
  16. if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1)) . "/main.inc.php")) {
  17. $res = @include substr($tmp, 0, ($i + 1)) . "/main.inc.php";
  18. }
  19. if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1))) . "/main.inc.php")) {
  20. $res = @include dirname(substr($tmp, 0, ($i + 1))) . "/main.inc.php";
  21. }
  22. // Try main.inc.php using relative path
  23. if (!$res && file_exists("../main.inc.php")) {
  24. $res = @include "../main.inc.php";
  25. }
  26. if (!$res && file_exists("../../main.inc.php")) {
  27. $res = @include "../../main.inc.php";
  28. }
  29. if (!$res && file_exists("../../../main.inc.php")) {
  30. $res = @include "../../../main.inc.php";
  31. }
  32. if (!$res) {
  33. die ("Include of main fails");
  34. }
  35. require_once DOL_DOCUMENT_ROOT . '/custom/settlements/class/helper.class.php';
  36. $helper = new Helper($db);
  37. function getFilteredUsers($db, $string)
  38. {
  39. $filteredUsers = [];
  40. $sql = "SELECT u.rowid, u.login, u.firstname, u.lastname, ue.nickname, ue.user_category FROM llx_user as u
  41. INNER JOIN llx_user_extrafields AS ue ON ue.fk_object = u.rowid
  42. WHERE ue.user_category = '1' AND u.rowid NOT IN (SELECT fk_user FROM llx_settlements_groupusers) AND (u.lastname LIKE '%{$string}%' OR u.firstname LIKE '%{$string}%' OR ue.nickname LIKE '%{$string}%' OR u.login LIKE '%{$string}%')
  43. ORDER BY u.lastname";
  44. //print $sql;
  45. $data = $db->query($sql);
  46. if (!$data) {
  47. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  48. }
  49. while ($row = pg_fetch_assoc($data)) {
  50. $row['openDailyClosing'] = 0;
  51. $dailyclosingSql = "SELECT * FROM llx_rollerstorage_packagehistory WHERE user_id = {$row['rowid']} AND status = 0 ORDER BY rowid DESC LIMIT 1";
  52. $dailyclosingData = $db->query($dailyclosingSql);
  53. if($db->num_rows($dailyclosingData) > 0){
  54. $dCRow = $db->fetch_object($dailyclosingData);
  55. $row['openDailyClosing'] = $dCRow->rowid;
  56. }
  57. $filteredUsers['freeUsers'][] = $row;
  58. }
  59. $sqlAddedUsers = "SELECT gu.fk_user, u.firstname, u.lastname, u.login, ue.nickname, sg.ref as groupref, sg.rowid as groupid
  60. FROM llx_settlements_groupusers as gu
  61. INNER JOIN llx_user as u ON u.rowid = gu.fk_user
  62. INNER JOIN llx_user_extrafields as ue ON gu.fk_user = ue.fk_object
  63. AND (u.lastname LIKE '%{$string}%' OR u.firstname LIKE '%{$string}%' OR ue.nickname LIKE '%{$string}%' OR u.login LIKE '%{$string}%')
  64. INNER JOIN llx_settlements_group as sg ON sg.rowid = gu.fk_settlements_group
  65. ORDER BY ue.nickname";
  66. $dataAddedUsers = $db->query($sqlAddedUsers);
  67. if (!$data) {
  68. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  69. }
  70. while ($rowAddedUsers = pg_fetch_assoc($dataAddedUsers)) {
  71. $filteredUsers['addedUsers'][] = $rowAddedUsers;
  72. }
  73. return $filteredUsers;
  74. }
  75. $search_title = GETPOST('search_title', 'alpha');
  76. $toselectnewuser = GETPOST('toselectnewuser', 'alpha');
  77. $reduction = GETPOST('reduction', 'alpha');
  78. if ($search_title) {
  79. if (!isset ($_SESSION['usersArray'])) {
  80. if ($toselectnewuser) {
  81. $selectedArray = explode(',', $toselectnewuser);
  82. $_SESSION['usersArray'] = $selectedArray;
  83. $selectedArray = $_SESSION['usersArray'];
  84. } elseif ($reduction) {
  85. $selectedArray = explode(',', $reduction);
  86. $_SESSION['usersArray'] = $selectedArray;
  87. $selectedArray = $_SESSION['usersArray'];
  88. } else {
  89. //print '1';
  90. //unset($_SESSION['usersArray']);
  91. }
  92. } else {
  93. //$selectedArray = $_SESSION['usersArray'];
  94. if ($toselectnewuser) {
  95. $selectedArray = explode(',', $toselectnewuser);
  96. $_SESSION['usersArray'] = array_unique(array_merge($_SESSION['usersArray'], $selectedArray));
  97. $selectedArray = $_SESSION['usersArray'];
  98. } elseif ($reduction) {
  99. $reduction_id = explode(',', $reduction);
  100. $_SESSION['usersArray'] = array_diff($_SESSION['usersArray'], $reduction_id);
  101. $selectedArray = $_SESSION['usersArray'];
  102. if (empty ($_SESSION['usersArray'])) {
  103. unset($_SESSION['usersArray']);
  104. }
  105. } else {
  106. //print '2';
  107. }
  108. }
  109. } else {
  110. if (!isset ($_SESSION['usersArray'])) {
  111. if ($toselectnewuser) {
  112. $selectedArray = explode(',', $toselectnewuser);
  113. $_SESSION['usersArray'] = $selectedArray;
  114. $selectedArray = $_SESSION['usersArray'];
  115. } elseif ($reduction) {
  116. $selectedArray = explode(',', $reduction);
  117. $_SESSION['usersArray'] = $selectedArray;
  118. $selectedArray = $_SESSION['usersArray'];
  119. } else {
  120. //print '3';
  121. //unset($_SESSION['usersArray']);
  122. }
  123. } else {
  124. //$selectedArray = $_SESSION['usersArray'];
  125. if ($toselectnewuser) {
  126. $selectedArray = explode(',', $toselectnewuser);
  127. $_SESSION['usersArray'] = array_unique(array_merge($_SESSION['usersArray'], $selectedArray));
  128. $selectedArray = $_SESSION['usersArray'];
  129. } elseif ($reduction) {
  130. $reduction_id = explode(',', $reduction);
  131. $_SESSION['usersArray'] = array_diff($_SESSION['usersArray'], $reduction_id);
  132. //$_SESSION['usersArray'] = $selectedArray;
  133. $selectedArray = $_SESSION['usersArray'];
  134. if (empty ($_SESSION['usersArray'])) {
  135. unset($_SESSION['usersArray']);
  136. }
  137. } else {
  138. //print '4';
  139. $selectedArray = $_SESSION['usersArray'];
  140. }
  141. }
  142. }
  143. $allUsers = $search_title !== '' ? getFilteredUsers($db, $search_title) : $helper->getAllUsers($db);
  144. $form = new Form($db);
  145. print $isConfirmedTheGroup;
  146. $searchedString = '<table style="width:100%;">';
  147. if (is_array($allUsers['freeUsers'])) {
  148. print '<form method="POST" id="searchFormList" action="' . $url . '" onkeyup="submitFormAjaxUser()">' . "\n";
  149. foreach ($allUsers['freeUsers'] as $freeUser) {
  150. if (!empty ($selectedArray)) {
  151. $selected = in_array($freeUser['rowid'], $selectedArray) ? 'checked' : '';
  152. }
  153. $linkToDailyclosing = $freeUser['openDailyClosing'] > 0 ? '<div style="color: red;">' . $langs->trans('HasAnOpenDailyClosing') . '<a href="/custom/rollerstorage/packagehistory_card.php?id=' . $freeUser['openDailyClosing'] . '&idmenu=1594&fk_group_id=' . $id . '&changeback=1">Link</a></div>' : '';
  154. $dCDisabled = $freeUser['openDailyClosing'] > 0 ? 'disabled' : '';
  155. $nickname = isset ($freeUser['nickname']) ? '<b>' . $freeUser['nickname'] . '</b> - ' : '';
  156. $searchedString .= '<tr style="height:30px;">
  157. <td class="nowrap center"><input id="cb912" class="flat checkforselectadd" type="checkbox" onclick="submitFormAjaxAddUser(event)" name="toselectnewuser[]" value="' . $freeUser['rowid'] . '" ' . $dCDisabled . ' ' . $selected . '></td>
  158. <td><span class="fa fa-user pictofixedwidth"></span>' . $nickname . $freeUser['lastname'] . ' ' . $freeUser['firstname'] . ' (' . $freeUser['login'] . ') ' . $linkToDailyclosing . '</td>
  159. </tr>';
  160. }
  161. }
  162. $searchedString .= '</table><table style="width:100%; color: red;">';
  163. if (is_array($allUsers['addedUsers'])) {
  164. foreach ($allUsers['addedUsers'] as $addedUser) {
  165. $nickname = isset ($addedUser['nickname']) ? '<b>' . $addedUser['nickname'] . '</b> - ' : '';
  166. $searchedString .= '
  167. <tr style="height:30px;">
  168. <td rowspan="2"><span class="fa fa-user pictofixedwidth"></span></td><td>' . $nickname . $addedUser['lastname'] . ' ' . $addedUser['firstname'] . ' (' . $addedUser['login'] . ')</td></tr>
  169. <tr><td class="nowrap"><span class="fa fa-link pictofixedwidth"></span><a href="/custom/settlements/settlementsindex.php?idmenu=1587&mainmenu=settlements&leftmenu=&id=' . $addedUser['groupid'] . '">' . $addedUser['groupref'] . '</a></td></tr>';
  170. }
  171. }
  172. $searchedString .= '</table>';
  173. print $searchedString;
  174. ?>
  175. <script>
  176. $(document).ready(function () {
  177. var checkboxes = document.querySelectorAll('.checkforselectadd:checked');
  178. var values = Array.from(checkboxes).map(function (checkbox) {
  179. return checkbox.value;
  180. });
  181. if (values.length > 0) {
  182. $('#divAdd').css('display', 'inline-block');
  183. $('#massactionadd').css('display', 'inline-block');
  184. $('.massactionaddselect ').css('display', '');
  185. $('.massactionaddconfirmed ').css('display', '');
  186. }
  187. });
  188. $('.checkforselectadd').click(function () {
  189. if ($(this).is(':checked')) {
  190. $('#divAdd').css('display', 'inline-block');
  191. $('#massactionadd').css('display', 'inline-block');
  192. $('.massactionaddselect ').css('display', '');
  193. $('.massactionaddconfirmed ').css('display', '');
  194. } else {
  195. var checkboxes = document.querySelectorAll('.checkforselectadd:checked');
  196. var values = Array.from(checkboxes).map(function (checkbox) {
  197. return checkbox.value;
  198. });
  199. if (values.length === 0) {
  200. $('#divAdd').css('display', 'none');
  201. $('#massactionadd').css('display', 'none');
  202. $('.massactionaddselect ').css('display', 'none');
  203. $('.massactionaddconfirmed ').css('display', 'none');
  204. }
  205. }
  206. })
  207. function submitFormAjaxAddUser(event) {
  208. var checkbox = event.target;
  209. if (checkbox.checked) {
  210. var input = document.getElementById("name_search");
  211. var checkboxes = document.querySelectorAll('.checkforselectadd:checked');
  212. var values = Array.from(checkboxes).map(function (checkbox1) {
  213. return checkbox1.value;
  214. });
  215. var xhr = new XMLHttpRequest();
  216. xhr.open("GET", "ajaxUser.php?search_title=" + input.value + "&toselectnewuser=" + values, true);
  217. xhr.onreadystatechange = function () {
  218. if (xhr.readyState === 4 && xhr.status === 200) {
  219. $("#searchedUsersDiv").html(xhr.responseText);
  220. }
  221. };
  222. xhr.send();
  223. } else {
  224. //alert(checkbox.value);
  225. var input = document.getElementById("name_search");
  226. /* var checkboxes = document.querySelectorAll('.checkforselectadd:checked');
  227. var values = Array.from(checkboxes).map(function (checkbox1) {
  228. return checkbox1.value;
  229. }); */
  230. var xhr = new XMLHttpRequest();
  231. xhr.open("GET", "ajaxUser.php?search_title=" + input.value + "&reduction=" + checkbox.value, true);
  232. xhr.onreadystatechange = function () {
  233. if (xhr.readyState === 4 && xhr.status === 200) {
  234. $("#searchedUsersDiv").html(xhr.responseText);
  235. }
  236. };
  237. xhr.send();
  238. }
  239. }
  240. </script>