proces_log.php 34 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100
  1. <?php
  2. if (!class_exists('Lib')) die('404');
  3. function fun_PROCES_INIT() {
  4. $redirect = "?task=".App::get_task();
  5. $msg = '';
  6. $id_proces = V::get('id_proces', '', $_REQUEST, 'int');
  7. if ($id_proces <= 0) {
  8. App::add_error("Wrong ID!");
  9. App::redirect($redirect, $msg);
  10. return;
  11. }
  12. $p = DB::get_by_id( 'CRM_PROCES', $id_proces );
  13. if (!$p) {
  14. App::add_error("Process ".$id_proces." not exists!");
  15. App::redirect($redirect, $msg);
  16. return;
  17. }
  18. // TODO: check if proces $p is PROCES_INIT
  19. $db = DB::getDB();
  20. Lib::loadClass('ProcesLogDao');
  21. $procesLogDao = new ProcesLogDao($db);
  22. $new_id = $procesLogDao->proces_log_init(User::getID(), User::getName(), $p->ID);
  23. if ($new_id > 0) {
  24. App::add_msg("Rozpoczeto proces ".$p->ID." (LOG ID ".$new_id.")");
  25. $redirect = "?task=PROCES_LOG&_log_id=".$new_id;
  26. }
  27. else {
  28. App::add_error("Nie udalo sie rozpoczac procesu!");
  29. }
  30. App::redirect($redirect, $msg);
  31. }
  32. /**
  33. * Go to next step - next Proces.
  34. * @param _log_id
  35. * @param _next_step_id
  36. */
  37. function fun_PROCES_LOG_STEP_NEXT() {
  38. $redirect = "?task=".App::get_task();
  39. $msg = '';
  40. $log_id = V::get('_log_id', 0, $_REQUEST, 'int');
  41. if ($log_id <= 0) {
  42. App::add_error("Wrong Log ID!");
  43. App::redirect($redirect, $msg);
  44. return;
  45. }
  46. $redirect .= "&_log_id=" . $log_id;
  47. $next_id = V::get('_next_step_id', 0, $_REQUEST, 'int');
  48. if ($next_id <= 0) {
  49. App::add_error("Wrong next step ID!");
  50. App::redirect($redirect, $msg);
  51. return;
  52. }
  53. $db = DB::getDB();
  54. Lib::loadClass('ProcesLogDao');
  55. $procesLogDao = new ProcesLogDao($db);
  56. $modelLog = $procesLogDao->get_by_id($log_id);
  57. if (!$modelLog) {
  58. App::add_error("Error Log [$log_id] not exists!");
  59. App::redirect($redirect, $msg);
  60. return;
  61. }
  62. if ($modelLog->allow_next_step($next_id)) {
  63. if ($modelLog->go_to_next_step($next_id)) {
  64. // ok next step is set
  65. } else {
  66. App::add_error("Error at go to next step!");
  67. }
  68. } else {
  69. App::add_error("Next step is not allowed!");
  70. }
  71. App::redirect($redirect, $msg);
  72. }
  73. /**
  74. * Go to next step wsk - next Proces.
  75. * @param _log_id
  76. * @param _next_step_wsk_id
  77. */
  78. function fun_PROCES_LOG_STEP_WSK_NEXT() {
  79. $redirect = "?task=".App::get_task();
  80. $msg = '';
  81. $log_id = V::get('_log_id', 0, $_REQUEST, 'int');
  82. if ($log_id <= 0) {
  83. App::add_error("Wrong Log ID!");
  84. App::redirect($redirect, $msg);
  85. return;
  86. }
  87. $redirect .= "&_log_id=" . $log_id;
  88. $next_wsk_id = V::get('_next_step_wsk_id', 0, $_REQUEST, 'int');
  89. if ($next_wsk_id <= 0) {
  90. App::add_error("Wrong next step wsk ID!");
  91. App::redirect($redirect, $msg);
  92. return;
  93. }
  94. $db = DB::getDB();
  95. Lib::loadClass('ProcesLogDao');
  96. $procesLogDao = new ProcesLogDao($db);
  97. $modelLog = $procesLogDao->get_by_id($log_id);
  98. if (!$modelLog) {
  99. App::add_error("Error Log [$log_id] not exists!");
  100. App::redirect($redirect, $msg);
  101. return;
  102. }
  103. if ($modelLog->allow_next_step_wskaznik($next_wsk_id)) {
  104. if ($modelLog->go_to_next_step_wskaznik($next_wsk_id)) {
  105. // ok next step is set
  106. } else {
  107. App::add_error("Error at go to next step wsk!");
  108. }
  109. } else {
  110. App::add_error("Next step wsk is not allowed!");
  111. }
  112. App::redirect($redirect, $msg);
  113. }
  114. /**
  115. * @param str $_GET['task']
  116. * @param int $_GET['_log_id']
  117. */
  118. function fun_PROCES_LOG_QUIT() {
  119. // TODO: quit proces only if has no next steps and has nothing to do
  120. $redirect = "?task=".App::get_task();
  121. $msg = '';
  122. $log_id = V::get('_log_id', 0, $_REQUEST, 'int');
  123. if ($log_id <= 0) {
  124. App::add_error("Wrong Log ID!");
  125. App::redirect($redirect, $msg);
  126. return;
  127. }
  128. $redirect .= "&_log_id=" . $log_id;
  129. $db = DB::getDB();
  130. Lib::loadClass('ProcesLogDao');
  131. $procesLogDao = new ProcesLogDao($db);
  132. $modelLog = $procesLogDao->get_by_id($log_id);
  133. if (!$modelLog) {
  134. App::add_error("Error Log [$log_id] not exists!");
  135. App::redirect($redirect, $msg);
  136. return;
  137. }
  138. $next_step = $modelLog->get_next_step();
  139. if ($modelLog->allow_end()) {
  140. if ($modelLog->go_to_end()) {
  141. App::add_msg("Zakończono proces");
  142. } else {
  143. App::add_error("Zakończenie procesu nie powiodło się");
  144. }
  145. } else {
  146. App::add_error("Quit is not allowed!");
  147. }
  148. App::redirect($redirect, $msg);
  149. }
  150. /**
  151. * Save current edit (ProcesLogEdit).
  152. * @param _log_id
  153. * @param _log_wsk_id
  154. * @param _id_key
  155. * @param _tbl_zasob_id - TODO: get from DB by _log_wsk_id ?
  156. * @param v-{$field} - form field values
  157. * @param f-{$field} - table filter values
  158. * @param f-_order_by
  159. * @param f-_order_desc
  160. * @param f-_offset
  161. * @param f-_limit
  162. * @param _action - what to do - search for rows, save edit form
  163. */
  164. function fun_PROCES_STEP_SAVE() {
  165. DEBUG_S(1, "POST:", $_POST, __FILE__, __FUNCTION__, __LINE__);
  166. $log_id = V::get('_log_id', 0, $_REQUEST, 'int');
  167. if ($log_id <= 0) {
  168. echo '<p style="err">' . "Error: Proces log " . $log_id . " not exists!" . '</p>';
  169. return;
  170. }
  171. $db = DB::getDB();
  172. Lib::loadClass('ProcesLogDao');
  173. $procesLogDao = new ProcesLogDao($db);
  174. $modelLog = $procesLogDao->get_by_id($log_id);
  175. DEBUG_S(1, "Log($log_id):", $modelLog, __FILE__, __FUNCTION__, __LINE__);
  176. if (!$procesLogDao->check_access($modelLog, User::getID(), User::getGroupsIds())) {
  177. echo '<p style="err">' . "Error: Brak dostępu!" . '</p>';
  178. return;
  179. }
  180. $current_edit = $modelLog->get_current_edit();
  181. if (!$current_edit) {
  182. echo '<p style="err">' . "Error: Proces log current_edit not set!" . '</p>';
  183. return;
  184. }
  185. // save filters:
  186. $current_edit->set_filters_from_request();
  187. $current_edit->set_values_from_request();
  188. // set _id_key if isset
  189. $_id_key = V::get('_id_key', 0, $_REQUEST, 'int');
  190. if ($_id_key) {
  191. $current_edit->set_id_key($_id_key);
  192. }
  193. // execute action
  194. $_action = V::get('_action', '', $_REQUEST);
  195. switch ($_action) {
  196. case 'edit_back':
  197. // back to table view - remove _id_key
  198. $current_edit->set_id_key(0);
  199. break;
  200. case 'save_edit':
  201. // _save_row = Zapisz
  202. // TODO: require _id_key
  203. $rowDao = $current_edit->action_save_edit();
  204. if ($rowDao) {
  205. // TODO: fetch save arrors from $rowDao or $current_edit->action_save_edit()
  206. $modelLog->set('ID_STEP_WSKAZNIK', $current_edit->get_log_wsk_id());
  207. $modelLog->set('A_UPDATE_ZASOB_ID', $current_edit->get_tbl_zasob_id());
  208. //$modelLog->set('ID_KEY', $current_edit->get_id_key());
  209. $modelLog->set('ID_KEY', $rowDao->get_saved_id());
  210. $modelLog->set('A_UPDATE_HIST_ID', $rowDao->get_saved_hist_id());
  211. // TODO: save ID_STEP_WSKAZNIK, ID_KEY, A_UPDATE_ZASOB_ID, A_UPDATE_HIST_ID
  212. $saved = $procesLogDao->save($modelLog);
  213. if (!$saved) {
  214. DEBUG_S(1, "Error save record", $procesLogDao, __FILE__, __FUNCTION__, __LINE__);
  215. } else {
  216. App::add_msg("Zmiany zapisano pomyślnie");
  217. }
  218. }
  219. break;
  220. case 'select_id_key':
  221. $rowModel = $current_edit->action_select_id_key();
  222. if ($rowModel) {
  223. // TODO: fetch save arrors from $rowModel or $current_edit->action_select_id_key()
  224. $modelLog->set('ID_STEP_WSKAZNIK', $current_edit->get_log_wsk_id());
  225. $modelLog->set('A_UPDATE_ZASOB_ID', $current_edit->get_tbl_zasob_id());
  226. //$modelLog->set('ID_KEY', $current_edit->get_id_key());
  227. $modelLog->set('ID_KEY', $rowModel->get('ID'));
  228. // TODO:?: save ID_STEP_WSKAZNIK, ID_KEY, A_UPDATE_ZASOB_ID, A_UPDATE_HIST_ID
  229. $saved = $procesLogDao->save($modelLog);
  230. if (!$saved) {
  231. DEBUG_S(1, "Error save record", $procesLogDao, __FILE__, __FUNCTION__, __LINE__);
  232. } else {
  233. App::add_msg("Zmiany zapisano pomyślnie");
  234. }
  235. }
  236. break;
  237. case 'create':// change state to view create form
  238. $current_edit->set_type('create');
  239. break;
  240. case 'save_create':// try to save new record
  241. break;
  242. default:
  243. }
  244. // save state
  245. $current_edit->save_state();
  246. DEBUG_S(1, "fun_PROCES_STEP_SAVE - modelLog:", $modelLog, __FILE__, __FUNCTION__, __LINE__);
  247. DEBUG_S(1, "fun_PROCES_STEP_SAVE - current_edit:", $current_edit, __FILE__, __FUNCTION__, __LINE__);
  248. }
  249. /**
  250. * TODO: fun_PROCES_STEP_SAVE but Ajax request.
  251. */
  252. function ajax_PROCES_STEP_SAVE() {
  253. }
  254. function task_PROCES_LOG() {
  255. $db = DB::getDB();
  256. Lib::loadClass('ProcesLogDao');
  257. Lib::loadClass('ProcesLogStepView');
  258. $procesLogDao = new ProcesLogDao($db);
  259. $view = new ProcesLogStepView();
  260. $log_id = V::get('_log_id', 0, $_REQUEST, 'int');
  261. if ($log_id <= 0) {
  262. echo '<p style="err">' . "Error: Proces log " . $log_id . " not exists!" . '</p>';
  263. return;
  264. }
  265. $modelLog = $procesLogDao->get_by_id($log_id);
  266. DEBUG_S(1, "Log:", $modelLog, __FILE__, __FUNCTION__, __LINE__);
  267. if (!$procesLogDao->check_access($modelLog, User::getID(), User::getGroupsIds())) {
  268. echo '<p style="err">' . "Error: Brak dostępu!" . '</p>';
  269. return;
  270. }
  271. $_SESSION['PROCES_LOG'] = $modelLog->get('ID');// TODO: some class method! - mv to function init?
  272. $view->set('proces_log', $modelLog);
  273. $proces_init = DB::get_by_id('CRM_PROCES', $modelLog->get('ID_PROCES_INIT'));
  274. $view->set('proces_init', $proces_init);
  275. if ($modelLog->get('ID_PROCES_INIT') != $modelLog->get('ID_STEP')) {
  276. $proces_step = DB::get_by_id('CRM_PROCES', $modelLog->get('ID_STEP'));
  277. } else {
  278. $proces_step = $proces_init;
  279. }
  280. $view->set('proces_step', $proces_step);
  281. $modelLog->is_step_finished();// TODO:??: if ?
  282. $wskazniki = ProcesHelper::get_wskazniki($proces_step->ID);
  283. $view->set('wskazniki', $wskazniki);
  284. // TODO: next steps - next wskaznik or next proces or END if last step in proces
  285. $current_edit = $modelLog->get_current_edit();
  286. //DEBUG_S(1, "current_edit filters 1:", array('_filters'=>$current_edit->_filters, '_nav_filters'=>$current_edit->_nav_filters), __FILE__, __FUNCTION__, __LINE__);
  287. if ($current_edit) {
  288. $current_edit->set_filters_from_request();
  289. //DEBUG_S(1, "current_edit filters 2:", array('_filters'=>$current_edit->_filters, '_nav_filters'=>$current_edit->_nav_filters), __FILE__, __FUNCTION__, __LINE__);
  290. }
  291. DEBUG_S(1, "current_edit", $current_edit, __FILE__, __FUNCTION__, __LINE__);
  292. $view->set('current_edit', $current_edit);
  293. //TODO: is needed? $next_edit = $procesLogDao->get_next_edit($modelLog, $wskazniki, $current_edit);
  294. $next_steps = array();
  295. DEBUG_S(1, "is_step_finished:", $modelLog->is_step_finished(), __FILE__, __FUNCTION__, __LINE__);
  296. if (!$current_edit) {
  297. if ($modelLog->get('TYPE') != 'END') {
  298. $next_processes = $modelLog->get_next_step();
  299. if (empty($next_processes)) {
  300. $next_steps ['quit']= App::link("zakończ", array('function_init'=>"fun_PROCES_LOG_QUIT", '_log_id'=>$log_id));
  301. } else {
  302. foreach ($next_processes as $k_proces_id => $v_desc) {
  303. $next_steps ['step_next']= App::link(htmlspecialchars($v_desc), array('function_init'=>"fun_PROCES_LOG_STEP_NEXT", '_log_id'=>$log_id, '_next_step_id'=>$k_proces_id));
  304. }
  305. }
  306. }
  307. } else {
  308. // TODO: next step wsk or proces if is finished
  309. if ($modelLog->is_step_finished()) {
  310. $next_processes = $modelLog->get_next_step();
  311. if (empty($next_processes)) {
  312. $next_steps []= App::link("zakończ", array('function_init'=>"fun_PROCES_LOG_QUIT", '_log_id'=>$log_id));
  313. } else {
  314. foreach ($next_processes as $k_proces_id => $v_desc) {
  315. $next_steps []= App::link(htmlspecialchars($v_desc), array('function_init'=>"fun_PROCES_LOG_STEP_NEXT", '_log_id'=>$log_id, '_next_step_id'=>$k_proces_id));
  316. }
  317. }
  318. }
  319. else {
  320. $next_step_wsk = $modelLog->get_next_step_wskaznik();
  321. DEBUG_S(1, "next_step_wsk:", $next_step_wsk, __FILE__, __FUNCTION__, __LINE__);
  322. if ($next_step_wsk) {
  323. $next_steps []= App::link($next_step_wsk->get_log_wsk_id(), array('function_init'=>"fun_PROCES_LOG_STEP_WSK_NEXT", '_log_id'=>$log_id, '_next_step_wsk_id'=>$next_step_wsk->get_log_wsk_id())) . ": " . $next_step_wsk->get_step_wsk_desc();
  324. } else {
  325. // TODO: BUG
  326. }
  327. }
  328. }
  329. $view->set('next_steps', $next_steps);
  330. Lib::loadClass('Tree');
  331. Tree::show_css();
  332. echo '<style type="text/css">' . "
  333. #proces-panel { margin:0 0 10px 0; padding:0 5px; background:#000; color:#fff; border-bottom:2px solid #969696; overflow:hidden; font-size:12px; }
  334. #proces-panel form { display:inline; }
  335. #proces-panel a { color:#fff; text-decoration:none; }
  336. #proces-panel a:hover { color:#fff; text-decoration:underline; }
  337. #proces-content { margin:0; padding:0 14px; background:#fff; color:#333; font-size:12px; }
  338. #proces-content em { color:#999; }
  339. #body_content {font-size:small;}
  340. #body_content .next-steps { padding:0; margin:8px 0; border-top:3px solid #e2e2e2; background:#eee; }
  341. #body_content .next-steps .header { padding:0 8px; background:#e2e2e2; color:#000; }
  342. #body_content .next-steps .cnt { padding:8px; }
  343. #body_content .proces-info { padding:0; margin:8px 0; border-top:3px solid #e2e2e2; background:#eee; }
  344. #body_content .proces-info .header { padding:0 8px; background:#e2e2e2; color:#000; }
  345. #body_content .proces-info .cnt { padding:8px; }
  346. #body_content .proces-info .cnt .tree-wrap { background:#fff; }
  347. #body_content .current-edit { overflow:auto; margin:6px 0; padding:8px; border-top:3px solid #e2e2e2; background:#E6E6F6; }
  348. .page-nav .strony span { margin:0 2px; }
  349. .page-nav .strony a { color:#1086FA; text-decoration:none; }
  350. .page-nav .strony a:hover { color:#CA1818; text-decoration:underline; }
  351. " . '</style>' . "\n";
  352. echo $view->render();
  353. }
  354. /**
  355. * @param int $_GET['_log_id']
  356. */
  357. function PROCES_LOG_HIST() {
  358. echo 'TODO: proces log HIST';
  359. }
  360. function task_PROCES_LOG__bup_20121113() {
  361. $id_proces_log = V::get('_log_id', '', $_REQUEST, 'int');
  362. if ($id_proces_log <= 0) {
  363. echo'<p class="err">'."Wrong ID".'</p>';
  364. return;
  365. }
  366. $plog = DB::get_by_id( 'CRM_PROCES_LOG', $id_proces_log );
  367. if (!$plog) {
  368. echo'<p class="err">'."Process log ".$id_proces_log." not exists".'</p>';
  369. return;
  370. }
  371. DEBUG_S(1, 'PROCES LOG('.$plog->ID.')', $plog, __FILE__, __FUNCTION__, __LINE__);
  372. $id_proces = ($plog->ID_STEP)? $plog->ID_STEP : $plog->ID_PROCES_INIT;
  373. // pathway
  374. echo'<p class="box box-green">'.App::link("MENU", "?task=CRM_MENU");
  375. echo' - ';
  376. echo "Proces <b>".$plog->ID_PROCES_INIT."</b> - krok id <b>".$plog->ID_STEP."</b>";
  377. echo'</p>';
  378. $p = DB::get_by_id( 'CRM_PROCES', $id_proces );
  379. if (!$p) {
  380. echo'<p class="err box box-red">'."Process ".$id_proces." not exists".'</p>';
  381. return;
  382. }
  383. DEBUG_S(1, 'PROCES('.$p->ID.')', $p, __FILE__, __FUNCTION__, __LINE__);
  384. die('.EOF L.' . __LINE__ );// TODO: dev
  385. $id_step = V::get('id_step', $p->ID, $_REQUEST, 'int');
  386. if (!$id_step) {
  387. $step = $p;
  388. } else {
  389. $step = DB::get_by_id( 'CRM_PROCES', $id_step );
  390. if (!$step) {
  391. echo'<p class="err box box-red">'."Process ".$id_step." not exists".'</p>';
  392. return;
  393. }
  394. DEBUG_S(1, 'PROCES STEP('.$step->ID.')', $step, __FILE__, __FUNCTION__, __LINE__);
  395. if ($step->ID != $plog->ID_STEP) {
  396. //TODO: check if $step is under $id_proces
  397. if ($step->PARENT_ID != $plog->ID_STEP) {
  398. echo'<p class="err box box-red">'."Blad krok ".$step->ID." nie jest nastepnym krokiem po ".$plog->ID_STEP.'</p>';
  399. return;
  400. }
  401. $sql_obj = new stdClass();
  402. $sql_obj->ID = $plog->ID;
  403. $sql_obj->ID_PROCES_INIT = $plog->ID_PROCES_INIT;
  404. $sql_obj->TYPE = 'PROCES_STEP';
  405. $sql_obj->ID_STEP = $step->ID;
  406. //TODO: $sql_obj->STEP_ROLE_ID = $step-> wskazniki type STANOWSIKO
  407. // lub ProcesHelper::get_allowed_role_id( $id_proces ) - search for wskaznik type STANOWISKO
  408. // - jesli nie istnieje to szukaj z parent az znajdziesz odpowiednie wskazniki
  409. $ret = DB::UPDATE_OBJ( 'CRM_PROCES_LOG', $sql_obj );
  410. // TODO: return codes @see DB::UPDATE_OBJ
  411. if ($ret != 2) {
  412. echo'<p class="err">'."Nie udalo sie rozpoczac kroku ".$step->ID." procesu ".$plog->ID_PROCES_INIT."".'</p>';
  413. DEBUG_S(5, 'DB::error', DB::error());
  414. } else {
  415. echo'<p class="ok">'."Rozpoczeto wykonywanie kroku ".$step->ID." procesu ".$plog->ID_PROCES_INIT." ";
  416. echo'<span class="cmnt-small">'.'(PROCES_LOG ID='.$plog->ID.')'.'</span>';
  417. echo'</p>';
  418. }
  419. }
  420. }
  421. echo'<div class="box box-silver">';
  422. $id_step_wskaznik = $plog->ID_STEP_WSKAZNIK;
  423. $form_zasob_id = 0;
  424. $wsk = ProcesHelper::get_wskazniki( $step->ID );
  425. $wsk_split = ProcesHelper::split_wskazniki_by_table( $wsk );
  426. // proces step info
  427. echo'<p>';
  428. echo'['.$step->ID.']';
  429. echo' <span class="red">'.$step->DESC.'</span>';
  430. if ($step->OPIS) echo'<br />'.$step->OPIS.'';
  431. echo'</p>';
  432. // TODO: find current
  433. if (empty($wsk)) {
  434. echo'<p>'."Nie ma nic do zrobnienia w tym kroku.".'</p>';
  435. } else {
  436. foreach ($wsk as $w) {
  437. if ($id_step_wskaznik == 0) {
  438. if ($form_zasob_id == 0) {
  439. $form_zasob_id = $w->ID;
  440. }
  441. } else if ($id_step_wskaznik = $w->ID) {
  442. $form_zasob_id = $w->ID;
  443. } else {
  444. }
  445. }
  446. }
  447. // if not exists print next steps
  448. if (!empty($wsk)) {
  449. DEBUG_S(4, 'wskazniki', $wsk, __FILE__, __FUNCTION__, __LINE__);
  450. echo'<ul style="margin:0 0 0 16px;color:green">';
  451. $wsk_cnt = count( $wsk );
  452. foreach ($wsk as $w) {
  453. echo'<li'.((--$wsk_cnt)? '' : ' class="last"').'>';
  454. echo'<p>';
  455. //echo ' ('.$w->SORT_PRIO.')';
  456. echo ' [ ';
  457. echo ' '.$w->ID;
  458. echo ' <i style="color:#111;">'.$w->CP_PYTANIE.'</i>';
  459. echo ' <b>'.$w->TYPE.'</b>';
  460. echo ' '.$w->DESC;
  461. echo ' ]';
  462. // if ($tree->get_param('editable')) echo App::link("Z-", "?function_INIT=CRM_DEL_CRM_WSKAZNIK&ID=".$w->CW_ID, array('title'=>'Edytuj', 'class'=>'btn-p5'));
  463. echo ' <span class="silver">'.$w->OPIS.'</span>';
  464. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">';print_r($w);echo'</pre>';
  465. if ($show_form) $zasoby_id[ $w->TYPE ] [$w->ID]= $w->CW_ID;
  466. $w->_parents = TreeHelper::get_all_parents( 'CRM_LISTA_ZASOBOW', $w->PARENT_ID );
  467. $w_parents_out = array();
  468. foreach ($w->_parents as $w_p_id => $w_p) {
  469. $w_parents_out []= '[<b>'.$w_p->ID.'</b> '.$w_p->TYPE.' '.$w_p->DESC.']';
  470. }//end foreach
  471. echo'<br /><span style="color:#555;font-size:11px;">'.implode(' / ', $w_parents_out).'</span>';
  472. echo'</p>';
  473. echo'</li>';
  474. }//end foreach
  475. echo'</ul>';
  476. // search for KOMORKA -> TABELA -> DATABASE_MYSQL/MSSQL BAZA_DANYH
  477. $need_db_tbl = array();
  478. $need_db_cnf = array();
  479. $db_types = array('DATABASE_MYSQL', 'DATABASE_MSSQL', 'BAZA_DANYCH');
  480. foreach ($wsk as $w) {
  481. if ($w->TYPE != 'KOMORKA') {
  482. continue;
  483. }
  484. $tbl_id = 0;
  485. foreach ($w->_parents as $pw) {
  486. if ($pw->TYPE == 'TABELA') {
  487. $w->_tabela = $pw->DESC;
  488. $tbl_id = $pw->ID;
  489. } else if (in_array($pw->TYPE, $db_types)) {
  490. $w->_db_zasob_id = $pw->ID;
  491. $w->_db_name = $pw->DESC;
  492. $need_db_cnf [$pw->ID] = array();
  493. $need_db_tbl [$pw->ID] [$tbl_id] [$w->ID] = $w->DESC;
  494. }
  495. }//end foreach
  496. }//end foreach
  497. DEBUG_S(4, 'need_db_cnf', $need_db_cnf, __FILE__, __FUNCTION__, __LINE__);
  498. $db_cnf = array();
  499. foreach ($need_db_cnf as $cnf_id => $cnf) {
  500. $cnf = Config::getZasobConf( $cnf_id );
  501. if (!$cnf) {
  502. echo'<p class="err">'."Brak konfiguracji dla zasobu <b>$cnf_id</b>".'</p>';
  503. } else {
  504. $db = DB::getDB( $cnf_id );
  505. if ($db->get_errors()) {
  506. echo'<p class="err">'."Wystapily bledy podczas polaczenia z baza danych (zasob $cnf_id):";
  507. echo '<br />'.implode('<br />', $db->get_errors());
  508. echo'</p>';
  509. } else {
  510. $db_cnf[$cnf_id] = $db;
  511. }
  512. }
  513. }//end foreach
  514. DEBUG_S(4, 'db_cnf', $db_cnf, __FILE__, __FUNCTION__, __LINE__);
  515. DEBUG_S(4, 'need_db_tbl', $need_db_tbl, __FILE__, __FUNCTION__, __LINE__);
  516. foreach ($need_db_tbl as $k_db_id => $v_tables) {
  517. foreach ($v_tables as $k_tbl_id => $v_fields) {
  518. $sql_fields = array();
  519. foreach ($v_fields as $k_field_id => $v_field_name) {
  520. $sql_fields []= $v_field_name;
  521. }//end foreach
  522. $r_table = DB::get_by_id( 'CRM_LISTA_ZASOBOW', $k_tbl_id );
  523. $sql_table = $r_table->DESC;
  524. $db = $db_cnf[ $k_db_id ];
  525. if ($db) {
  526. $sql = "select ".implode(',', $sql_fields)."
  527. from `".$sql_table."`
  528. limit 10
  529. ";
  530. $res = $db->query( $sql );
  531. $rows = array();
  532. while ($r = $db->fetch( $res )) {
  533. $rows []= $r;
  534. }
  535. DEBUG_S(4, 'rows ('.count($rows).')', $rows);
  536. }
  537. }//end foreach
  538. }//end foreach
  539. DEBUG_S(4, 'wskazniki', $wsk, __FILE__, __FUNCTION__, __LINE__);
  540. }
  541. echo'</div>';//box-silver
  542. // next steps
  543. echo'<div class="box box-blue">';
  544. $next_steps = TreeHelper::get_childrens( 'CRM_PROCES', $step->ID );
  545. if (empty($next_steps)) {
  546. echo'<p>'."Koniec procesu".'</p>';
  547. // TODO: zakoncz link
  548. } else {
  549. echo'<p class="blue">'."Wybierz nastepny krok:".'</p>';
  550. echo'<ul style="font-family: monospace;">';
  551. foreach ($next_steps as $r) {
  552. echo'<li>';
  553. echo App::link("<b>[".$r->ID."]</b>", "?&task=PROCES_LOG&id_proces_log=".$plog->ID."&id_step=".$r->ID, array('ico_after_text'=>'next'));
  554. //echo ' '.$r->ID;
  555. //echo ' <b>'.$r->TYPE.'</b>';
  556. echo ' <b class="red">'.$r->DESC.'</b>';
  557. echo ' <span class="cmnt">'.$r->OPIS.'</span>';
  558. echo'</li>';
  559. //TODO: a href next
  560. }//end foreach
  561. echo'</ul>';
  562. }
  563. echo'</div>';
  564. echo'<hr />';
  565. $tbl = 'CRM_PROCES';
  566. // show proces
  567. $tree = new Tree( $tbl );
  568. $clbk = 'tree_callback__show_item_from_'.$tbl;
  569. $tree->set_param('show_item_callback', $clbk);
  570. $tree->set_param('rozwin', (!$_SESSION['ZWIN_DRZEWO']));
  571. $tree->set_param('editable', false);
  572. $tree->set_param('show_form_at_item', $id_step);
  573. $tree->set_param('rozwin_proces', true);
  574. $tree->showSubTree( $p->ID );
  575. }
  576. function task_CRM_MENU() {
  577. $user_menu = array();
  578. $db = DB::getDB();
  579. $sql = "select p.*
  580. from `CRM_PROCES` as p
  581. where p.`TYPE`='PROCES_INIT';
  582. ";
  583. $res = $db->query($sql);
  584. while ($r = $db->fetch($res)) {
  585. $user_menu[$r->ID] = $r;
  586. }
  587. $tree_params = array();
  588. $tree_params['show_proces_opis'] = false;
  589. $selected_stanowiska = V::get('z', array(), $_GET, 'array');
  590. $menu = array();
  591. $stanowiska = array();
  592. $stanowisko_proces_map = array();
  593. $sql = "select
  594. p.`ID`
  595. , p.`PARENT_ID`
  596. , p.`TYPE`
  597. , p.`DESC`
  598. , w.`ID` as w__ID
  599. , z.`ID` as z__ID
  600. , z.`TYPE` as z__TYPE
  601. , z.`DESC` as z__DESC
  602. , z.`OPIS` as z__OPIS
  603. from `CRM_PROCES` as p
  604. left join `CRM_WSKAZNIK` as w on(w.`ID_PROCES`=p.`ID`)
  605. left join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=w.`ID_ZASOB`)
  606. where
  607. p.`TYPE`='PROCES_INIT'
  608. -- TODO:?: and p.`A_STATUS` in('WAITING','NORMAL','MONITOR')
  609. and w.`A_STATUS` in('WAITING','NORMAL','MONITOR')
  610. -- and w.`ID_PRZYPADEK`=1
  611. and z.`TYPE`='STANOWISKO'
  612. ";
  613. $res = $db->query($sql);
  614. while ($r = $db->fetch($res)) {
  615. if (!array_key_exists($r->ID, $menu)) {
  616. $menu[$r->ID] = $r;
  617. $menu[$r->ID]->KTO = array();
  618. }
  619. $z = new stdClass();
  620. $z->ID = $r->z__ID;
  621. $z->TYPE = $r->z__TYPE;
  622. $z->DESC = $r->z__DESC;
  623. $z->OPIS = $r->z__OPIS;
  624. $stanowiska[ $r->z__ID ] = $z;
  625. $stanowisko_proces_map[$z->ID] []= $r->ID;
  626. $menu[$r->ID]->KTO [ $r->z__ID ]= $z;
  627. }
  628. {// test
  629. echo'<div class="box box-green tree-wrap" style="display:none">';
  630. echo'<ul>';
  631. foreach ($menu as $k_proces_id => $v_proces) {
  632. echo'<li>';
  633. echo'<span class="btn-box btn-box-red">'.$k_proces_id.'</span>';
  634. echo'<b class="red">'.$v_proces->DESC.'</b>';
  635. echo'<ul>';
  636. if (empty($v_proces->KTO)) {
  637. echo'<li>'.'<b class="red">'."TODO: brak przypisanego stanowiska!".'</b>'.'</li>';
  638. } else {
  639. foreach ($v_proces->KTO as $k_zasob_id => $v_zasob) {
  640. echo '<li>'.'<span class="btn-box btn-box-green">'.$v_zasob->ID.'</span><b class="green">'.$v_zasob->DESC.'</b>'.'</li>';
  641. }//end foreach
  642. }
  643. echo'</ul>';
  644. echo'</li>';
  645. }//end foreach
  646. echo'</ul>';
  647. echo'</div>';// .box-green
  648. }// test
  649. if (empty($stanowiska)) {
  650. echo'<p class="box box-red red">'."Error: brak przypisanych stanowisk do procesów (PROCES_INIT)!".'</p>';
  651. return;
  652. }
  653. echo'<form action="" method="get">';
  654. echo'<p>'."Wybierz stanowiska:".'</p>';
  655. echo'<input type="hidden" name="task" value="'.App::get_task().'" />';
  656. echo'<select name="'."z[]".'" size="5" multiple="multiple" style="width:600px;">';
  657. foreach ($stanowiska as $k_zasob_id => $v_zasob) {
  658. $sel = (in_array($k_zasob_id, $selected_stanowiska))? ' selected="selected"' : '';
  659. echo'<option value="'.$v_zasob->ID.'"'.$sel.'>'.$v_zasob->ID.': '.$v_zasob->DESC.'</option>';
  660. }//end foreach
  661. echo'</select>';
  662. if (!empty($selected_stanowiska)) {
  663. echo ' ';
  664. echo App::link("x", array('task'=>App::get_task()), array('ico'=>'del.png', 'title'=>"Usuń zaznaczenie"));
  665. echo ' ';
  666. }
  667. echo'<input type="submit" value="'."Pokaz menu".'" />';
  668. echo'</form>';
  669. $user_menu_tree_flat = array();
  670. if (!empty($selected_stanowiska)) {
  671. $show_procesy_id = array();
  672. foreach ($selected_stanowiska as $v_zasob_id) {
  673. foreach ($stanowisko_proces_map[$v_zasob_id] as $v_proces_id) {
  674. $show_procesy_id[$v_proces_id] = true;
  675. }//end foreach
  676. }//end foreach
  677. foreach ($show_procesy_id as $p_id => $v_bool) {
  678. if (array_key_exists($p_id, $menu)) {
  679. $user_menu_tree_flat [$menu[$p_id]->ID] = null;
  680. $user_menu_tree_flat [$menu[$p_id]->PARENT_ID] = null;
  681. }
  682. }
  683. } else {
  684. DEBUG_S(1,'user_menu',$user_menu, __FILE__, __FUNCTION__, __LINE__);
  685. foreach ($user_menu as $p_id => $p) {
  686. $user_menu_tree_flat [$p->ID] = null;
  687. $user_menu_tree_flat [$p->PARENT_ID] = null;
  688. }
  689. }
  690. function this_user_menu_tree_fetch_data(&$user_menu, $user_menu_tree_flat, $selected_stanowiska) {
  691. $sql_ids = array();
  692. $sql_ids = array_keys($user_menu_tree_flat);
  693. // add tree parent proces info
  694. if (!empty($sql_ids)) {
  695. $sql = "select * from `CRM_PROCES` as p where p.`ID` in (".implode(", ", $sql_ids)."); ";
  696. $res = DB::query( $sql );
  697. while ($r = DB::fetch( $res )) {
  698. $user_menu[$r->ID] = $r;
  699. }
  700. }
  701. // add data CRM_WSKAZNIK, KTO CO
  702. if (empty($sql_ids)) {
  703. return;
  704. }
  705. if (!empty($selected_stanowiska)) {
  706. return;
  707. }
  708. $sql_only_stanowiska = "";
  709. if (!empty($selected_stanowiska)) {
  710. //$sql_only_stanowiska = "and z.`ID` in(" . implode(",", $selected_stanowiska) . ")";
  711. }
  712. $sql = "select
  713. w.`ID` as w_ID
  714. , w.`ID_PROCES` as w_ID_PROCES
  715. , z.`ID`
  716. , z.`TYPE`
  717. , z.`DESC`
  718. , z.`OPIS`
  719. from `CRM_WSKAZNIK` as w
  720. left join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=w.`ID_ZASOB`)
  721. where
  722. w.`ID_PROCES` in (".implode(", ", $sql_ids).")
  723. and w.`A_STATUS` in('WAITING','NORMAL','MONITOR')
  724. and w.`ID_PRZYPADEK`=1
  725. and z.`TYPE`='STANOWISKO'
  726. " . $sql_only_stanowiska . "
  727. ";
  728. $res = DB::query( $sql );
  729. while ($r = DB::fetch( $res )) {
  730. $user_menu[$r->w_ID_PROCES]->KTO []= $r;
  731. }
  732. }
  733. $user_menu_tree_created = TreeHelper::build_tree_flat( 'CRM_PROCES', $user_menu_tree_flat );
  734. DEBUG_S(1,'user_menu_tree_flat',$user_menu_tree_flat, __FILE__, __FUNCTION__, __LINE__);
  735. $user_menu_tree = TreeHelper::get_tree_from_flat( $user_menu_tree_flat );
  736. DEBUG_S(1,'user_menu_tree',$user_menu_tree, __FILE__, __FUNCTION__, __LINE__);
  737. this_user_menu_tree_fetch_data($user_menu, $user_menu_tree_flat, $selected_stanowiska);
  738. DEBUG_S(1,'user_menu',$user_menu, __FILE__, __FUNCTION__, __LINE__);
  739. function this_print_user_menu_tree( $user_menu_tree, &$user_menu, $parent_id = null, $params = array() ) {
  740. $cls = ($parent_id === null)? ' class="user-menu-tree tree-wrap"' : '';
  741. if (empty($user_menu_tree)) {
  742. return;
  743. }
  744. echo'<ul'.$cls.'>';
  745. $list_total = count($user_menu_tree);
  746. foreach ($user_menu_tree as $k_id => $v_arr) {
  747. $is_last = (--$list_total)? false : true;
  748. $has_childrens = (empty($v_arr))? false : true;
  749. echo'<li '.(($is_last)? ' class="last"' : '').'>';
  750. if (array_key_exists($k_id, $user_menu)) {
  751. $p =& $user_menu[$k_id];
  752. $has_wsk = false;
  753. if ($p->TYPE == 'PROCES_INIT') {
  754. if (!empty($p->KTO)) {
  755. $has_wsk = true;
  756. }
  757. }
  758. echo '<dl'.(($has_childrens)? '' : ' class="has-no-children"').'>';
  759. echo '<dt>';
  760. if ($has_wsk) echo '<div class="has_wsk">';
  761. echo '<span class="item_id btn-box'.(($p->TYPE == 'PROCES_INIT')? ' btn-box-red' : '').'">'.$p->ID.'</span>';
  762. //todo do optymalizacji ze struktur
  763. if ($p->TYPE == 'PROCES_INIT') {
  764. $sql="select ID from CRM_PROCES where IF_TRUE_GOTO='".$p->ID."' ";
  765. $hh=DB::query($sql);
  766. while($rr=DB::fetch($hh)) {
  767. echo App::link('&lt;'.$rr->ID.'&nbsp;', array('task'=>"PROCES_VIEW", 'id_proces'=>$rr->ID));
  768. }
  769. }
  770. echo ' <span class="user-menu-'.$p->TYPE.'">'.$p->DESC.'</span> ';
  771. if ($p->TYPE == 'PROCES_INIT') {
  772. $js_onclick = "return confirm('Czy rozpoczac proces ".$p->ID."?')";
  773. echo App::link("Start", "?function_init=fun_PROCES_INIT&id_proces=".$k_id, array('class'=>'btn-p5', 'title'=>'Rozpocznij proces '.$k_id, 'onclick'=>$js_onclick));
  774. echo App::link("Przegladaj", "?task=PROCES_VIEW&id_proces=".$k_id, array('class'=>'btn-p5', 'title'=>'Przegladaj proces '.$k_id));
  775. echo App::link("Przegladaj (Lista)", "?task=PROCES_VIEW_LIST&id_proces=".$k_id, array('class'=>'btn-p5', 'title'=>"Przegladaj proces - widok listy {$k_id}"));
  776. //echo App::link_ajax("ajax", 'ajax_get_proces', array('id_proces'=>$k_id), array('class'=>'btn-p5', 'title'=>'Ajax test proces '.$k_id));
  777. //echo App::link("Graf", "index.php?MENU_INIT=GRAPH_VIEW_PROCES&id_proces={$k_id}", array('class'=>'btn-p5', 'title'=>"Przegladaj graf procesu {$k_id}"));
  778. if (true == V::get('show_proces_opis', '', $params)) {
  779. echo '<span class="more-desc">' . $p->OPIS . '</span>';
  780. }
  781. }
  782. if ($has_wsk) echo '</div>';// .has_wsk
  783. echo '</dt>';
  784. if ($has_wsk) {
  785. echo '<dd>';
  786. echo'<ul>';
  787. $list_kto_total = count($p->KTO);
  788. foreach ($p->KTO as $v_kto) {
  789. $is_last = (--$list_kto_total)? false : true;
  790. echo'<li '.(($is_last)? ' class="last"' : '').'>';
  791. echo '<span class="btn-box btn-box-green">'.$v_kto->ID.'</span>';
  792. echo ' <span class="green">'.'<b>'."$v_kto->DESC".'</b>'." $v_kto->OPIS".'</span>';
  793. echo'</li>';
  794. }//end foreach
  795. echo'</ul>';
  796. echo '</dd>';
  797. }
  798. echo '</dl>';
  799. } else {
  800. echo '<dl>';
  801. echo '<dt>';
  802. echo '<span class="btn-box">'.$k_id.'</span>';
  803. echo '</dt>';
  804. echo '</dl>';
  805. }
  806. if (!empty($v_arr)) {
  807. this_print_user_menu_tree( $v_arr, $user_menu, $k_id, $params );
  808. }
  809. echo'</li>';
  810. }//end foreach
  811. echo'</ul>';
  812. }
  813. $tree = new Tree('CRM_LISTA_ZASOBOW');
  814. $tree->show_css();
  815. echo '<p>' . "User menu:";
  816. //TODO: btn filter "opisy" pokaz/ukryj
  817. //$tree_params['show_proces_opis'] = false;
  818. echo '</p>';
  819. DEBUG_S(1,'user_menu',$user_menu, __FILE__, __FUNCTION__, __LINE__);
  820. if (!empty($user_menu_tree) && isset($user_menu_tree[0])) {
  821. this_print_user_menu_tree($user_menu_tree[0], $user_menu, null, $tree_params);
  822. }
  823. }
  824. // TODO: test
  825. function task_CRM_MENU_NEW() {
  826. $user_menu = array();
  827. $sql = "select p.*
  828. from `CRM_PROCES` as p
  829. where p.`TYPE`='PROCES_INIT';
  830. ";
  831. $res = DB::query( $sql );
  832. while ($r = DB::fetch( $res )) {
  833. $r->_type = 'menu';
  834. $user_menu[$r->ID] = $r;
  835. }
  836. if (empty($user_menu)) {
  837. echo'<p>'."Brak menu".'</p>';
  838. return;
  839. }
  840. $selected_stanowiska = V::get('z', array(), $_GET, 'array');
  841. $stanowiska = array();
  842. $stanowisko_proces_map = array();
  843. $sql = "select
  844. p.`ID`
  845. , p.`PARENT_ID`
  846. , p.`TYPE`
  847. , p.`DESC`
  848. , w.`ID` as w__ID
  849. , z.`ID` as z__ID
  850. , z.`TYPE` as z__TYPE
  851. , z.`DESC` as z__DESC
  852. , z.`OPIS` as z__OPIS
  853. from `CRM_PROCES` as p
  854. left join `CRM_WSKAZNIK` as w on(w.`ID_PROCES`=p.`ID`)
  855. left join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=w.`ID_ZASOB`)
  856. where
  857. p.`TYPE`='PROCES_INIT'
  858. and w.`A_STATUS` in('WAITING','NORMAL','MONITOR')
  859. and w.`ID_PRZYPADEK`=1
  860. and z.`TYPE`='STANOWISKO'
  861. ";
  862. $res = DB::query( $sql );
  863. while ($r = DB::fetch( $res )) {
  864. if (!array_key_exists($r->ID, $user_menu)) {
  865. $p = new stdClass();
  866. $p->ID = $r->ID;
  867. $p->PARENT_ID = $r->PARENT_ID;
  868. $p->TYPE = $r->TYPE;
  869. $p->DESC = $r->DESC;
  870. $p->_type = 'menu';
  871. $user_menu[$r->ID] = $p;
  872. $user_menu[$r->ID]->KTO = array();
  873. }
  874. $z = new stdClass();
  875. $z->ID = $r->z__ID;
  876. $z->TYPE = $r->z__TYPE;
  877. $z->DESC = $r->z__DESC;
  878. $z->OPIS = $r->z__OPIS;
  879. $stanowiska[ $r->z__ID ] = $z;
  880. $stanowisko_proces_map[$z->ID] []= $r->ID;
  881. $user_menu[$r->ID]->KTO [ $r->z__ID ]= $z;
  882. }
  883. // show only procesy for stanowisko
  884. if (!empty($selected_stanowiska)) {
  885. $show_procesy_id = array();
  886. foreach ($user_menu as $k_id => $v) {
  887. $show_procesy_id [$k_id] = false;
  888. }//end foreach
  889. foreach ($selected_stanowiska as $v_zasob_id) {
  890. foreach ($stanowisko_proces_map[$v_zasob_id] as $v_proces_id) {
  891. $show_procesy_id[$v_proces_id] = true;
  892. }//end foreach
  893. }//end foreach
  894. foreach ($show_procesy_id as $p_id => $v_bool) {
  895. if (array_key_exists($p_id, $user_menu)) {
  896. if (!$v_bool) {
  897. unset($user_menu[$p_id]);
  898. }
  899. }
  900. }
  901. }
  902. function tree_callback__show_item_from_CRM_PROCES_for_CRM_MENU( &$r, &$tree ) {
  903. echo'<dl>';
  904. if (isset($r->_type) && $r->_type == 'menu') {
  905. if ($r->TYPE == 'PROCES_INIT') {
  906. echo'<dt>';
  907. echo'<b class="item_id btn-box'.(($r->TYPE == 'PROCES_INIT')? ' btn-box-red' : '').'">'.$r->ID.'</b>';
  908. echo'<span class="desc">';
  909. echo'<b class="red">'.$r->DESC.'</b>';
  910. echo'</span>';
  911. echo' ';
  912. $js_onclick = "return confirm('Czy rozpoczac proces ".$r->ID."?')";
  913. echo App::link("Start", "?function_init=fun_PROCES_INIT&id_proces=".$r->ID, array('class'=>'btn-p5', 'title'=>'Rozpocznij proces '.$r->ID, 'onclick'=>$js_onclick));
  914. echo App::link("Przegladaj", "?task=PROCES_VIEW&id_proces=".$r->ID, array('class'=>'btn-p5', 'title'=>'Przegladaj proces '.$r->ID));
  915. //echo App::link_ajax("ajax", 'ajax_get_proces', array('id_proces'=>$k_id), array('class'=>'btn-p5', 'title'=>'Ajax test proces '.$k_id));
  916. echo'</dt>';
  917. if (!empty($r->KTO)) {
  918. echo'<dd>';
  919. echo'<ul>';
  920. $list_kto_total = count($r->KTO);
  921. foreach ($r->KTO as $v_kto) {
  922. echo'<li '.((--$list_kto_total)? '' : ' class="last"').'>';
  923. echo '<span class="btn-box btn-box-green">'.$v_kto->ID.'</span>';
  924. echo ' <span class="green">'.'<b>'."$v_kto->DESC".'</b>'." $v_kto->OPIS".'</span>';
  925. echo'</li>';
  926. }//end foreach
  927. echo'</ul>';
  928. echo'</dd>';
  929. }
  930. }
  931. }
  932. else {// parent item
  933. echo'<dt>';
  934. echo'<b class="item_id btn-box">'.$r->ID.'</b>';
  935. echo' <span class="silver">'.$r->DESC.'</span>';
  936. echo'</dt>';
  937. }
  938. echo'</dl>';
  939. }
  940. DEBUG_S(1,'user_menu',$user_menu, __FILE__, __FUNCTION__, __LINE__);
  941. if (empty($stanowiska)) {
  942. echo'<p class="box box-red red">'."Error: brak przypisanych stanowisk do procesów (PROCES_INIT)!".'</p>';
  943. return;
  944. }
  945. echo'<form action="" method="get">';
  946. echo'<p>'."Wybierz stanowiska:".'</p>';
  947. echo'<input type="hidden" name="task" value="'.App::get_task().'" />';
  948. echo'<select name="'."z[]".'" size="5" multiple="multiple">';
  949. foreach ($stanowiska as $k_zasob_id => $v_zasob) {
  950. $sel = (in_array($k_zasob_id, $selected_stanowiska))? ' selected="selected"' : '';
  951. echo'<option value="'.$v_zasob->ID.'"'.$sel.'>'.$v_zasob->ID.': '.$v_zasob->DESC.'</option>';
  952. }//end foreach
  953. echo'</select>';
  954. echo'<input type="submit" value="'."Pokaz menu".'" />';
  955. echo'</form>';
  956. echo'<p>'."User menu:".'</p>';
  957. $tbl = 'CRM_PROCES';
  958. $tree = new Tree( $tbl );
  959. $clbk = 'tree_callback__show_item_from_CRM_PROCES_for_CRM_MENU';
  960. $tree->set_param('show_item_callback', $clbk);
  961. $tree->set_param('rozwin', true);
  962. $tree->set_param('editable', false);
  963. $tree->set_param('rozwin_proces', true);
  964. $tree->showItems( $user_menu );
  965. }