superedit-AHMES_REKLAMACJE.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619
  1. <?php
  2. /**
  3. * @param $_GET['task']
  4. * @param $_GET['id_koresp']
  5. * @param $_GET['id_problem']
  6. *
  7. * if $_GET['task'] == 'create_problem'
  8. * @require $_GET['id_koresp']
  9. *
  10. * if $_GET['task'] == 'create_koresp_out'
  11. * @require $_GET['id_problem']
  12. *
  13. * @requires TYPESPECIALS:
  14. * 1613 TYPESPECIALS Powiązania tabel
  15. * 6703 TYPESPECIAL id koresp
  16. * 6704 (ALIAS DO 668)PARAM_OUT {ID}: {K_OD_KOGO} {K_TYP_KORESP} {K_TYP_RODZAJ}
  17. * 6705 (ALIAS DO 668) DANE ID
  18. * 6706 (ALIAS DO 654) DANE K_OD_KOGO
  19. * 6707 (ALIAS DO 660) DANE K_TYP_KORESP
  20. * 6708 (ALIAS DO 643) DANE K_TYP_RODZAJ
  21. * 6709 (ALIAS DO 6691) PARAM_IN Problems.ID_KORESP_IN
  22. * 6710 (ALIAS DO 6692) PARAM_IN Problems.ID_KORESP_OUT
  23. *
  24. * 6699 TYPESPECIAL Problems wyślij koresp.
  25. * 6700 PARAM_OUT Wyślij koresp.
  26. * 6701 (ALIAS DO 4020) DANE ID_PROBLEM
  27. * 6702 (ALIAS DO 6693) PARAM_IN ADD_KORESP_OUT_LINK in Problems
  28. *
  29. * 6695 TYPESPECIAL Koresp. dodaj problem link
  30. * 6696 PARAM_OUT Dodaj problem
  31. * 6697 (ALIAS DO 668) DANE ID_KORESP
  32. * 6698 (ALIAS DO 6694) PARAM_IN ADD_PROBLEM_LINK in Koresp
  33. *
  34. */
  35. function AHMES_REKLAMACJE() {
  36. Lib::loadClass('ProcesHelper');
  37. $tblProblemsId = ProcesHelper::getZasobTableID('PROBLEMS');
  38. $tblKorespId = ProcesHelper::getZasobTableID('IN7_DZIENNIK_KORESP');
  39. Lib::loadClass('ProcesHelper');
  40. $zasobObj = ProcesHelper::getZasobTableInfo($tblProblemsId);
  41. if (!$zasobObj) {
  42. echo '<div class="alert alert-danger">' . "Zasob TABELA ID={$tblProblemsId} nie istnieje" . '</div>';
  43. //echo UserActivity::showSimpleList();
  44. return;
  45. }
  46. $korespObj = ProcesHelper::getZasobTableInfo($tblKorespId);
  47. if (!$korespObj) {
  48. echo '<div class="alert alert-danger">' . "Zasob TABELA ID={$tblKorespId} nie istnieje" . '</div>';
  49. //echo UserActivity::showSimpleList();
  50. return;
  51. }
  52. //UserActivity::add($tblProblemsId);
  53. $userAcl = User::getAcl();
  54. $userAcl->fetchGroups();
  55. if (!$userAcl->hasTableAcl($zasobObj->ID)) {
  56. echo '<div class="alert alert-danger">' . "Brak uprawnień do tabeli ID={$zasobObj->ID}" . '</div>';
  57. //echo UserActivity::showSimpleList();
  58. return;
  59. }
  60. if (!$userAcl->hasTableAcl($korespObj->ID)) {
  61. echo '<div class="alert alert-danger">' . "Brak uprawnień do tabeli Korespondencja (ID={$korespObj->ID})" . '</div>';
  62. //echo UserActivity::showSimpleList();
  63. return;
  64. }
  65. $tblAcl = $userAcl->getTableAcl($zasobObj->ID);
  66. $korespAcl = $userAcl->getTableAcl($korespObj->ID);
  67. $forceTblAclInit = ('1' == V::get('_force', '', $_GET));
  68. $tblAcl->init($forceTblAclInit);
  69. $korespAcl->init($forceTblAclInit);
  70. $module = new Ahmes_Reklamacje($tblAcl, $korespAcl, $_GET);
  71. $module->run();
  72. }
  73. class Ahmes_Reklamacje {
  74. private $_args = null;
  75. private $_tbl = null;
  76. private $_acl = null;
  77. private $_zasobID = null;
  78. private $_dataSource = null;
  79. private $_htmlID = '';
  80. public function __construct($tblAcl, $korespAcl, $args) {
  81. $this->_args = $args;
  82. $this->_tbl = $tblAcl->getName();
  83. $this->_acl = $tblAcl;
  84. $this->_korespAcl = $korespAcl;
  85. $this->_zasobID = $tblAcl->getID();
  86. $this->_dataSource = $tblAcl->getDataSource();
  87. $this->_htmlID = 'Ahmes_Reklamacje';
  88. }
  89. public function run() {
  90. Lib::loadClass('SE_Layout');
  91. SE_Layout::menu();
  92. $task = V::get('task', '', $this->_args);
  93. switch ($task) {
  94. case 'create_problem':
  95. $id_koresp = V::get('id_koresp', '', $this->_args);
  96. if (!$id_koresp) {
  97. echo '<div class="alert alert-danger">' . "Brak numeru z dziennika pism!" . '</div>';
  98. } else {
  99. $this->taskCreateProblem($id_koresp);
  100. }
  101. break;
  102. case 'create_koresp_out':
  103. $id_problem = V::get('id_problem', '', $this->_args);
  104. if (!$id_problem) {
  105. echo '<div class="alert alert-danger">' . "Brak numeru z dziennika pism!" . '</div>';
  106. } else {
  107. $this->taskCreateKorespOut($id_problem);
  108. }
  109. break;
  110. default:
  111. echo '<div class="alert alert-danger">' . "Brak zadania do wykonania!" . '</div>';
  112. }
  113. }
  114. private function renderError($msg) {
  115. echo '<div class="alert alert-danger">' . $msg . '</div>';
  116. }
  117. private function getKoresp($id_koresp) {
  118. $db = DB::getDB();
  119. if (!$db) return false;
  120. $koresp = $db->get_by_id('IN7_DZIENNIK_KORESP', $id_koresp);
  121. return $koresp;
  122. }
  123. private function getProblem($id_problem) {
  124. $db = DB::getDB();
  125. if (!$db) return false;
  126. $problem = $db->get_by_id('PROBLEMS', $id_problem);
  127. return $problem;
  128. }
  129. private function checkKorespUsed($id_koresp) {
  130. $db = DB::getDB();
  131. if (!$db) return false;
  132. $sql = "select count(1) as cnt
  133. from `{$this->_tbl}` as p
  134. where p.`ID_KORESP_IN`='{$id_koresp}'
  135. ";
  136. $res = $db->query($sql);
  137. if ($r = $db->fetch($res)) {
  138. if ($r->cnt > 0) {
  139. return true;
  140. }
  141. }
  142. return false;
  143. }
  144. private function checkProblem($problem) {
  145. return true;
  146. }
  147. private function taskCreateProblem($id_koresp) {
  148. $koresp = $this->getKoresp($id_koresp);
  149. if (!$koresp) {
  150. $this->renderError("Brak dostępu do korespondecji lub korespondencja nie istnieje");
  151. return;
  152. }
  153. if ($this->checkKorespUsed($id_koresp)) {
  154. $this->renderError("Korespondecja została już przypisana do problemu");
  155. return;
  156. }
  157. if ('1' == V::get('frm_sent', '', $_POST)) {
  158. $frmSaved = $this->saveCreateProblemForm($koresp, $_POST);
  159. if ($frmSaved) return;
  160. }
  161. $this->renderCreateProblemForm($koresp);
  162. }
  163. public function saveCreateProblemForm($koresp, $args) {
  164. $DBG = ('1' == V::get('DBG', '', $_REQUEST));
  165. if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">TODO: save('.$koresp->ID.') (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($args);echo'</pre>';}
  166. if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">acl (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this->_acl);echo'</pre>';}
  167. $dbID = $this->_acl->getDB();
  168. $db = DB::getDB($dbID);
  169. if (!$db) return false;
  170. $tblName = $this->_acl->getName();
  171. $sqlObj = new stdClass();
  172. $fields = $this->_acl->getFields();
  173. if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">fields (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($fields);echo'</pre>';}
  174. foreach ($fields as $kID => $vField) {
  175. if (!$this->_acl->isAllowed($kID, 'C')) {
  176. continue;
  177. }
  178. if (array_key_exists("f{$kID}", $args)) {
  179. $sqlObj->{$vField['name']} = $args["f{$kID}"];
  180. if (empty($args["f{$kID}"]) && strlen($args["f{$kID}"]) == 0) {// fix bug in input type date and value="0000-00-00"
  181. $sqlObj->{$vField['name']} = $this->_acl->fixEmptyValueFromUser($kID);
  182. }
  183. }
  184. }
  185. if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;"> (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sqlObj);echo'</pre>';}
  186. $sqlObj->ID_KORESP_IN = $koresp->ID;
  187. $retID = $db->ADD_NEW_OBJ($tblName, $sqlObj);
  188. if ($retID > 0) {
  189. ?>
  190. <div class="alert alert-success">
  191. Utworzono pomyślnie rekord Nr <?php echo $retID; ?>
  192. </div>
  193. <?php
  194. return true;
  195. }
  196. ?>
  197. <div class="alert alert-danger">
  198. Wystąpił błąd podczas tworzenia rekordu
  199. <?php
  200. if ($db->has_errors()) {
  201. $outArr = array();
  202. $errorsSql = $db->get_errors();
  203. foreach ($errorsSql as $vErr) {
  204. if (substr($vErr, 0, 18) == 'SQL QUERY FAILED: ') {
  205. $vErr = substr($vErr, 18);
  206. // Duplicate entry '123456-1' for key 'P_NIP'
  207. if (substr($vErr, 0, 16) == 'Duplicate entry ') {
  208. }
  209. }
  210. $outArr[] = $vErr;
  211. }
  212. echo implode('<br>', $outArr);
  213. }
  214. ?>
  215. </div>
  216. <?php
  217. return false;
  218. }
  219. /*
  220. * @from TableAjax::sendAjaxCreate($args)
  221. */
  222. public function renderCreateProblemForm($koresp) {
  223. $DBG = ('1' == V::get('DBG', '', $_REQUEST));
  224. $cols = array();
  225. $forceFilterInit = array();
  226. foreach ($this->_args as $k => $v) {
  227. if (strlen($k) > 4 && substr($k, 0, 3) == 'ff_' && !empty($v)) {// force filter prefix
  228. $fldName = substr($k, 3);
  229. $forceFilterInit[$fldName] = $v;
  230. }
  231. }
  232. $forceFilterInit['data_nad_pism'] = $koresp->K_DATA_OTRZYMANEJ_KORESP;
  233. $forceFilterInit['data_wpl_pism'] = $koresp->K_DATA_OTRZYM_KORESP;
  234. $forceFilterInit['Osoba'] = $koresp->K_OD_KOGO;
  235. $forceFilterInit['ID_PROJECT'] = $koresp->ID_PROJECT;
  236. $fieldsList = $this->_acl->getFields();
  237. foreach ($fieldsList as $kID => $vCol) {
  238. $defaultValue = '';
  239. if ($vCol['name'] == 'ID') {
  240. unset($fieldsList[$kID]);
  241. continue;
  242. }
  243. if (!empty($forceFilterInit[$vCol['name']])) {
  244. $defaultValue = $forceFilterInit[$vCol['name']];
  245. }
  246. // TODO: read from session cache
  247. $cols[$kID] = V::get("f{$kID}", $defaultValue, $_POST);
  248. $fieldsList[$kID]['label'] = (!empty($vCol['label']))? $vCol['label'] : $vCol['name'];
  249. }
  250. $korespFldsList = $this->_korespAcl->getFields();
  251. $korespFldsList = array_filter($korespFldsList, function($fld) {
  252. $korespFldsName = array();
  253. $korespFldsName[] = 'ID';
  254. $korespFldsName[] = 'K_OD_KOGO';
  255. $korespFldsName[] = 'K_TYP_KORESP';
  256. $korespFldsName[] = 'K_TYP_RODZAJ';
  257. $korespFldsName[] = 'K_DATA_OTRZYMANEJ_KORESP';
  258. $korespFldsName[] = 'K_DATA_OTRZYM_KORESP';
  259. if (in_array($fld['name'], $korespFldsName)) {
  260. return true;
  261. }
  262. return false;
  263. });
  264. Lib::loadClass('SE_Layout');
  265. ?>
  266. <div class="container AjaxFrmHorizontalEdit">
  267. <form class="form-horizontal" action="" method="post">
  268. <input type="hidden" name="frm_sent" value="1">
  269. <fieldset>
  270. <legend>Dodaj nowy Problem/Reklamację na podstawie pisma nr <?php echo $koresp->ID; ?></legend>
  271. <blockquote>
  272. <?php foreach ($korespFldsList as $fldId => $vFld) : ?>
  273. <p><small><b><?php echo $vFld['label']; ?>: </b> <?php echo $koresp->{$vFld['name']}; ?></small></p>
  274. <?php endforeach; ?>
  275. </blockquote>
  276. <?php $tabindex = 0; foreach ($fieldsList as $kID => $vCol) : ?>
  277. <?php if ($this->_acl->isAllowed($kID, 'C')) : ?>
  278. <div class="form-group">
  279. <label class="col-sm-3 control-label" for="<?php echo "f{$kID}"; ?>"><?php echo $vCol['label']; ?>
  280. <i class="glyphicon glyphicon-info-sign frm-help" data-toggle="popover" data-trigger="hover" title="" data-content="<?php echo htmlspecialchars($vCol['opis']); ?>" data-original-title="<?php echo "[{$kID}] {$vCol['name']}"; ?>"></i>
  281. <?php $perms = $this->_acl->getFieldPerms($kID); SE_Layout::hotKeyDBG($perms); ?>
  282. </label>
  283. <div class="col-sm-9">
  284. <?php
  285. $fieldParams = array('appendBack'=>true, 'tabindex'=>(++$tabindex), 'maxGrid'=>8);
  286. echo $this->_acl->showFormItem('C', $kID, "f{$kID}", $cols[$kID], $fieldParams);
  287. ?>
  288. </div>
  289. </div>
  290. <?php endif; ?>
  291. <?php endforeach; ?>
  292. <div class="form-group">
  293. <div class="col-sm-9 col-sm-offset-3">
  294. <button type="submit" class="btn btn-primary" tabindex="<?php echo (++$tabindex); ?>">Dodaj rekord</button>
  295. </div>
  296. </div>
  297. </fieldset>
  298. </form>
  299. </div>
  300. <script>
  301. jQuery(document).ready(function(){
  302. jQuery('textarea').autosize();
  303. jQuery('.frm-help').popover({trigger:'hover'});
  304. });
  305. </script>
  306. <?php
  307. }
  308. private function taskCreateKorespOut($id_problem) {
  309. $problem = $this->getProblem($id_problem);
  310. if (!$problem) {
  311. $this->renderError("Brak dostępu do problemu lub problem nie istnieje");
  312. return;
  313. }
  314. if (!$this->checkProblem($problem)) {
  315. $this->renderError("Problem nie może zostać użyty");
  316. return;
  317. }
  318. if ('1' == V::get('frm_sent', '', $_POST)) {
  319. $frmSaved = $this->saveCreateKorespOutForm($problem, $_POST);
  320. if ($frmSaved) return;
  321. }
  322. $this->renderCreateKorespOutForm($problem);
  323. }
  324. public function renderCreateKorespOutForm($problem) {
  325. $DBG = ('1' == V::get('DBG', '', $_REQUEST));
  326. $forceFilterInit = array();
  327. foreach ($this->_args as $k => $v) {
  328. if (strlen($k) > 4 && substr($k, 0, 3) == 'ff_' && !empty($v)) {// force filter prefix
  329. $fldName = substr($k, 3);
  330. $forceFilterInit[$fldName] = $v;
  331. }
  332. }
  333. $forceFilterInit['K_TYP_KORESP'] = 'OUT';
  334. $forceFilterInit['K_DATA_OTRZYMANEJ_KORESP'] = date('Y-m-d');
  335. $forceFilterInit['K_OD_KOGO'] = $problem->Osoba;
  336. $fieldsList = $this->_korespAcl->getFields();
  337. $fieldsList = array_filter($fieldsList, function($vCol) {
  338. return ($vCol['name'] != 'ID');
  339. });
  340. $fieldsList = array_map(function($vCol) {
  341. $vCol['label'] = (!empty($vCol['label']))? $vCol['label'] : $vCol['name'];
  342. return $vCol;
  343. }, $fieldsList);
  344. $cols = array();
  345. foreach ($fieldsList as $kID => $vCol) {
  346. $defaultValue = '';
  347. if (!empty($forceFilterInit[$vCol['name']])) {
  348. $defaultValue = $forceFilterInit[$vCol['name']];
  349. }
  350. // TODO: read from session cache
  351. $cols[$kID] = V::get("f{$kID}", $defaultValue, $_POST);
  352. }
  353. $problFldsList = $this->_acl->getFields();
  354. $problFldsList = array_filter($problFldsList, function($fld) {
  355. $problFldsName = array();
  356. $problFldsName[] = 'ID';
  357. $problFldsName[] = 'Osoba';
  358. $problFldsName[] = 'nazwa_jedn';
  359. $problFldsName[] = 'miejscowosc';
  360. $problFldsName[] = 'data_nad_pism';
  361. $problFldsName[] = 'data_wpl_pism';
  362. $problFldsName[] = 'data_real';
  363. $problFldsName[] = 'A_PROBLEM_DESC_HTML';
  364. if (in_array($fld['name'], $problFldsName)) {
  365. return true;
  366. }
  367. return false;
  368. });
  369. Lib::loadClass('SE_Layout');
  370. ?>
  371. <div class="container AjaxFrmHorizontalEdit">
  372. <form class="form-horizontal" action="" method="post">
  373. <input type="hidden" name="frm_sent" value="1">
  374. <fieldset>
  375. <legend>Dodaj korespondencję na podstawie problemu nr <?php echo $problem->ID; ?></legend>
  376. <blockquote>
  377. <?php foreach ($problFldsList as $fldId => $vFld) : ?>
  378. <p><small><b><?php echo $vFld['label']; ?>: </b> <?php echo $problem->{$vFld['name']}; ?></small></p>
  379. <?php endforeach; ?>
  380. </blockquote>
  381. <?php $tabindex = 0; foreach ($fieldsList as $kID => $vCol) : ?>
  382. <?php if ($this->_korespAcl->isAllowed($kID, 'C')) : ?>
  383. <div class="form-group">
  384. <label class="col-sm-3 control-label" for="<?php echo "f{$kID}"; ?>"><?php echo $vCol['label']; ?>
  385. <i class="glyphicon glyphicon-info-sign frm-help" data-toggle="popover" data-trigger="hover" title="" data-content="<?php echo htmlspecialchars($vCol['opis']); ?>" data-original-title="<?php echo "[{$kID}] {$vCol['name']}"; ?>"></i>
  386. <?php $perms = $this->_korespAcl->getFieldPerms($kID); SE_Layout::hotKeyDBG($perms); ?>
  387. </label>
  388. <div class="col-sm-9">
  389. <?php
  390. $fieldParams = array('appendBack'=>true, 'tabindex'=>(++$tabindex), 'maxGrid'=>8);
  391. echo $this->_korespAcl->showFormItem('C', $kID, "f{$kID}", $cols[$kID], $fieldParams);
  392. ?>
  393. </div>
  394. </div>
  395. <?php endif; ?>
  396. <?php endforeach; ?>
  397. <div class="form-group">
  398. <div class="col-sm-9 col-sm-offset-3">
  399. <button type="submit" class="btn btn-primary" tabindex="<?php echo (++$tabindex); ?>">Dodaj rekord</button>
  400. </div>
  401. </div>
  402. </fieldset>
  403. </form>
  404. </div>
  405. <script>
  406. jQuery(document).ready(function(){
  407. jQuery('textarea').autosize();
  408. jQuery('.frm-help').popover({trigger:'hover'});
  409. });
  410. </script>
  411. <?php
  412. }
  413. public function saveCreateKorespOutForm($problem, $args) {
  414. $DBG = ('1' == V::get('DBG', '', $_REQUEST));
  415. if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">TODO: save('.$problem->ID.') (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($args);echo'</pre>';}
  416. if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">acl (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this->_korespAcl);echo'</pre>';}
  417. $dbID = $this->_korespAcl->getDB();
  418. $db = DB::getDB($dbID);
  419. if (!$db) return false;
  420. $tblName = $this->_korespAcl->getName();
  421. $sqlObj = new stdClass();
  422. $fields = $this->_korespAcl->getFields();
  423. if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">fields (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($fields);echo'</pre>';}
  424. foreach ($fields as $kID => $vField) {
  425. if (!$this->_korespAcl->isAllowed($kID, 'C')) {
  426. continue;
  427. }
  428. if (array_key_exists("f{$kID}", $args)) {
  429. $sqlObj->{$vField['name']} = $args["f{$kID}"];
  430. if (empty($args["f{$kID}"]) && strlen($args["f{$kID}"]) == 0) {// fix bug in input type date and value="0000-00-00"
  431. $sqlObj->{$vField['name']} = $this->_korespAcl->fixEmptyValueFromUser($kID);
  432. }
  433. }
  434. }
  435. if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;"> (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sqlObj);echo'</pre>';}
  436. $retID = $db->ADD_NEW_OBJ($tblName, $sqlObj);
  437. if ($retID > 0) {
  438. ?>
  439. <div class="alert alert-success">
  440. Utworzono pomyślnie rekord Nr <?php echo $retID; ?>
  441. </div>
  442. <?php
  443. $dbProblemId = $this->_acl->getDB();
  444. $dbProblem = DB::getDB($dbProblemId);
  445. $tblProblemName = $this->_acl->getName();
  446. $sqlProblemObj = new stdClass();
  447. $sqlProblemObj->ID = $problem->ID;
  448. $sqlProblemObj->ID_KORESP_OUT = $retID;
  449. // TODO: ? $sqlProblemObj->data real "data realizacji" defautl today - date('Y-m-d')
  450. $affectes = $dbProblem->UPDATE_OBJ($tblProblemName, $sqlProblemObj);
  451. return true;
  452. }
  453. ?>
  454. <div class="alert alert-danger">
  455. Wystąpił błąd podczas tworzenia rekordu
  456. <?php
  457. if ($db->has_errors()) {
  458. $outArr = array();
  459. $errorsSql = $db->get_errors();
  460. foreach ($errorsSql as $vErr) {
  461. if (substr($vErr, 0, 18) == 'SQL QUERY FAILED: ') {
  462. $vErr = substr($vErr, 18);
  463. // Duplicate entry '123456-1' for key 'P_NIP'
  464. if (substr($vErr, 0, 16) == 'Duplicate entry ') {
  465. }
  466. }
  467. $outArr[] = $vErr;
  468. }
  469. echo implode('<br>', $outArr);
  470. }
  471. ?>
  472. </div>
  473. <?php
  474. return false;
  475. }
  476. public function ___sendAjaxCreateSave($args) {
  477. header("Content-type: application/json");
  478. $DBG = ('1' == V::get('DBG', '', $_REQUEST));
  479. sleep(1);// TODO: RMME DBG loading
  480. if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">TODO: save ID(' . $id . ') (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($args);echo'</pre>';}
  481. if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">acl (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this->_acl);echo'</pre>';}
  482. $dbID = $this->_acl->getDB();
  483. $db = DB::getDB($dbID);
  484. if (!$db) {
  485. header('HTTP/1.0 406 Not Acceptable');
  486. echo '{"type":"ERROR", "msg": "' . "Błąd połączenia z bazą danych!" . '"}';
  487. exit;
  488. }
  489. $tblName = $this->_acl->getName();
  490. $sqlObj = new stdClass();
  491. $fields = $this->_acl->getFields();
  492. if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">fields (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($fields);echo'</pre>';}
  493. foreach ($fields as $kID => $vField) {
  494. if (!$this->_acl->isAllowed($kID, 'C')) {
  495. continue;
  496. }
  497. if (array_key_exists("f{$kID}", $args)) {
  498. $sqlObj->{$vField['name']} = $args["f{$kID}"];
  499. if (empty($args["f{$kID}"]) && strlen($args["f{$kID}"]) == 0) {// fix bug in input type date and value="0000-00-00"
  500. $sqlObj->{$vField['name']} = $this->_acl->fixEmptyValueFromUser($kID);
  501. }
  502. }
  503. }
  504. if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;"> (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sqlObj);echo'</pre>';}
  505. $retID = $db->ADD_NEW_OBJ($tblName, $sqlObj);
  506. $retJson = new stdClass();
  507. $retJson->type = '';
  508. $retJson->msg = '';
  509. if ($retID > 0) {
  510. $retJson->type = 'SUCCESS';
  511. $retJson->msg = "Utworzono pomyślnie rekord: ID = {$retID}";
  512. $retJson->id = $retID;
  513. } else {
  514. header('HTTP/1.0 404 Not Found');
  515. $retJson->type = 'ERROR';
  516. $retJson->msg = "";
  517. if ($db->has_errors()) {
  518. $outArr = array();
  519. $errorsSql = $db->get_errors();
  520. foreach ($errorsSql as $vErr) {
  521. if (substr($vErr, 0, 18) == 'SQL QUERY FAILED: ') {
  522. $vErr = substr($vErr, 18);
  523. // Duplicate entry '123456-1' for key 'P_NIP'
  524. if (substr($vErr, 0, 16) == 'Duplicate entry ') {
  525. }
  526. }
  527. $outArr[] = $vErr;
  528. }
  529. $retJson->msg .= implode('<br>', $outArr);
  530. }
  531. }
  532. echo json_encode($retJson);
  533. exit;
  534. }
  535. }