PageRenderTime 58ms CodeModel.GetById 18ms RepoModel.GetById 1ms app.codeStats 1ms

/php/AjaxTableEditorFucked.php

https://bitbucket.org/nyfer/realestateapp
PHP | 2872 lines | 2670 code | 114 blank | 88 comment | 591 complexity | cacab69f37e03794792b7ceb179ad3de 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'] : 20;
  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. }
  164. function setConfig($var,$val)
  165. {
  166. if($var == 'varPrefix')
  167. {
  168. // If the variable prefix changed, update variables with session values
  169. $varPrefix = $val;
  170. foreach($_SESSION as $sessKey => $sessValue)
  171. {
  172. if(substr($sessKey,0,strlen($varPrefix)) == $varPrefix)
  173. {
  174. $varName = str_replace($varPrefix,'',$sessKey);
  175. $this->{$varName} = $sessValue;
  176. }
  177. }
  178. }
  179. if(!isset($_SESSION[$this->varPrefix.$var]))
  180. {
  181. $this->{$var} = $val;
  182. }
  183. }
  184. function doDefault()
  185. {
  186. if(isset($this->userActions[$this->action]) && is_callable($this->userActions[$this->action]))
  187. {
  188. call_user_func($this->userActions[$this->action],$this->info);
  189. }
  190. else
  191. {
  192. $this->warnings[] = sprintf($this->langVars->errNoAction,$this->action);
  193. }
  194. }
  195. function displayInformation()
  196. {
  197. if(!empty($this->information))
  198. {
  199. $this->retArr[] = array('layer_id' => 'information', 'where' => 'innerHTML', 'value' => implode('<br /><br />',$this->information));
  200. }
  201. }
  202. function displayWarnings()
  203. {
  204. if(!empty($this->warnings))
  205. {
  206. $this->retArr[] = array('where' => 'javascript', 'value' => 'alert(\''.implode('\n',$this->warnings).'\');');
  207. }
  208. }
  209. function doQuery($query)
  210. {
  211. $result = mysql_query($query);
  212. //print $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_row':
  410. $this->execute_row();
  411. break;
  412. default :
  413. $this->doDefault();
  414. }
  415. }
  416. // my add !
  417. function execute_row () {
  418. }
  419. function handleFilterSearch()
  420. {
  421. foreach($this->info->filters as $filterInfo)
  422. {
  423. if(strlen($filterInfo->filterStr) > 0)
  424. {
  425. $_SESSION[$this->varPrefix.'filterSearches'][$filterInfo->filterCol] = $filterInfo->filterStr;
  426. }
  427. else if(isset($_SESSION[$this->varPrefix.'filterSearches'][$filterInfo->filterCol]))
  428. {
  429. unset($_SESSION[$this->varPrefix.'filterSearches'][$filterInfo->filterCol]);
  430. }
  431. }
  432. $this->filterSearches = isset($_SESSION[$this->varPrefix.'filterSearches']) ? $_SESSION[$this->varPrefix.'filterSearches'] : array();
  433. $_SESSION[$this->varPrefix.'start'] = 0;
  434. $this->updateHtml();
  435. if(isset($this->info->currentFilterId) && strlen($this->info->currentFilterId) > 0)
  436. {
  437. $this->retArr[] = array('where' => 'javascript', 'value' => '$("'.$this->info->currentFilterId.'").focus();');
  438. }
  439. }
  440. function resetColumnOrder()
  441. {
  442. $query = "update mate_columns set order_num = '0' where mate_var_prefix = '".$this->escapeData($this->varPrefix)."'";
  443. $result = $this->doQuery($query);
  444. if($result)
  445. {
  446. $this->orderColumnsScreen();
  447. }
  448. }
  449. function unsetColSessVars($column)
  450. {
  451. if($this->searchType == 'advanced' && isset($_SESSION[$this->varPrefix.'advSearches']))
  452. {
  453. foreach($_SESSION[$this->varPrefix.'advSearches'] as $key => $searchInfo)
  454. {
  455. if(isset($searchInfo['cols']) && $searchInfo['cols'] == $column)
  456. {
  457. $_SESSION[$this->varPrefix.'advSearches'][$key] = array();
  458. }
  459. }
  460. }
  461. if(isset($_SESSION[$this->varPrefix.'filterSearches'][$column]))
  462. {
  463. unset($_SESSION[$this->varPrefix.'filterSearches'][$column]);
  464. }
  465. if(isset($_SESSION[$this->varPrefix.'obc']) && $_SESSION[$this->varPrefix.'obc'] == $column)
  466. {
  467. unset($_SESSION[$this->varPrefix.'obc']);
  468. }
  469. }
  470. function unsetHiddenColumns()
  471. {
  472. if(stristr($this->permissions,'H') && $this->setMateUserId())
  473. {
  474. foreach($this->tableColumns as $col => $info)
  475. {
  476. if(stristr($info['perms'],'H') && $col != $this->primaryKeyCol)
  477. {
  478. $hidden = isset($info['hidden']) ? $info['hidden'] : false;
  479. if($this->columnIsHidden($col,$hidden))
  480. {
  481. unset($this->tableColumns[$col]);
  482. }
  483. }
  484. }
  485. }
  486. }
  487. function columnIsHidden($column,$hidden = false)
  488. {
  489. $rv = false;
  490. $query = "select id, hidden from mate_columns where mate_user_id = '$this->mateUserId' and mate_var_prefix = '$this->varPrefix' and mate_column = '$column'";
  491. $result = $this->doQuery($query);
  492. if($row = mysql_fetch_assoc($result))
  493. {
  494. if($row['hidden'] == 'Yes')
  495. {
  496. $rv = true;
  497. }
  498. }
  499. else if($hidden)
  500. {
  501. $rv = true;
  502. }
  503. return $rv;
  504. }
  505. function showColumn()
  506. {
  507. if($this->setMateUserId())
  508. {
  509. $column = $this->escapeData($this->info);
  510. $query = "select id from mate_columns where mate_user_id = '$this->mateUserId' and mate_var_prefix = '$this->varPrefix' and mate_column = '$column'";
  511. $result = $this->doQuery($query);
  512. if($row = mysql_fetch_assoc($result))
  513. {
  514. $mateColId = $row['id'];
  515. $query = "update mate_columns set hidden = 'No' where id = '$mateColId'";
  516. $result = $this->doQuery($query);
  517. }
  518. else
  519. {
  520. $query = "insert into mate_columns set mate_user_id = '$this->mateUserId', mate_var_prefix = '$this->varPrefix', mate_column = '$column', hidden = 'No', date_updated = NOW()";
  521. $result = $this->doQuery($query);
  522. }
  523. }
  524. }
  525. function hideColumn()
  526. {
  527. if($this->setMateUserId())
  528. {
  529. $column = $this->escapeData($this->info);
  530. if(isset($this->tableColumns[$column]['perms']) && stristr($this->tableColumns[$column]['perms'],'H'))
  531. {
  532. $query = "select id from mate_columns where mate_user_id = '$this->mateUserId' and mate_var_prefix = '$this->varPrefix' and mate_column = '$column'";
  533. $result = $this->doQuery($query);
  534. if($row = mysql_fetch_assoc($result))
  535. {
  536. $mateColId = $row['id'];
  537. $query = "update mate_columns set hidden = 'Yes' where id = '$mateColId'";
  538. $result = $this->doQuery($query);
  539. }
  540. else
  541. {
  542. $query = "insert into mate_columns set mate_user_id = '$this->mateUserId', mate_var_prefix = '$this->varPrefix', mate_column = '$column', hidden = 'Yes', date_updated = NOW()";
  543. $result = $this->doQuery($query);
  544. }
  545. $this->unsetColSessVars($column);
  546. }
  547. }
  548. }
  549. function setMateUserId()
  550. {
  551. if(strlen($this->mateUserId) > 0)
  552. {
  553. return true;
  554. }
  555. else if(isset($_COOKIE['mate_user_id']) && strlen($_COOKIE['mate_user_id']) > 0)
  556. {
  557. $this->mateUserId = $_COOKIE['mate_user_id'];
  558. return true;
  559. }
  560. else
  561. {
  562. $this->mateUserId = md5(uniqid(rand(),1));
  563. if(setcookie('mate_user_id',$this->mateUserId,time() + 60*60*24*7*365*2))
  564. {
  565. return true;
  566. }
  567. else
  568. {
  569. $this->warnings[] = 'Your browser must accept cookies in order to show/hide columns.';
  570. return false;
  571. }
  572. }
  573. }
  574. function showHideColumns()
  575. {
  576. if(stristr($this->permissions,'H'))
  577. {
  578. if($this->setMateUserId())
  579. {
  580. $html = '<table '.$this->showHideTableInfo.'><tr style="font-weight: bold;"><td>'.$this->langVars->ttlColumn.'</td><td>'.$this->langVars->ttlCheckBox.'</td></tr>';
  581. foreach($this->tableColumns as $col => $info)
  582. {
  583. if(stristr($info['perms'],'H') && $col != $this->primaryKeyCol)
  584. {
  585. $checked = 'checked="checked"';
  586. $hidden = isset($info['hidden']) ? $info['hidden'] : false;
  587. if($this->columnIsHidden($col,$hidden))
  588. {
  589. $checked = '';
  590. }
  591. $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>';
  592. }
  593. }
  594. $html .= '</table>';
  595. $this->retArr[] = array('layer_id' => 'titleLayer', 'where' => 'innerHTML', 'value' => $this->showHideTitle);
  596. $this->retArr[] = array('layer_id' => 'recordLayer', 'where' => 'innerHTML', 'value' => '');
  597. $this->retArr[] = array('layer_id' => 'filterLayer', 'where' => 'innerHTML', 'value' => '');
  598. $this->retArr[] = array('layer_id' => 'searchButtonsLayer', 'where' => 'innerHTML', 'value' => '<button onclick="toAjaxTableEditor(\'update_html\',\'\');">'.$this->langVars->btnBack.'</button>');
  599. $this->retArr[] = array('layer_id' => 'tableLayer', 'where' => 'innerHTML', 'value' => $html);
  600. //$this->retArr[] = array('where' => 'javascript', 'value' => "resetScrollTop();");
  601. if(is_callable($this->showHideScreenFun))
  602. {
  603. call_user_func($this->showHideScreenFun);
  604. }
  605. }
  606. }
  607. }
  608. function orderColumnsScreen()
  609. {
  610. if(stristr($this->permissions,'O'))
  611. {
  612. $html = '';
  613. $this->unsetHiddenColumns();
  614. $this->setColumnOrder();
  615. if($this->setMateUserId())
  616. {
  617. $html .= '<ul id="columnOrderList">';
  618. foreach($this->tableColumns as $col => $info)
  619. {
  620. if(stristr($info['perms'],'O'))
  621. {
  622. $html .= '<li id="columnOrderList_'.str_replace('_','-.-UNDERSCORE-.-',$col).'" class="orderColumnClass">'.$info['display_text'].'</li>';
  623. }
  624. }
  625. $html .= '</ul>';
  626. $this->retArr[] = array('layer_id' => 'titleLayer', 'where' => 'innerHTML', 'value' => $this->orderColTitle);
  627. $this->retArr[] = array('layer_id' => 'recordLayer', 'where' => 'innerHTML', 'value' => '');
  628. $this->retArr[] = array('layer_id' => 'filterLayer', 'where' => 'innerHTML', 'value' => '');
  629. $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>');
  630. $this->retArr[] = array('layer_id' => 'tableLayer', 'where' => 'innerHTML', 'value' => $html);
  631. //$this->retArr[] = array('where' => 'javascript', 'value' => "resetScrollTop();");
  632. $javascript = 'Sortable.create("columnOrderList",{dropOnEmpty:false,constraint:false,onUpdate:function(element){var info = Sortable.serialize(element.id); toAjaxTableEditor("update_column_order",info); } });';
  633. $this->retArr[] = array('where' => 'javascript', 'value' => $javascript);
  634. if(is_callable($this->orderColScreenFun))
  635. {
  636. call_user_func($this->orderColScreenFun);
  637. }
  638. }
  639. }
  640. }
  641. function updateColumnOrder()
  642. {
  643. if($this->setMateUserId())
  644. {
  645. if(stristr($this->permissions,'O'))
  646. {
  647. parse_str($this->info);
  648. $orderNum = 1;
  649. foreach($columnOrderList as $col)
  650. {
  651. $col = str_replace('-.-UNDERSCORE-.-','_',$col);
  652. if(isset($this->tableColumns[$col]['perms']) && stristr($this->tableColumns[$col]['perms'],'O'))
  653. {
  654. $query = "select id from mate_columns where mate_user_id = '$this->mateUserId' and mate_var_prefix = '$this->varPrefix' and mate_column = '$col'";
  655. $result = $this->doQuery($query);
  656. if($row = mysql_fetch_assoc($result))
  657. {
  658. $mateColId = $row['id'];
  659. $query = "update mate_columns set order_num = '$orderNum' where id = '$mateColId'";
  660. $result = $this->doQuery($query);
  661. }
  662. else
  663. {
  664. $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()";
  665. $result = $this->doQuery($query);
  666. }
  667. $orderNum++;
  668. }
  669. }
  670. }
  671. }
  672. }
  673. function setColumnOrder()
  674. {
  675. if(stristr($this->permissions,'O'))
  676. {
  677. if($this->setMateUserId())
  678. {
  679. $newTableColumns = array();
  680. $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";
  681. $result = $this->doQuery($query);
  682. while($row = mysql_fetch_assoc($result))
  683. {
  684. if(isset($this->tableColumns[$row['mate_column']]) && stristr($this->tableColumns[$row['mate_column']]['perms'],'O'))
  685. {
  686. $newTableColumns[$row['mate_column']] = $this->tableColumns[$row['mate_column']];
  687. unset($this->tableColumns[$row['mate_column']]);
  688. }
  689. }
  690. foreach($this->tableColumns as $col => $info)
  691. {
  692. $newTableColumns[$col] = $info;
  693. }
  694. $this->tableColumns = $newTableColumns;
  695. }
  696. }
  697. }
  698. function userButtonClicked()
  699. {
  700. $buttonKey = $this->info->buttonKey;
  701. if(isset($this->userButtons[$buttonKey]['pass_id_array']) && $this->userButtons[$buttonKey]['pass_id_array'])
  702. {
  703. $params = isset($this->userButtons[$buttonKey]['params']) ? $this->userButtons[$buttonKey]['params'] : array();
  704. call_user_func($this->userButtons[$buttonKey]['call_back_fun'],get_object_vars($this->info->checkboxes),$params);
  705. }
  706. else
  707. {
  708. foreach($this->info->checkboxes as $info)
  709. {
  710. $id = $this->escapeData($info);
  711. $query = "select * from $this->tableName where $this->primaryKeyCol = '$id'";
  712. $result = $this->doQuery($query);
  713. if($row = mysql_fetch_assoc($result))
  714. {
  715. if(isset($this->userButtons[$buttonKey]['call_back_fun']) && is_callable($this->userButtons[$buttonKey]['call_back_fun']))
  716. {
  717. $params = isset($this->userButtons[$buttonKey]['params']) ? $this->userButtons[$buttonKey]['params'] : array();
  718. call_user_func($this->userButtons[$buttonKey]['call_back_fun'],$row,$params);
  719. }
  720. }
  721. }
  722. }
  723. if(!(isset($this->userButtons[$buttonKey]['no_update']) && $this->userButtons[$buttonKey]['no_update']))
  724. {
  725. $this->updateHtml();
  726. }
  727. }
  728. function userIconClicked()
  729. {
  730. $id = $this->escapeData($this->info[0]);
  731. $iconKey = $this->escapeData($this->info[1]);
  732. $query = "select * from $this->tableName where $this->primaryKeyCol = '$id'";
  733. $result = $this->doQuery($query);
  734. if($row = mysql_fetch_assoc($result))
  735. {
  736. if(isset($this->userIcons[$iconKey]['call_back_fun']) && is_callable($this->userIcons[$iconKey]['call_back_fun']))
  737. {
  738. call_user_func($this->userIcons[$iconKey]['call_back_fun'],$row);
  739. }
  740. }
  741. if(!(isset($this->userIcons[$iconKey]['no_update']) && $this->userIcons[$iconKey]['no_update']))
  742. {
  743. $this->updateHtml();
  744. }
  745. }
  746. function copyMultRows()
  747. {
  748. foreach($this->info as $id)
  749. {
  750. $afterCopyArray = array();
  751. $id = $this->escapeData($id);
  752. if(!$this->hasRightsToRow($id))
  753. {
  754. $this->handleHacking();
  755. }
  756. $query = "select * from $this->tableName where $this->primaryKeyCol = '$id'";
  757. $result = $this->doQuery($query);
  758. if($row = mysql_fetch_assoc($result))
  759. {
  760. $sets = array();
  761. foreach($this->tableColumns as $col => $info)
  762. {
  763. if(stristr($info['perms'],'C') && !isset($info['join']['real_column']))
  764. {
  765. $val = $row[$col];
  766. if(isset($this->tableColumns[$col]['on_copy_fun']) && is_callable($this->tableColumns[$col]['on_copy_fun']))
  767. {
  768. $val = call_user_func($this->tableColumns[$col]['on_copy_fun'],$col,$val,$row);
  769. }
  770. $val = $this->escapeData($val);
  771. $sets[] = $this->addTickMarks($col)." = '".$val."'";
  772. $afterCopyArray[$col] = $val;
  773. }
  774. }
  775. $query2 = "insert into $this->tableName set ".implode(', ',$sets);
  776. $result2 = $this->doQuery($query2);
  777. if($result2 && isset($this->afterCopyFun) && is_callable($this->afterCopyFun))
  778. {
  779. call_user_func($this->afterCopyFun,mysql_insert_id(),$afterCopyArray);
  780. }
  781. }
  782. }
  783. }
  784. function copyRow()
  785. {
  786. $afterCopyArray = array();
  787. $id = $this->escapeData($this->info);
  788. if(!$this->hasRightsToRow($id))
  789. {
  790. $this->handleHacking();
  791. }
  792. $query = "select * from $this->tableName where $this->primaryKeyCol = '$id'";
  793. $result = $this->doQuery($query);
  794. if($row = mysql_fetch_assoc($result))
  795. {
  796. $sets = array();
  797. foreach($this->tableColumns as $col => $info)
  798. {
  799. if(stristr($info['perms'],'C') && !isset($info['join']['real_column']))
  800. {
  801. $val = $row[$col];
  802. if(isset($this->tableColumns[$col]['on_copy_fun']) && is_callable($this->tableColumns[$col]['on_copy_fun']))
  803. {
  804. $val = call_user_func($this->tableColumns[$col]['on_copy_fun'],$col,$val,$row);
  805. }
  806. $val = $this->escapeData($val);
  807. $sets[] = $this->addTickMarks($col)." = '".$val."'";
  808. $afterCopyArray[$col] = $val;
  809. }
  810. }
  811. $query2 = "insert into $this->tableName set ".implode(', ',$sets);
  812. $result2 = $this->doQuery($query2);
  813. if($result2 && isset($this->afterCopyFun) && is_callable($this->afterCopyFun))
  814. {
  815. call_user_func($this->afterCopyFun,mysql_insert_id(),$afterCopyArray);
  816. }
  817. }
  818. }
  819. function advancedSearch()
  820. {
  821. $_SESSION[$this->varPrefix.'start'] = 0;
  822. $this->info = get_object_vars($this->info);
  823. foreach($this->info as $i => $info)
  824. {
  825. $this->advSearches[$i] = get_object_vars($this->info[$i]);
  826. }
  827. $_SESSION[$this->varPrefix.'advSearches'] = $this->advSearches;
  828. }
  829. function exportInfo()
  830. {
  831. $this->unsetHiddenColumns();
  832. $this->setColumnOrder();
  833. $this->setPagingVars();
  834. $this->formatJoinClause();
  835. $this->formatSelectClause();
  836. $this->formatWhereClause();
  837. $this->setNumResults();
  838. $csvInfo = '';
  839. $csvLb = "\r\n";
  840. $this->extraOrderByInfo = empty($this->extraOrderByInfo) ? '' : ', '.$this->extraOrderByInfo;
  841. $query = $this->selectClause.' '.$this->joinClause.' '.$this->whereClause.' order by '.$this->addTickMarks($this->orderByColumn).' '.$this->getAscOrDesc().' '.$this->extraOrderByInfo;
  842. $result = $this->doQuery($query);
  843. if(mysql_num_rows($result) > 0)
  844. {
  845. $csvRow = array();
  846. foreach($this->tableColumns as $col => $info)
  847. {
  848. if(stristr($info['perms'],'X'))
  849. {
  850. $csvRow[] = '"'.$info['display_text'].'"';
  851. }
  852. }
  853. $csvInfo .= implode(',', $csvRow).$csvLb;
  854. while($row = mysql_fetch_assoc($result))
  855. {
  856. $csvRow = array();
  857. foreach($this->tableColumns as $col => $info)
  858. {
  859. $value = '';
  860. if(stristr($info['perms'],'X'))
  861. {
  862. $value = $row[$col];
  863. if(isset($info['csv_export_fun']) && is_callable($info['csv_export_fun']))
  864. {
  865. $value = call_user_func($info['csv_export_fun'],$col,$value,$row);
  866. }
  867. $csvRow[] = '"'.str_replace(array("\r", "\n", '"'),array('','','""'),$value).'"';
  868. }
  869. }
  870. $csvInfo .= implode(',', $csvRow).$csvLb;
  871. }
  872. return $csvInfo;
  873. }
  874. }
  875. function formatIcons($id,$row)
  876. {
  877. $html = '';
  878. $numIcons = 0;
  879. if(stristr($this->permissions,'V') && stristr($this->removeIcons,'V') === false)
  880. {
  881. $html .= '<li class="info"><a href="javascript: toAjaxTableEditor(\'view_row\',\''.$id.'\');" title="'.$this->langVars->ttlInfo.'"></a></li>';
  882. $numIcons++;
  883. }
  884. if(stristr($this->permissions,'E') && stristr($this->removeIcons,'E') === false)
  885. {
  886. $html .= '<li class="edit"><a href="javascript: toAjaxTableEditor(\'edit_row\',\''.$id.'\');" title="'.$this->langVars->ttlEdit.'"></a></li>';
  887. $numIcons++;
  888. }
  889. if(stristr($this->permissions,'C') && stristr($this->removeIcons,'C') === false)
  890. {
  891. $html .= '<li class="copy"><a href="javascript: toAjaxTableEditor(\'copy_row\',\''.$id.'\');" title="'.$this->langVars->ttlCopy.'"></a></li>';
  892. $numIcons++;
  893. }
  894. if(stristr($this->permissions,'D') && stristr($this->removeIcons,'D') === false)
  895. {
  896. $html .= '<li class="delete"><a href="javascript: confirmDeleteRow(\''.$id.'\')" title="'.$this->langVars->ttlDelete.'"></a></li>';
  897. $numIcons++;
  898. }
  899. // my add !
  900. if(stristr($this->permissions,'Z') && stristr($this->removeIcons,'Z') === false)
  901. {
  902. $html .= '<li class="execute" id="execute_row_li"><a href="mng_handler.php?execute=1&table_name='.$this->tableName.'&id='.$id.'"title="" ></a> </li>';
  903. //$html .= '<li class="execute" id="execute_row_li"><a href="javascript: toAjaxTableEditor(\'execute_row\',\''.$id.'\');" title="'.$this->langVars->ttlExecuteRow.'"></a></li>';
  904. $numIcons++;
  905. }
  906. //
  907. foreach($this->userIcons as $iconKey => $info)
  908. {
  909. if(isset($info['call_back_fun']) && is_callable($info['call_back_fun']))
  910. {
  911. $confirmMsg = isset($info['confirm_msg']) ? $info['confirm_msg'] : '';
  912. $html .= '<li class="'.$info['class'].'"><a href="javascript: userIconClicked(\'user_icon_clicked\',new Array(\''.$id.'\',\''.$iconKey.'\'),\''.$confirmMsg.'\')" title="'.$info['title'].'"></a></li>';
  913. $numIcons++;
  914. }
  915. else if(isset($info['icon_html']))
  916. {
  917. $info['icon_html'] = str_replace($this->replaceWithId,$id,$info['icon_html']);
  918. $html .= $info['icon_html'];
  919. $numIcons++;
  920. }
  921. else if(isset($info['format_fun']) && is_callable($info['format_fun']))
  922. {
  923. $userIconInfo = call_user_func($info['format_fun'],$row);
  924. $html .= $userIconInfo['icon_html'];
  925. $numIcons = $numIcons + $userIconInfo['num_icons'];
  926. }
  927. }
  928. if($numIcons > 0)
  929. {
  930. $width = $numIcons * 26;
  931. $html = '<td nowrap="nowrap"><ul class="actions" style="width: '.$width.'px;">'.$html.'</ul></td>';
  932. }
  933. return $html;
  934. }
  935. function viewRow()
  936. {
  937. if(stristr($this->permissions,'V'))
  938. {
  939. $html = '';
  940. $id = $this->escapeData($this->info);
  941. $this->formatJoinClause();
  942. $this->formatSelectClause();
  943. $query = $this->selectClause.' '.$this->joinClause.' where '.$this->tableName.'.'.$this->primaryKeyCol." = '$id'";
  944. $result = $this->doQuery($query);
  945. if($row = mysql_fetch_assoc($result))
  946. {
  947. $html .= '<table '.$this->viewTableInfo.'>';
  948. foreach($this->tableColumns as $col => $info)
  949. {
  950. if(stristr($info['perms'],'V'))
  951. {
  952. $value = $row[$col];
  953. if(isset($info['view_fun']) && is_callable($info['view_fun']))
  954. {
  955. $value = call_user_func($info['view_fun'],$col,$value,$row);
  956. }
  957. $value = strlen(trim($value)) > 0 ? $value : '&nbsp;';
  958. $html .= '<tr><td id="'.$col.'_label_cell" class="labelCell">'.$info['display_text'].':</td><td id="'.$col.'_value_cell" class="valueCell">'.$value.'</td></tr>';
  959. }
  960. }
  961. if(isset($this->viewHtmlFun) && is_callable($this->viewHtmlFun))
  962. {
  963. $html .= call_user_func($this->viewHtmlFun,$row);
  964. }
  965. $html .= '</tr></table><div id="viewRowButtons">';
  966. if(stristr($this->permissions,'E'))
  967. {
  968. $html .= '<button class="ajaxButton" onclick="toAjaxTableEditor(\'edit_row\',\''.$id.'\');">'.$this->langVars->btnEdit.'</button>';
  969. }
  970. $html .= '<button class="ajaxButton" onclick="toAjaxTableEditor(\'update_html\',\'\');">'.$this->langVars->btnBack.'</button></div>';
  971. }
  972. $this->retArr[] = array('layer_id' => 'titleLayer', 'where' => 'innerHTML', 'value' => $this->viewRowTitle);
  973. $this->retArr[] = array('layer_id' => 'recordLayer', 'where' => 'innerHTML', 'value' => '');
  974. $this->retArr[] = array('layer_id' => 'filterLayer', 'where' => 'innerHTML', 'value' => '');
  975. $this->retArr[] = array('layer_id' => 'searchButtonsLayer', 'where' => 'innerHTML', 'value' => '');
  976. $this->retArr[] = array('layer_id' => 'tableLayer', 'where' => 'innerHTML', 'value' => $html);
  977. //$this->retArr[] = array('where' => 'javascript', 'value' => "resetScrollTop();");
  978. if(is_callable($this->viewScreenFun))
  979. {
  980. call_user_func($this->viewScreenFun);
  981. }
  982. }
  983. }
  984. function updateMultRows()
  985. {
  986. $this->valError = false;
  987. $sets = array();
  988. $afterEditArray = array();
  989. $idArr = is_object($this->info->idArr) ? get_object_vars($this->info->idArr) : $this->info->idArr;
  990. $inputInfo = get_object_vars($this->info->inputInfo);
  991. $insertId = $idArr;
  992. $hasFileUpload = isset($inputInfo['submit_mate_file_upload']) ? true : false;
  993. unset($inputInfo['submit_mate_file_upload']);
  994. foreach($inputInfo as $col => $val)
  995. {
  996. $col = str_replace($this->inputIdPrefix,'',$col);
  997. if(isset($this->tableColumns[$col]))
  998. {
  999. // Check to make sure the column has edit permissions.
  1000. if(!stristr($this->tableColumns[$col]['perms'],'E'))
  1001. {
  1002. $this->handleHacking();
  1003. }
  1004. if(isset($this->tableColumns[$col]['on_edit_fun']) && is_callable($this->tableColumns[$col]['on_edit_fun']))
  1005. {
  1006. $val = call_user_func($this->tableColumns[$col]['on_edit_fun'],$col,$val,$this->info);
  1007. }
  1008. // Check Validation
  1009. 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))
  1010. {
  1011. $this->valError = true;
  1012. $this->retArr[] = array('where' => 'javascript', 'value' => '$("'.$col.'_label_cell").setStyle("'.$this->valErrorStyles.'");');
  1013. }
  1014. else if(isset($this->tableColumns[$col]['req']) && $this->tableColumns[$col]['req'] && strlen($val) == 0)
  1015. {
  1016. $this->valError = true;
  1017. $this->retArr[] = array('where' => 'javascript', 'value' => '$("'.$col.'_label_cell").setStyle("'.$this->valErrorStyles.'");');
  1018. }
  1019. else if(!isset($this->tableColumns[$col]['hidden_edit']) || !$this->tableColumns[$col]['hidden_edit'])
  1020. {
  1021. $this->retArr[] = array('where' => 'javascript', 'value' => '$("'.$col.'_label_cell").setStyle("'.$this->noValErrorStyles.'");');
  1022. }
  1023. $afterEditArray[$col] = $val;
  1024. $val = $this->escapeData($val);
  1025. if(isset($this->tableColumns[$col]['mysql_edit_fun']))
  1026. {
  1027. $sets[] = $this->addTickMarks($col)." = ".$this->tableColumns[$col]['mysql_edit_fun']."('".$val."')";
  1028. }
  1029. else
  1030. {
  1031. $sets[] = $this->addTickMarks($col)." = '".$val."'";
  1032. }
  1033. }
  1034. }
  1035. if($this->valError)
  1036. {
  1037. $this->retArr[] = array('where' => 'javascript', 'value' => 'enableButtons();');
  1038. $this->retArr[] = array('layer_id' => 'titleLayer', 'where' => 'innerHTML', 'value' => $this->editRowTitle.'<div style="color: #f90d0d;">'.$this->langVars->errVal.'</div>');
  1039. }
  1040. else if(count($sets) > 0)
  1041. {
  1042. foreach($idArr as $index => $id)
  1043. {
  1044. $idArr[$index] = $this->escapeData($id);
  1045. }
  1046. if(!$this->hasRightsToRows($idArr) || !stristr($this->permissions,'E'))
  1047. {
  1048. $this->handleHacking();
  1049. }
  1050. $query = "update $this->tableName set ".implode(', ',$sets)." where $this->primaryKeyCol in ('".implode("','",$idArr)."')";
  1051. $result = $this->doQuery($query);
  1052. if($result)
  1053. {
  1054. if(!empty($this->afterEditFun) && is_callable($this->afterEditFun))
  1055. {
  1056. call_user_func($this->afterEditFun,$idArr,$this->primaryKeyCol,$afterEditArray);
  1057. }
  1058. }
  1059. if($hasFileUpload)
  1060. {
  1061. $idInputHtml = '<input type="hidden" name="'.$this->inputIdPrefix.$this->primaryKeyCol.'" value="'.htmlspecialchars(serialize($insertId)).'" />';
  1062. $this->retArr[] = array('where' => 'javascript', 'value' => '$(\''.$this->varPrefix.'_add_edit_form\').insert(\''.$idInputHtml.'\');');
  1063. $this->retArr[] = array('where' => 'javascript', 'value' => 'submitFileUploadForm(\''.$this->varPrefix.'\');');
  1064. }
  1065. else
  1066. {
  1067. $this->updateHtml();
  1068. }
  1069. }
  1070. }
  1071. function updateRow()
  1072. {
  1073. $this->valError = false;
  1074. $sets = array();
  1075. $afterEditArray = array();
  1076. $oldPrimaryKeyValue = $this->escapeData($this->info->old_primary_key_value);
  1077. if(!$this->hasRightsToRow($oldPrimaryKeyValue) || !stristr($this->permissions,'E'))
  1078. {
  1079. $this->handleHacking();
  1080. }
  1081. unset($this->info->old_primary_key_value);
  1082. $this->info = get_object_vars($this->info);
  1083. $insertId = isset($this->info[$this->primaryKeyCol]) ? $this->info[$this->primaryKeyCol] : $oldPrimaryKeyValue;
  1084. $hasFileUpload = isset($this->info['submit_mate_file_upload']) ? true : false;
  1085. unset($this->info['submit_mate_file_upload']);
  1086. foreach($this->info as $col => $val)
  1087. {
  1088. $col = str_replace($this->inputIdPrefix,'',$col);
  1089. if(isset($this->tableColumns[$col]))
  1090. {
  1091. // Check to make sure the column has edit permissions.
  1092. if(!stristr($this->tableColumns[$col]['perms'],'E'))
  1093. {
  1094. $this->handleHacking();
  1095. }
  1096. if(isset($this->tableColumns[$col]['on_edit_fun']) && is_callable($this->tableColumns[$col]['on_edit_fun']))
  1097. {
  1098. $val = call_user_func($this->tableColumns[$col]['on_edit_fun'],$col,$val,$this->info);
  1099. }
  1100. // Check Validation
  1101. 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))
  1102. {
  1103. $this->valError = true;
  1104. $this->retArr[] = array('where' => 'javascript', 'value' => '$("'.$col.'_label_cell").setStyle("'.$this->valErrorStyles.'");');
  1105. }
  1106. else if(isset($this->tableColumns[$col]['req']) && $this->tableColumns[$col]['req'])
  1107. {
  1108. if(strlen($val) == 0)
  1109. {
  1110. $this->valError = true;
  1111. $this->retArr[] = array('where' => 'javascript', 'value' => '$("'.$col.'_label_cell").setStyle("'.$this->valErrorStyles.'");');
  1112. }
  1113. else if(isset($this->tableColumns[$col]['calendar']) && substr($val,0,10) == '0000-00-00')
  1114. {
  1115. $this->valError = true;
  1116. $this->retArr[] = array('where' => 'javascript', 'value' => '$("'.$col.'_label_cell").setStyle("'.$this->valErrorStyles.'");');
  1117. }
  1118. }
  1119. else if(!isset($this->tableColumns[$col]['hidden_edit']) || !$this->tableColumns[$col]['hidden_edit'])
  1120. {
  1121. $this->retArr[] = array('where' => 'javascript', 'value' => '$("'.$col.'_label_cell").setStyle("'.$this->noValErrorStyles.'");');
  1122. }
  1123. $val = $this->escapeData($val);
  1124. if(isset($this->tableColumns[$col]['mysql_edit_fun']))
  1125. {
  1126. $sets[] = $this->addTickMarks($col)." = ".$this->tableColumns[$col]['mysql_edit_fun']."('".$val."')";
  1127. $afterEditArray[$col] = $val;
  1128. }
  1129. else
  1130. {
  1131. $sets[] = $this->addTickMarks($col)." = '".$val."'";
  1132. $afterEditArray[$col] = $val;
  1133. }
  1134. }
  1135. }
  1136. if($this->valError)
  1137. {
  1138. $this->retArr[] = array('where' => 'javascript', 'value' => 'enableButtons();');
  1139. $this->retArr[] = array('layer_id' => 'titleLayer', 'where' => 'innerHTML', 'value' => $this->editRowTitle.'<div style="color: #f90d0d;">'.$this->langVars->errVal.'</div>');
  1140. }
  1141. else if(count($sets) > 0)
  1142. {
  1143. $query = "update $this->tableName set ".implode(', ',$sets)." where $this->primaryKeyCol = '$oldPrimaryKeyValue'";
  1144. $result = $this->doQuery($query);
  1145. if($result)
  1146. {
  1147. if(!empty($this->afterEditFun) && is_callable($this->afterEditFun))
  1148. {
  1149. call_user_func($this->afterEditFun,$oldPrimaryKeyValue,$this->primaryKeyCol,$afterEditArray);
  1150. }
  1151. }
  1152. if($hasFileUpload)
  1153. {
  1154. $idInputHtml = '<input type="hidden" name="'.$this->inputIdPrefix.$this->primaryKeyCol.'" value="'.htmlspecialchars(serialize($insertId)).'" />';
  1155. $this->retArr[] = array('where' => 'javascript', 'value' => '$(\''.$this->varPrefix.'_add_edit_form\').insert(\''.$idInputHtml.'\');');
  1156. $this->retArr[] = array('where' => 'javascript', 'value' => 'submitFileUploadForm(\''.$this->varPrefix.'\');');
  1157. }
  1158. else
  1159. {
  1160. $this->updateHtml();
  1161. }
  1162. }
  1163. }
  1164. function insertRow()
  1165. {
  1166. $this->valError = false;
  1167. $this->info = get_object_vars($this->info);
  1168. $hasFileUpload = isset($this->info['submit_mate_file_upload']) ? true : false;
  1169. $insertId = isset($this->info[$this->primaryKeyCol]) ? $this->info[$this->primaryKeyCol] : '';
  1170. unset($this->info['submit_mate_file_upload']);
  1171. $sets = array();
  1172. $afterAddArray = array();
  1173. if(!stristr($this->permissions,'A'))
  1174. {
  1175. $this->handleHacking();
  1176. }
  1177. foreach($this->info as $col => $val)
  1178. {
  1179. $col = str_replace($this->inputIdPrefix,'',$col);
  1180. // Check to make sure the column has add permissions
  1181. if(!stristr($this->tableColumns[$col]['perms'],'A'))
  1182. {
  1183. $this->handleHacking();
  1184. }
  1185. if(isset($this->tableColumns[$col]['on_add_fun']) && is_callable($this->tableColumns[$col]['on_add_fun']))
  1186. {
  1187. $val = call_user_func($this->tableColumns[$col]['on_add_fun'],$col,$val,$this->info);
  1188. }
  1189. // Check Validation
  1190. 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))
  1191. {
  1192. $this->valError = true;
  1193. $this->retArr[] = array('where' => 'javascript', 'value' => '$("'.$col.'_label_cell").setStyle("'.$this->valErrorStyles.'");');
  1194. }
  1195. else if(isset($this->tableColumns[$col]['req']) && $this->tableColumns[$col]['req'])
  1196. {
  1197. if(strlen($val) == 0)
  1198. {
  1199. $this->valError = true;
  1200. $this->retArr[] = array('where' => 'javascript', 'value' => '$("'.$col.'_label_cell").setStyle("'.$this->valErrorStyles.'");');
  1201. }
  1202. else if(isset($this->tableColumns[$col]['calendar']) && substr($val,0,10) == '0000-00-00')
  1203. {
  1204. $this->valError = true;
  1205. $this->retArr[] = array('where' => 'javascript', 'value' => '$("'.$col.'_label_cell").setStyle("'.$this->valErrorStyles.'");');
  1206. }
  1207. else if(strlen($val) > 0 && (!isset($this->tableColumns[$col]['hidden_add']) || !$this->tableColumns[$col]['hidden_add']))
  1208. {
  1209. $this->retArr[] = array('where' => 'javascript', 'value' => '$("'.$col.'_label_cell").setStyle("'.$this->noValErrorStyles.'");');
  1210. }
  1211. }
  1212. else if(!isset($this->tableColumns[$col]['hidden_add']) || !$this->tableColumns[$col]['hidden_add'])
  1213. {
  1214. $this->retArr[] = array('where' => 'javascript', 'value' => '$("'.$col.'_label_cell").setStyle("'.$this->noValErrorStyles.'");');
  1215. }
  1216. $val = $this->escapeData($val);
  1217. if(isset($this->tableColumns[$col]['mysql_add_fun']))
  1218. {
  1219. $sets[] = $this->addTickMarks($col)." = ".$this->tableColumns[$col]['mysql_add_fun']."('".$val."')";
  1220. $afterAddArray[$col] = $val;
  1221. }
  1222. else
  1223. {
  1224. $sets[] = $this->addTickMarks($col)." = '".$val."'";
  1225. $afterAddArray[$col] = $val;
  1226. }
  1227. }
  1228. if($this->valError)
  1229. {
  1230. $this->retArr[] = array('where' => 'javascript', 'value' => 'enableButtons();');
  1231. $this->retArr[] = array('layer_id' => 'titleLayer', 'where' => 'innerHTML', 'value' => $this->addRowTitle.'<div style="color: #f90d0d;">'.$this->langVars->errVal.'</div>');
  1232. }
  1233. else
  1234. {
  1235. $query = "insert into $this->tableName set ".implode(', ',$sets);
  1236. $result = $this->doQuery($query);
  1237. if($result)
  1238. {
  1239. $insertId = strlen($insertId) > 0 ? $insertId : mysql_insert_id();
  1240. if(!empty($this->afterAddFun) && is_callable($this->afterAddFun))
  1241. {
  1242. call_user_func($this->afterAddFun,$insertId,$this->primaryKeyCol,$afterAddArray);
  1243. }
  1244. }
  1245. if($hasFileUpload)
  1246. {
  1247. $idInputHtml = '<input type="hidden" name="'.$this->inputIdPrefix.$this->primaryKeyCol.'" value="'.htmlspecialchars(serialize($insertId)).'" />';
  1248. $idInputHtml .= '<input type="hidden" name="'.$this->inputIdPrefix.'_mate_was_inserting_new_row" value="true" />';
  1249. $this->retArr[] = array('where' => 'javascript', 'value' => '$(\''.$this->varPrefix.'_add_edit_form\').insert(\''.$idInputHtml.'\');');
  1250. $this->retArr[] = array('where' => 'javascript', 'value' => 'submitFileUploadForm(\''.$this->varPrefix.'\');');
  1251. }
  1252. else
  1253. {
  1254. $this->updateHtml();
  1255. }
  1256. }
  1257. }
  1258. function addRow()
  1259. {
  1260. if(stristr($this->permissions,'A'))
  1261. {
  1262. $html = '';
  1263. $rowHtml = '';
  1264. $jsAddFun = 'addRow(\''.$this->varPrefix.'\');';
  1265. $calJs = array();
  1266. $formInfo = '';
  1267. $iFrameHtml = '';
  1268. $hasFileUpload = false;
  1269. foreach($this->tableColumns as $col => $info)
  1270. {
  1271. if(stristr($info['perms'],'A') && !isset($info['join']['real_column']))
  1272. {
  1273. $defVal = isset($info['default']) ? $info['default'] : '';
  1274. $inputInfo = isset($info['input_info']) ? $info['input_info'] : '';
  1275. $inputHtml = '';
  1276. if(isset($info['add_fun']) && is_callable($info['add_fun']))
  1277. {
  1278. $defVal = call_user_func($info['add_fun'],$col,$defVal,$inputInfo);
  1279. }
  1280. if(isset($info['format_input_fun']) && is_callable($info['format_input_fun']))
  1281. {
  1282. $inputHtml .= call_user_func($info['format_input_fun'],$col,$defVal,$inputInfo);
  1283. }
  1284. else if(isset($info['hidden_add']) && $info['hidden_add'])
  1285. {
  1286. $inputHtml .= '<input type="hidden" id="'.$this->inputIdPrefix.$col.'" value="'.htmlspecialchars($defVal).'" '.$inputInfo.' />';
  1287. }
  1288. else if(isset($info['select_query']))
  1289. {
  1290. $inputHtml .= $this->getSelect($info['select_query'],$this->inputIdPrefix.$col,$defVal,$inputInfo);
  1291. }
  1292. else if(isset($info['select_array']) && is_array($info['select_array']))
  1293. {
  1294. $inputHtml .= $this->getSelectFromArray($info['select_array'],$this->inputIdPrefix.$col,$defVal,$inputInfo);
  1295. }
  1296. else if(isset($info['textarea']))
  1297. {
  1298. $numRows = isset($info['textarea']['rows']) ? $info['textarea']['rows'] : 7;
  1299. $numCols = isset($info['textarea']['cols']) ? $info['textarea']['cols'] : 25;
  1300. $inputHtml .= '<textarea id="'.$this->inputIdPrefix.$col.'" rows="'.$numRows.'" cols="'.$numCols.'" value="'.htmlspecialchars($defVal).'" '.$inputInfo.' >'.htmlspecialchars($defVal).'</textarea>';
  1301. }
  1302. else if(isset($info['checkbox']))
  1303. {
  1304. $checkedValue = isset($info['checkbox']['checked_value']) ? $info['checkbox']['checked_value'] : '';
  1305. $unCheckedValue = isset($info['checkbox']['un_checked_value']) ? $info['checkbox']['un_checked_value'] : '';
  1306. $checked = $defVal == $checkedValue ? 'checked="checked"' : '';
  1307. $inputHtml .= '<input type="checkbox" id="'.$this->inputIdPrefix.$col.'" value="'.$defVal.'" onclick="updateCheckBoxValue(this,\''.$checkedValue.'\',\''.$unCheckedValue.'\');" '.$checked.' '.$inputInfo.' />';
  1308. }
  1309. else if(isset($info['file_upload']) && is_array($info['file_upload']))
  1310. {
  1311. $inputHtml .= '<input type="file" name="'.$this->inputIdPrefix.$col.'" id="'.$this->inputIdPrefix.$col.'" '.$inputInfo.' />';
  1312. $hasFileUpload = true;
  1313. }
  1314. else if(isset($info['join']) && is_array($info['join']))
  1315. {
  1316. $joinTable = !empty($info['join']['db']) ? $info['join']['db'].'.'.$info['join']['table'] : $info['join']['table'];
  1317. $info['join']['display_mask'] = isset($info['join']['display_mask']) ? $info['join']['display_mask'] : $joinTable.'.'.$info['join']['column'];
  1318. $selectQuery = 'select distinct('.$info['join']['column'].'), '.$info['join']['display_mask'].' from '.$joinTable.' order by '.$info['join']['display_mask'].' asc';
  1319. $inputHtml .= $this->getSelect($selectQuery,$this->inputIdPrefix.$col,$defVal,$inputInfo);
  1320. }
  1321. else if(isset($info['calendar']))
  1322. {
  1323. $inputHtml .= '<span><input type="hidden" id="'.$this->inputIdPrefix.$col.'" value="'.htmlspecialchars($defVal).'" /></span>';
  1324. }
  1325. else
  1326. {
  1327. $maxLength = isset($info['maxlen']) ? 'maxlength="'.$info['maxlen'].'"' : '';
  1328. $inputHtml .= '<input type="text" id="'.$this->inputIdPrefix.$col.'" value="'.htmlspecialchars($defVal).'" '.$maxLength.' onKeyPress="if(enterPressed(event)){'.$jsAddFun.' return false;}" '.$inputInfo.' />';
  1329. }
  1330. if(isset($info['hidden_add']) && $info['hidden_add'])
  1331. {
  1332. $rowHtml .= $inputHtml;
  1333. }
  1334. else
  1335. {
  1336. if(isset($info['req']) && $info['req'])
  1337. {
  1338. $inputHtml .= $this->reqMarker;
  1339. }
  1340. $rowHtml .= '<tr><td id="'.$col.'_label_cell" class="labelCell"><label for="'.$this->inputIdPrefix.$col.'">'.$info['display_text'].':</label></td><td id="'.$col.'_i…

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