proces.php 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694
  1. <?php
  2. /**
  3. * @param $_GET['EDIT'] - ID rekordu do edycji (inline)
  4. * @param $_GET['EDIT_ID'] - ID rekordu do edycji (inline)
  5. */
  6. function task_CRM_PROCES() {
  7. User_procesy5_check_access();
  8. $_GET['ADM_AREA'] = V::get('ADM_AREA', "BN%", $_GET);
  9. $_GET['EDIT'] = V::get('EDIT', 0, $_GET, 'int');
  10. if (($edit_id = V::get('EDIT_ID', 0, $_GET, 'int')) > 0) {
  11. $_GET['EDIT'] = $edit_id;
  12. }
  13. $tbl = 'CRM_PROCES';
  14. $tbl_conf = Column::getInstance($tbl);
  15. if (!$tbl_conf) {
  16. echo'<p class="red">'."Brak konfiguracji dla ".$tbl."!".'</p>';
  17. return;
  18. }
  19. $visible_cols = $tbl_conf->getVisibleFieldList();
  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['TYPE'] = 'TYPE';
  25. $tbl_search_params['DESC'] = 'DESC';
  26. $tbl_search_params['OPIS'] = 'OPIS';
  27. $tbl_search_params['DESC_PL'] = 'DESC_PL';
  28. $tbl_search_params['TAGS'] = 'TAGS';
  29. $tbl_search_params['A_STATUS'] = 'A_STATUS';
  30. $tbl_search_params['L_APPOITMENT_USER'] = 'L_APPOITMENT_USER';
  31. $tbl_search_params['L_APPOITMENT_DATE'] = 'L_APPOITMENT_DATE';
  32. $tbl_search_params['L_APPOITMENT_INFO'] = 'L_APPOITMENT_INFO';
  33. $tbl_search_params['A_ADM_COMPANY'] = 'A_ADM_COMPANY';
  34. $tbl_search_params['IF_TRUE_GOTO'] = 'IF_TRUE_GOTO';
  35. $tbl_search_params['IF_TRUE_GOTO_FLAG'] = 'IF_TRUE_GOTO_FLAG';
  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. Lib::loadClass('FilterLast');
  41. $filter_last = new FilterLast( $_REQUEST, $tbl, 'session');
  42. $filter_last->add_filter( 'last_id', array('filtr_id','filtr_search_id','ID','EDIT'), "Ostatnio uzywane ID", 'int' );
  43. $filter_last->_save_args();// save args from request
  44. {// TABLE - Filter
  45. $tbl = 'CRM_PROCES';
  46. $tbl_filter = new stdClass();
  47. $tbl_filter->key = 'tbl-'.$tbl;
  48. $tbl_filter->filters = array();
  49. // TODO: stronicowanie $tbl_filter->filters: _page_nr, _limit, _total (need sql - only after change params)
  50. // read args from session, or get dafault values
  51. foreach ($tbl_search_params as $k => $req_field_name) {
  52. $tbl_filter->filters[$req_field_name] = V::get($req_field_name, '%', $_SESSION[$tbl_filter->key]);
  53. }//end foreach
  54. // read args from $_GET if isset
  55. foreach ($tbl_search_params as $k => $req_field_name) {
  56. if (isset($_GET[$req_field_name])) {
  57. $tbl_filter->filters[$req_field_name] = $_GET[$req_field_name];
  58. }
  59. }//end foreach
  60. // save args in session and $_GET
  61. foreach ($tbl_filter->filters as $req_field_name => $v) {
  62. $_SESSION[$tbl_filter->key][$req_field_name] = $v;
  63. $_GET[$req_field_name] = $v;
  64. }//end foreach
  65. echo'<div style="border:1px solid red; display:none;">';
  66. foreach ($tbl_filter->filters as $req_field_name => $v) {
  67. echo'<br />arg['.$req_field_name.'] = '.$v;
  68. }//end foreach
  69. echo'</div>';
  70. }// TABLE - Filter
  71. {// TREE - Filter
  72. $tbl = 'CRM_PROCES';
  73. $tree_procesy_filter = get_filter_for_table( $tbl );
  74. $tree_procesy_filter->set_trash( 'filtr_id', -1 );
  75. {// zapisz stan - ajax function to save filters stan and opened tree nodes, etc.
  76. $filtr_ses_key = $tree_procesy_filter->_key;
  77. $cookie_key = 'TREE_'.$tbl;
  78. $profile_key = 'Filtr_'.$filtr_ses_key;
  79. if (V::get('save_profile', '', $_REQUEST)) {
  80. $profile_val = array();
  81. $profile_val['filtr'] = $_SESSION[$filtr_ses_key];
  82. $profile_val['tree'] = $_COOKIE[$cookie_key];// cookie key from Tree class - 'TREE_'. $tbl @see __construct
  83. User::setProfile($profile_key, $profile_val);
  84. $ret = User::saveProfile();
  85. }
  86. else if (V::get('load_profile', '', $_REQUEST)) {
  87. //User::loadProfile();// proile is loaded in USERS_COLUMN_INIT after login
  88. $profile_val = User::getProfile($profile_key);
  89. $_COOKIE[$cookie_key] = $profile_val['tree'];
  90. echo'<script type="text/javascript">'."
  91. jQuery(document).ready(function(){
  92. jQuery.cookie('".$cookie_key."','" . $_COOKIE[$cookie_key] . "');
  93. });
  94. ".'</script>';
  95. $_SESSION[$filtr_ses_key] = $profile_val['filtr'];
  96. $tree_procesy_filter->_read_args( true );// force load args from session
  97. }
  98. }// zapisz stan - ajax function to save filters stan and opened tree nodes, etc.
  99. $tree_procesy_filter->_save_args();// force save_args (execute at the end of show_filters)
  100. echo'<div style="border:1px solid red; display:none;">';
  101. foreach ($tree_procesy_filter->filters as $arg => $v) {
  102. echo'<br />arg['.$arg.'] = '.$tree_procesy_filter->get_arg($arg);
  103. }//end foreach
  104. echo'</div>';
  105. }// TREE - Filter
  106. echo'<h1>';
  107. echo App::link("Procesy", array('task'=>App::get_task(), 'filtr_id'=>''));
  108. if ($tree_procesy_filter->is_trash()) {//$_GET['filtr_id'] == -1) {
  109. echo ' &raquo; '."Kosz";
  110. echo " " . App::link("czyść", array('task'=>App::get_task(), 'function_init'=>"fun_CRM_PROCES_clean_trash"), array('title'=>"Ustaw status rekordów w koszu na DELETED", 'class'=>'btn-p5', 'style'=>'font-size:13px;'));
  111. } else if ($tree_procesy_filter->get_arg('filtr_id') > 0) {//$_GET['filtr_id'] > 0) {
  112. echo ' &raquo; '."Proces [".$tree_procesy_filter->get_arg('filtr_id')."]";
  113. }
  114. echo '<span class="pull-right">'.App::link("Mapa procesów", array('task'=>'VIEW_PROCES_MAP')).'</span>';
  115. echo'</h1>';
  116. //wykrywamy czy ma dostepny proces do jakiejs komorki w tej tabeli
  117. $userAcl = User::getAcl();
  118. $tblAcl = $userAcl->getTableAcl(ProcesHelper::getZasobTableID('CRM_PROCES'));
  119. if($tblAcl)
  120. if($tblAcl->hasFieldPerm($tblAcl->getFieldIdByName('ID'),'R')) {
  121. echo App::link("Pokaz Tabele", "index.php?MENU_INIT=VIEWTABLE_AJAX&ZASOB_ID=".ProcesHelper::getZasobTableID('CRM_PROCES'));
  122. echo "<br>".App::link("Dodaj nowy rekord", "index.php?MENU_INIT=VIEWTABLE_AJAX&ZASOB_ID=".ProcesHelper::getZasobTableID('CRM_PROCES')."#CREATE");
  123. } else {
  124. if (!$_SESSION['HIDE_PROCESY']) {
  125. echo App::link("Ukryj Tabele", "?task=CRM_PROCES&HIDE_PROCESY=1");
  126. } else {
  127. echo App::link("Pokaz Tabele", "?task=CRM_PROCES&UNHIDE_PROCESY=1");
  128. }
  129. $table_view = array();
  130. $table_view['labels'] = array();
  131. $table_view['head'] = array();
  132. $table_view['find'] = array();
  133. $table_view['foot'] = array();
  134. $table_view['labels']['ID'] = "ID";
  135. $table_view['labels']['PARENT_ID'] = "P_ID";
  136. $table_view['labels']['TYPE'] = "TYPE";
  137. $table_view['labels']['DESC'] = "DESC";
  138. $table_view['labels']['OPIS'] = "OPIS";
  139. $table_view['labels']['DESC_PL'] = "DESC_PL";
  140. $table_view['labels']['TAGS'] = "TAGS";
  141. $table_view['labels']['A_STATUS'] = "A_STATUS";
  142. $table_view['labels']['L_APPOITMENT_USER'] = "L_APPOITMENT_USER";
  143. $table_view['labels']['L_APPOITMENT_DATE'] = "L_APPOITMENT_DATE";
  144. $table_view['labels']['L_APPOITMENT_INFO'] = "L_APPOITMENT_INFO";
  145. $table_view['labels']['A_ADM_COMPANY'] = "A_ADM_COMPANY";
  146. $table_view['head']['ID']= 'ID';
  147. $table_view['head']['PARENT_ID']= '<span class="P_ID">'."P_ID".'</span>';
  148. $table_view['head']['TYPE']= 'TYPE';
  149. $table_view['head']['DESC']= 'DESC';
  150. $table_view['head']['DESC_PL']= 'DESC_PL';
  151. $table_view['head']['TAGS']= 'TAGS';
  152. $table_view['head']['OPIS']= 'OPIS';
  153. $table_view['head']['A_STATUS'] = 'A_STATUS';
  154. $table_view['head']['L_APPOITMENT_USER'] = 'L_APP_USER';
  155. $table_view['head']['L_APPOITMENT_DATE'] = 'L_APP_DATE';
  156. $table_view['head']['L_APPOITMENT_INFO'] = 'L_APP_INFO';
  157. $table_view['head']['A_ADM_COMPANY'] = 'A_ADM_COMPANY';
  158. $table_view['find']['ID']= App::field_search( 'ID', "varchar(255)", $_GET['ID'], array('class'=>'i', 'size'=>5) );
  159. $table_view['find']['PARENT_ID']= App::field_search( 'P_ID', "varchar(255)", $_GET['P_ID'], array('class'=>'i', 'size'=>5) );
  160. $table_view['find']['TYPE']= App::field_search( 'TYPE', $tbl_conf->type('TYPE'), $_GET['TYPE'], array('class'=>'i') );
  161. $table_view['find']['DESC']= App::field_search( 'DESC', "varchar(255)", $_GET['DESC'], array('class'=>'i', 'size'=>5) );
  162. $table_view['find']['OPIS']= App::field_search( 'OPIS', "varchar(255)", $_GET['OPIS'], array('class'=>'i', 'size'=>5) );
  163. $table_view['find']['TAGS']= App::field_search( 'TAGS', "varchar(100)", $_GET['TAGS'], array('class'=>'i', 'size'=>5) );
  164. $table_view['find']['A_STATUS'] = App::field_search( 'A_STATUS', $tbl_conf->type('A_STATUS'), $_GET['A_STATUS'], array('class'=>'i') );
  165. $table_view['find']['L_APPOITMENT_USER'] = App::field_search( 'L_APPOITMENT_USER', $tbl_conf->type('L_APPOITMENT_USER'), $_GET['L_APPOITMENT_USER'], array('class'=>'i', 'size'=>5) );
  166. $table_view['find']['L_APPOITMENT_DATE'] = App::field_search( 'L_APPOITMENT_DATE', $tbl_conf->type('L_APPOITMENT_DATE'), $_GET['L_APPOITMENT_DATE'], array('class'=>'i', 'size'=>5) );
  167. $table_view['find']['L_APPOITMENT_INFO'] = App::field_search( 'L_APPOITMENT_INFO', $tbl_conf->type('L_APPOITMENT_INFO'), $_GET['L_APPOITMENT_INFO'], array('class'=>'i', 'size'=>5) );
  168. $table_view['find']['A_ADM_COMPANY'] = App::field_search( 'A_ADM_COMPANY', $tbl_conf->type('A_ADM_COMPANY'), $_GET['A_ADM_COMPANY'], array('class'=>'i', 'size'=>5) );
  169. $table_view['find']['IF_TRUE_GOTO']= App::field_search( 'IF_TRUE_GOTO', "varchar(11)", $_GET['IF_TRUE_GOTO'], array('class'=>'i', 'size'=>5) );
  170. $table_view['find']['IF_TRUE_GOTO_FLAG']= App::field_search( 'IF_TRUE_GOTO_FLAG', $tbl_conf->type('IF_TRUE_GOTO_FLAG'), $_GET['IF_TRUE_GOTO_FLAG'], array('class'=>'i') );
  171. $table_view['find']['A_RECORD_CREATE_AUTHOR']= App::field_search( 'A_RECORD_CREATE_AUTHOR', $tbl_conf->type('A_RECORD_CREATE_AUTHOR'), $_GET['A_RECORD_CREATE_AUTHOR'], array('class'=>'i') );
  172. $table_view['find']['A_RECORD_CREATE_DATE']= App::field_search( 'A_RECORD_CREATE_DATE', $tbl_conf->type('A_RECORD_CREATE_DATE'), $_GET['A_RECORD_CREATE_DATE'], array('class'=>'i') );
  173. $table_view['find']['A_RECORD_UPDATE_AUTHOR']= App::field_search( 'A_RECORD_UPDATE_AUTHOR', $tbl_conf->type('A_RECORD_UPDATE_AUTHOR'), $_GET['A_RECORD_UPDATE_AUTHOR'], array('class'=>'i') );
  174. $table_view['find']['A_RECORD_UPDATE_DATE']= App::field_search( 'A_RECORD_UPDATE_DATE', $tbl_conf->type('A_RECORD_UPDATE_DATE'), $_GET['A_RECORD_UPDATE_DATE'], array('class'=>'i') );
  175. $table_view['foot']['PARENT_ID'] = App::field( 'ADD_'.'PARENT_ID', "varchar(255)", V::get('ADD_'.'PARENT_ID', '', $_POST), array('class'=>'i', 'size'=>4) );
  176. $table_view['foot']['TYPE'] = App::field( 'ADD_'.'TYPE', $tbl_conf->type('TYPE'), V::get('ADD_'.'TYPE', '', $_POST), array('class'=>'i') );
  177. $table_view['foot']['DESC'] = App::field( 'ADD_'.'DESC', "varchar(255)", V::get('ADD_'.'DESC', '', $_POST), array('class'=>'i', 'size'=>14) );
  178. $table_view['foot']['DESC_PL'] = App::field( 'ADD_'.'DESC_PL', $tbl_conf->type('DESC_PL'), V::get('ADD_'.'DESC_PL', '', $_POST), array('class'=>'i','size'=>10) );
  179. $table_view['foot']['OPIS'] = App::field( 'ADD_'.'OPIS', "varchar(255)", V::get('ADD_'.'OPIS', '', $_POST), array('class'=>'i', 'size'=>20) );
  180. $table_view['foot']['IF_TRUE_GOTO'] = App::field( 'ADD_'.'IF_TRUE_GOTO', $tbl_conf->type('IF_TRUE_GOTO'), V::get('ADD_'.'IF_TRUE_GOTO', '', $_POST), array('class'=>'i','size'=>10) );
  181. $table_view['foot']['IF_TRUE_GOTO_FLAG'] = App::field( 'ADD_'.'IF_TRUE_GOTO_FLAG', $tbl_conf->type('IF_TRUE_GOTO_FLAG'), V::get('ADD_'.'IF_TRUE_GOTO_FLAG', '', $_POST), array('class'=>'i','size'=>1) );
  182. $ses_col_name = 'CRM_PROCES';
  183. echo'<table border="1" cellspacing="0" cellpadding="0" class="tbl-view">';
  184. echo'<thead>';
  185. echo'<tr>'."\n";
  186. echo'<th>';
  187. echo App::link("C", array('function_init'=>"fun_USERS_COLUMN", 'arg'=>"edit"), array('title'=>"Ustawienia", 'ico'=>'excel.gif', 'ico_height'=>'12'));
  188. echo'</th>';
  189. foreach ($visible_cols as $field_id => $field_name) {
  190. $v = V::get($field_name, str_replace('_', ' ', $field_name), $table_view['head']);
  191. echo'<td>';
  192. echo $v;
  193. if ($field_name != 'ID') {
  194. echo ' ';
  195. echo App::link("X", array('function_init'=>"fun_USERS_COLUMN", 'arg'=>"hide", 'col_id'=>$field_id), array('title'=>"Ukryj kolumne", 'ico'=>'shutdown.gif', 'ico_height'=>11));
  196. }
  197. echo'</td>'."\n";
  198. }//end foreach
  199. echo'</tr>'."\n";
  200. echo'<tr class="find">'."\n";
  201. echo'<form action="" method="GET">';
  202. echo'<input type="hidden" name="task" value="'.App::get_task().'" />';
  203. echo'<th style="text-align:center;">';
  204. echo'<input type="image" value="'."Szukaj".'" src="'."icon/search.png".'" title="'."Szukaj".'" />';
  205. echo'</th>';
  206. foreach ($visible_cols as $field_id => $field_name) {
  207. $v = V::get($field_name, '', $table_view['find']);
  208. $cls = array();
  209. $v_label = V::get($field_name, '', $table_view['labels']);
  210. if ($v_label && isset($tbl_filter->filters[$v_label])) {
  211. if ($tbl_filter->filters[$v_label] != '%') {
  212. $cls []= 'selected';
  213. }
  214. }
  215. $cls = (!empty($cls))? ' class="'.implode(' ', $cls).'"' : '';
  216. echo'<td'.$cls.'>'.$v.'</td>'."\n";
  217. }//end foreach
  218. echo'</form>';
  219. echo'</tr>'."\n";
  220. echo'</thead>';
  221. echo'<tbody>';
  222. {// fetch data
  223. $sql_limit = 1500;// TODO: stronicowanie
  224. if ($_SESSION['HIDE_PROCESY']) $sql_limit = "3";
  225. $sql_where = array();
  226. if ($_GET['EDIT']) {
  227. $sql_where []= "CP.`ID`='".$_GET['EDIT']."'";
  228. } else {
  229. foreach ($tbl_search_params as $k => $req_field_name) {
  230. // TODO: FILTER_SEARCH <, >, <=, >=, !
  231. $sql_where []= "CP.`".$k."` like '".$_GET[$req_field_name]."'";
  232. }
  233. }
  234. $sql_where = implode(" and ", $sql_where);
  235. $query = "SELECT
  236. CP.*
  237. FROM `CRM_PROCES` as CP
  238. where
  239. ".$sql_where."
  240. order by CP.`ID` desc, CP.`PARENT_ID`, CP.`TYPE`, CP.`DESC`
  241. limit ".$sql_limit."
  242. ";
  243. $res = DB::query( $query );
  244. }
  245. $t = 0;
  246. while ($r = DB::fetch( $res )) {
  247. if ($_GET['EDIT'] == $r->ID) {
  248. echo'<form action="'.App::build_http_query("?EDIT=".$r->ID."#".$r->ID).'" method="POST">';
  249. echo'<tr class="edit row-'.($t = 1 - $t).'">';
  250. echo'<th>';
  251. echo'<input type="image" src="'."icon/save.png".'" name="EDIT_SUBMIT" value="'."E ".$r->ID.'" title="'."Zapisz".'">';
  252. echo '<br />'.App::link("IMG", "?function_init=fun_IMAGE_ADD&tbl=".'CRM_PROCES'."&id=".$r->ID, array('target'=>'_blank', 'title'=>"Dodaj zdjecia"));
  253. echo '<br />'.App::link("P+", array('task'=>"CRM_TESTY_ADD_PYTANIA", 'id_proces'=>$r->ID), array('title'=>'Dodaj pytanie do testow', 'class'=>'btn-p5 btn-red'));
  254. echo'</th>';
  255. foreach ($visible_cols as $field_id => $field_name) {
  256. if ($field_name == 'ID') {
  257. echo'<td>';
  258. echo'<a id="'.$r->ID.'">'.$r->ID.'</a>';
  259. echo ' '.App::link("L", "#TREE".$r->PARENT_ID);
  260. echo'<input type="hidden" name="function_init" value="'."fun_CRM_PROCES_EDIT".'">';
  261. echo'<input type="hidden" name="task" value="'.App::get_task().'">';
  262. echo'<input type="hidden" name="EDIT_ID" value="'.$r->ID.'">';
  263. echo '</td>';
  264. } else {
  265. echo'<td>';
  266. if ($tbl_conf->allowWrite($field_name)) {
  267. echo App::field( 'EDIT_' . $field_name, $tbl_conf->type($field_name), $r->$field_name, array('class'=>'i') );
  268. } else {
  269. echo $r->$field_name;
  270. }
  271. echo'</td>';
  272. }
  273. }
  274. echo '</tr>';
  275. echo'</form>';
  276. }
  277. else {
  278. echo "\n".'<tr class="edit row-'.($t = 1 - $t).'">';
  279. echo'<th>';
  280. if (User_is_admin()) {
  281. echo App::link("Edit", "?EDIT=".$r->ID, array('id'=>$r->ID, 'title'=>"Edytuj", 'ico'=>'edit.png'));
  282. }
  283. echo'</th>';
  284. foreach ($visible_cols as $field_id => $field_name) {
  285. if ($field_name == 'ID') {
  286. echo'<td>';
  287. if (User_is_admin()) {
  288. echo App::link($r->ID, "?EDIT=".$r->ID."#".$r->ID, array('id'=>$r->ID, 'title'=>'Edytuj'));
  289. } else {
  290. echo $r->ID;
  291. }
  292. echo '</td>';
  293. } else {
  294. echo'<td> '.$r->$field_name.'</td>';
  295. }
  296. }
  297. echo'</tr>';
  298. }
  299. }
  300. echo'</tbody>';
  301. if (User_is_admin()) {
  302. echo'<tfoot>';
  303. echo'<form action="" method="POST">';
  304. echo'<tr class="add">';
  305. echo'<th colspan=2>';
  306. echo'<input type="hidden" name="task" value="'.App::get_task().'" />';
  307. echo'<input type="hidden" name="function_init" value="'."fun_CRM_PROCES_ADD".'" />';
  308. echo'<input type="image" alt="'."Dodaj".'" src="'."icon/add.gif".'" title="'."Dodaj nowy".'">';
  309. echo'</th>';
  310. foreach ($visible_cols as $field_id => $field_name) {
  311. if ($field_name == 'ID') continue;
  312. $v = V::get($field_name, ' ', $table_view['foot']);
  313. echo'<td>'.$v.'</td>';
  314. }//end foreach
  315. echo'</tr>';
  316. echo'</form>';
  317. echo'</tfoot>';
  318. }
  319. echo'</table>';
  320. }
  321. echo'<br />';
  322. $TREE = array();
  323. echo'<div id="tree"></div>';
  324. $DBG_TIME = 0;
  325. if($DBG_TIME) $time_arr = array();// [ [time, desc], [time, desc], ... ]
  326. if($DBG_TIME) $time_arr []= array(microtime(true), 'before Tree');
  327. if ($tree_procesy_filter->get_arg('filtr_view') == 'NOWY') {
  328. $filter_last->show_filters();
  329. echo'<div class="filters">';
  330. echo'<form action="'."".'" method="get" style="margin:0;padding:0;">';
  331. echo'<input type="hidden" name="task" value="'.App::get_task().'" />';
  332. $tree_procesy_filter->show_filters();
  333. // TODO: another form ? function_init ?
  334. {// save profile - btn
  335. echo'<nobr>';
  336. echo'<input type="submit" name="save_profile" value="'."Save".'" title="'."Save profile".'" />';
  337. echo'</nobr>';
  338. }
  339. {// load profile - btn
  340. echo'<nobr>';
  341. echo'<input type="submit" name="load_profile" value="'."Load".'" title="'."Load profile".'" />';
  342. echo'</nobr>';
  343. }
  344. echo'</form>';
  345. echo'</div>';// .filters
  346. $filter_hist = (isset($_SESSION['TREE-PROCESY']['filter_hist']))? $_SESSION['TREE-PROCESY']['filter_hist'] : array();
  347. if (!empty($filter_hist)) {
  348. echo'<form style="display:inline" action="" method="GET">';
  349. echo'<input type="hidden" name="task" value="'.App::get_task().'">';
  350. echo'<select name="filter_hist_id">';
  351. foreach ($filter_hist as $k => $v) {
  352. echo'<option value="'.$k.'">'.$v.'</option>';
  353. }//end foreach
  354. echo'</select>';
  355. echo'</form>';
  356. }
  357. $tree = new Tree( $tbl );
  358. $clbk = 'tree_callback__show_item_from_'.$tbl;
  359. $tree->set_param('show_item_callback', $clbk);
  360. //TODO: add all filters from Filter - $tree_procesy_filter
  361. $tree->set_param('rozwin', ($tree_procesy_filter->get_arg('filtr_drzewo') == 'ROZWIN'));
  362. $tree->set_param('rozwin_proces', ($tree_procesy_filter->get_arg('filtr_procesy') == '+'));
  363. $tree->set_param('rozwin_zasoby', ($tree_procesy_filter->get_arg('filtr_zasoby') == '+'));
  364. $tree->set_param('rozwin_opis', ($tree_procesy_filter->get_arg('filtr_opis') == '+'));
  365. $tree->set_param('filtr_img', ($tree_procesy_filter->get_arg('filtr_img') == '+'));
  366. $tree->set_param('style', $tree_procesy_filter->get_arg('filtr_view'));
  367. $tree->set_param('search_id', $tree_procesy_filter->get_arg('filtr_search_id'));
  368. $tree->set_param('getZasobTableID', ProcesHelper::getZasobTableID('CRM_PROCES'));
  369. $tree->set_param('getZasobTableID_CRM_LISTA_ZASOBOW', ProcesHelper::getZasobTableID('CRM_LISTA_ZASOBOW'));
  370. $userAcl = User::getAcl();
  371. if($userAcl)
  372. $tblAcl = $userAcl->getTableAcl(ProcesHelper::getZasobTableID('CRM_PROCES'));
  373. if($tblAcl)
  374. if($tblAcl->hasFieldPerm($tblAcl->getFieldIdByName('ID'),'R')) $tree->set_param('hasFieldPerm__ID',1);
  375. //TODO: check perm to edit
  376. if ($tree_procesy_filter->is_trash()) $tree->set_param('is_trash', true);
  377. $tree->set_param('editable', ($tree_procesy_filter->get_arg('filtr_edit') == 'TAK'));
  378. if ($tree_procesy_filter->get_arg('filtr_ajax') == 'TAK') {
  379. $tree->_limit = 300;
  380. $tree->_deep_limit = 1;
  381. }
  382. if ($tree_procesy_filter->get_arg('filtr_id') != 0) {
  383. $tree->showSubTree( $tree_procesy_filter->get_arg('filtr_id') );
  384. } else if ($tree_procesy_filter->get_arg('filtr_search_id') > 0) {
  385. $tree->showSearchNode( $tree_procesy_filter->get_arg('filtr_search_id') );
  386. } else {
  387. $tree->show();
  388. }
  389. }
  390. else {
  391. echo'<pre>';
  392. {
  393. echo'<table cellspacing="0" cellpadding="1">';
  394. echo'<tr>';
  395. echo'<td>';
  396. echo "DRZEWO ";
  397. if ($_SESSION['ZWIN_DRZEWO']) {
  398. echo App::link("ROZWIN", "?ROZWIN_DRZEWO=1#tree");
  399. } else {
  400. echo App::link("ZWIN", "?ZWIN_DRZEWO=1#tree");
  401. }
  402. echo'</td>';
  403. echo'<td>';
  404. echo "&nbsp;/&nbsp;";
  405. echo'</td>';
  406. echo'<td>';
  407. echo "PROCESY ";
  408. if ($_SESSION['ROZWIN']) {
  409. echo App::link("ZWIN", "?TREE_ZWIN=1#tree");
  410. } else {
  411. echo App::link("ROZWIN", "?TREE_ROZWIN=1#tree");
  412. }
  413. echo'</td>';
  414. echo'<td>';
  415. echo "&nbsp;/&nbsp;";
  416. echo'</td>';
  417. echo'<td>';
  418. echo "ZASOBY ";
  419. if ($_SESSION['ROZWIN_ZASOBY']) {
  420. echo App::link("ZWIN", "?TREE_ZASOBY_ZWIN=1#tree");
  421. } else {
  422. echo App::link("ROZWIN", "?TREE_ZASOBY_ROZWIN=1#tree");
  423. }
  424. echo'</td>';
  425. echo'<td>';
  426. echo "&nbsp;/&nbsp;";
  427. echo'</td>';
  428. echo'<td>';
  429. echo "OPISY ";
  430. if ($_SESSION['ROZWIN_OPIS']) {
  431. echo App::link("ZWIN", "?TREE_OPISY_ZWIN=1#tree");
  432. } else {
  433. echo App::link("ROZWIN", "?TREE_OPISY_ROZWIN=1#tree");
  434. }
  435. echo'</td>';
  436. echo'<td>';
  437. echo "&nbsp;/&nbsp;";
  438. echo'</td>';
  439. echo'<td>';
  440. $js = "window.location.href='#TREE'+this.form.id.value;return false;";
  441. echo '<form style="display:inline" action="#" method="GET">';
  442. echo "Proces ID: ";
  443. echo'<input type="text" name="id" value="" size="5" />';
  444. echo'<button onclick="'.$js.'">'."Wyszukaj ID".'</button>';
  445. echo'</form>'."\n";
  446. echo'</td>';
  447. echo'<td>';
  448. echo "&nbsp;/&nbsp;";
  449. echo'</td>';
  450. echo'<td>';
  451. echo'Widok ';
  452. echo App::link("NOWY", "?filtr_view=NOWY");
  453. echo'</td>';
  454. {
  455. echo'<td>';
  456. echo "&nbsp;/&nbsp;";
  457. echo'</td>';
  458. echo'<td>';
  459. echo'<form action="" method="GET" style="display:inline">';
  460. echo'<input type="hidden" name="'."task".'" value="'.App::get_task().'" />';
  461. echo'<nobr>';
  462. echo'<input type="submit" name="load_profile" value="'."Load".'" title="'."Load profile".'" />';
  463. echo'</nobr>';
  464. echo'</form>';
  465. echo'</td>';
  466. }
  467. echo'</tr>';
  468. echo'</table>';// btns
  469. }
  470. tree_znajdz(0, 1, 0);
  471. echo'</pre>';
  472. }
  473. if($DBG_TIME) $time_arr []= array(microtime(true), 'after Tree...');
  474. if($DBG_TIME){
  475. $time_arr []= array(microtime(true), 'end');
  476. $last_time = 0;
  477. echo'<table style="color:#e0e0e0; text-align:left;">';
  478. foreach ($time_arr as $t) {
  479. echo'<tr>';
  480. echo'<td> </td>';
  481. echo'<td> </td>';
  482. echo'<td style="text-align:left;">'.number_format(($t[0] - $last_time), 6).'</td>';
  483. echo'</tr>';
  484. echo'<tr>';
  485. echo'<td>'.$t[0].'</td>';
  486. echo'<td>'.$t[1].'</td>';
  487. echo'<td> </td>';
  488. echo'</tr>';
  489. $last_time = $t[0];
  490. }//end foreach
  491. echo'</table>';
  492. //echo'<pre style="text-align:left;">';print_r($db);echo'</pre>';
  493. //echo'<pre style="text-align:left;">';print_r($_SERVER);echo'</pre>';
  494. }
  495. }
  496. function fun_CRM_PROCES_ADD() {
  497. $redirect = "?task=".App::get_task();
  498. $msg = '';
  499. $sql_obj = new stdClass();
  500. $tbl_name = 'CRM_PROCES';
  501. Lib::loadClass('Column');
  502. $tbl_conf = Column::getInstance($tbl_name);
  503. if (!$tbl_conf) {
  504. return;
  505. }
  506. foreach ($tbl_conf->getFieldList() as $field_id => $field_name) {
  507. if ($tbl_conf->allowCreate($field_name)) {
  508. $post_arg_name = 'ADD_' . $field_name;
  509. if (isset($_POST[$post_arg_name])) {
  510. $sql_obj->$field_name = $_POST[$post_arg_name];
  511. }
  512. }
  513. }//end foreach
  514. // nowy na koniec listy
  515. $sql = "select max(t.`SORT_PRIO`) as MAX_SORT_PRIO
  516. from `CRM_PROCES` as t
  517. where
  518. t.`PARENT_ID`='".$sql_obj->PARENT_ID."'
  519. ";
  520. $res = DB::query( $sql );
  521. while ($r = DB::fetch( $res )) {
  522. $sql_obj->SORT_PRIO = $r->MAX_SORT_PRIO + 1;
  523. }
  524. //TODO: post verify
  525. $new_id = DB::ADD_NEW_OBJ('CRM_PROCES', $sql_obj);
  526. if (V::get('DEBUG', '', $_SESSION)) App::add_msg("PASSED(1) NEW RECORD ID($new_id)");
  527. if ($new_id > 0) {
  528. App::add_msg("Dodano nowy rekord (ID ".$new_id.")");
  529. $redirect .= "&EDIT=".$new_id;
  530. }
  531. else {
  532. App::add_error("Error przy dodawaniu rekordu!");
  533. }
  534. App::redirect($redirect, $msg);
  535. }
  536. /**
  537. * @param $_POST['EDIT'] - ID rekordu
  538. */
  539. function fun_CRM_PROCES_EDIT() {
  540. $redirect = "?task=".App::get_task();
  541. $msg = '';
  542. $sql_obj = new stdClass();
  543. $tbl_name = 'CRM_PROCES';
  544. $sql_obj->ID = V::get('EDIT_ID', '', $_POST, 'int');
  545. // TODO: fields can be hidden
  546. Lib::loadClass('Column');
  547. $tbl_conf = Column::getInstance($tbl_name);
  548. if (!$tbl_conf) {
  549. return;
  550. }
  551. foreach ($tbl_conf->getFieldList() as $field_id => $field_name) {
  552. if ($tbl_conf->allowWrite($field_name)) {
  553. $post_arg_name = 'EDIT_' . $field_name;
  554. if (isset($_POST[$post_arg_name])) {
  555. // TODO: convert field types?
  556. $sql_obj->$field_name = $_POST[$post_arg_name];
  557. }
  558. }
  559. }//end foreach
  560. $redirect .= "&EDIT=".$sql_obj->ID;
  561. //TODO: post verify
  562. $id = $sql_obj->ID;
  563. $affected = DB::UPDATE_OBJ( 'CRM_PROCES', $sql_obj );
  564. if (V::get('DEBUG', '', $_SESSION)) App::add_msg("PASSED($affected)");
  565. if ($affected == 2) {
  566. App::add_msg("Zmieniono rekord (ID ".$id.")");
  567. }
  568. else if ($affected == 1) {
  569. App::add_msg("Zmieniono rekord (ID ".$id.") (Error: nie zapisano hostorii)");
  570. }
  571. else if ($affected < 0) {
  572. App::add_error("Blad podczas edytowania rekordu - nic nie zmieniono");
  573. }
  574. App::redirect($redirect, $msg);
  575. }
  576. function fun_CRM_PROCES_clean_trash() {
  577. $db = DB::getDB();
  578. if (!$db) {
  579. echo '<p class="red">' . "No DB!" . '</p>';
  580. return;
  581. } else if ($db->has_errors()) {
  582. echo '<p>' . "Error DB: " . implode('<br />', $db->get_errors()) . '</p>';
  583. return;
  584. }
  585. $affected_total = 0;
  586. // remove all root trash items
  587. $sql = "update `CRM_PROCES` as p
  588. set p.`A_STATUS`='DELETED', p.`A_RECORD_UPDATE_AUTHOR`='TrashRemoveRec', p.`A_RECORD_UPDATE_DATE`=NOW()
  589. where p.`PARENT_ID`=-1 and p.`A_STATUS`!='DELETED'
  590. ";
  591. $db->query($sql);
  592. $affected = $db->affected_rows();
  593. if ($affected) {
  594. $affected_total += $affected;
  595. }
  596. // remove all child trash items - run X times
  597. $loop_limit = 50;
  598. do {
  599. $sql = "update `CRM_PROCES` as p, `CRM_PROCES` as pp
  600. set p.`A_STATUS`='DELETED', p.`A_RECORD_UPDATE_AUTHOR`='TrashRemoveRec', p.`A_RECORD_UPDATE_DATE`=NOW()
  601. where p.`PARENT_ID`=pp.`ID` and (pp.`PARENT_ID`=-1 or pp.`A_STATUS`='DELETED') and p.`A_STATUS`!='DELETED'
  602. ";
  603. $db->query($sql);
  604. $affected = $db->affected_rows();
  605. if ($affected) {
  606. $affected_total += $affected;
  607. }
  608. } while ($affected > 0 && --$loop_limit >= 0);
  609. echo '<p>' . "Usunięto " . $affected_total . " rekordów." . '</p>';
  610. }