ajaxtools.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  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. $oneselect = GETPOST('oneselect', 'int');
  38. $search_title = GETPOST('search_title', 'aZ09');
  39. $toselectnewtool = GETPOST('toselectnewtool', 'alpha');
  40. $reduction = GETPOST('reduction', 'alpha');
  41. $groupid = GETPOST('groupid', 'int');
  42. $selectedArray = explode(',', $toselectnewtool);
  43. if (isset($_SESSION['devices_array'])) {
  44. $devices_array = $_SESSION['devices_array'];
  45. if($search_title === ''){
  46. if ($reduction !== '') {
  47. $devices_array = explode(',', $reduction);
  48. }
  49. elseif($toselectnewtool !== ''){
  50. $devices_array = explode(',', $toselectnewtool);
  51. }else{
  52. $devices_array = [];
  53. }
  54. }else{
  55. if($toselectnewtool !== ''){
  56. $devices_array = array_unique(array_merge($devices_array, explode(',', $toselectnewtool)));
  57. }
  58. elseif ($reduction !== '') {
  59. $devices_array = array_unique(array_merge($devices_array, explode(',', $reduction)));
  60. $devices_array = array_intersect($devices_array, explode(',', $reduction));
  61. }else{
  62. $devices_array = [];
  63. }
  64. $selectedArray = array_filter($devices_array, 'strlen');
  65. }
  66. $_SESSION['devices_array'] = $devices_array;
  67. $selectedArray = $devices_array;
  68. } else {
  69. $_SESSION['devices_array'] = $selectedArray;
  70. }
  71. function getFilteredTools($db, $string, $groupid)
  72. {
  73. $helper = new Helper($db);
  74. $allTools = [];
  75. $entity_id = $helper->getEntityIdFromPackage($groupid);
  76. $sql = "SELECT i.rowid, i.ref, i.title, ie.device_type, ie2.fk_object, i.status
  77. FROM llx_inventory as i
  78. INNER JOIN llx_inventory_extrafields as ie ON ie.fk_object = i.rowid
  79. LEFT JOIN llx_inventory_extrafields AS ie2 ON ie2.assigned_device::integer = i.rowid
  80. WHERE i.rowid NOT IN (SELECT device_id FROM llx_settlements_packagetool)
  81. AND ie.fk_entity = '{$entity_id}' AND ie.device_type::integer NOT IN (3,4) AND i.ref LIKE '%{$string}%' ORDER BY i.rowid";
  82. //print $sql;
  83. $data = $db->query($sql);
  84. if (!$data) {
  85. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  86. return $allTools;
  87. }
  88. while ($row = pg_fetch_assoc($data)) {
  89. $allTools['freeTools'][$row['rowid']] = $row;
  90. if (isset($row['fk_object'])) {
  91. $inventoryObj = new Inventory($db);
  92. $inventoryObj->fetch($row['fk_object']);
  93. $assigned_device_data = ['rowid' => $inventoryObj->id, 'title' => $inventoryObj->title, 'ref' => $inventoryObj->ref, 'device_type' => $inventoryObj->array_options['options_device_type'], 'status' => $inventoryObj->status];
  94. $allTools['freeTools'][$row['rowid']]['assigned_device_data'] = $assigned_device_data;
  95. }
  96. }
  97. $sql = "SELECT i.rowid, i.ref, i.title, ie.device_type, ie2.fk_object, i.status, (SELECT ref FROM llx_settlements_package as package WHERE package.rowid = pt.package_id) as package_ref, pt.package_id as packageid
  98. FROM llx_inventory as i
  99. INNER JOIN llx_inventory_extrafields as ie ON ie.fk_object = i.rowid
  100. INNER JOIN llx_settlements_packagetool AS pt ON pt.device_id=i.rowid
  101. LEFT JOIN llx_inventory_extrafields AS ie2 ON ie2.assigned_device::integer = i.rowid
  102. WHERE i.rowid IN (SELECT device_id FROM llx_settlements_packagetool)
  103. AND ie.fk_entity = '{$entity_id}' AND ie.device_type::integer NOT IN (3,4) AND i.ref LIKE '%{$string}%' ORDER BY i.rowid";
  104. //print $sql;
  105. $data = $db->query($sql);
  106. if (!$data) {
  107. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  108. return $allTools;
  109. }
  110. while ($row = pg_fetch_assoc($data)) {
  111. $allTools['addedTools'][$row['packageid']][$row['rowid']] = $row;
  112. if (isset($row['fk_object'])) {
  113. $inventoryObj = new Inventory($db);
  114. $inventoryObj->fetch($row['fk_object']);
  115. $assigned_device_data = ['rowid' => $inventoryObj->id, 'title' => $inventoryObj->title, 'ref' => $inventoryObj->ref, 'device_type' => $inventoryObj->array_options['options_device_type'], 'status' => $inventoryObj->status];
  116. $allTools['addedTools'][$row['packageid']][$row['rowid']]['assigned_device_data'] = $assigned_device_data;
  117. }
  118. $allTools['addedPackages'][$row['packageid']] = $row['package_ref'];
  119. }
  120. return $allTools;
  121. }
  122. $allTools = $search_title != '' ? getFilteredTools($db, $search_title, $groupid) : $helper->getAllToolsFromSelectedEntity($db, $groupid);
  123. $form = new Form($db);
  124. print '<form method="POST" id="searchFormList" action="' . $url . '" onkeyup="submitFormAjaxTools()">' . "\n";
  125. if (is_array($allTools['freeTools'])) {
  126. $searchedString = '<table style="width:100%;">';
  127. foreach ($allTools['freeTools'] as $freeTool) {
  128. $selected = in_array($freeTool['rowid'], $selectedArray) ? 'checked' : '';
  129. $disabled = !isset($freeTool['assigned_device_data']) ? 'disabled' : '';
  130. if ($freeTool['device_type'] == 1) {
  131. $searchedString .= '<tr style="height:30px; background-color: lightgrey;">
  132. <td class="nowrap center"><input id="id_3_' . $freeTool['rowid'] . '" class="flat checkforselectadd" type="checkbox" onclick="submitFormAjaxAddTool(event)" name="toselectnewtool[]" value="' . $freeTool['rowid'] . '" ' . $selected . ' ' . $disabled . '></td>
  133. <td><span class="fa fa-mobile pictofixedwidth"></span> ' . $freeTool['ref'] . ' - ' . $freeTool['title'] . '</td>
  134. </tr>';
  135. $searchedString .= '<tr style="height:30px; background-color: lightgrey;">';
  136. $searchedString .= '<td class="nowrap center"></td>';
  137. if (!isset($freeTool['assigned_device_data'])) {
  138. $searchedString .= '<td style="color: red;">&nbsp;&nbsp;&nbsp;&nbsp;<span class="fa fa-credit-card pictofixedwidth"></span>Nincs hozzárendelve kártyaolvasó</td>';
  139. } else {
  140. $searchedString .= '<td>&nbsp;&nbsp;&nbsp;&nbsp;<span class="fa fa-credit-card pictofixedwidth"></span> ' . $freeTool['assigned_device_data']['ref'] . ' - ' . $freeTool['assigned_device_data']['title'] . '</td>';
  141. }
  142. $searchedString .= '</tr>';
  143. } elseif ($freeTool['device_type'] == 0 || $freeTool['device_type'] == 3 || $freeTool['device_type'] == 4 || $freeTool['device_type'] == 5) {
  144. //} else {
  145. $searchedString .= '<tr style="height:30px;">
  146. <td class="nowrap center"><input id="id_3_' . $freeTool['rowid'] . '" class="flat checkforselectadd" type="checkbox" onclick="submitFormAjaxAddTool(event)" name="toselectnewtool[]" value="' . $freeTool['rowid'] . '" ' . $selected . '></td>
  147. <td><span class="fa fa-toolbox pictofixedwidth"></span> ' . $freeTool['ref'] . ' - ' . $freeTool['title'] . '</td>
  148. </tr>';
  149. }
  150. }
  151. $searchedString .= '</table>';
  152. }
  153. if (is_array($allTools['addedTools'])) {
  154. $searchedString .= $helper->addedToolsDiv($allTools);
  155. }
  156. print $searchedString;
  157. ?>
  158. <script>
  159. function submitFormAjaxAddTool(event) {
  160. //alert('ajax');
  161. console.log('submit');
  162. var checkbox = event.target;
  163. var groupid = document.getElementById("groupid");
  164. var input = document.getElementById("name_search");
  165. var checkboxes = document.querySelectorAll('.checkforselectadd:checked');
  166. var values = Array.from(checkboxes).map(function (checkbox1) {
  167. return checkbox1.value;
  168. });
  169. if (checkbox.checked) {
  170. var xhr = new XMLHttpRequest();
  171. xhr.open("GET", "ajaxtools.php?search_title=" + input.value + "&toselectnewtool=" + values + "&groupid=" + groupid.value, true);
  172. xhr.onreadystatechange = function () {
  173. if (xhr.readyState === 4 && xhr.status === 200) {
  174. $("#searchedToolsDiv").html(xhr.responseText);
  175. }
  176. };
  177. xhr.send();
  178. } else {
  179. var xhr = new XMLHttpRequest();
  180. xhr.open("GET", "ajaxtools.php?search_title=" + input.value + "&reduction=" + values + "&groupid=" + groupid.value, true);
  181. xhr.onreadystatechange = function () {
  182. if (xhr.readyState === 4 && xhr.status === 200) {
  183. $("#searchedToolsDiv").html(xhr.responseText);
  184. }
  185. };
  186. xhr.send();
  187. }
  188. }
  189. $('.checkforselectadd').click(function () {
  190. if ($(this).is(':checked')) {
  191. $('#divAdd').css('display', 'inline-block');
  192. $('#massactionadd').css('display', 'inline-block');
  193. $('.massactionaddselect ').css('display', '');
  194. $('.massactionaddconfirmed ').css('display', '');
  195. } else {
  196. var checkboxes = document.querySelectorAll('.checkforselectadd:checked');
  197. var values = Array.from(checkboxes).map(function (checkbox) {
  198. return checkbox.value;
  199. });
  200. if (values.length === 0) {
  201. $('#divAdd').css('display', 'none');
  202. $('#massactionadd').css('display', 'none');
  203. $('.massactionaddselect ').css('display', 'none');
  204. $('.massactionaddconfirmed ').css('display', 'none');
  205. }
  206. }
  207. })
  208. </script>