PageRenderTime 69ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 1ms

/php/AjaxTableEditor.php

https://bitbucket.org/nyfer/realestateapp
PHP | 2972 lines | 2737 code | 132 blank | 103 comment | 605 complexity | db7ac00bf0d4f59d5840c892f33e570e MD5 | raw file

Large files files are truncated, but you can click here to view the full file

  1. <?php
  2. /*
  3. * Mysql Ajax Table Editor
  4. *
  5. * Copyright (c) 2008 Chris Kitchen <info@mysqlajaxtableeditor.com>
  6. * All rights reserved.
  7. *
  8. * See COPYING file for license information.
  9. *
  10. * Download the latest version from
  11. * http://www.mysqlajaxtableeditor.com
  12. */
  13. class AjaxTableEditor
  14. {
  15. var $action;
  16. var $retArr = array();
  17. var $warnings = array();
  18. var $html;
  19. var $numResults;
  20. var $inputIdPrefix;
  21. var $start;
  22. var $display;
  23. var $orderByColumn;
  24. var $ascOrDesc;
  25. var $searchString;
  26. var $selectClause;
  27. var $joinClause;
  28. var $whereClause;
  29. var $dbName;
  30. var $tableColumns = array();
  31. var $tableName;
  32. var $varPrefix;
  33. var $primaryKeyCol;
  34. var $userColumns = array();
  35. var $errorFun;
  36. var $permissions;
  37. var $tableTitle;
  38. var $valError;
  39. var $addRowTitle;
  40. var $editRowTitle;
  41. var $editMultTitle;
  42. var $viewRowTitle;
  43. var $showHideTitle;
  44. var $orderColTitle;
  45. var $searchType;
  46. var $numAdvSearches;
  47. var $opts;
  48. var $matchAll;
  49. var $advSearches = array();
  50. var $defNumAdvSearches;
  51. var $afterAddFun;
  52. var $afterEditFun;
  53. var $afterCopyFun;
  54. var $afterDeleteFun;
  55. var $extraOrderByInfo;
  56. var $information = array();
  57. var $userButtons = array();
  58. var $userIcons = array();
  59. var $tableInfo;
  60. var $oddRowColor;
  61. var $evenRowColor;
  62. var $userDefDisplay;
  63. var $displayNumInc;
  64. var $dbAndTable;
  65. var $maxDispNum;
  66. var $beginTime;
  67. var $viewQuery;
  68. var $recordInfo;
  69. var $replaceWithId;
  70. var $highlightHash;
  71. var $useHightlight;
  72. var $userActions = array();
  73. var $reqMarker;
  74. var $viewTableInfo;
  75. var $editTableInfo;
  76. var $addTableInfo;
  77. var $showHideTableInfo;
  78. var $addScreenFun;
  79. var $editScreenFun;
  80. var $viewScreenFun;
  81. var $tableScreenFun;
  82. var $showHideScreenFun;
  83. var $orderColScreenFun;
  84. var $valErrorStyles;
  85. var $noValErrorStyles;
  86. var $iconColPosition;
  87. var $mateUserId;
  88. var $pagePercent;
  89. var $pageRange;
  90. var $pageBegin;
  91. var $pageEnd;
  92. var $showAll;
  93. var $queryLineBreak;
  94. var $viewHtmlFun;
  95. var $handleHackingFun;
  96. var $removeIcons;
  97. var $langVars;
  98. var $iconTitle;
  99. var $sqlFilters;
  100. var $allowEditMult;
  101. var $defaultJsCalFormat;
  102. var $disableMultCbFun;
  103. var $filterSearches;
  104. var $filterColId;
  105. var $asColumnInfo;
  106. var $defaultUploadMaxSize;
  107. var $paginationLinks;
  108. function setDefaults()
  109. {
  110. $this->dbAndTable = !empty($this->dbName) ? $this->dbName.'.'.$this->tableName : $this->tableName;
  111. $this->warnings = array();
  112. $this->varPrefix = $this->primaryKeyCol.'-'.$this->tableName;
  113. $this->start = 0;
  114. $this->displayNum = isset($_SESSION[$this->varPrefix.'displayNum']) ? $_SESSION[$this->varPrefix.'displayNum'] : 100;
  115. $this->ascOrDesc = 'asc';
  116. $this->orderByColumn = $this->primaryKeyCol;
  117. $this->tableTitle = mb_convert_case(str_replace('_',' ',$this->tableName),MB_CASE_TITLE, "UTF-8");
  118. $this->valError = false;
  119. $this->addRowTitle = $this->langVars->ttlAddRow;
  120. $this->editRowTitle = $this->langVars->ttlEditRow;
  121. $this->editMultTitle = $this->langVars->ttlEditMult;
  122. $this->viewRowTitle = $this->langVars->ttlViewRow;
  123. $this->executeRowTitle = $this->langVars->ttlExecuteRow; //my add !
  124. $this->defNumAdvSearches = 3;
  125. $this->numAdvSearches = isset($_SESSION[$this->varPrefix.'numAdvSearches']) ? $_SESSION[$this->varPrefix.'numAdvSearches'] : $this->defNumAdvSearches;
  126. $this->opts = array('like' => $this->langVars->optLike, 'not like' => $this->langVars->optNotLike, '=' => $this->langVars->optEq, '<>' => $this->langVars->optNotEq, '>' => $this->langVars->optGreat, '<' => $this->langVars->optLess, '>=' => $this->langVars->optGreatEq, '<=' => $this->langVars->optLessEq);
  127. $this->searchType = isset($_SESSION[$this->varPrefix.'searchType']) ? $_SESSION[$this->varPrefix.'searchType'] : 'quick';
  128. $this->matchAll = isset($_SESSION[$this->varPrefix.'matchAll']) ? $_SESSION[$this->varPrefix.'matchAll'] : true;
  129. $this->advSearches = isset($_SESSION[$this->varPrefix.'advSearches']) ? $_SESSION[$this->varPrefix.'advSearches'] : array();
  130. $this->filterSearches = isset($_SESSION[$this->varPrefix.'filterSearches']) ? $_SESSION[$this->varPrefix.'filterSearches'] : array();
  131. $this->oddRowColor = '#FFFFFF';
  132. $this->evenRowColor = '#EDEDED';
  133. $this->userDefDisplay = false;
  134. $this->displayNumInc = 5;
  135. $this->maxDispNum = 200;
  136. $this->inputIdPrefix = '';
  137. $this->viewQuery = false;
  138. $this->recordInfo = true;
  139. $this->replaceWithId = '#primaryColValue#';
  140. $this->highlightHash = 'background-color: #FFF547';
  141. $this->useHighlight = true;
  142. $this->userActions = array();
  143. $this->reqMarker = '*';
  144. $this->viewTableInfo = 'class="mateTable"';
  145. $this->editTableInfo = 'class="mateTable"';
  146. $this->addTableInfo = 'class="mateTable"';
  147. $this->showHideTableInfo = 'class="mateTable"';
  148. $this->valErrorStyles = 'color: #f90d0d;';
  149. $this->noValErrorStyles = 'color: #333;';
  150. $this->iconColPosition = 'last';
  151. $this->showHideTitle = $this->langVars->ttlShowHide;
  152. $this->orderColTitle = $this->langVars->ttlOrderCols;
  153. $this->pagePercent = 20;
  154. $this->pageRange = 10;
  155. $this->pageBegin = 5;
  156. $this->pageEnd = 5;
  157. $this->showAll = 200;
  158. $this->queryLineBreak = "\n";
  159. $this->allowEditMult = true;
  160. $this->defaultJsCalFormat = '%d %B %Y';
  161. $this->defaultUploadMaxSize = 47185920;
  162. $this->paginationLinks = false;
  163. //$this->$userIcons = array('format_fun' => array(&$this,'disablelinks'));
  164. }
  165. function setConfig($var,$val)
  166. {
  167. if($var == 'varPrefix')
  168. {
  169. // If the variable prefix changed, update variables with session values
  170. $varPrefix = $val;
  171. foreach($_SESSION as $sessKey => $sessValue)
  172. {
  173. if(substr($sessKey,0,strlen($varPrefix)) == $varPrefix)
  174. {
  175. $varName = str_replace($varPrefix,'',$sessKey);
  176. $this->{$varName} = $sessValue;
  177. }
  178. }
  179. }
  180. if(!isset($_SESSION[$this->varPrefix.$var]))
  181. {
  182. $this->{$var} = $val;
  183. }
  184. }
  185. function doDefault()
  186. {
  187. if(isset($this->userActions[$this->action]) && is_callable($this->userActions[$this->action]))
  188. {
  189. call_user_func($this->userActions[$this->action],$this->info);
  190. }
  191. else
  192. {
  193. $this->warnings[] = sprintf($this->langVars->errNoAction,$this->action);
  194. }
  195. }
  196. function displayInformation()
  197. {
  198. if(!empty($this->information))
  199. {
  200. $this->retArr[] = array('layer_id' => 'information', 'where' => 'innerHTML', 'value' => implode('<br /><br />',$this->information));
  201. }
  202. }
  203. function displayWarnings()
  204. {
  205. if(!empty($this->warnings))
  206. {
  207. $this->retArr[] = array('where' => 'javascript', 'value' => 'alert(\''.implode('\n',$this->warnings).'\');');
  208. }
  209. }
  210. function doQuery($query)
  211. {
  212. $result = mysql_query($query);
  213. if (!$result)
  214. {
  215. $message = '<br /><br />'.$this->langVars->errQuery.' <br />'.$query.'<br /><br /> '.$this->langVars->errMysql.'<br /> '.mysql_error();
  216. call_user_func($this->errorFun,$message,__FILE__,__LINE__);
  217. }
  218. return $result;
  219. }
  220. function escapeData($data)
  221. {
  222. if (ini_get('magic_quotes_gpc'))
  223. {
  224. $data = stripslashes($data);
  225. }
  226. if(isset($this->dbc))
  227. {
  228. return mysql_real_escape_string (trim ($data), $this->dbc);
  229. }
  230. else
  231. {
  232. return mysql_real_escape_string (trim ($data));
  233. }
  234. }
  235. function startTimer()
  236. {
  237. $time = microtime();
  238. $time = explode(' ', $time);
  239. $time = $time[1] + $time[0];
  240. $this->beginTime = $time;
  241. }
  242. function endTimer()
  243. {
  244. $time = microtime();
  245. $time = explode(' ', $time);
  246. $time = $time[1] + $time[0];
  247. $endtime = $time;
  248. $totaltime = ($endtime - $this->beginTime);
  249. $this->information[] = $totaltime;
  250. }
  251. function main($action,$info = '')
  252. {
  253. //$this->startSession();
  254. //$this->mysqlConnect();
  255. //$this->checkLoginInfo(array('Admin'));
  256. //$this->startTimer();
  257. $this->action = $action;
  258. $this->info = $info;
  259. $this->handleFlow();
  260. //$this->endTimer();
  261. $this->displayInformation();
  262. $this->displayWarnings();
  263. }
  264. function handleFlow()
  265. {
  266. switch ($this->action)
  267. {
  268. case 'clear_filters':
  269. $_SESSION[$this->varPrefix.'filterSearches'] = array();
  270. $this->filterSearches = array();
  271. $this->updateHtml();
  272. break;
  273. case 'handle_filter_search':
  274. $this->handleFilterSearch();
  275. break;
  276. case 'update_mult_rows':
  277. $this->updateMultRows();
  278. break;
  279. case 'edit_mult_rows':
  280. $this->editMultRows();
  281. break;
  282. case 'reset_column_order':
  283. $this->resetColumnOrder();
  284. break;
  285. case 'update_column_order':
  286. $this->updateColumnOrder();
  287. break;
  288. case 'order_columns_screen':
  289. $this->orderColumnsScreen();
  290. break;
  291. case 'show_column':
  292. $this->showColumn();
  293. break;
  294. case 'hide_column':
  295. $this->hideColumn();
  296. break;
  297. case 'show_hide_columns':
  298. $this->showHideColumns();
  299. break;
  300. case 'view_row':
  301. $this->viewRow();
  302. break;
  303. case 'update_row':
  304. $this->updateRow();
  305. break;
  306. case 'cancel_edit_row':
  307. $this->updateHtml();
  308. break;
  309. case 'edit_row':
  310. $this->editRow();
  311. break;
  312. case 'delete_row':
  313. $this->deleteRow();
  314. break;
  315. case 'delete_mult_rows':
  316. $this->deleteMultRows();
  317. break;
  318. case 'update_html':
  319. $this->updateHtml();
  320. break;
  321. case 'handle_search':
  322. $_SESSION[$this->varPrefix.'searchType'] = 'quick';
  323. $this->searchType = 'quick';
  324. $_SESSION[$this->varPrefix.'ss'] = $this->info;
  325. $_SESSION[$this->varPrefix.'start'] = 0;
  326. $this->updateHtml();
  327. //$this->retArr[] = array('where' => 'javascript', 'value' => "resetScrollTop();");
  328. break;
  329. case 'page_num_changed':
  330. $_SESSION[$this->varPrefix.'start'] = $this->escapeData($this->info);
  331. $this->updateHtml();
  332. break;
  333. case 'display_num_changed':
  334. $this->displayNum = $this->escapeData($this->info);
  335. $_SESSION[$this->varPrefix.'displayNum'] = $this->displayNum;
  336. $_SESSION[$this->varPrefix.'start'] = 0;
  337. $this->updateHtml();
  338. $this->retArr[] = array('where' => 'javascript', 'value' => "resetScrollTop();");
  339. break;
  340. case 'order_by_changed':
  341. $_SESSION[$this->varPrefix.'obc'] = $this->escapeData($this->info[0]);
  342. $_SESSION[$this->varPrefix.'aod'] = $this->escapeData($this->info[1]);
  343. $this->displayTable();
  344. break;
  345. case 'add_row':
  346. $this->addRow();
  347. break;
  348. case 'insert_row':
  349. $this->insertRow();
  350. break;
  351. case 'show_advanced_search':
  352. $_SESSION[$this->varPrefix.'numAdvSearches'] = $this->defNumAdvSearches;
  353. $this->numAdvSearches = $this->defNumAdvSearches;
  354. $_SESSION[$this->varPrefix.'ss'] = '';
  355. $this->searchString = '';
  356. $_SESSION[$this->varPrefix.'searchType'] = 'advanced';
  357. $this->searchType = 'advanced';
  358. $this->updateHtml();
  359. break;
  360. case 'show_quick_search':
  361. $_SESSION[$this->varPrefix.'advSearches'] = array();
  362. $this->advSearches = array();
  363. $_SESSION[$this->varPrefix.'searchType'] = 'quick';
  364. $this->searchType = 'quick';
  365. $this->updateHtml();
  366. break;
  367. case 'advanced_search':
  368. $_SESSION[$this->varPrefix.'searchType'] = 'advanced';
  369. $this->searchType = 'advanced';
  370. $this->advancedSearch();
  371. $this->updateHtml();
  372. //$this->retArr[] = array('where' => 'javascript', 'value' => "resetScrollTop();");
  373. break;
  374. case 'match_all':
  375. $_SESSION[$this->varPrefix.'matchAll'] = true;
  376. break;
  377. case 'match_any':
  378. $_SESSION[$this->varPrefix.'matchAll'] = false;
  379. break;
  380. case 'clear_adv_search':
  381. $_SESSION[$this->varPrefix.'matchAll'] = true;
  382. $this->matchAll = true;
  383. $_SESSION[$this->varPrefix.'numAdvSearches'] = $this->defNumAdvSearches;
  384. $this->numAdvSearches = $this->defNumAdvSearches;
  385. $_SESSION[$this->varPrefix.'advSearches'] = array();
  386. $this->advSearches = array();
  387. $this->updateHtml();
  388. break;
  389. case 'add_adv_search':
  390. $_SESSION[$this->varPrefix.'numAdvSearches']++;
  391. $this->numAdvSearches++;
  392. $this->updateHtml();
  393. break;
  394. case 'copy_mult_rows':
  395. $this->copyMultRows();
  396. $this->updateHtml();
  397. break;
  398. case 'copy_row':
  399. $this->copyRow();
  400. $this->updateHtml();
  401. break;
  402. case 'user_icon_clicked':
  403. $this->userIconClicked();
  404. break;
  405. case 'user_button_clicked':
  406. $this->userButtonClicked();
  407. break;
  408. // my add !
  409. case 'execute_transfer':
  410. $this->execute_transfer();
  411. break;
  412. default :
  413. $this->doDefault();
  414. }
  415. }
  416. function handleFilterSearch()
  417. {
  418. foreach($this->info->filters as $filterInfo)
  419. {
  420. if(strlen($filterInfo->filterStr) > 0)
  421. {
  422. $_SESSION[$this->varPrefix.'filterSearches'][$filterInfo->filterCol] = $filterInfo->filterStr;
  423. }
  424. else if(isset($_SESSION[$this->varPrefix.'filterSearches'][$filterInfo->filterCol]))
  425. {
  426. unset($_SESSION[$this->varPrefix.'filterSearches'][$filterInfo->filterCol]);
  427. }
  428. }
  429. $this->filterSearches = isset($_SESSION[$this->varPrefix.'filterSearches']) ? $_SESSION[$this->varPrefix.'filterSearches'] : array();
  430. $_SESSION[$this->varPrefix.'start'] = 0;
  431. $this->updateHtml();
  432. if(isset($this->info->currentFilterId) && strlen($this->info->currentFilterId) > 0)
  433. {
  434. $this->retArr[] = array('where' => 'javascript', 'value' => '$("'.$this->info->currentFilterId.'").focus();');
  435. }
  436. }
  437. function resetColumnOrder()
  438. {
  439. $query = "update mate_columns set order_num = '0' where mate_var_prefix = '".$this->escapeData($this->varPrefix)."'";
  440. $result = $this->doQuery($query);
  441. if($result)
  442. {
  443. $this->orderColumnsScreen();
  444. }
  445. }
  446. function unsetColSessVars($column)
  447. {
  448. if($this->searchType == 'advanced' && isset($_SESSION[$this->varPrefix.'advSearches']))
  449. {
  450. foreach($_SESSION[$this->varPrefix.'advSearches'] as $key => $searchInfo)
  451. {
  452. if(isset($searchInfo['cols']) && $searchInfo['cols'] == $column)
  453. {
  454. $_SESSION[$this->varPrefix.'advSearches'][$key] = array();
  455. }
  456. }
  457. }
  458. if(isset($_SESSION[$this->varPrefix.'filterSearches'][$column]))
  459. {
  460. unset($_SESSION[$this->varPrefix.'filterSearches'][$column]);
  461. }
  462. if(isset($_SESSION[$this->varPrefix.'obc']) && $_SESSION[$this->varPrefix.'obc'] == $column)
  463. {
  464. unset($_SESSION[$this->varPrefix.'obc']);
  465. }
  466. }
  467. function unsetHiddenColumns()
  468. {
  469. if(stristr($this->permissions,'H') && $this->setMateUserId())
  470. {
  471. foreach($this->tableColumns as $col => $info)
  472. {
  473. if(stristr($info['perms'],'H') && $col != $this->primaryKeyCol)
  474. {
  475. $hidden = isset($info['hidden']) ? $info['hidden'] : false;
  476. if($this->columnIsHidden($col,$hidden))
  477. {
  478. unset($this->tableColumns[$col]);
  479. }
  480. }
  481. }
  482. }
  483. }
  484. function columnIsHidden($column,$hidden = false)
  485. {
  486. $rv = false;
  487. $query = "select id, hidden from mate_columns where mate_user_id = '$this->mateUserId' and mate_var_prefix = '$this->varPrefix' and mate_column = '$column'";
  488. $result = $this->doQuery($query);
  489. if($row = mysql_fetch_assoc($result))
  490. {
  491. if($row['hidden'] == 'Yes')
  492. {
  493. $rv = true;
  494. }
  495. }
  496. else if($hidden)
  497. {
  498. $rv = true;
  499. }
  500. return $rv;
  501. }
  502. function showColumn()
  503. {
  504. if($this->setMateUserId())
  505. {
  506. $column = $this->escapeData($this->info);
  507. $query = "select id from mate_columns where mate_user_id = '$this->mateUserId' and mate_var_prefix = '$this->varPrefix' and mate_column = '$column'";
  508. $result = $this->doQuery($query);
  509. if($row = mysql_fetch_assoc($result))
  510. {
  511. $mateColId = $row['id'];
  512. $query = "update mate_columns set hidden = 'No' where id = '$mateColId'";
  513. $result = $this->doQuery($query);
  514. }
  515. else
  516. {
  517. $query = "insert into mate_columns set mate_user_id = '$this->mateUserId', mate_var_prefix = '$this->varPrefix', mate_column = '$column', hidden = 'No', date_updated = NOW()";
  518. $result = $this->doQuery($query);
  519. }
  520. }
  521. }
  522. function hideColumn()
  523. {
  524. if($this->setMateUserId())
  525. {
  526. $column = $this->escapeData($this->info);
  527. if(isset($this->tableColumns[$column]['perms']) && stristr($this->tableColumns[$column]['perms'],'H'))
  528. {
  529. $query = "select id from mate_columns where mate_user_id = '$this->mateUserId' and mate_var_prefix = '$this->varPrefix' and mate_column = '$column'";
  530. $result = $this->doQuery($query);
  531. if($row = mysql_fetch_assoc($result))
  532. {
  533. $mateColId = $row['id'];
  534. $query = "update mate_columns set hidden = 'Yes' where id = '$mateColId'";
  535. $result = $this->doQuery($query);
  536. }
  537. else
  538. {
  539. $query = "insert into mate_columns set mate_user_id = '$this->mateUserId', mate_var_prefix = '$this->varPrefix', mate_column = '$column', hidden = 'Yes', date_updated = NOW()";
  540. $result = $this->doQuery($query);
  541. }
  542. $this->unsetColSessVars($column);
  543. }
  544. }
  545. }
  546. function setMateUserId()
  547. {
  548. if(strlen($this->mateUserId) > 0)
  549. {
  550. return true;
  551. }
  552. else if(isset($_COOKIE['mate_user_id']) && strlen($_COOKIE['mate_user_id']) > 0)
  553. {
  554. $this->mateUserId = $_COOKIE['mate_user_id'];
  555. return true;
  556. }
  557. else
  558. {
  559. $this->mateUserId = md5(uniqid(rand(),1));
  560. if(setcookie('mate_user_id',$this->mateUserId,time() + 60*60*24*7*365*2))
  561. {
  562. return true;
  563. }
  564. else
  565. {
  566. $this->warnings[] = 'Your browser must accept cookies in order to show/hide columns.';
  567. return false;
  568. }
  569. }
  570. }
  571. function showHideColumns()
  572. {
  573. if(stristr($this->permissions,'H'))
  574. {
  575. if($this->setMateUserId())
  576. {
  577. $html = '<table '.$this->showHideTableInfo.'><tr style="font-weight: bold;"><td>'.$this->langVars->ttlColumn.'</td><td>'.$this->langVars->ttlCheckBox.'</td></tr>';
  578. foreach($this->tableColumns as $col => $info)
  579. {
  580. if(stristr($info['perms'],'H') && $col != $this->primaryKeyCol)
  581. {
  582. $checked = 'checked="checked"';
  583. $hidden = isset($info['hidden']) ? $info['hidden'] : false;
  584. if($this->columnIsHidden($col,$hidden))
  585. {
  586. $checked = '';
  587. }
  588. $html .= '<tr><td><label for="'.$col.'_hide_cb">'.$info['display_text'].'</label>:</td><td><input type="checkbox" id="'.$col.'_hide_cb" onchange="showHideColumn(this,\''.$col.'\');" '.$checked.' /></tr>';
  589. }
  590. }
  591. $html .= '</table>';
  592. $this->retArr[] = array('layer_id' => 'titleLayer', 'where' => 'innerHTML', 'value' => $this->showHideTitle);
  593. $this->retArr[] = array('layer_id' => 'recordLayer', 'where' => 'innerHTML', 'value' => '');
  594. $this->retArr[] = array('layer_id' => 'filterLayer', 'where' => 'innerHTML', 'value' => '');
  595. $this->retArr[] = array('layer_id' => 'searchButtonsLayer', 'where' => 'innerHTML', 'value' => '<button onclick="toAjaxTableEditor(\'update_html\',\'\');">'.$this->langVars->btnBack.'</button>');
  596. $this->retArr[] = array('layer_id' => 'tableLayer', 'where' => 'innerHTML', 'value' => $html);
  597. //$this->retArr[] = array('where' => 'javascript', 'value' => "resetScrollTop();");
  598. if(is_callable($this->showHideScreenFun))
  599. {
  600. call_user_func($this->showHideScreenFun);
  601. }
  602. }
  603. }
  604. }
  605. function orderColumnsScreen()
  606. {
  607. if(stristr($this->permissions,'O'))
  608. {
  609. $html = '';
  610. $this->unsetHiddenColumns();
  611. $this->setColumnOrder();
  612. if($this->setMateUserId())
  613. {
  614. $html .= '<ul id="columnOrderList">';
  615. foreach($this->tableColumns as $col => $info)
  616. {
  617. if(stristr($info['perms'],'O'))
  618. {
  619. $html .= '<li id="columnOrderList_'.str_replace('_','-.-UNDERSCORE-.-',$col).'" class="orderColumnClass">'.$info['display_text'].'</li>';
  620. }
  621. }
  622. $html .= '</ul>';
  623. $this->retArr[] = array('layer_id' => 'titleLayer', 'where' => 'innerHTML', 'value' => $this->orderColTitle);
  624. $this->retArr[] = array('layer_id' => 'recordLayer', 'where' => 'innerHTML', 'value' => '');
  625. $this->retArr[] = array('layer_id' => 'filterLayer', 'where' => 'innerHTML', 'value' => '');
  626. $this->retArr[] = array('layer_id' => 'searchButtonsLayer', 'where' => 'innerHTML', 'value' => '<button onclick="toAjaxTableEditor(\'reset_column_order\',\'\');">'.$this->langVars->btnReset.'</button> <button onclick="toAjaxTableEditor(\'update_html\',\'\');">'.$this->langVars->btnBack.'</button>');
  627. $this->retArr[] = array('layer_id' => 'tableLayer', 'where' => 'innerHTML', 'value' => $html);
  628. //$this->retArr[] = array('where' => 'javascript', 'value' => "resetScrollTop();");
  629. $javascript = 'Sortable.create("columnOrderList",{dropOnEmpty:false,constraint:false,onUpdate:function(element){var info = Sortable.serialize(element.id); toAjaxTableEditor("update_column_order",info); } });';
  630. $this->retArr[] = array('where' => 'javascript', 'value' => $javascript);
  631. if(is_callable($this->orderColScreenFun))
  632. {
  633. call_user_func($this->orderColScreenFun);
  634. }
  635. }
  636. }
  637. }
  638. function updateColumnOrder()
  639. {
  640. if($this->setMateUserId())
  641. {
  642. if(stristr($this->permissions,'O'))
  643. {
  644. parse_str($this->info);
  645. $orderNum = 1;
  646. foreach($columnOrderList as $col)
  647. {
  648. $col = str_replace('-.-UNDERSCORE-.-','_',$col);
  649. if(isset($this->tableColumns[$col]['perms']) && stristr($this->tableColumns[$col]['perms'],'O'))
  650. {
  651. $query = "select id from mate_columns where mate_user_id = '$this->mateUserId' and mate_var_prefix = '$this->varPrefix' and mate_column = '$col'";
  652. $result = $this->doQuery($query);
  653. if($row = mysql_fetch_assoc($result))
  654. {
  655. $mateColId = $row['id'];
  656. $query = "update mate_columns set order_num = '$orderNum' where id = '$mateColId'";
  657. $result = $this->doQuery($query);
  658. }
  659. else
  660. {
  661. $query = "insert into mate_columns set mate_user_id = '$this->mateUserId', mate_var_prefix = '$this->varPrefix', mate_column = '$col', order_num = '$orderNum', hidden = 'No', date_updated = NOW()";
  662. $result = $this->doQuery($query);
  663. }
  664. $orderNum++;
  665. }
  666. }
  667. }
  668. }
  669. }
  670. function setColumnOrder()
  671. {
  672. if(stristr($this->permissions,'O'))
  673. {
  674. if($this->setMateUserId())
  675. {
  676. $newTableColumns = array();
  677. $query = "select mate_column from mate_columns where mate_user_id = '$this->mateUserId' and mate_var_prefix = '$this->varPrefix' and hidden = 'No' and order_num > 0 order by order_num asc";
  678. $result = $this->doQuery($query);
  679. while($row = mysql_fetch_assoc($result))
  680. {
  681. if(isset($this->tableColumns[$row['mate_column']]) && stristr($this->tableColumns[$row['mate_column']]['perms'],'O'))
  682. {
  683. $newTableColumns[$row['mate_column']] = $this->tableColumns[$row['mate_column']];
  684. unset($this->tableColumns[$row['mate_column']]);
  685. }
  686. }
  687. foreach($this->tableColumns as $col => $info)
  688. {
  689. $newTableColumns[$col] = $info;
  690. }
  691. $this->tableColumns = $newTableColumns;
  692. }
  693. }
  694. }
  695. function userButtonClicked()
  696. {
  697. $buttonKey = $this->info->buttonKey;
  698. if(isset($this->userButtons[$buttonKey]['pass_id_array']) && $this->userButtons[$buttonKey]['pass_id_array'])
  699. {
  700. $params = isset($this->userButtons[$buttonKey]['params']) ? $this->userButtons[$buttonKey]['params'] : array();
  701. call_user_func($this->userButtons[$buttonKey]['call_back_fun'],get_object_vars($this->info->checkboxes),$params);
  702. }
  703. else
  704. {
  705. foreach($this->info->checkboxes as $info)
  706. {
  707. $id = $this->escapeData($info);
  708. $query = "select * from $this->tableName where $this->primaryKeyCol = '$id'";
  709. $result = $this->doQuery($query);
  710. if($row = mysql_fetch_assoc($result))
  711. {
  712. if(isset($this->userButtons[$buttonKey]['call_back_fun']) && is_callable($this->userButtons[$buttonKey]['call_back_fun']))
  713. {
  714. $params = isset($this->userButtons[$buttonKey]['params']) ? $this->userButtons[$buttonKey]['params'] : array();
  715. call_user_func($this->userButtons[$buttonKey]['call_back_fun'],$row,$params);
  716. }
  717. }
  718. }
  719. }
  720. if(!(isset($this->userButtons[$buttonKey]['no_update']) && $this->userButtons[$buttonKey]['no_update']))
  721. {
  722. $this->updateHtml();
  723. }
  724. }
  725. function userIconClicked()
  726. {
  727. $id = $this->escapeData($this->info[0]);
  728. $iconKey = $this->escapeData($this->info[1]);
  729. $query = "select * from $this->tableName where $this->primaryKeyCol = '$id'";
  730. $result = $this->doQuery($query);
  731. if($row = mysql_fetch_assoc($result))
  732. {
  733. if(isset($this->userIcons[$iconKey]['call_back_fun']) && is_callable($this->userIcons[$iconKey]['call_back_fun']))
  734. {
  735. call_user_func($this->userIcons[$iconKey]['call_back_fun'],$row);
  736. }
  737. }
  738. if(!(isset($this->userIcons[$iconKey]['no_update']) && $this->userIcons[$iconKey]['no_update']))
  739. {
  740. $this->updateHtml();
  741. }
  742. }
  743. function copyMultRows()
  744. {
  745. foreach($this->info as $id)
  746. {
  747. $afterCopyArray = array();
  748. $id = $this->escapeData($id);
  749. if(!$this->hasRightsToRow($id))
  750. {
  751. $this->handleHacking();
  752. }
  753. $query = "select * from $this->tableName where $this->primaryKeyCol = '$id'";
  754. $result = $this->doQuery($query);
  755. if($row = mysql_fetch_assoc($result))
  756. {
  757. $sets = array();
  758. foreach($this->tableColumns as $col => $info)
  759. {
  760. if(stristr($info['perms'],'C') && !isset($info['join']['real_column']))
  761. {
  762. $val = $row[$col];
  763. if(isset($this->tableColumns[$col]['on_copy_fun']) && is_callable($this->tableColumns[$col]['on_copy_fun']))
  764. {
  765. $val = call_user_func($this->tableColumns[$col]['on_copy_fun'],$col,$val,$row);
  766. }
  767. $val = $this->escapeData($val);
  768. $sets[] = $this->addTickMarks($col)." = '".$val."'";
  769. $afterCopyArray[$col] = $val;
  770. }
  771. }
  772. $query2 = "insert into $this->tableName set ".implode(', ',$sets);
  773. $result2 = $this->doQuery($query2);
  774. if($result2 && isset($this->afterCopyFun) && is_callable($this->afterCopyFun))
  775. {
  776. call_user_func($this->afterCopyFun,mysql_insert_id(),$afterCopyArray);
  777. }
  778. }
  779. }
  780. }
  781. function copyRow()
  782. {
  783. $afterCopyArray = array();
  784. $id = $this->escapeData($this->info);
  785. if(!$this->hasRightsToRow($id))
  786. {
  787. $this->handleHacking();
  788. }
  789. $query = "select * from $this->tableName where $this->primaryKeyCol = '$id'";
  790. $result = $this->doQuery($query);
  791. if($row = mysql_fetch_assoc($result))
  792. {
  793. $sets = array();
  794. foreach($this->tableColumns as $col => $info)
  795. {
  796. if(stristr($info['perms'],'C') && !isset($info['join']['real_column']))
  797. {
  798. $val = $row[$col];
  799. if(isset($this->tableColumns[$col]['on_copy_fun']) && is_callable($this->tableColumns[$col]['on_copy_fun']))
  800. {
  801. $val = call_user_func($this->tableColumns[$col]['on_copy_fun'],$col,$val,$row);
  802. }
  803. $val = $this->escapeData($val);
  804. $sets[] = $this->addTickMarks($col)." = '".$val."'";
  805. $afterCopyArray[$col] = $val;
  806. }
  807. }
  808. $query2 = "insert into $this->tableName set ".implode(', ',$sets);
  809. $result2 = $this->doQuery($query2);
  810. if($result2 && isset($this->afterCopyFun) && is_callable($this->afterCopyFun))
  811. {
  812. call_user_func($this->afterCopyFun,mysql_insert_id(),$afterCopyArray);
  813. }
  814. }
  815. }
  816. function advancedSearch()
  817. {
  818. $_SESSION[$this->varPrefix.'start'] = 0;
  819. $this->info = get_object_vars($this->info);
  820. foreach($this->info as $i => $info)
  821. {
  822. $this->advSearches[$i] = get_object_vars($this->info[$i]);
  823. }
  824. $_SESSION[$this->varPrefix.'advSearches'] = $this->advSearches;
  825. }
  826. function exportInfo()
  827. {
  828. $this->unsetHiddenColumns();
  829. $this->setColumnOrder();
  830. $this->setPagingVars();
  831. $this->formatJoinClause();
  832. $this->formatSelectClause();
  833. $this->formatWhereClause();
  834. $this->setNumResults();
  835. $csvInfo = '';
  836. $csvLb = "\r\n";
  837. $this->extraOrderByInfo = empty($this->extraOrderByInfo) ? '' : ', '.$this->extraOrderByInfo;
  838. $query = $this->selectClause.' '.$this->joinClause.' '.$this->whereClause.' order by '.$this->addTickMarks($this->orderByColumn).' '.$this->getAscOrDesc().' '.$this->extraOrderByInfo;
  839. $result = $this->doQuery($query);
  840. if(mysql_num_rows($result) > 0)
  841. {
  842. $csvRow = array();
  843. foreach($this->tableColumns as $col => $info)
  844. {
  845. if(stristr($info['perms'],'X'))
  846. {
  847. $csvRow[] = '"'.$info['display_text'].'"';
  848. }
  849. }
  850. $csvInfo .= implode(',', $csvRow).$csvLb;
  851. while($row = mysql_fetch_assoc($result))
  852. {
  853. $csvRow = array();
  854. foreach($this->tableColumns as $col => $info)
  855. {
  856. $value = '';
  857. if(stristr($info['perms'],'X'))
  858. {
  859. $value = $row[$col];
  860. if(isset($info['csv_export_fun']) && is_callable($info['csv_export_fun']))
  861. {
  862. $value = call_user_func($info['csv_export_fun'],$col,$value,$row);
  863. }
  864. $csvRow[] = '"'.str_replace(array("\r", "\n", '"'),array('','','""'),$value).'"';
  865. }
  866. }
  867. $csvInfo .= implode(',', $csvRow).$csvLb;
  868. }
  869. return $csvInfo;
  870. }
  871. }
  872. function formatIcons($id,$row)
  873. {
  874. $html = '';
  875. $numIcons = 0;
  876. if(stristr($this->permissions,'V') && stristr($this->removeIcons,'V') === false)
  877. {
  878. $html .= '<li class="info"><a href="javascript: toAjaxTableEditor(\'view_row\',\''.$id.'\');" title="'.$this->langVars->ttlInfo.'"></a></li>';
  879. $numIcons++;
  880. }
  881. if(stristr($this->permissions,'E') && stristr($this->removeIcons,'E') === false)
  882. {
  883. $html .= '<li class="edit"><a href="javascript: toAjaxTableEditor(\'edit_row\',\''.$id.'\');" title="'.$this->langVars->ttlEdit.'"></a></li>';
  884. $numIcons++;
  885. }
  886. if(stristr($this->permissions,'C') && stristr($this->removeIcons,'C') === false)
  887. {
  888. $html .= '<li class="copy"><a href="javascript: toAjaxTableEditor(\'copy_row\',\''.$id.'\');" title="'.$this->langVars->ttlCopy.'"></a></li>';
  889. $numIcons++;
  890. }
  891. if(stristr($this->permissions,'D') && stristr($this->removeIcons,'D') === false)
  892. {
  893. $html .= '<li class="delete"><a href="javascript: confirmDeleteRow(\''.$id.'\')" title="'.$this->langVars->ttlDelete.'"></a></li>';
  894. $numIcons++;
  895. }
  896. // my add !
  897. if(stristr($this->permissions,'Z') && stristr($this->removeIcons,'Z') === false)
  898. {
  899. //$html .= '<li class="execute_transfer"><a href="javascript: toAjaxTableEditor(\'execute_transfer\',\''.$id.'\');" title="'.$this->langVars->ttlExecuteRow.'"></a></li>';
  900. $html .= '<li class="execute" id="execute_row_li"><a href="mng_handler.php?execute=1&table_name='.$this->tableName.'&id='.$id.'"title="execute" ></a> </li>';
  901. //$html .= '<li class="execute" id="execute_row_li"><a href="javascript: toAjaxTableEditor(\'execute_row\',\''.$id.'\');" title="'.$this->langVars->ttlExecuteRow.'"></a></li>';
  902. $numIcons++;
  903. }
  904. if(stristr($this->permissions,'W') && stristr($this->removeIcons,'W') === false)
  905. {
  906. //$html .= '<li class="execute_transfer"><a href="javascript: toAjaxTableEditor(\'execute_transfer\',\''.$id.'\');" title="'.$this->langVars->ttlExecuteRow.'"></a></li>';
  907. $html .= '<li class="execute" id="execute_row_li"><a href="mng_handler.php?mng_undo_transaction=1&transaction_type='.$this->tableName.'&transaction_id='.$id.'"title="undo" ></a> </li>';
  908. //$html .= '<li class="execute" id="execute_row_li"><a href="javascript: toAjaxTableEditor(\'execute_row\',\''.$id.'\');" title="'.$this->langVars->ttlExecuteRow.'"></a></li>';
  909. $numIcons++;
  910. }
  911. if(stristr($this->permissions,'B') && stristr($this->removeIcons,'B') === false)
  912. {
  913. //$html .= '<li class="execute_transfer"><a href="javascript: toAjaxTableEditor(\'execute_transfer\',\''.$id.'\');" title="'.$this->langVars->ttlExecuteRow.'"></a></li>';
  914. $html .= '<li class="pay" id="execute_row_li"><a href="mng_handler.php?pay_transfer=1&table_name='.$this->tableName.'&id='.$id.'"title="pay" ></a> </li>';
  915. //$html .= '<li class="execute" id="execute_row_li"><a href="javascript: toAjaxTableEditor(\'execute_row\',\''.$id.'\');" title="'.$this->langVars->ttlExecuteRow.'"></a></li>';
  916. $numIcons++;
  917. }
  918. if(stristr($this->permissions,'Y') && stristr($this->removeIcons,'Y') === false)
  919. {
  920. //$html .= '<li class="execute_transfer"><a href="javascript: toAjaxTableEditor(\'execute_transfer\',\''.$id.'\');" title="'.$this->langVars->ttlExecuteRow.'"></a></li>';
  921. $html .= '<li class="pay" id="execute_row_li"><a href="mng_handler.php?pay_transfer=1&table_name='.$this->tableName.'&id='.$id.'"title="pay" ></a> </li>';
  922. //$html .= '<li class="execute" id="execute_row_li"><a href="javascript: toAjaxTableEditor(\'execute_row\',\''.$id.'\');" title="'.$this->langVars->ttlExecuteRow.'"></a></li>';
  923. $numIcons++;
  924. }
  925. if(stristr($this->permissions,'N') && stristr($this->removeIcons,'N') === false)
  926. {
  927. if($row['matched']!='0'|| $row['ignore']!='0' ){
  928. }
  929. else{
  930. $html .= '<li class="match" id="match_row_li"><a href="mng_barclays_handler.php?match=1&table_name='.$this->tableName.'&id='.$id.'">match</a></li>
  931. </br><li class="ignore" id="ignore_row_li"><a href="mng_barclays_handler.php?ignore=1&table_name='.$this->tableName.'&id='.$id.'">ignore</a></li>';
  932. $numIcons++;
  933. }
  934. }
  935. /*if(stristr($this->permissions,'I') && stristr($this->removeIcons,'I') === false)
  936. {
  937. if(!strcmp($row['ignore'],'0')){
  938. $html .= '</br><li class="ignore" id="ignore_row_li"><a href="barclays_process_handler.php?ignore=1&table_name='.$this->tableName.'&id='.$id.'">ignore</a></li>';
  939. $numIcons++;
  940. }
  941. }*/
  942. //
  943. foreach($this->userIcons as $iconKey => $info)
  944. {
  945. if(isset($info['call_back_fun']) && is_callable($info['call_back_fun']))
  946. {
  947. $confirmMsg = isset($info['confirm_msg']) ? $info['confirm_msg'] : '';
  948. $html .= '<li class="'.$info['class'].'"><a href="javascript: userIconClicked(\'user_icon_clicked\',new Array(\''.$id.'\',\''.$iconKey.'\'),\''.$confirmMsg.'\')" title="'.$info['title'].'"></a></li>';
  949. $numIcons++;
  950. }
  951. else if(isset($info['icon_html']))
  952. {
  953. $info['icon_html'] = str_replace($this->replaceWithId,$id,$info['icon_html']);
  954. $html .= $info['icon_html'];
  955. $numIcons++;
  956. }
  957. else if(isset($info['format_fun']) && is_callable($info['format_fun']))
  958. {
  959. $userIconInfo = call_user_func($info['format_fun'],$row);
  960. $html .= $userIconInfo['icon_html'];
  961. $numIcons = $numIcons + $userIconInfo['num_icons'];
  962. }
  963. }
  964. if($numIcons > 0)
  965. {
  966. $width = $numIcons * 26;
  967. $html = '<td nowrap="nowrap"><ul class="actions" style="width: '.$width.'px;">'.$html.'</ul></td>';
  968. }
  969. return $html;
  970. }
  971. function viewRow()
  972. {
  973. if(stristr($this->permissions,'V'))
  974. {
  975. $html = '';
  976. $id = $this->escapeData($this->info);
  977. $this->formatJoinClause();
  978. $this->formatSelectClause();
  979. $query = $this->selectClause.' '.$this->joinClause.' where '.$this->tableName.'.'.$this->primaryKeyCol." = '$id'";
  980. $result = $this->doQuery($query);
  981. if($row = mysql_fetch_assoc($result))
  982. {
  983. $html .= '<table '.$this->viewTableInfo.'>';
  984. foreach($this->tableColumns as $col => $info)
  985. {
  986. if(stristr($info['perms'],'V'))
  987. {
  988. $value = $row[$col];
  989. if(isset($info['view_fun']) && is_callable($info['view_fun']))
  990. {
  991. $value = call_user_func($info['view_fun'],$col,$value,$row);
  992. }
  993. $value = strlen(trim($value)) > 0 ? $value : '&nbsp;';
  994. $html .= '<tr><td id="'.$col.'_label_cell" class="labelCell">'.$info['display_text'].':</td><td id="'.$col.'_value_cell" class="valueCell">'.$value.'</td></tr>';
  995. }
  996. }
  997. if(isset($this->viewHtmlFun) && is_callable($this->viewHtmlFun))
  998. {
  999. $html .= call_user_func($this->viewHtmlFun,$row);
  1000. }
  1001. $html .= '</tr></table><div id="viewRowButtons">';
  1002. if(stristr($this->permissions,'E'))
  1003. {
  1004. $html .= '<button class="ajaxButton" onclick="toAjaxTableEditor(\'edit_row\',\''.$id.'\');">'.$this->langVars->btnEdit.'</button>';
  1005. }
  1006. $html .= '<button class="ajaxButton" onclick="toAjaxTableEditor(\'update_html\',\'\');">'.$this->langVars->btnBack.'</button></div>';
  1007. }
  1008. $this->retArr[] = array('layer_id' => 'titleLayer', 'where' => 'innerHTML', 'value' => $this->viewRowTitle);
  1009. $this->retArr[] = array('layer_id' => 'recordLayer', 'where' => 'innerHTML', 'value' => '');
  1010. $this->retArr[] = array('layer_id' => 'filterLayer', 'where' => 'innerHTML', 'value' => '');
  1011. $this->retArr[] = array('layer_id' => 'searchButtonsLayer', 'where' => 'innerHTML', 'value' => '');
  1012. $this->retArr[] = array('layer_id' => 'tableLayer', 'where' => 'innerHTML', 'value' => $html);
  1013. //$this->retArr[] = array('where' => 'javascript', 'value' => "resetScrollTop();");
  1014. if(is_callable($this->viewScreenFun))
  1015. {
  1016. call_user_func($this->viewScreenFun);
  1017. }
  1018. }
  1019. }
  1020. function updateMultRows()
  1021. {
  1022. $this->valError = false;
  1023. $sets = array();
  1024. $afterEditArray = array();
  1025. $idArr = is_object($this->info->idArr) ? get_object_vars($this->info->idArr) : $this->info->idArr;
  1026. $inputInfo = get_object_vars($this->info->inputInfo);
  1027. $insertId = $idArr;
  1028. $hasFileUpload = isset($inputInfo['submit_mate_file_upload']) ? true : false;
  1029. unset($inputInfo['submit_mate_file_upload']);
  1030. foreach($inputInfo as $col => $val)
  1031. {
  1032. $col = str_replace($this->inputIdPrefix,'',$col);
  1033. if(isset($this->tableColumns[$col]))
  1034. {
  1035. // Check to make sure the column has edit permissions.
  1036. if(!stristr($this->tableColumns[$col]['perms'],'E'))
  1037. {
  1038. $this->handleHacking();
  1039. }
  1040. if(isset($this->tableColumns[$col]['on_edit_fun']) && is_callable($this->tableColumns[$col]['on_edit_fun']))
  1041. {
  1042. $val = call_user_func($this->tableColumns[$col]['on_edit_fun'],$col,$val,$this->info);
  1043. }
  1044. // Check Validation
  1045. if(isset($this->tableColumns[$col]['val_fun']) && is_callable($this->tableColumns[$col]['val_fun']) && !call_user_func($this->tableColumns[$col]['val_fun'],$col,$val,$this->info))
  1046. {
  1047. $this->valError = true;
  1048. $this->retArr[] = array('where' => 'javascript', 'value' => '$("'.$col.'_label_cell").setStyle("'.$this->valErrorStyles.'");');
  1049. }
  1050. else if(isset($this->tableColumns[$col]['req']) && $this->tableColumns[$col]['req'] && strlen($val) == 0)
  1051. {
  1052. $this->valError = true;
  1053. $this->retArr[] = array('where' => 'javascript', 'value' => '$("'.$col.'_label_cell").setStyle("'.$this->valErrorStyles.'");');
  1054. }
  1055. else if(!isset($this->tableColumns[$col]['hidden_edit']) || !$this->tableColumns[$col]['hidden_edit'])
  1056. {
  1057. $this->retArr[] = array('where' => 'javascript', 'value' => '$("'.$col.'_label_cell").setStyle("'.$this->noValErrorStyles.'");');
  1058. }
  1059. $afterEditArray[$col] = $val;
  1060. $val = $this->escapeData($val);
  1061. if(isset($this->tableColumns[$col]['mysql_edit_fun']))
  1062. {
  1063. $sets[] = $this->addTickMarks($col)." = ".$this->tableColumns[$col]['mysql_edit_fun']."('".$val."')";
  1064. }
  1065. else
  1066. {
  1067. $sets[] = $this->addTickMarks($col)." = '".$val."'";
  1068. }
  1069. }
  1070. }
  1071. if($this->valError)
  1072. {
  1073. $this->retArr[] = array('where' => 'javascript', 'value' => 'enableButtons();');
  1074. $this->retArr[] = array('layer_id' => 'titleLayer', 'where' => 'innerHTML', 'value' => $this->editRowTitle.'<div style="color: #f90d0d;">'.$this->langVars->errVal.'</div>');
  1075. }
  1076. else if(count($sets) > 0)
  1077. {
  1078. foreach($idArr as $index => $id)
  1079. {
  1080. $idArr[$index] = $this->escapeData($id);
  1081. }
  1082. if(!$this->hasRightsToRows($idArr) || !stristr($this->permissions,'E'))
  1083. {
  1084. $this->handleHacking();
  1085. }
  1086. $query = "update $this->tableName set ".implode(', ',$sets)." where $this->primaryKeyCol in ('".implode("','",$idArr)."')";
  1087. $result = $this->doQuery($query);
  1088. if($result)
  1089. {
  1090. if(!empty($this->afterEditFun) && is_callable($this->afterEditFun))
  1091. {
  1092. call_user_func($this->afterEditFun,$idArr,$this->primaryKeyCol,$afterEditArray);
  1093. }
  1094. }
  1095. if($hasFileUpload)
  1096. {
  1097. $idInputHtml = '<input type="hidden" name="'.$this->inputIdPrefix.$this->primaryKeyCol.'" value="'.htmlspecialchars(serialize($insertId)).'" />';
  1098. $this->retArr[] = array('where' => 'javascript', 'value' => '$(\''.$this->varPrefix.'_add_edit_form\').insert(\''.$idInputHtml.'\');');
  1099. $this->retArr[] = array('where' => 'javascript', 'value' => 'submitFileUploadForm(\''.$this->varPrefix.'\');');
  1100. }
  1101. else
  1102. {
  1103. $this->updateHtml();
  1104. }
  1105. }
  1106. }
  1107. function updateRow()
  1108. {
  1109. $this->valError = false;
  1110. $sets = array();
  1111. $afterEditArray = array();
  1112. $oldPrimaryKeyValue = $this->escapeData($this->info->old_primary_key_value);
  1113. if(!$this->hasRightsToRow($oldPrimaryKeyValue) || !stristr($this->permissions,'E'))
  1114. {
  1115. $this->handleHacking();
  1116. }
  1117. unset($this->info->old_primary_key_value);
  1118. $this->info = get_object_vars($this->info);
  1119. $insertId = isset($this->info[$this->primaryKeyCol]) ? $this->info[$this->primaryKeyCol] : $oldPrimaryKeyValue;
  1120. $hasFileUpload = isset($this->info['submit_mate_file_upload']) ? true : false;
  1121. unset($this->info['submit_mate_file_upload']);
  1122. foreach($this->info as $col => $val)
  1123. {
  1124. $col = str_replace($this->inputIdPrefix,'',$col);
  1125. if(isset($this->tableColumns[$col]))
  1126. {
  1127. // Check to make sure the column has edit permissions.
  1128. if(!stristr($this->tableColumns[$col]['perms'],'E'))
  1129. {
  1130. $this->handleHacking();
  1131. }
  1132. if(isset($this->tableColumns[$col]['on_edit_fun']) && is_callable($this->tableColumns[$col]['on_edit_fun']))
  1133. {
  1134. $val = call_user_func($this->tableColumns[$col]['on_edit_fun'],$col,$val,$this->info);
  1135. }
  1136. // Check Validation
  1137. if(isset($this->tableColumns[$col]['val_fun']) && is_callable($this->tableColumns[$col]['val_fun']) && !call_user_func($this->tableColumns[$col]['val_fun'],$col,$val,$this->info))
  1138. {
  1139. $this->valError = true;
  1140. $this->retArr[] = array('where' => 'javascript', 'value' => '$("'.$col.'_label_cell").setStyle("'.$this->valErrorStyles.'");');
  1141. }
  1142. else if(isset($this->tableColumns[$col]['req']) && $this->tableColumns[$col]['req'])
  1143. {
  1144. if(strlen($val) == 0)
  1145. {
  1146. $this->valError = true;
  1147. $this->retArr[] = array('where' => 'javascript', 'value' => '$("'.$col.'_label_cell").setStyle("'.$this->valErrorStyles.'");');
  1148. }
  1149. else if(isset($this->tableColumns[$col]['calendar']) && substr($val,0,10) == '0000-00-00')
  1150. {
  1151. $this->valError = true;
  1152. $this->retArr[] = array('where' => 'javascript', 'value' => '$("'.$col.'_label_cell").setStyle("'.$this->valErrorStyles.'");');
  1153. }
  1154. }
  1155. else if(!isset($this->tableColumns[$col]['hidden_edit']) || !$this->tableColumns[$col]['hidden_edit'])
  1156. {
  1157. $this->retArr[] = array('where' => 'javascript', 'value' => '$("'.$col.'_label_cell").setStyle("'.$this->noValErrorStyles.'");');
  1158. }
  1159. $val = $this->escapeData($val);
  1160. if(isset($this->tableColumns[$col]['mysql_edit_fun']))
  1161. {
  1162. $sets[] = $this->addTickMarks($col)." = ".$this->tableColumns[$col]['mysql_edit_fun']."('".$val."')";
  1163. $afterEditArray[$col] = $val;
  1164. }
  1165. else
  1166. {
  1167. // Harel Levin 29/07/2011
  1168. if(isset($this->tableColumns[$col]['calendar']))
  1169. {
  1170. $date_array = explode('-',$val);
  1171. include_once ('FormManager.php');
  1172. $form_manager = new FormManager();
  1173. $val = $form_manager->setUnixTimeFromDateTime($date_array[0], $date_array[1], $date_array[2]);
  1174. }
  1175. $sets[] = $this->addTickMarks($col)." = '".$val."'";
  1176. $afterEditArray[$col] = $val;
  1177. }
  1178. }
  1179. }
  1180. if($this->valError)
  1181. {
  1182. $this->retArr[] = array('where' => 'javascript', 'value' => 'enableButtons();');
  1183. $this->retArr[] = array('layer_id' => 'titleLayer', 'where' => 'innerHTML', 'value' => $this->editRowTitle.'<div style="color: #f90d0d;">'.$this->langVars->errVal.'</div>');
  1184. }
  1185. else if(count($sets) > 0)
  1186. {
  1187. $query = "update $this->tableName set ".implode(', ',$sets)." where $this->primaryKeyCol = '$oldPrimaryKeyValue'";
  1188. $result = $this->doQuery($query);
  1189. if($result)
  1190. {
  1191. if(!empty($this->afterEditFun) && is_callable($this->afterEditFun))
  1192. {
  1193. call_user_func($this->afterEditFun,$oldPrimaryKeyValue,$this->primaryKeyCol,$afterEditArray);
  1194. }
  1195. }
  1196. if($hasFileUpload)
  1197. {
  1198. $idInputHtml = '<input type="hidden" name="'.$this->inputIdPrefix.$this->primaryKeyCol.'" value="'.htmlspecialchars(serialize($insertId)).'" />';
  1199. $this->retArr[] = array('where' => 'javascript', 'value' => '$(\''.$this->varPrefix.'_add_edit_form\').insert(\''.$idInputHtml.'\');');
  1200. $this->retArr[] = array('where' => 'javascript', 'value' => 'submitFileUploadForm(\''.$this->varPrefix.'\');');
  1201. }
  1202. else
  1203. {
  1204. $this->updateHtml();
  1205. }
  1206. }
  1207. }
  1208. function insertRow()
  1209. {
  1210. $this->valError = false;
  1211. $this->info = get_object_vars($this->info);
  1212. $hasFileUpload = isset($this->info['submit_mate_file_upload']) ? true : false;
  1213. $insertId = isset($this->info[$this->primaryKeyCol]) ? $this->info[$this->primaryKeyCol] : '';
  1214. unset($this->info['submit_mate_file_upload']);
  1215. $sets = array();
  1216. $afterAddArray = array();
  1217. if(!stristr($this->permissions,'A'))
  1218. {
  1219. $this->handleHacking();
  1220. }
  1221. foreach($this->info as $col => $val)
  1222. {
  1223. if(is_array($val))
  1224. {
  1225. $temp_info = $this->info;
  1226. for($i=0;$i<count($val);$i++)
  1227. {
  1228. $temp_info[$col] = $val[$i];
  1229. $this->info = (object) $temp_info;
  1230. $temp_info[$this->primaryKeyCol]++;
  1231. $this->insertRow();
  1232. }
  1233. return;
  1234. }
  1235. $col = str_replace($this->inputIdPrefix,'',$col);
  1236. // Check to make sure the column has add permissions
  1237. if(!stristr($this->tableColumns[$col]['perms'],'A'))
  1238. {
  1239. $this->handleHacking();
  1240. }
  1241. if(isset($this->tableColumns[$col]['on_add_fun']) && is_callable($this->tableColumns[$col]['on_add_fun']))
  1242. {
  1243. $val = call_user_func($this->tableColumns[$col]['on_add_fun'],$col,$val,$this->info);
  1244. }
  1245. // Check Validation
  1246. if(isset($this->tableColumns[$col]['val_fun']) && is_callable($this->tableColumns[$col]['val_fun']) && !call_user_func($this->tableColumns[$col]['val_fun'],$col,$val,$this->info))
  1247. {
  1248. $this->valError = true;
  1249. $this->retArr[] = array('where' => 'javascript', 'value' => '$("'.$col.'_label_cell").setStyle("'.$this->valErrorStyles.'");');
  1250. }
  1251. else if(isset($this->tableColumns[$col]['req']) && $this->tableColumns[$col]['req'])
  1252. {
  1253. if(strlen($val) == 0)
  1254. {
  1255. $this->valError = true;
  1256. $this->retArr[] = array('where' => 'javascript', 'value' => '$("'.$col.'_label_cell").setStyle("'.$this->valErrorStyles.'");');
  1257. }
  1258. else if(isset($this->tableColumns[$col]['calendar']) && substr($val,0,10) == '0000-00-00')
  1259. {
  1260. $this->valError = true;
  1261. $this->retArr[] = array('where' => 'javascript', 'value' => '$("'.$col.'_label_cell").setStyle("'.$this->valErrorStyles.'");');
  1262. }
  1263. else if(strlen($val) > 0 && (!isset($this->tableColumns[$col]['hidden_add']) || !$this->tableColumns[$col]['hidden_add']))
  1264. {
  1265. $this->retArr[] = array('where' => 'javascript', 'value' => '$("'.$col.'_label_cell").setStyle("'.$this->noValErrorStyles.'");');
  1266. }
  1267. }
  1268. else if(!isset($this->tableColumns[$col]['hidden_add']) || !$this->tableColumns[$col]['hidden_add'])
  1269. {
  1270. $this->retArr[] = array('where' => 'javascript', 'value' => '$("'.$col.'_label_cell").setStyle("'.$this->noValErrorStyles.'");');
  1271. }
  1272. $val = $this->escapeData($val);
  1273. if(isset($this->tableColumns[$col]['mysql_add_fun']))
  1274. {
  1275. $sets[] = $this->addTickMarks($col)." = ".$this->tableColumns[$col]['mysql_add_fun']."('".$val."')";
  1276. $afterAddArray[$col] = $val;
  1277. }
  1278. else
  1279. {
  1280. // Harel Levin 29/07/2011
  1281. if(isset($this->tableColumns[$col]['calendar']))
  1282. {
  1283. $date_array = explode('-',$val);
  1284. include_once ('FormManager.php');
  1285. $form_manager = new FormManager();
  1286. $val = $form_manager->setUnixTimeFromDateTime($date_array[0], $date_array[1], $date_array[2]);
  1287. }
  1288. $sets[] = $this->addTickMarks($col)." = '".$val."'";
  1289. $afterAddArray[$col] = $val;
  1290. }
  1291. }
  1292. if($this->valError)
  1293. {
  1294. $this->retArr[] = array('where' => 'javascript', 'value' => 'enableButtons();');
  1295. $this->retArr[] = array('layer_id' => 'titleLayer', 'where' => 'innerHTML', 'value' => $this->addRowTitle.'<div style="color: #f90d0d;">'.$this->langVars->errVal.'</div>');
  1296. }
  1297. else
  1298. {
  1299. $query = "insert into $this->tableName set ".implode(', ',$sets);
  1300. $result = $this->doQuery($query);
  1301. if($result)
  1302. {
  1303. $insertId = strlen($insertId) > 0 ? $insertId : mysql_insert_id();
  1304. if(!empty($this->afterAddFun) && is_callable($this->afterAddFun))
  1305. {
  1306. call_user_func($this->afterAddFun,$insertId,$this->primaryKeyCol,$afterAddArray);
  1307. }
  1308. }
  1309. if($hasFileUpload)
  1310. {
  1311. $idInputHtml = '<input type="hidden" name="'.$this->inputIdPrefix.$this->primaryKeyCol.'" value="'.htmlspecialchars(serialize($insertId)).'" />';
  1312. $idInputHtml .= '<input type="hidden" name="'.$this->inputIdPrefix.'_mate_was_inserting_new_row" value="true" />';
  1313. $this->retArr[] = array('where' => 'javascript', 'value' => '$(\''.$this->varPrefix.'_add_edit_form\').insert(\''.$idInputHtml.'\');');
  1314. $this->retArr[] = array('where' => 'javascript', 'value' => 'submitFileUploadForm(\''.$this->varPrefix.'\');');
  1315. }
  1316. else
  1317. {
  1318. $this->updateHtml();
  1319. }
  1320. }
  1321. }
  1322. function addRow()
  1323. {
  1324. if(stristr($this->permissions,'A'))
  1325. {
  1326. $html = '';
  1327. $rowHtml = '';
  1328. $jsAddFun = 'addRow(\''.$this->varPrefix.'\');';
  1329. $calJs = array();
  1330. $formInfo = '';
  1331. $iFrameHtml = '';
  1332. $hasFileUpload = false;
  1333. foreach($this->tableColumns as $col => $info)
  1334. {
  1335. if(stristr($info['perms'],'A') && !isset($info['join']['real_column']))
  1336. {
  1337. $def

Large files files are truncated, but you can click here to view the full file