superedit-TREEJS.php 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701
  1. <?php
  2. Lib::loadClass('ProcesHelper');
  3. Lib::loadClass('DebugExecutionTime');
  4. Lib::loadClass('Tree');
  5. Lib::loadClass('TreeHelper');
  6. Lib::loadClass('App');
  7. Lib::loadClass('Filter');
  8. function TREEJS__ajaxTask__idsList($args) {
  9. $zasobID = V::get('ZASOB_ID', 0, $args, 'int');
  10. if ($zasobID <= 0) {
  11. throw new HttpException("Wrong param ZASOB_ID", 400);
  12. }
  13. $id = V::get('id', 0, $args, 'int');
  14. if ($id <= 0) {
  15. throw new HttpException("Wrong param id", 400);
  16. }
  17. $zasobObj = ProcesHelper::getZasobTableInfo($zasobID);
  18. if (!$zasobObj) {
  19. throw new HttpException("Zasob TABELA ID={$zasobID} nie istnieje", 404);
  20. }
  21. $tblName = $zasobObj->DESC;
  22. $db = DB::getDB();
  23. $r = $db->get_by_id($tblName, $id);
  24. if (!$r) {
  25. throw new HttpException("Rekord ID={$id} nie istnieje", 404);
  26. }
  27. $wsk = array();
  28. $ids_conf_arr = array();
  29. $ids_conf_arr['DEVICES'] = array('id_col'=>"T_DEVICE_SERIAL",'allowed_cols'=>"ID,CRM_LISTA_ZASOBOW_ID:CLZ_ID,T_TELBOX_NEIGHBOUR_IN,T_DEVICE_SERIAL,T_DEVICE_INFO,A_STATUS,S_OTHER_INFO");
  30. $ids_conf_arr['TELBOXES'] = array('id_col'=>"T_TELBOX_NAME",'allowed_cols'=>"ID,CRM_LISTA_ZASOBOW_ID:CLZ_ID,T_TELBOX_NEIGHBOUR_IN,T_TELBOX_NEIGHBOUR_OUT,T_TELBOX_NAME,A_STATUS,S_OTHER_INFO");
  31. if (!empty($ids_conf_arr)) {
  32. $external_ids = array();
  33. foreach ($ids_conf_arr as $k_table_name => $v_cnf) {
  34. $cur_cnf = new stdClass();
  35. $cur_cnf->id_col = V::get('id_col', 'ID', $v_cnf);
  36. $cur_cnf->search_col = V::get('search_col', 'ID_PROJECT', $v_cnf);
  37. $cur_cnf->search_col_regex = V::get('search_col_regex', '', $v_cnf);
  38. $sql_id_col = $cur_cnf->id_col;
  39. $sql_where = "";
  40. if ($cur_cnf->search_col_regex) {
  41. $sql_where = "`{$cur_cnf->search_col}` like '".str_replace('$ID', $r->ID, $cur_cnf->search_col_regex)."'";
  42. } else {
  43. $sql_where = "`{$cur_cnf->search_col}`='{$r->ID}'";
  44. }
  45. $db = DB::getDB();
  46. $sql = "select t.`{$sql_id_col}`
  47. from `{$k_table_name}` as t
  48. where {$sql_where}
  49. ";
  50. $res = $db->query($sql);
  51. while ($r_wsk = $db->fetch($res)) {
  52. $wsk[] = (object)array('name'=>$r_wsk->$sql_id_col, 'table'=>$k_table_name);
  53. }
  54. }
  55. }
  56. $response = new stdClass();
  57. $response->ids = $wsk;
  58. return $response;
  59. }
  60. function TREEJS() {
  61. global $result,$thiss;
  62. $ajaxTask = V::get('_ajaxTask', '', $_GET);
  63. $funName = "TREEJS__ajaxTask__{$ajaxTask}";
  64. if (function_exists($funName)) {
  65. try {
  66. $response = $funName($_GET);
  67. }
  68. catch (HttpException $e) {
  69. $response = new stdClass();
  70. $response->type = 'error';
  71. $response->msg = $e->getMessage();
  72. $response->errorCode = $e->getCode();
  73. Http::sendHeaderByCode($e->getCode());
  74. }
  75. catch (Exception $e) {
  76. $response = new stdClass();
  77. $response->type = 'error';
  78. $response->msg = $e->getMessage();
  79. $response->errorCode = $e->getCode();
  80. }
  81. header('Content-type: application/json');
  82. if (!$response) $response = new stdClass();
  83. echo json_encode($response);
  84. exit;
  85. }
  86. $zasobID = V::get('ZASOB_ID', 0, $_GET, 'int');
  87. if ($zasobID <= 0) {
  88. echo 'Wrong param ZASOB_ID';
  89. return;
  90. }
  91. $TEST_TREE_LAZY_LOAD = 1;
  92. $DBG_TIME = ('1' == V::get('DBG_TIME', '', $_GET));
  93. $dbgExecTime = new DebugExecutionTime();
  94. if ($DBG_TIME) $dbgExecTime->activate();
  95. $dbgExecTime->log('start');
  96. echo "&lt;&lt;".'<a href="' . "index.php?MENU_INIT=VIEWTABLE_AJAX&ZASOB_ID={$zasobID}" . '" title="Powrot">Powrot do tabeli</a>';
  97. $conf = null;
  98. $tblName = '';
  99. $zasobObj = ProcesHelper::getZasobTableInfo($zasobID);
  100. if (!$zasobObj) {
  101. echo "Zasob TABELA ID={$zasobID} nie istnieje";
  102. return;
  103. }
  104. $tblName = $zasobObj->DESC;
  105. $allowed_tables_conf = array();
  106. $allowed_tables_conf['IN7_MK_BAZA_DYSTRYBUCJI'] = array('set_parent_id_col'=>'P_ID');
  107. $allowed_tables_conf['IN7_MK_BAZA_DYSTRYBUCJI']['params'] = array();
  108. $allowed_tables_conf['IN7_MK_BAZA_DYSTRYBUCJI']['params']['show_item_callback'] = 'tree_callback__show_item_from_IN7_MK_BAZA_DYSTRYBUCJI';
  109. $allowed_tables_conf['IN7_MK_BAZA_DYSTRYBUCJI']['params']['ajax'] ='NIE';
  110. if (!array_key_exists($tblName, $allowed_tables_conf)) {
  111. echo'<p>'."Brak dostepu".'</p>';
  112. }
  113. $conf = $allowed_tables_conf[$tblName];
  114. echo'<style type="text/css">'."
  115. .btn-box{margin:0 2px 0 0;padding:0 3px;background:#bbb;color:#fff;text-decoration:none;border:0;font-weight:bold;}
  116. .btn-box-blue{background:#3A3AFF;color:#fff;}
  117. .btn-box-green{background:#008A00;color:#fff;}
  118. .btn-box-lgreen{background:#97CF97;color:#fff;}
  119. .btn-box-red{background:#FF4646;color:#fff;}
  120. .btn-box-group1{background-color:#9F9FCB;color:#fff;}
  121. .btn-box-group2{background-color:#B8B879;color:#fff;}
  122. /*.tree-wrap .btn{border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;}*/
  123. /*.btn-box{border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;}*/
  124. .filters{margin:0;padding:2px;background:#F0F0F0 url(./stuff/flexigrid/css/images/bg.gif) repeat-x top;border:1px solid #ccc;border-style:solid solid none solid;clear:both;overflow:hidden;}
  125. .filters .btnseparator{float:left;height:22px;border-left:1px solid #CCC;border-right:1px solid #fff;margin:1px;}
  126. .filters form{margin:0;padding:0;}
  127. .filters nobr{display:block;float:left;margin:0;padding:2px;font-weight:normal;font-size:13px;}
  128. .filters nobr:hover{text-decoration:underline;}
  129. .filters nobr.active{color:#f00;font-weight:normal;}
  130. .filters nobr input,
  131. .filters nobr select,
  132. .filters nobr button{margin:0 1px;padding:0 2px;font-size:13px;}
  133. .tree-wrap li.tree-close dd ul {display:block;}
  134. .tree-wrap li.tree-close dd ul,
  135. .tree-wrap dd ul { background:url(stuff/i/t-ul-green.gif) 0 0 repeat-y; }
  136. .tree-wrap .btn {outline:none;}
  137. ".'</style>'."\n";
  138. App::show_head_css();
  139. App::show_head_js();
  140. function tree_callback__show_item_from_IN7_MK_BAZA_DYSTRYBUCJI(&$r, &$tree) {
  141. $zasobID = V::get('ZASOB_ID', 0, $_GET, 'int');
  142. // TODO: btn-box zasob type from PARENT_ID
  143. $cls = array();
  144. if (($search_id = $tree->get_param('search_id')) > 0 && $search_id == $r->ID) {
  145. $cls[] = 'search_id';
  146. }
  147. $cls = (!empty($cls))? ' class="'.implode(' ', $cls).'"' : '';
  148. $out_id = ($r->ID < 10)? '&nbsp;'.$r->ID.'' : $r->ID;
  149. $htmlTreeId = $tree->get_param('htmlTreeId');
  150. $idLink = "index.php?MENU_INIT=TREEJS&ZASOB_ID={$zasobID}&filtr_id={$r->ID}#TREE{$r->ID}";
  151. $editLink = "index.php?MENU_INIT=VIEWTABLE_AJAX&ZASOB_ID={$zasobID}#EDIT/{$r->ID}";
  152. $addChildLink = "index.php?MENU_INIT=VIEWTABLE_AJAX&ZASOB_ID={$zasobID}&ff_P_ID={$r->ID}#CREATE";
  153. //if ($r->has_childrens) {
  154. // if (!$tree->get_param('rozwin')) {
  155. // $js = "return " . $tree->js_tree_open_rec_fun . "(this," . $r->ID . ");";
  156. // echo'<a href="'."#".'" title="'."Rozwin wszystko".'" onclick="'.$js.'" class="btn open-rec">'."L".'</a>';
  157. // }
  158. //}
  159. // TODO: edycja nie działa - bierze ostatni edytowany rekord
  160. //echo' <a href="'."?FUNCTION_INIT=IN7_MK_BAZA_DYSTRYBUCJI_EDIT&ARG1=EDIT&ARG1_VAL={$r->ID}".'" class="btn-box">'."E".'</a>';
  161. $st_status_bg = '';
  162. if ($r->A_STATUS == 'NORMAL') {
  163. $st_status_bg = '#8F8;';
  164. } else if ($r->A_STATUS == 'WAITING') {
  165. $st_status_bg = '#F8F;';
  166. } else if ($r->A_STATUS == 'DELETED') {
  167. $st_status_bg = '#ccc;';
  168. } else if ($r->A_STATUS == 'OFF_SOFT') {
  169. $st_status_bg = '#F99;';
  170. } else if ($r->A_STATUS == 'OFF_HARD') {
  171. $st_status_bg = '#eee;';
  172. }
  173. $st_status_bg = ($st_status_bg)? 'background-color:'.$st_status_bg : '';
  174. ?>
  175. <dl<?php echo $cls; ?>>
  176. <dt>
  177. <a href="<?php echo $idLink; ?>"
  178. onClick="return <?php echo $htmlTreeId; ?>_filtr_id(<?php echo $r->ID; ?>);"
  179. class="item_id btn-box"><?php echo $out_id; ?></a>
  180. <a href="<?php echo $editLink; ?>"
  181. title="Edit"
  182. class="btn btn-xs btn-link">E</a>
  183. <span class="desc">
  184. <span class="btn-box" style="<?php echo $st_status_bg; ?>"><?php echo $r->A_STATUS; ?></span>
  185. <?php if($r->CRM_LISTA_ZASOBOW_ID>0) { echo '<i style="color:black">['.$r->CRM_LISTA_ZASOBOW_ID.']</i>'; }?>
  186. -
  187. <em title="<?php echo $r->M_DIST_TYPE; ?>"
  188. style="color:#666;"><?php echo V::strShortUtf8($r->M_DIST_TYPE, 5); ?></em>
  189. <i style="color:red"><?php echo $r->M_DIST_DESC; ?></i>
  190. <span><?php echo $r->M_DISTRIBUTOR; ?></span>
  191. <font size="-1"><?php echo $r->M_DIST_INVENTOR; ?></font>
  192. </span>
  193. <button onclick="return <?php echo $htmlTreeId; ?>_ids(this, <?php echo $r->ID; ?>);"
  194. class="btn btn-xs btn-link">IDS</button>
  195. <a href="<?php echo $addChildLink; ?>"
  196. class="btn-p5"
  197. title="Dodaj dziecko">↵+</a>
  198. </dt>
  199. </dl>
  200. <?php
  201. }
  202. {// tree filter
  203. $tbl = $tblName;
  204. $tree_filter = new Filter($_GET, $tbl, 'session');
  205. if ($tbl == 'IN7_MK_BAZA_DYSTRYBUCJI') {
  206. { // filtr_status
  207. $filtr = array();
  208. $filtr['WSZYSTKIE'] = 'WSZYSTKIE';
  209. $filtr['WAITING'] = 'WAITING';
  210. $filtr['NORMAL'] = 'NORMAL';
  211. // TODO: add js search without page reload, add #TREE{ID}
  212. $tree_filter->add_filter('filtr_status', $filtr, 'WSZYSTKIE', 'Status');
  213. }
  214. {// filtr_id
  215. $filtr = array('search');
  216. $tree_filter->add_filter('filtr_id', $filtr, '', 'Filtruj ID');
  217. }
  218. { // filtr_search_id
  219. $filtr = array('search');
  220. // TODO: add js search without page reload, add #TREE{ID}
  221. $tree_filter->add_filter('filtr_search_id', $filtr, '', 'Wyszukaj ID');
  222. }
  223. { // filtr_ids
  224. $filtr = array();
  225. $filtr['SHOW'] = '0';
  226. $filtr['HIDE'] = '1';
  227. $tree_filter->add_filter('filtr_ids', $filtr, 'HIDE', 'IDS');
  228. }
  229. }
  230. }// tree filter
  231. $tree_filter->_save_args();
  232. session_write_close();// End the current session and store session data. Below $_SESSION is read-only.
  233. $htmlTreeId = "tree" . md5(time());
  234. echo '<div id="' . $htmlTreeId . '">';
  235. if(0){// RMME
  236. echo'<div class="filters">';
  237. echo'<form action="'."".'" method="get" onsubmit="return false;" id="' . $htmlTreeId . '_filters" style="margin:0;padding:0;">';
  238. //echo'<input type="hidden" name="'."FUNCTION_INIT".'" value="'."TREEJS".'" />';
  239. echo'<input type="hidden" name="'."MENU_INIT".'" value="'."TREEJS".'" />';
  240. echo'<input type="hidden" name="'."ZASOB_ID".'" value="'."{$zasobID}".'" />';
  241. //$tree_filter->show_filters(array('submit_function'=>$htmlTreeId . '_filters(this)'));
  242. echo'</form>';
  243. echo'</div>';
  244. }
  245. ?>
  246. <div class="filters">
  247. <form action="" method="get" onsubmit="return false;" id="<?php echo "{$htmlTreeId}_filters"; ?>" style="margin:0;padding:0;">
  248. <input type="hidden" name="MENU_INIT" value="TREEJS">
  249. <input type="hidden" name="ZASOB_ID" value="636">
  250. <nobr style="float:right;margin:-9999px 0 0 -9999px;">
  251. <input type="submit" value="submit">
  252. </nobr>
  253. <nobr> Status
  254. <select name="filtr_status" onchange="<?php echo "{$htmlTreeId}_filters(this);"; ?>">
  255. <option value="WSZYSTKIE">WSZYSTKIE</option>
  256. <option value="WAITING">WAITING .. NORMAL</option>
  257. <option value="NORMAL">NORMAL</option>
  258. </select>
  259. </nobr>
  260. <div class="btnseparator"></div>
  261. <nobr>Filtruj ID
  262. <input type="text" id="<?php echo "{$htmlTreeId}_filters_filtr_id"; ?>" name="filtr_id" value="" class="i" size="4" onchange="<?php echo "return {$htmlTreeId}_filters(this);"; ?>">
  263. <input type="image" src="icon/search.png" ale="Szukaj" title="Szukaj" onclick="<?php echo "return {$htmlTreeId}_filters(this);"; ?>">
  264. </nobr>
  265. <div class="btnseparator"></div>
  266. <nobr>
  267. <input type="hidden" name="filtr_clear" value="0">
  268. <input type="reset" value="Wyczyść filtr" onclick="<?php echo "{$htmlTreeId}_filters(this, {clear:true});"; ?>">
  269. </nobr>
  270. </form>
  271. </div>
  272. <?php
  273. if ($TEST_TREE_LAZY_LOAD) {
  274. $dbgExecTime->log('start-lazy-load');
  275. $items = array();
  276. $db = DB::getDB();
  277. $sql = "select p.ID, p.P_ID
  278. , p.`A_STATUS`
  279. , p.`M_DIST_TYPE`
  280. , p.`M_DIST_DESC`
  281. , p.`M_DISTRIBUTOR`
  282. , p.`M_DIST_INVENTOR`
  283. , p.`CRM_LISTA_ZASOBOW_ID`
  284. from `{$tblName}` as p
  285. where
  286. p.P_ID!='-1'
  287. -- and p.P_ID!=''
  288. and p.P_ID>=0
  289. ";
  290. $res = $db->query($sql);
  291. $dbgExecTime->log('lazy-execute-sql', array('lazy-load'));
  292. while ($r = $db->fetch($res)) {
  293. $r->sub = array();
  294. $r->P_ID = trim($r->P_ID);
  295. $r->P_ID = str_replace(' ', ',', $r->P_ID);
  296. $v_parents = array();
  297. $v_parents_test = explode(',', $r->P_ID);
  298. foreach ($v_parents_test as $v_id) {
  299. $v_id = intval(trim($v_id));
  300. if ($v_id > 0) {
  301. $v_parents[] = $v_id;
  302. }
  303. }
  304. if (empty($v_parents)) {
  305. $r->P_ID = 0;
  306. } else {
  307. $r->P_ID = $v_parents;
  308. }
  309. $items[$r->ID] = $r;
  310. }
  311. $dbgExecTime->log('lazy-load-sql', array('lazy-load'));
  312. // set root for tree $pro_tree
  313. $pro_tree = array();
  314. foreach ($items as $k_id => $r) {
  315. if ($r->P_ID == 0) {
  316. $pro_tree[$r->ID] = array();
  317. $v_id = $r->P_ID;
  318. if (array_key_exists($v_id, $items)) {
  319. $items[$v_id]->sub[$r->ID] = true;
  320. }
  321. } else {// array
  322. foreach ($r->P_ID as $v_id) {
  323. if (array_key_exists($v_id, $items)) {
  324. $items[$v_id]->sub[$r->ID] = true;
  325. }
  326. }
  327. }
  328. }
  329. ksort($pro_tree);
  330. // set up has_childrens
  331. foreach ($items as $k_id => $r) {
  332. $items[$k_id]->has_childrens = !empty($r->sub);
  333. }
  334. // build tree by P_ID - array or 0
  335. function TREEJS_create_project_tree_rec($p_id, &$items) {
  336. static $rec_ind;
  337. $rec_ind++;
  338. $ret = array();
  339. if (!array_key_exists($p_id, $items)) {
  340. return false;
  341. } else {
  342. $r = $items[$p_id];
  343. if (empty($r->sub)) {
  344. return false;
  345. }
  346. foreach ($r->sub as $k_id => $v) {
  347. $ret[$k_id] = TREEJS_create_project_tree_rec($k_id, $items);
  348. }
  349. return $ret;
  350. }
  351. }
  352. //$pro_tree = TREEJS_create_project_tree_rec($pro_tree, $items);
  353. foreach ($pro_tree as $k_id => $v_childrens) {
  354. if (array_key_exists($k_id, $items)) {
  355. $pro_tree[$k_id] = TREEJS_create_project_tree_rec($k_id, $items);
  356. }
  357. }
  358. $dbgExecTime->log('end-lazy-load', array('lazy-load'));
  359. }
  360. $tree = new Tree($tblName);
  361. $tree->set_param('htmlTreeId', $htmlTreeId);
  362. $tree->setProfiler($dbgExecTime);
  363. if (($p_id_col = V::get('set_parent_id_col', '', $conf)) != '') {
  364. $tree->set_parent_id_col($p_id_col);
  365. }
  366. if (!empty($conf['params'])) {
  367. foreach ($conf['params'] as $k_param => $v_param) {
  368. $tree->set_param($k_param, $v_param);
  369. }
  370. }
  371. $tree->set_param('filtr_status', $tree_filter->get_arg('filtr_status'));
  372. $dbgExecTime->log('start-show-tree');
  373. if ($TEST_TREE_LAZY_LOAD) {
  374. $tree->show_css();
  375. $tree->show_js();
  376. echo "\n".'<div class="tree-wrap">'."\n";
  377. $tree->show_rec_by_tree($pro_tree, $items);
  378. echo '</div>'."\n";
  379. }
  380. else {
  381. if ($tree_filter->get_arg('filtr_id') != 0) {
  382. $tree->showSubTree($tree_filter->get_arg('filtr_id'));
  383. } else if ($tree_filter->get_arg('filtr_search_id') > 0) {
  384. $tree->showSearchNode($tree_filter->get_arg('filtr_search_id'));
  385. } else {
  386. $tree->show();
  387. }
  388. }
  389. $dbgExecTime->log('end-show-tree', array('show-tree'));
  390. echo '</div>';
  391. ?>
  392. <script>
  393. window['<?php echo $htmlTreeId; ?>TreeStruct'] = <?php echo json_encode($pro_tree); ?>;
  394. window['<?php echo $htmlTreeId; ?>TreeItems'] = <?php echo json_encode($items); ?>;
  395. // show/hide ids list - btn state txt
  396. var BTN_TXT_LOADING = 'IDS (loading...)',
  397. BTN_TXT_SHOW = 'IDS (pokaż)',
  398. BTN_TXT_HIDE = 'IDS (ukryj)';
  399. BTN_TXT_NO_DATA = 'IDS (brak danych)';
  400. function <?php echo $htmlTreeId; ?>_reload(fltrs) {
  401. var tree = jQuery('#<?php echo $htmlTreeId; ?>').find('.tree-wrap');
  402. if (fltrs.filtr_status) {
  403. if (-1 == _.indexOf(['NORMAL', 'WAITING'], fltrs.filtr_status)) {
  404. fltrs.filtr_status = null;
  405. }
  406. }
  407. var isFltrsActive = false;
  408. if (!_.isEmpty(fltrs.filtr_id)) isFltrsActive = true;
  409. if (fltrs.filtr_status) isFltrsActive = true;
  410. if (!isFltrsActive) {
  411. tree.find('li').removeClass('hide');
  412. return;
  413. } else {
  414. tree.find('li').addClass('hide');
  415. }
  416. var treeStruct = window['<?php echo $htmlTreeId; ?>TreeStruct'];
  417. var treeItems = window['<?php echo $htmlTreeId; ?>TreeItems'];
  418. if (fltrs.filtr_id) {
  419. var j, ids = [], idsTmp = fltrs.filtr_id.replace(' ', '').split(',');
  420. for (var i = 0; i < idsTmp.length; i++) {
  421. j = _.parseInt(idsTmp[i], 10);
  422. if (_.isNumber(j) && j > 0 && !_.isNaN(j)) {
  423. ids.push(j);
  424. }
  425. }
  426. fltrs.filtr_id = ids;
  427. }
  428. filteredIds = [];
  429. if (!_.isEmpty(fltrs.filtr_id)) {
  430. var curId, item, itemIsOk,
  431. todoStack = _.map(fltrs.filtr_id, function(num) { return num; });
  432. var limit = 1000;
  433. while (!_.isEmpty(todoStack)) {
  434. curId = todoStack.shift();
  435. if (curId in filteredIds) continue;
  436. item = (curId in treeItems)? treeItems[curId] : null;
  437. if (!item) continue;
  438. filteredIds[curId] = true;
  439. var pid = _.parseInt(item['P_ID'], 10);
  440. if (pid > 0) {
  441. todoStack.push(pid);
  442. }
  443. if (limit-- < 1) break;
  444. }
  445. var limit = 10000;
  446. todoStack = _.map(fltrs.filtr_id, function(num) { return num; });
  447. while (!_.isEmpty(todoStack)) {
  448. curId = todoStack.shift();
  449. if (curId in filteredIds && -1 == fltrs.filtr_id.indexOf(curId)) {
  450. continue;
  451. }
  452. item = (curId in treeItems)? treeItems[curId] : null;
  453. if (!item) continue;
  454. itemIsOk = false;
  455. if (fltrs.filtr_status) {
  456. if ('NORMAL' == fltrs.filtr_status) {
  457. if ('NORMAL' === item['A_STATUS']) {
  458. itemIsOk = true;
  459. }
  460. }
  461. else if ('WAITING' == fltrs.filtr_status) {
  462. if ('WAITING' === item['A_STATUS']) {
  463. itemIsOk = true;
  464. }
  465. else if ('NORMAL' === item['A_STATUS']) {
  466. itemIsOk = true;
  467. }
  468. }
  469. }
  470. else {
  471. itemIsOk = true;
  472. }
  473. filteredIds[curId] = itemIsOk;
  474. var toAdd = [];
  475. if (true === item['has_childrens']) {
  476. for (i in item['sub']) {
  477. //if (id in filteredIds) continue;
  478. //if (-1 !== toAdd.indexOf(id)) continue;
  479. //if (-1 !== todoStack.indexOf(id)) continue;
  480. toAdd.push(i);
  481. }
  482. }
  483. if (_.isEmpty(toAdd)) {
  484. continue;
  485. }
  486. todoStack = _.union(todoStack, toAdd);
  487. if (limit-- < 1) break;
  488. }
  489. }
  490. if (_.isEmpty(fltrs.filtr_id)) {
  491. if (fltrs.filtr_status) {
  492. var item, itemIsOk;
  493. for (var curId in treeItems) {
  494. item = treeItems[curId];
  495. if (item) {
  496. itemIsOk = false;
  497. if ('NORMAL' === item['A_STATUS']) {
  498. itemIsOk = true;
  499. }
  500. if ('WAITING' == fltrs.filtr_status) {
  501. if ('WAITING' === item['A_STATUS']) {
  502. itemIsOk = true;
  503. }
  504. }
  505. filteredIds[curId] = itemIsOk;
  506. }
  507. }
  508. }
  509. }
  510. for (var i in filteredIds) {
  511. if (filteredIds[i]) {
  512. jQuery('#TREE' + i)
  513. .removeClass('hide')
  514. .removeClass('tree-close');
  515. }
  516. }
  517. }
  518. function <?php echo $htmlTreeId; ?>_filters(el, params) {
  519. if (!el || !el.form) return false;
  520. var params = params || {};
  521. if (params.clear) {
  522. <?php echo $htmlTreeId; ?>_reload({});
  523. return;
  524. }
  525. var frm = el.form;
  526. var fltrs = {};
  527. if (frm['filtr_status'] && frm['filtr_status'].value) {
  528. fltrs['filtr_status'] = frm['filtr_status'].value;
  529. }
  530. if (frm['filtr_id'] && frm['filtr_id'].value) {
  531. fltrs['filtr_id'] = frm['filtr_id'].value;
  532. }
  533. <?php echo $htmlTreeId; ?>_reload(fltrs);
  534. return false;
  535. }
  536. function <?php echo $htmlTreeId; ?>_setIds(btnNode, id, idsList) {
  537. var idsList = idsList || [];
  538. var ddNode = btnNode.parentNode.nextSibling;
  539. if (!ddNode || ddNode.nodeType != 1) {
  540. ddNode = document.createElement('dd');
  541. btnNode.parentNode.parentNode.insertBefore(ddNode, btnNode.parentNode.nextSibling);
  542. }
  543. if (_.isEmpty(idsList)) {
  544. btnNode.innerHTML = BTN_TXT_NO_DATA;
  545. ddNode.innerHTML = '';
  546. return;
  547. }
  548. var ulNode = document.createElement('ul');
  549. _.each(idsList, function(item) {
  550. var liNode = document.createElement('li');
  551. var pNode = document.createElement('p');
  552. if (!_.isEmpty(item.table)) {
  553. var spanNode = document.createElement('span');
  554. spanNode.className = 'btn-box btn-box-silver';
  555. spanNode.appendChild(document.createTextNode(item.table));
  556. pNode.appendChild(spanNode);
  557. }
  558. var bNode = document.createElement('b');
  559. bNode.appendChild(document.createTextNode(item.name));
  560. pNode.appendChild(bNode);
  561. liNode.appendChild(pNode);
  562. ulNode.appendChild(liNode);
  563. })
  564. if (ulNode.lastChild) {
  565. ulNode.lastChild.className = 'tree-last';
  566. }
  567. btnNode.innerHTML = BTN_TXT_HIDE;
  568. ddNode.innerHTML = '';
  569. ddNode.appendChild(ulNode);
  570. }
  571. function <?php echo $htmlTreeId; ?>_ids(btnNode, id) {
  572. var item = (id in window['<?php echo $htmlTreeId; ?>TreeItems'])? window['<?php echo $htmlTreeId; ?>TreeItems'][id] : null;
  573. if (!item) return;
  574. if (null == btnNode.parentNode.nextSibling) {
  575. var ddNode = document.createElement('dd');
  576. btnNode.parentNode.parentNode.insertBefore(ddNode, btnNode.parentNode.nextSibling);
  577. }
  578. if (BTN_TXT_HIDE === btnNode.innerHTML) {
  579. btnNode.innerHTML = BTN_TXT_SHOW;
  580. btnNode.parentNode.nextSibling.className='hide';
  581. } else if (BTN_TXT_SHOW === btnNode.innerHTML) {
  582. btnNode.innerHTML = BTN_TXT_HIDE;
  583. btnNode.parentNode.nextSibling.className='';
  584. } else if (BTN_TXT_LOADING === btnNode.innerHTML) {
  585. } else if (BTN_TXT_NO_DATA === btnNode.innerHTML) {
  586. } else {// INIT is default state
  587. btnNode.innerHTML = BTN_TXT_LOADING;
  588. superagent
  589. .get('index.php')
  590. .query({FUNCTION_INIT: '<?php echo __FUNCTION__; ?>'})
  591. .query({ZASOB_ID: '<?php echo V::get('ZASOB_ID', 0, $_GET, 'int'); ?>'})
  592. .query({HEADER_NOT_INIT: 'YES'})
  593. .query({_ajaxTask: 'idsList'})
  594. .query({id: id})
  595. .end(function(error, res) {
  596. if (res.ok && 'ids' in res.body) {
  597. <?php echo $htmlTreeId; ?>_setIds(btnNode, id, res.body.ids);
  598. } else {
  599. <?php echo $htmlTreeId; ?>_setIds(btnNode, id, {ids: []});
  600. }
  601. });
  602. }
  603. return false;
  604. }
  605. function <?php echo $htmlTreeId; ?>_filtr_id(id) {
  606. if (id > 0) {
  607. var filtrIdNode = jQuery('#<?php echo "{$htmlTreeId}_filters_filtr_id"; ?>').get(0);
  608. if (!filtrIdNode) return;
  609. filtrIdNode.value = id;
  610. <?php echo $htmlTreeId; ?>_filters(filtrIdNode);
  611. return false;
  612. }
  613. }
  614. <?php if ($tree_filter->get_arg('filtr_id') > 0) : ?>
  615. jQuery(document).ready(function() {
  616. <?php echo $htmlTreeId; ?>_filtr_id(<?php echo $tree_filter->get_arg('filtr_id'); ?>);
  617. });
  618. <?php endif; ?>
  619. </script>
  620. <?php
  621. if($DBG_TIME){
  622. $dbgExecTime->log('end');
  623. $dbgExecTime->printDebug();
  624. }
  625. }