superedit-USERS2_PRODUKT.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421
  1. <?php
  2. if (!defined('DS')) define('DS', DIRECTORY_SEPARATOR);
  3. if (!defined('APP_PATH_ROOT')) define('APP_PATH_ROOT', dirname(__FILE__));
  4. if (!defined('APP_PATH_WWW')) define('APP_PATH_WWW', dirname(__FILE__));
  5. if (!defined('APP_PATH_CONFIG')) define('APP_PATH_CONFIG', APP_PATH_ROOT . DS . 'config');
  6. function USERS2_PRODUKT() {
  7. global $thiss;
  8. require_once dirname(__FILE__) . '/' . 'se-lib' . '/' . 'Lib.php';
  9. Lib::loadClass('V');
  10. Lib::loadClass('DB');
  11. $params = array();
  12. $params['toolbar'] = array();
  13. $params['toolbar'] []= '<a href="' . "?MENU_INIT=USERS2_PRODUKT" . "&ARG1=TREE" . '" title="' . "Drzewo" . '">' . "TREE" . '</a>';
  14. $params['toolbar'] []= '<a href="' . "?MENU_INIT=USERS2_PRODUKT" . "&ARG1=SES_TREE" . '" title="' . "Drzewo us³ug" . '">' . "SERVICE_TREE_TEST" . '</a>';
  15. // init columns if not set
  16. if (empty($_SESSION['USERS2_PRODUKT' . "_COLUMN"])) {
  17. SEF('USERS_COLUMN_INIT2');
  18. USERS_COLUMN_INIT2('USERS2_PRODUKT', '', 'RWX');
  19. // desc
  20. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['DESC_TO_LANG']['P_ID']="Parent ID";
  21. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['DESC_TO_LANG']['A_STATUS']="";
  22. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['DESC_TO_LANG']['A_STATUS_INFO']="";
  23. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['DESC_TO_LANG']['P_NAME']="Nazwa produktu";
  24. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['DESC_TO_LANG']['S_OTHER_INFO']="";
  25. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['DESC_TO_LANG']['SES_SERVICE']="Us³uga";
  26. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['DESC_TO_LANG']['SES_SERVICE_PARENT']="Us³uga nadrzêdna";
  27. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['DESC_TO_LANG']['SES_OPTION_REQUIRED']="Czy opcja jest wymagana";
  28. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['DESC_TO_LANG']['SES_PARENT_REQUIRED']="Czy us³uga nadrzêdna jest wymagana";
  29. //$_SESSION['USERS2_PRODUKT' . "_COLUMN"]['DESC_TO_LANG']['P_S_PARAM1']="";// TODO: tech
  30. //$_SESSION['USERS2_PRODUKT' . "_COLUMN"]['DESC_TO_LANG']['P_S_PARAM2']="";// TODO: tech
  31. //$_SESSION['USERS2_PRODUKT' . "_COLUMN"]['DESC_TO_LANG']['P_S_LIMIT']="";// TODO: tech
  32. //$_SESSION['USERS2_PRODUKT' . "_COLUMN"]['DESC_TO_LANG']['P_S_LAN']="";// TODO: tech
  33. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['DESC_TO_LANG']['ID_COSTS_GROUPS']="";
  34. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['DESC_TO_LANG']['A_ADM_COMPANY']="";
  35. // perms
  36. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['PERMEDIT']['P_ID']="RWXC";
  37. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['PERMEDIT']['A_STATUS']="RWX";
  38. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['PERMEDIT']['A_STATUS_INFO']="RWX";
  39. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['PERMEDIT']['P_NAME']="RWXC";
  40. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['PERMEDIT']['S_OTHER_INFO']="RWXC";
  41. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['PERMEDIT']['SES_SERVICE']="RWXC";
  42. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['PERMEDIT']['SES_SERVICE_PARENT']="RWXC";
  43. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['PERMEDIT']['SES_OPTION_REQUIRED']="RWXC";
  44. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['PERMEDIT']['SES_PARENT_REQUIRED']="RWXC";
  45. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['PERMEDIT']['P_S_PARAM1']="RWXC";
  46. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['PERMEDIT']['P_S_PARAM2']="RWXC";
  47. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['PERMEDIT']['P_S_LIMIT']="RWXC";
  48. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['PERMEDIT']['P_S_LAN']="RWXC";
  49. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['PERMEDIT']['ID_COSTS_GROUPS']="RWXC";
  50. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['PERMEDIT']['A_ADM_COMPANY']="";
  51. // base functions
  52. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['FUNCPERMEDIT']['NEW_RECORD']="RWX";
  53. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['FUNCPERMEDIT']['TABLE_INSERTDB']="RWX";
  54. // additional functions
  55. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['FUNCPERMEDIT']['ID_COSTS_GROUPS']="RWX";
  56. $_SESSION['USERS2_PRODUKT' . "_COLUMN"]['TYPESPECIAL']['ID_COSTS_GROUPS']="ID_COSTS_GROUPS";
  57. }
  58. // router
  59. global $ARG1, $ARG1_VAL;
  60. switch ($ARG1) {
  61. case 'TREE':
  62. USERS2_PRODUKT_TREE();
  63. break;
  64. case 'SES_TREE':
  65. USERS2_PRODUKT_SES_TREE();
  66. break;
  67. default:
  68. WIEVTABLE( $params );
  69. echo '<link rel="stylesheet" type="text/css" href="stuff/smoothness-1.8.13/jquery-ui-1.8.13.custom.css">';
  70. //echo '<link rel="stylesheet" type="text/css" href="stuff/ui.dropdownchecklist.themeroller.css">';
  71. echo '<script type="text/javascript" src="stuff/jquery.js"></script>';
  72. echo '<script type="text/javascript" src="stuff/jquery-ui.custom.min.js"></script>';
  73. echo '<script type="text/javascript" src="stuff/ui.dropdownchecklist.min.js"></script>';
  74. echo '<script type="text/javascript">' . "
  75. jQuery(document).ready(function(){
  76. jQuery('.tbl-view thead form').on('submit', function(){
  77. //console.log(jQuery(this).serialize());
  78. //return false;
  79. });
  80. jQuery('.tbl-view thead select').each(function(ind, val){
  81. n=jQuery(this);
  82. var name=n.attr('name');
  83. if (name.substr(-2) != '[]') {
  84. n.attr('name', '' + name + '[]');
  85. }
  86. n.attr('multiple', 'true').dropdownchecklist();
  87. });
  88. });
  89. " . '</script>';
  90. }
  91. }
  92. function USERS2_PRODUKT_EDIT() {
  93. EDIT_TABLE_RECORD();
  94. }
  95. function USERS2_PRODUKT_HIST() {
  96. WIEVTABLE_HIST();
  97. }
  98. function USERS2_PRODUKT_TREE() {
  99. global $thiss;
  100. echo '<h1>';
  101. echo '<a href="' . "?MENU_INIT=USERS2_PRODUKT" . '">' . "PRODUKTY" . '</a>';
  102. echo " &raquo; ";
  103. echo "Tree";
  104. echo '</h1>';
  105. $items = array();
  106. $sql = "select *
  107. from `" . $thiss->DETECT_TABLE_NAME . "`
  108. where
  109. `A_STATUS` not in('DELETED')
  110. ";
  111. $res = DB::query( $sql );
  112. while ($r = DB::fetch( $res )) {
  113. $items [$r->ID] = $r;
  114. }
  115. Lib::loadClass('Tree');
  116. // build tree by P_ID - array or 0
  117. function Tree_Helper__create_tree_rec( $p_id, &$items ) {
  118. static $rec_ind;
  119. $rec_ind++;
  120. $ret = array();
  121. if (!array_key_exists($p_id, $items)) {
  122. return false;
  123. } else {
  124. $r = $items[$p_id];
  125. if (empty($r->sub)) {
  126. return false;
  127. }
  128. foreach ($r->sub as $k_id => $v) {
  129. $ret [$k_id] = Tree_Helper__create_tree_rec( $k_id, $items );
  130. }//end foreach
  131. return $ret;
  132. }
  133. }
  134. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">items: ';print_r($items);echo'</pre>';
  135. $items_tree = array();// tree root
  136. // --
  137. foreach ($items as $k_id => $r) {
  138. if ($r->P_ID == 0) {
  139. $items_tree [ $r->ID ] = array();
  140. if (array_key_exists($r->P_ID, $items)) {
  141. $items[$r->P_ID]->sub [$r->ID] = true;
  142. }
  143. } else {// array
  144. if (array_key_exists($r->P_ID, $items)) {
  145. $items[$r->P_ID]->sub [$r->ID] = true;
  146. }
  147. }
  148. }//end foreach
  149. ksort($items_tree);
  150. // set up has_childrens
  151. foreach ($items as $k_id => $r) {
  152. $items[$k_id]->has_childrens = !empty($r->sub);
  153. }//end foreach
  154. foreach ($items_tree as $k_id => $v_childrens) {
  155. if (array_key_exists($k_id, $items)) {
  156. $items_tree[$k_id] = Tree_Helper__create_tree_rec( $k_id, $items );
  157. }
  158. }
  159. function tree_callback__show_item_from_USERS2_PRODUKT( &$r, &$tree ) {
  160. $cls = array();
  161. $cls = (!empty($cls))? ' class="'.implode(' ', $cls).'"' : '';
  162. echo'<dl'.$cls.'>';
  163. echo'<dt>';
  164. $out_id = ($r->ID < 10)? '&nbsp;'.$r->ID.'' : $r->ID;
  165. echo'<b class="item_id btn-box">'.$out_id.'</b>';
  166. echo'<span class="desc">';
  167. //echo'<span class="btn-box">'.$r->A_STATUS.'</span>';
  168. echo' <b style="color:#333;">'.$r->P_NAME.'</b>';
  169. echo " " . $r->SES_SERVICE;
  170. echo " " . $r->SES_SERVICE_PARENT;
  171. echo " " . $r->SES_OPTION_REQUIRED;
  172. echo'</span>';
  173. echo'</dt>';
  174. echo'</dl>'."\n";
  175. }
  176. $tree = new Tree( 'USERS2_PRODUKT' );
  177. $tree->set_parent_id_col( 'P_ID' );
  178. $tree->set_param('show_item_callback', "tree_callback__show_item_from_USERS2_PRODUKT");
  179. $tree->set_param('ajax', "NIE");
  180. $tree->set_param('rozwin', true);
  181. echo '<style type="text/css">' . "
  182. body{font-family:arial;}
  183. .box{border:1px solid #999;padding:5px;margin:5px;}
  184. .box-center{border:1px solid #999;padding:5px;margin:5px auto;}
  185. .box-silver{border-color:#999;}
  186. .box-red{border-color:#f00;}
  187. .box-blue{border-color:#00f;}
  188. .box-green{border-color:#008000;}
  189. .box-hover-active{background:#fff;border-color:#999;}
  190. .box-hover-active:hover{background:#eee;border-color:#000;}
  191. .btn-box{margin:0 2px 0 0;padding:0 3px;background:#bbb;color:#fff;text-decoration:none;border:0;font-weight:bold;}
  192. " . '</style>';
  193. $tree->show_css();
  194. echo '<script type="text/javascript" src="stuff/jquery.js"></script>';
  195. $tree->show_js();
  196. echo "\n".'<div class="tree-wrap">'."\n";
  197. $tree->show_rec_by_tree($items_tree, $items);
  198. echo '</div>'."\n";
  199. }
  200. function USERS2_PRODUKT_SES_TREE() {
  201. global $thiss;
  202. echo '<h1>';
  203. echo '<a href="' . "?MENU_INIT=USERS2_PRODUKT" . '">' . "PRODUKTY" . '</a>';
  204. echo " &raquo; ";
  205. echo "SERVICE TREE";
  206. echo '</h1>';
  207. function tree_callback__show_item_from_USERS2_PRODUKT( &$r, &$tree ) {
  208. $cls = array();
  209. $cls = (!empty($cls))? ' class="'.implode(' ', $cls).'"' : '';
  210. echo'<dl'.$cls.'>';
  211. echo'<dt>';
  212. $out_id = ($r->ID < 10)? '&nbsp;'.$r->ID.'' : $r->ID;
  213. echo'<b class="item_id btn-box">'.$out_id.'</b>';
  214. echo'<span class="desc">';
  215. // select service
  216. if (!in_array($r->SES_SERVICE, array('GRUPA', 'SERWIS'))) {
  217. $js = "return Tree_USERS2_PRODUKT_select_service(this, '" . $r->ID . "', '" . $r->SES_SERVICE . "');";
  218. $checked = ($tree->get_param('selected_opcje_' . $r->SES_SERVICE))? ' checked="checked"' : '';
  219. echo '<input type="checkbox" name="' . "service_" . $r->ID . '" ' . $checked . ' onclick="' . $js . '">';
  220. }
  221. echo' <b style="color:#333;">'.$r->P_NAME.'</b>';
  222. if ($r->SES_SERVICE == 'OPCJA') {
  223. if ($r->SES_OPTION_REQUIRED == 'TAK') {
  224. echo "<code>OPCJA</code> wymagana";
  225. }
  226. echo " dla <code>" . $r->SES_SERVICE_PARENT . "</code>";
  227. } else {
  228. echo " <code>" . $r->SES_SERVICE . "</code>";
  229. if ($r->SES_SERVICE_PARENT) {
  230. echo " podrzêdna pod <code>" . $r->SES_SERVICE_PARENT . "</code>";
  231. }
  232. }
  233. echo'</span>';
  234. echo'</dt>';
  235. echo'</dl>'."\n";
  236. }
  237. $items = array();
  238. $items_opcje = array();
  239. $sql = "select *
  240. from `" . $thiss->DETECT_TABLE_NAME . "`
  241. where
  242. `A_STATUS` not in('DELETED')
  243. ";
  244. $res = DB::query( $sql );
  245. while ($r = DB::fetch( $res )) {
  246. if ($r->SES_SERVICE == 'OPCJA') {
  247. $items_opcje [$r->SES_SERVICE_PARENT] [$r->ID]= $r;
  248. } else {
  249. $items [$r->ID] = $r;
  250. }
  251. }
  252. Lib::loadClass('Tree');
  253. // build tree by P_ID - array or 0
  254. function Tree_Helper__create_tree_rec( $p_id, &$items ) {
  255. static $rec_ind;
  256. $rec_ind++;
  257. $ret = array();
  258. if (!array_key_exists($p_id, $items)) {
  259. return false;
  260. } else {
  261. $r = $items[$p_id];
  262. if (empty($r->sub)) {
  263. return false;
  264. }
  265. foreach ($r->sub as $k_id => $v) {
  266. $ret [$k_id] = Tree_Helper__create_tree_rec( $k_id, $items );
  267. }//end foreach
  268. return $ret;
  269. }
  270. }
  271. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">items: ';print_r($items);echo'</pre>';
  272. $items_tree = array();// tree root
  273. // --
  274. foreach ($items as $k_id => $r) {
  275. if ($r->P_ID == 0) {
  276. $items_tree [ $r->ID ] = array();
  277. if (array_key_exists($r->P_ID, $items)) {
  278. $items[$r->P_ID]->sub [$r->ID] = true;
  279. }
  280. } else {// array
  281. if (array_key_exists($r->P_ID, $items)) {
  282. $items[$r->P_ID]->sub [$r->ID] = true;
  283. }
  284. }
  285. }//end foreach
  286. ksort($items_tree);
  287. // set up has_childrens
  288. foreach ($items as $k_id => $r) {
  289. $items[$k_id]->has_childrens = !empty($r->sub);
  290. }//end foreach
  291. foreach ($items_tree as $k_id => $v_childrens) {
  292. if (array_key_exists($k_id, $items)) {
  293. $items_tree[$k_id] = Tree_Helper__create_tree_rec( $k_id, $items );
  294. }
  295. }
  296. $tree = new Tree( 'USERS2_PRODUKT' );
  297. $tree->set_parent_id_col( 'P_ID' );
  298. $tree->set_param('show_item_callback', "tree_callback__show_item_from_USERS2_PRODUKT");
  299. $tree->set_param('ajax', "NIE");
  300. $tree->set_param('rozwin', true);
  301. echo '<style type="text/css">' . "
  302. body{font-family:arial;}
  303. .box{border:1px solid #999;padding:5px;margin:5px;}
  304. .box-center{border:1px solid #999;padding:5px;margin:5px auto;}
  305. .box-silver{border-color:#999;}
  306. .box-red{border-color:#f00;}
  307. .box-blue{border-color:#00f;}
  308. .box-green{border-color:#008000;}
  309. .box-hover-active{background:#fff;border-color:#999;}
  310. .box-hover-active:hover{background:#eee;border-color:#000;}
  311. .btn-box{margin:0 2px 0 0;padding:0 3px;background:#bbb;color:#fff;text-decoration:none;border:0;font-weight:bold;}
  312. .tree-wrap code{color:#A020F0;}
  313. .tree-wrap button{margin:0; padding:0 6px;}
  314. .tree-wrap input {margin:0; padding:0;}
  315. #selected-service{margin:0; padding:2px; border:1px solid #CCC;}
  316. #selected-service .service-options{margin:2px; padding:2px; border:1px solid #999; background:#eee;}
  317. #selected-service ul{margin:3px;}
  318. " . '</style>';
  319. $tree->show_css();
  320. echo '<script type="text/javascript" src="stuff/jquery.js"></script>';
  321. echo '<script type="text/javascript">' . "
  322. function Tree_USERS2_PRODUKT_select_service(n, id, service){
  323. if (n.checked) {
  324. jQuery('#selected-service #service_' + service).show('medium');
  325. } else {
  326. jQuery('#selected-service #service_' + service).hide('medium');
  327. }
  328. //return false;
  329. }
  330. " . '</script>';
  331. $tree->show_js();
  332. echo '<table style="width:100%">';
  333. echo '<tr>';
  334. echo '<td style="width:50%; vertical-align:top;">';
  335. echo "\n".'<div class="tree-wrap">'."\n";
  336. echo '<b style="padding:0; font-family:monospace; font-size:14px;">' . "Us³ugi" . '</b>';
  337. $tree->show_rec_by_tree($items_tree, $items);
  338. echo '</div>'."\n";
  339. echo '</td>';
  340. echo '<td style="width:50%; vertical-align:top;">';
  341. echo '<div id="selected-service">';
  342. echo '<b style="padding:0 3px; font-family:monospace; font-size:14px;">' . "Dodatkowe opcje" . '</b>';
  343. foreach ($items_opcje as $k_service => $v_options_arr) {
  344. echo '<div id="' . "service_" . $k_service . '" style="display:none;" class="service-options">';
  345. echo '<b>' . $k_service . '</b>';
  346. echo '<ul>';
  347. foreach ($v_options_arr as $k_option_id => $v_option) {
  348. echo '<li>';
  349. $checked = (0)? ' checked="checked"' : '';
  350. if ($v_option->SES_OPTION_REQUIRED == 'TAK') {
  351. $checked = ' checked="checked" readonly="readonly"';
  352. }
  353. echo '<input type="checkbox" name="' . $k_service . '" value="' . $k_option_id . '" '.$checked.' />';
  354. echo " [" . $v_option->ID . "] " . $v_option->P_NAME;
  355. if ($v_option->SES_OPTION_REQUIRED == 'TAK') {
  356. echo ' <em>' . "(wymagana opcja)" . '</em>';
  357. }
  358. echo '</li>';
  359. }//end foreach
  360. echo '</ul>';
  361. echo '</div>';
  362. }//end foreach
  363. echo '</div>';
  364. echo '</td>';
  365. echo '</tr>';
  366. echo '</table>';
  367. }