zasob.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. <?php
  2. Lib::loadClass('UI');
  3. /**
  4. * @param $_GET['EDIT'] - ID rekordu do edycji (inline)
  5. * @param $_GET['EDIT_ID'] - ID rekordu do edycji (inline)
  6. */
  7. function task_CRM_LISTA_ZASOBOW() {
  8. User_procesy5_check_access();
  9. UI::setTitleJsTag("⋋ Zasoby (drzewo)");
  10. $_GET['ADM_AREA'] = V::get('ADM_AREA', "BN%", $_GET);
  11. $_GET['EDIT'] = V::get('EDIT', 0, $_GET, 'int');
  12. if (($edit_id = V::get('EDIT_ID', 0, $_GET, 'int')) > 0) {
  13. $_GET['EDIT'] = $edit_id;
  14. }
  15. $tbl = 'CRM_LISTA_ZASOBOW';
  16. $DBG_TIME = ('1' == V::get('DBG_TIME', '', $_GET));
  17. $dbgExecTime = new DebugExecutionTime();
  18. if ($DBG_TIME) $dbgExecTime->activate();
  19. $dbgExecTime->log('start');
  20. // form decorators:
  21. $tbl_search_params = array();
  22. $tbl_search_params['ID'] = 'ID';
  23. $tbl_search_params['PARENT_ID'] = 'P_ID';
  24. $tbl_search_params['PARENT_ID_ACCESS'] = 'P_ID2';
  25. $tbl_search_params['PARENT_ID_MAP'] = 'P_ID3';
  26. $tbl_search_params['ALIAS_ID'] = 'ALIAS_ID';
  27. $tbl_search_params['TYPE'] = 'TYPE';
  28. $tbl_search_params['DESC'] = 'DESC';
  29. $tbl_search_params['DESC_PL'] = 'DESC_PL';
  30. $tbl_search_params['OPIS'] = 'OPIS';
  31. $tbl_search_params['A_STATUS'] = 'A_STATUS';
  32. $tbl_search_params['L_APPOITMENT_USER'] = 'L_APPOITMENT_USER';
  33. $tbl_search_params['L_APPOITMENT_DATE'] = 'L_APPOITMENT_DATE';
  34. $tbl_search_params['L_APPOITMENT_INFO'] = 'L_APPOITMENT_INFO';
  35. $tbl_search_params['LOCALIZATION_INCLUDE'] = 'LOCALIZATION_INCLUDE';
  36. $tbl_search_params['A_RECORD_CREATE_AUTHOR'] = 'A_RECORD_CREATE_AUTHOR';
  37. $tbl_search_params['A_RECORD_CREATE_DATE'] = 'A_RECORD_CREATE_DATE';
  38. $tbl_search_params['A_RECORD_UPDATE_AUTHOR'] = 'A_RECORD_UPDATE_AUTHOR';
  39. $tbl_search_params['A_RECORD_UPDATE_DATE'] = 'A_RECORD_UPDATE_DATE';
  40. $tbl_search_params['EXPORT_PARAM'] = 'EXPORT_PARAM';
  41. Lib::loadClass('FilterLast');
  42. $filter_last = new FilterLast( $_REQUEST, $tbl, 'session');
  43. $filter_last->add_filter( 'last_id', array('filtr_id','filtr_search_id','ID','EDIT'), "Ostatnio uzywane ID", 'int' );
  44. $filter_last->_save_args();// save args from request
  45. {// TABLE - Filter
  46. $tbl = 'CRM_LISTA_ZASOBOW';
  47. $tbl_filter = new stdClass();
  48. $tbl_filter->key = 'tbl-'.$tbl;
  49. $tbl_filter->filters = array();
  50. // TODO: stronicowanie $tbl_filter->filters: _page_nr, _limit, _total (need sql - only after change params)
  51. // read args from session, or get dafault values
  52. foreach ($tbl_search_params as $k => $req_field_name) {
  53. $tbl_filter->filters[$req_field_name] = V::get($req_field_name, '%', $_SESSION[$tbl_filter->key]);
  54. }
  55. // read args from $_GET if isset
  56. foreach ($tbl_search_params as $k => $req_field_name) {
  57. if (isset($_GET[$req_field_name])) {
  58. $tbl_filter->filters[$req_field_name] = $_GET[$req_field_name];
  59. }
  60. }
  61. // save args in session and $_GET
  62. foreach ($tbl_filter->filters as $req_field_name => $v) {
  63. $_SESSION[$tbl_filter->key][$req_field_name] = $v;
  64. $_GET[$req_field_name] = $v;
  65. }
  66. echo'<div style="border:1px solid red; display:none;">';
  67. foreach ($tbl_filter->filters as $req_field_name => $v) {
  68. echo'<br />arg['.$req_field_name.'] = '.$v;
  69. }
  70. echo'</div>';
  71. }// TABLE - Filter
  72. {// TREE - Filter
  73. $tbl = 'CRM_LISTA_ZASOBOW';
  74. Lib::loadClass('FilterFactory');
  75. $tree_zasoby_filter = FilterFactory::build($tbl);
  76. $tree_zasoby_filter->setArgs($_GET);
  77. $tree_zasoby_filter->set_trash('filtr_id', -1);
  78. {// zapisz stan - ajax function to save filters stan and opened tree nodes, etc.
  79. $filtr_ses_key = $tree_zasoby_filter->_key;
  80. $cookie_key = 'TREE_'.$tbl;
  81. $profile_key = 'Filtr_'.$filtr_ses_key;
  82. if (V::get('save_profile', '', $_REQUEST)) {
  83. $profile_val = array();
  84. $profile_val['filtr'] = $_SESSION[$filtr_ses_key];
  85. $profile_val['tree'] = $_COOKIE[$cookie_key];// cookie key from Tree class - 'TREE_'. $tbl @see __construct
  86. User::setProfile($profile_key, $profile_val);
  87. $ret = User::saveProfile();
  88. }
  89. else if (V::get('load_profile', '', $_REQUEST)) {
  90. //User::loadProfile();// proile is loaded in USERS_COLUMN_INIT after login
  91. $profile_val = User::getProfile($profile_key);
  92. $_COOKIE[$cookie_key] = $profile_val['tree'];
  93. echo'<script type="text/javascript">'."
  94. jQuery(document).ready(function(){
  95. jQuery.cookie('".$cookie_key."','" . $_COOKIE[$cookie_key] . "');
  96. });
  97. ".'</script>';
  98. $_SESSION[$filtr_ses_key] = $profile_val['filtr'];
  99. $tree_zasoby_filter->_read_args( true );// force load args from session
  100. }
  101. }// zapisz stan - ajax function to save filters stan and opened tree nodes, etc.
  102. $tree_zasoby_filter->_save_args();// force save_args (executet at the end of show_filters)
  103. echo'<div style="border:1px solid red; display:none;">';
  104. foreach ($tree_zasoby_filter->filters as $arg => $v) {
  105. echo'<br />arg['.$arg.'] = '.$tree_zasoby_filter->get_arg($arg);
  106. }
  107. echo'</div>';
  108. }// TREE - Filter
  109. echo'<h1>';
  110. echo App::link("Zasoby", array('task'=>App::get_task(), 'filtr_id'=>''));
  111. if ($tree_zasoby_filter->is_trash()) {//$_GET['filtr_id'] == -1) {
  112. echo ' &raquo; '."Kosz";
  113. echo " " . App::link("czyść", array('task'=>App::get_task(), 'function_init'=>"fun_CRM_LISTA_ZASOBOW_clean_trash"), array('title'=>"Ustaw status rekord￳w w koszu na DELETED", 'class'=>'btn-p5', 'style'=>'font-size:13px;'));
  114. } else if ($tree_zasoby_filter->get_arg('filtr_id') > 0) {//$_GET['filtr_id'] > 0) {
  115. echo ' &raquo; '."Zasob [".$tree_zasoby_filter->get_arg('filtr_id')."]";
  116. }
  117. echo'</h1>';
  118. $userAcl = User::getAcl();
  119. $tblAcl = $userAcl->getTableAcl(ProcesHelper::getZasobTableID('CRM_LISTA_ZASOBOW'));
  120. if ($tblAcl && $tblAcl->hasFieldPerm($tblAcl->getFieldIdByName('ID'),'R')) {
  121. UI::startTag('ul', ['class' => "breadcrumb"]);
  122. UI::startTag('li');
  123. UI::tag('a', ['href'=>"index.php?_route=ViewTableAjax&namespace=default_db/CRM_LISTA_ZASOBOW"], "Tabela Zasoby <i style=\"color:silver\">(CRM_LISTA_ZASOBOW)</i>");
  124. UI::endTag('li');
  125. UI::startTag('li');
  126. UI::tag('a', ['href'=>"index.php?_route=ViewTableAjax&namespace=default_db/CRM_LISTA_ZASOBOW#CREATE"], "<span class=\"glyphicon glyphicon-plus\"></span> Dodaj nowy rekord");
  127. UI::endTag('li');
  128. UI::endTag('ul');
  129. }
  130. echo'<div id="tree"></div>';
  131. $dbgExecTime->log('show...');
  132. //if (isset($_SESSION['USER_PARAMS']['ZASOBY_TREE_TYPE_HTML']) && $_SESSION['USER_PARAMS']['ZASOBY_TREE_TYPE_HTML']) {
  133. if ($tree_zasoby_filter->get_arg('filtr_view') == 'NOWY') {
  134. $filter_last->show_filters();
  135. echo'<div class="filters">';
  136. echo'<form action="'."".'" method="get" style="margin:0;padding:0;">';
  137. echo'<input type="hidden" name="task" value="'.App::get_task().'" />';
  138. $tree_zasoby_filter->show_filters();
  139. // TODO: another form ? function_init ?
  140. {// save profile - btn-p5
  141. echo'<nobr>';
  142. echo'<input type="submit" name="save_profile" value="'."Save".'" title="'."Save profile".'" />';
  143. echo'</nobr>';
  144. }
  145. {// load profile - btn-p5
  146. echo'<nobr>';
  147. echo'<input type="submit" name="load_profile" value="'."Load".'" title="'."Load profile".'" />';
  148. echo'</nobr>';
  149. }
  150. echo'</form>';
  151. echo'</div>';// .filters
  152. $filter_hist = (isset($_SESSION['TREE-PROCESY']['filter_hist']))? $_SESSION['TREE-PROCESY']['filter_hist'] : array();
  153. if (!empty($filter_hist)) {
  154. echo'<form style="display:inline" action="" method="GET">';
  155. echo'<input type="hidden" name="task" value="'.App::get_task().'">';
  156. echo'<select name="filter_hist_id">';
  157. foreach ($filter_hist as $k => $v) {
  158. echo'<option value="'.$k.'">'.$v.'</option>';
  159. }
  160. echo'</select>';
  161. echo'</form>';
  162. }
  163. $tree = new Tree( $tbl );
  164. $tree->setProfiler($dbgExecTime);
  165. $clbk = 'tree_callback__show_item_from_'.$tbl;
  166. $tree->set_param('show_item_callback', $clbk);
  167. //TODO: add all filters from Filter - $tree_zasoby_filter
  168. $tree->set_param('rozwin', ($tree_zasoby_filter->get_arg('filtr_drzewo') == 'ROZWIN'));
  169. $tree->set_param('filtr_ob', ($tree_zasoby_filter->get_arg('filtr_ob') == '+'));
  170. $tree->set_param('filtr_img', ($tree_zasoby_filter->get_arg('filtr_img') == '+'));
  171. $tree->set_param('rozwin_opis', ($tree_zasoby_filter->get_arg('filtr_opis') == '+'));
  172. $tree->set_param('filtr_ids', ($tree_zasoby_filter->get_arg('filtr_ids') == '+'));
  173. $tree->set_param('search_id', $tree_zasoby_filter->get_arg('filtr_search_id'));
  174. //TODO: editable tylko dla userow ktorzy maja uprawnienia
  175. $tree->set_param('getZasobTableID', ProcesHelper::getZasobTableID('CRM_LISTA_ZASOBOW'));
  176. $tree->set_param('editable', ($tree_zasoby_filter->get_arg('filtr_edit') == 'TAK'));
  177. //wykrywamy czy ma dostepny proces do jakiejs komorki w tej tabeli
  178. $userAcl = User::getAcl();
  179. $tblAcl = $userAcl->getTableAcl(ProcesHelper::getZasobTableID('CRM_LISTA_ZASOBOW'));
  180. if ($tblAcl && $tblAcl->hasFieldPerm($tblAcl->getFieldIdByName('ID'),'R')) $tree->set_param('hasFieldPerm__ID', true);
  181. if ($tree_zasoby_filter->is_trash()) $tree->set_param('is_trash', true);
  182. if ($tree_zasoby_filter->get_arg('filtr_ajax') == 'TAK') {
  183. $tree->_limit = 300;
  184. $tree->_deep_limit = 2;
  185. }
  186. if ($tree_zasoby_filter->get_arg('filtr_id') != 0) {
  187. $tree->showSubTree( $tree_zasoby_filter->get_arg('filtr_id') );
  188. } else if ($tree_zasoby_filter->get_arg('filtr_search_id') > 0) {
  189. $tree->showSearchNode( $tree_zasoby_filter->get_arg('filtr_search_id') );
  190. } else {
  191. $tree->show();
  192. }
  193. }
  194. else {
  195. echo'<pre>';
  196. echo "DRZEWO ";
  197. if ($_SESSION['ZWIN_DRZEWO']) {
  198. echo App::link("ROZWIN", "?ROZWIN_DRZEWO=1#tree");
  199. } else {
  200. echo App::link("ZWIN", "?ZWIN_DRZEWO=1#tree");
  201. }
  202. echo " / ";
  203. if ($filter_show_sort_prio = V::get('TREE_ZASOBY_SORT_PRIO', '', $_REQUEST)) {
  204. if ($filter_show_sort_prio == 'SHOW') {
  205. $_SESSION['TREE-ZASOBY']['SORT_PRIO'] = 1;
  206. } else if ($filter_show_sort_prio == 'HIDE') {
  207. $_SESSION['TREE-ZASOBY']['SORT_PRIO'] = 0;
  208. }
  209. }
  210. echo "SORT PRIO ";
  211. if (V::get('SORT_PRIO', '', $_SESSION['TREE-ZASOBY'])) {
  212. echo App::link("UKRYJ", "?TREE_ZASOBY_SORT_PRIO=HIDE#tree");
  213. } else {
  214. echo App::link("POKAZ", "?TREE_ZASOBY_SORT_PRIO=SHOW#tree");
  215. }
  216. echo " / ";
  217. if ($filter_show_ids = V::get('TREE_ZASOBY_EXTERNAL_IDS', '', $_REQUEST)) {
  218. if ($filter_show_ids == 'SHOW') {
  219. $_SESSION['TREE-ZASOBY']['EXTERNAL_IDS'] = 1;
  220. } else if ($filter_show_ids == 'HIDE') {
  221. $_SESSION['TREE-ZASOBY']['EXTERNAL_IDS'] = 0;
  222. }
  223. }
  224. echo "IDS ";
  225. if (V::get('EXTERNAL_IDS', '', $_SESSION['TREE-ZASOBY'])) {
  226. echo App::link("UKRYJ", "?TREE_ZASOBY_EXTERNAL_IDS=HIDE#tree");
  227. } else {
  228. echo App::link("POKAZ", "?TREE_ZASOBY_EXTERNAL_IDS=SHOW#tree");
  229. }
  230. echo " / ";
  231. $show_filter_type = 0;
  232. if ($show_filter_type) {
  233. $selected_type = V::get('TREE_ZASOBY_FILTER_TYPE', V::get('FILTER_TYPE', '', $_SESSION['TREE-ZASOBY']), $_REQUEST);
  234. $_SESSION['TREE-ZASOBY']['FILTER_TYPE'] = $selected_type;
  235. $types = $_SESSION['CRM_LISTA_ZASOBOW_COLUMN']['TYPE']['TYPE'];
  236. $types = explode(',', str_replace(array("enum(",")","'"), '', $types));
  237. sort($types);
  238. array_unshift($types, '%');
  239. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">';print_r($types);echo'</pre>';
  240. echo"TYP: ";
  241. echo'<form action="" method="GET" style="display:inline">';
  242. echo'<input type="hidden" name="task" value="CRM_LISTA_ZASOBOW" />';
  243. echo'<select name="TREE_ZASOBY_FILTER_TYPE" onchange="this.form.submit();">';
  244. foreach ($types as $v) {
  245. $sel = ($selected_type == $v)? ' selected=selected"' : '';
  246. echo'<option value="'.$v.'"'.$sel.'>'.$v.'</option>';
  247. }
  248. echo'</select>';
  249. echo'</form>';
  250. echo " / ";
  251. }
  252. $js = "window.location.href='#TREE'+this.form.id.value;return false;";
  253. echo '<form style="display:inline" action="#" method="GET">';
  254. echo "Zasob ID: ";
  255. echo'<input type="text" name="id" value="" />';
  256. echo'<button onclick="'.$js.'">'."Wyszukaj ID".'</button>';
  257. echo'</form>';
  258. echo " / ";
  259. echo'Widok ';
  260. echo App::link("NOWY", "?filtr_view=NOWY");
  261. {
  262. echo " / ";
  263. echo'<form action="" method="GET" style="display:inline">';
  264. echo'<input type="hidden" name="'."task".'" value="'.App::get_task().'" />';
  265. echo'<nobr>';
  266. echo'<input type="submit" name="load_profile" value="'."Load".'" title="'."Load profile".'" />';
  267. echo'</nobr>';
  268. echo'</form>';
  269. }
  270. echo "\n";
  271. tree_listuj_zasoby(0,0,0);
  272. echo'</pre>';
  273. }
  274. if($DBG_TIME){
  275. $dbgExecTime->log('end');
  276. $dbgExecTime->printDebug();
  277. }
  278. }
  279. function fun_CRM_LISTA_ZASOBOW_clean_trash() {
  280. $db = DB::getDB();
  281. if (!$db) {
  282. echo '<p class="red">' . "No DB!" . '</p>';
  283. return;
  284. } else if ($db->has_errors()) {
  285. echo '<p>' . "Error DB: " . implode('<br />', $db->get_errors()) . '</p>';
  286. return;
  287. }
  288. $affected_total = 0;
  289. // remove all root trash items
  290. $sql = "update `CRM_LISTA_ZASOBOW` as z
  291. set z.`A_STATUS`='DELETED', z.`A_RECORD_UPDATE_AUTHOR`='TrashRemoveRec', z.`A_RECORD_UPDATE_DATE`=NOW()
  292. where z.`PARENT_ID`=-1 and z.`A_STATUS`!='DELETED'
  293. ";
  294. $db->query($sql);
  295. $affected = $db->affected_rows();
  296. if ($affected) {
  297. $affected_total += $affected;
  298. }
  299. // remove all child trash items - run X times
  300. $loop_limit = 50;
  301. do {
  302. $sql = "update `CRM_LISTA_ZASOBOW` as z, `CRM_LISTA_ZASOBOW` as zz
  303. set z.`A_STATUS`='DELETED', z.`A_RECORD_UPDATE_AUTHOR`='TrashRemoveRec', z.`A_RECORD_UPDATE_DATE`=NOW()
  304. where z.`PARENT_ID`=zz.`ID` and (zz.`PARENT_ID`=-1 or zz.`A_STATUS`='DELETED') and z.`A_STATUS`!='DELETED'
  305. ";
  306. $db->query($sql);
  307. $affected = $db->affected_rows();
  308. if ($affected) {
  309. $affected_total += $affected;
  310. }
  311. } while ($affected > 0 && --$loop_limit >= 0);
  312. echo '<p>' . "Usunięto " . $affected_total . " rekord￳ów." . '</p>';
  313. }