proces_log.php 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098
  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. $db = DB::getDB();
  692. $sql_ids = array();
  693. $sql_ids = array_keys($user_menu_tree_flat);
  694. // add tree parent proces info
  695. if (!empty($sql_ids)) {
  696. $sql = "select * from `CRM_PROCES` as p where p.`ID` in (".implode(", ", $sql_ids)."); ";
  697. $res = $db->query($sql);
  698. while ($r = $db->fetch($res)) {
  699. $user_menu[$r->ID] = $r;
  700. }
  701. }
  702. // add data CRM_WSKAZNIK, KTO CO
  703. if (empty($sql_ids)) {
  704. return;
  705. }
  706. $sql_only_stanowiska = "";
  707. if (!empty($selected_stanowiska)) {
  708. $sql_only_stanowiska = "and z.`ID` in(" . implode(",", $selected_stanowiska) . ")";
  709. }
  710. $sql = "select
  711. w.`ID` as w_ID
  712. , w.`ID_PROCES` as w_ID_PROCES
  713. , z.`ID`
  714. , z.`TYPE`
  715. , z.`DESC`
  716. -- , z.`OPIS`
  717. , w.`OPIS_ZASOB` as `OPIS`
  718. from `CRM_WSKAZNIK` as w
  719. left join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=w.`ID_ZASOB`)
  720. where
  721. w.`ID_PROCES` in (".implode(", ", $sql_ids).")
  722. and w.`A_STATUS` in('WAITING','NORMAL','MONITOR')
  723. and z.`TYPE`='STANOWISKO'
  724. " . $sql_only_stanowiska . "
  725. ";
  726. $res = $db->query($sql);
  727. while ($r = $db->fetch($res)) {
  728. $user_menu[$r->w_ID_PROCES]->KTO []= $r;
  729. }
  730. }
  731. $user_menu_tree_created = TreeHelper::build_tree_flat( 'CRM_PROCES', $user_menu_tree_flat );
  732. DEBUG_S(1,'user_menu_tree_flat',$user_menu_tree_flat, __FILE__, __FUNCTION__, __LINE__);
  733. $user_menu_tree = TreeHelper::get_tree_from_flat( $user_menu_tree_flat );
  734. DEBUG_S(1,'user_menu_tree',$user_menu_tree, __FILE__, __FUNCTION__, __LINE__);
  735. this_user_menu_tree_fetch_data($user_menu, $user_menu_tree_flat, $selected_stanowiska);
  736. DEBUG_S(1,'user_menu',$user_menu, __FILE__, __FUNCTION__, __LINE__);
  737. function this_print_user_menu_tree( $user_menu_tree, &$user_menu, $parent_id = null, $params = array() ) {
  738. $cls = ($parent_id === null)? ' class="user-menu-tree tree-wrap"' : '';
  739. if (empty($user_menu_tree)) {
  740. return;
  741. }
  742. echo'<ul'.$cls.'>';
  743. $list_total = count($user_menu_tree);
  744. foreach ($user_menu_tree as $k_id => $v_arr) {
  745. $is_last = (--$list_total)? false : true;
  746. $has_childrens = (empty($v_arr))? false : true;
  747. echo'<li '.(($is_last)? ' class="last"' : '').'>';
  748. if (array_key_exists($k_id, $user_menu)) {
  749. $p =& $user_menu[$k_id];
  750. $has_wsk = false;
  751. if ($p->TYPE == 'PROCES_INIT') {
  752. if (!empty($p->KTO)) {
  753. $has_wsk = true;
  754. }
  755. }
  756. echo '<dl'.(($has_childrens)? '' : ' class="has-no-children"').'>';
  757. echo '<dt>';
  758. if ($has_wsk) echo '<div class="has_wsk">';
  759. echo '<span class="item_id btn-box'.(($p->TYPE == 'PROCES_INIT')? ' btn-box-red' : '').'">'.$p->ID.'</span>';
  760. //todo do optymalizacji ze struktur
  761. if ($p->TYPE == 'PROCES_INIT') {
  762. $sql="select ID from CRM_PROCES where IF_TRUE_GOTO='".$p->ID."' ";
  763. $hh=DB::query($sql);
  764. while($rr=DB::fetch($hh)) {
  765. echo App::link('&lt;'.$rr->ID.'&nbsp;', array('task'=>"PROCES_VIEW", 'id_proces'=>$rr->ID));
  766. }
  767. }
  768. echo ' <span class="user-menu-'.$p->TYPE.'">'.$p->DESC.'</span> ';
  769. if ($p->TYPE == 'PROCES_INIT') {
  770. $js_onclick = "return confirm('Czy rozpoczac proces ".$p->ID."?')";
  771. 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));
  772. echo App::link("Przegladaj", "?task=PROCES_VIEW&id_proces=".$k_id, array('class'=>'btn-p5', 'title'=>'Przegladaj proces '.$k_id));
  773. echo App::link("Przegladaj (Lista)", "?task=PROCES_VIEW_LIST&id_proces=".$k_id, array('class'=>'btn-p5', 'title'=>"Przegladaj proces - widok listy {$k_id}"));
  774. //echo App::link_ajax("ajax", 'ajax_get_proces', array('id_proces'=>$k_id), array('class'=>'btn-p5', 'title'=>'Ajax test proces '.$k_id));
  775. //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}"));
  776. if (true == V::get('show_proces_opis', '', $params)) {
  777. echo '<span class="more-desc">' . $p->OPIS . '</span>';
  778. }
  779. }
  780. if ($has_wsk) echo '</div>';// .has_wsk
  781. echo '</dt>';
  782. if ($has_wsk) {
  783. echo '<dd>';
  784. echo'<ul>';
  785. $list_kto_total = count($p->KTO);
  786. foreach ($p->KTO as $v_kto) {
  787. $is_last = (--$list_kto_total)? false : true;
  788. echo'<li '.(($is_last)? ' class="last"' : '').'>';
  789. echo '<span class="btn-box btn-box-green">'.$v_kto->ID.'</span>';
  790. echo ' <span class="green">'.'<b>'."$v_kto->DESC".'</b>'." $v_kto->OPIS".'</span>';
  791. echo'</li>';
  792. }//end foreach
  793. echo'</ul>';
  794. echo '</dd>';
  795. }
  796. echo '</dl>';
  797. } else {
  798. echo '<dl>';
  799. echo '<dt>';
  800. echo '<span class="btn-box">'.$k_id.'</span>';
  801. echo '</dt>';
  802. echo '</dl>';
  803. }
  804. if (!empty($v_arr)) {
  805. this_print_user_menu_tree( $v_arr, $user_menu, $k_id, $params );
  806. }
  807. echo'</li>';
  808. }//end foreach
  809. echo'</ul>';
  810. }
  811. $tree = new Tree('CRM_LISTA_ZASOBOW');
  812. $tree->show_css();
  813. echo '<p>' . "User menu:";
  814. //TODO: btn filter "opisy" pokaz/ukryj
  815. //$tree_params['show_proces_opis'] = false;
  816. echo '</p>';
  817. DEBUG_S(1,'user_menu',$user_menu, __FILE__, __FUNCTION__, __LINE__);
  818. if (!empty($user_menu_tree) && isset($user_menu_tree[0])) {
  819. this_print_user_menu_tree($user_menu_tree[0], $user_menu, null, $tree_params);
  820. }
  821. }
  822. // TODO: test
  823. function task_CRM_MENU_NEW() {
  824. $user_menu = array();
  825. $sql = "select p.*
  826. from `CRM_PROCES` as p
  827. where p.`TYPE`='PROCES_INIT';
  828. ";
  829. $res = DB::query( $sql );
  830. while ($r = DB::fetch( $res )) {
  831. $r->_type = 'menu';
  832. $user_menu[$r->ID] = $r;
  833. }
  834. if (empty($user_menu)) {
  835. echo'<p>'."Brak menu".'</p>';
  836. return;
  837. }
  838. $selected_stanowiska = V::get('z', array(), $_GET, 'array');
  839. $stanowiska = array();
  840. $stanowisko_proces_map = array();
  841. $sql = "select
  842. p.`ID`
  843. , p.`PARENT_ID`
  844. , p.`TYPE`
  845. , p.`DESC`
  846. , w.`ID` as w__ID
  847. , z.`ID` as z__ID
  848. , z.`TYPE` as z__TYPE
  849. , z.`DESC` as z__DESC
  850. , z.`OPIS` as z__OPIS
  851. from `CRM_PROCES` as p
  852. left join `CRM_WSKAZNIK` as w on(w.`ID_PROCES`=p.`ID`)
  853. left join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=w.`ID_ZASOB`)
  854. where
  855. p.`TYPE`='PROCES_INIT'
  856. and w.`A_STATUS` in('WAITING','NORMAL','MONITOR')
  857. and w.`ID_PRZYPADEK`=1
  858. and z.`TYPE`='STANOWISKO'
  859. ";
  860. $res = DB::query( $sql );
  861. while ($r = DB::fetch( $res )) {
  862. if (!array_key_exists($r->ID, $user_menu)) {
  863. $p = new stdClass();
  864. $p->ID = $r->ID;
  865. $p->PARENT_ID = $r->PARENT_ID;
  866. $p->TYPE = $r->TYPE;
  867. $p->DESC = $r->DESC;
  868. $p->_type = 'menu';
  869. $user_menu[$r->ID] = $p;
  870. $user_menu[$r->ID]->KTO = array();
  871. }
  872. $z = new stdClass();
  873. $z->ID = $r->z__ID;
  874. $z->TYPE = $r->z__TYPE;
  875. $z->DESC = $r->z__DESC;
  876. $z->OPIS = $r->z__OPIS;
  877. $stanowiska[ $r->z__ID ] = $z;
  878. $stanowisko_proces_map[$z->ID] []= $r->ID;
  879. $user_menu[$r->ID]->KTO [ $r->z__ID ]= $z;
  880. }
  881. // show only procesy for stanowisko
  882. if (!empty($selected_stanowiska)) {
  883. $show_procesy_id = array();
  884. foreach ($user_menu as $k_id => $v) {
  885. $show_procesy_id [$k_id] = false;
  886. }//end foreach
  887. foreach ($selected_stanowiska as $v_zasob_id) {
  888. foreach ($stanowisko_proces_map[$v_zasob_id] as $v_proces_id) {
  889. $show_procesy_id[$v_proces_id] = true;
  890. }//end foreach
  891. }//end foreach
  892. foreach ($show_procesy_id as $p_id => $v_bool) {
  893. if (array_key_exists($p_id, $user_menu)) {
  894. if (!$v_bool) {
  895. unset($user_menu[$p_id]);
  896. }
  897. }
  898. }
  899. }
  900. function tree_callback__show_item_from_CRM_PROCES_for_CRM_MENU( &$r, &$tree ) {
  901. echo'<dl>';
  902. if (isset($r->_type) && $r->_type == 'menu') {
  903. if ($r->TYPE == 'PROCES_INIT') {
  904. echo'<dt>';
  905. echo'<b class="item_id btn-box'.(($r->TYPE == 'PROCES_INIT')? ' btn-box-red' : '').'">'.$r->ID.'</b>';
  906. echo'<span class="desc">';
  907. echo'<b class="red">'.$r->DESC.'</b>';
  908. echo'</span>';
  909. echo' ';
  910. $js_onclick = "return confirm('Czy rozpoczac proces ".$r->ID."?')";
  911. 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));
  912. echo App::link("Przegladaj", "?task=PROCES_VIEW&id_proces=".$r->ID, array('class'=>'btn-p5', 'title'=>'Przegladaj proces '.$r->ID));
  913. //echo App::link_ajax("ajax", 'ajax_get_proces', array('id_proces'=>$k_id), array('class'=>'btn-p5', 'title'=>'Ajax test proces '.$k_id));
  914. echo'</dt>';
  915. if (!empty($r->KTO)) {
  916. echo'<dd>';
  917. echo'<ul>';
  918. $list_kto_total = count($r->KTO);
  919. foreach ($r->KTO as $v_kto) {
  920. echo'<li '.((--$list_kto_total)? '' : ' class="last"').'>';
  921. echo '<span class="btn-box btn-box-green">'.$v_kto->ID.'</span>';
  922. echo ' <span class="green">'.'<b>'."$v_kto->DESC".'</b>'." $v_kto->OPIS".'</span>';
  923. echo'</li>';
  924. }//end foreach
  925. echo'</ul>';
  926. echo'</dd>';
  927. }
  928. }
  929. }
  930. else {// parent item
  931. echo'<dt>';
  932. echo'<b class="item_id btn-box">'.$r->ID.'</b>';
  933. echo' <span class="silver">'.$r->DESC.'</span>';
  934. echo'</dt>';
  935. }
  936. echo'</dl>';
  937. }
  938. DEBUG_S(1,'user_menu',$user_menu, __FILE__, __FUNCTION__, __LINE__);
  939. if (empty($stanowiska)) {
  940. echo'<p class="box box-red red">'."Error: brak przypisanych stanowisk do procesów (PROCES_INIT)!".'</p>';
  941. return;
  942. }
  943. echo'<form action="" method="get">';
  944. echo'<p>'."Wybierz stanowiska:".'</p>';
  945. echo'<input type="hidden" name="task" value="'.App::get_task().'" />';
  946. echo'<select name="'."z[]".'" size="5" multiple="multiple">';
  947. foreach ($stanowiska as $k_zasob_id => $v_zasob) {
  948. $sel = (in_array($k_zasob_id, $selected_stanowiska))? ' selected="selected"' : '';
  949. echo'<option value="'.$v_zasob->ID.'"'.$sel.'>'.$v_zasob->ID.': '.$v_zasob->DESC.'</option>';
  950. }//end foreach
  951. echo'</select>';
  952. echo'<input type="submit" value="'."Pokaz menu".'" />';
  953. echo'</form>';
  954. echo'<p>'."User menu:".'</p>';
  955. $tbl = 'CRM_PROCES';
  956. $tree = new Tree( $tbl );
  957. $clbk = 'tree_callback__show_item_from_CRM_PROCES_for_CRM_MENU';
  958. $tree->set_param('show_item_callback', $clbk);
  959. $tree->set_param('rozwin', true);
  960. $tree->set_param('editable', false);
  961. $tree->set_param('rozwin_proces', true);
  962. $tree->showItems( $user_menu );
  963. }