devmode_functions.php
上传用户:gzy2002
上传日期:2010-02-11
资源大小:1785k
文件大小:45k
源码类别:

电子政务应用

开发平台:

Java

  1. <?php
  2. // +-------------------------------------------------------------+
  3. // | DeskPRO v [2.0.1 Production]
  4. // | Copyright (C) 2001 - 2004 Headstart Solutions Limited
  5. // | Supplied by WTN-WDYL
  6. // | Nullified by WTN-WDYL
  7. // | Distribution via WebForum, ForumRU and associated file dumps
  8. // +-------------------------------------------------------------+
  9. // | DESKPRO IS NOT FREE SOFTWARE
  10. // +-------------------------------------------------------------+
  11. // | License ID : Full Enterprise License =) ...
  12. // | License Owner : WTN-WDYL Team
  13. // +-------------------------------------------------------------+
  14. // | $RCSfile: devmode_functions.php,v $
  15. // | $Date: 2004/02/13 02:12:31 $
  16. // | $Revision: 1.29 $
  17. // +-------------------------------------------------------------+
  18. // | File Details:
  19. // | - Utility functions for the administration interface 
  20. // |   developer mode tools
  21. // +-------------------------------------------------------------+
  22. error_reporting(E_ALL ^ E_NOTICE);
  23. /*****************************************************
  24. function template_reparse()
  25. -----DESCRIPTION: -----------------------------------
  26. Re-parse all templates stored in the DB
  27. -----ARGUMENTS: -------------------------------------
  28. None
  29. -----RETURNS: ---------------------------------------
  30. Nothing.
  31. *****************************************************/
  32. function template_reparse() {
  33. global $db;
  34. $db->query("SELECT * FROM template");
  35. while ($result = $db->row_array()) {
  36. $template = parse_conditionals($result[template_unparsed]);
  37. $db2->query("UPDATE template SET template = '" . mysql_escape_string($template) . "' WHERE id = '$result[id]'");
  38. }
  39. }
  40. /*****************************************************
  41. function dev_import_templates()
  42. -----DESCRIPTION: -----------------------------------
  43. Read all templates in from files, parse them, and
  44. update the database.
  45. -----ARGUMENTS: -------------------------------------
  46. location Directory to import from
  47. -----RETURNS: ---------------------------------------
  48. Nothing.
  49. *****************************************************/
  50. function dev_import_templates($location) {
  51. global $db;
  52. if (!file_exists($location)) {
  53. mistake("[ERROR] $location doesn't exist; cannot importn");
  54. }
  55. if (!is_dir($location)) {
  56. mistake("[ERROR] $location isn't a directory; cannot importn");
  57. }
  58. if (!($dir = @opendir($location))) {
  59. mistake("[ERROR] Can't open $location for reading; cannot importn");
  60. }
  61. while ($file = @readdir($dir)) { 
  62. if ($file == '.' OR $file == '..' OR (substr($file, 0, 1) == '.') OR !is_file("$location/$file")) {
  63. continue;
  64. }
  65. // read file
  66. if ($handle = @fopen($location . "/$file", 'rb')) {
  67. $template = @fread($handle, filesize($location . "/$file"));
  68. $file = str_replace('.html', '', $file);
  69. @fclose($handle);
  70. $parsed_template = parse_conditionals($template);
  71. $db->query("SELECT * FROM template WHERE name = '" . mysql_escape_string($file) . "'");
  72. if ($db->num_rows()) {
  73. $db->query("
  74. UPDATE template SET
  75. template = '" . mysql_escape_string($parsed_template) . "',
  76. template_unparsed = '" . mysql_escape_string($template) . "'
  77. WHERE name = '" . mysql_escape_string($file) . "'
  78. ");
  79. $return .= "[NOTICE] Imported $file.n";
  80. } else {
  81. $db->query("INSERT INTO template SET
  82. template = '" . mysql_escape_string($parsed_template) . "',
  83. template_unparsed = '" . mysql_escape_string($template) . "',
  84. name = '" . mysql_escape_string($file) . "',
  85. category = '0',
  86. description = '',
  87. upgraded = '0',
  88. changed = '0',
  89. custom = '0',
  90. version_upgrade = '0',
  91. displayorder = '9999',
  92. backup = '0'
  93. ");
  94. $return .= "[NOTICE] Added new template $file.n";
  95. }
  96. } else {
  97. $return .= "[WARN] Couldn't open file "$file" for reading.n";
  98. }
  99. }
  100. return $return;
  101. }
  102. /*****************************************************
  103. function dev_import_mail_templates()
  104. -----DESCRIPTION: -----------------------------------
  105. Read all mail templates in from files, parse them, and
  106. update the database.
  107. -----ARGUMENTS: -------------------------------------
  108. location Directory to import from
  109. -----RETURNS: ---------------------------------------
  110. Nothing.
  111. *****************************************************/
  112. function dev_import_mail_templates($location) {
  113. global $db, $_REQUEST;
  114. if (!file_exists($location)) {
  115. $errors[] = "[ERROR] $location doesn't exist; cannot import e-mail templates: $php_errormsg";
  116. }
  117. if (!@is_dir($location)) {
  118. $errors[] = "[ERROR] $location isn't a directory or can't be stat()'d; cannot import e-mail templates: $php_errormsg";
  119. }
  120. $orig_langs = $_REQUEST['languages'];
  121. if (in_array('tech', $_REQUEST['languages']) OR !$_REQUEST['languages']) {
  122. $get_tech = 1;
  123. if (count($_REQUEST['languages'])) {
  124. foreach($_REQUEST['languages'] AS $val) {
  125. if ($val != 'tech') {
  126. $langs[] = $val;
  127. }
  128. $_REQUEST['languages'] = $langs;
  129. }
  130. $get_norm = 1;
  131. } else {
  132. if (!$_REQUEST['languages']) {
  133. $get_norm = 1;
  134. } else {
  135. $_REQUEST['languages'] = NULL;
  136. }
  137. }
  138. } else {
  139. $get_norm = 1;
  140. }
  141. if (!count($errors)) {
  142. if ($_REQUEST['languages']) {
  143. $langs = ' where ID in ' . array2sql($_REQUEST['languages']);
  144. }
  145. $db->query("SELECT id, name FROM languages $langs");
  146. if (!$db->num_rows() AND !$get_tech) {
  147. $errors[] = "No languages are defined. Cannot import.";
  148. }
  149. while ($res = $db->row_array()) {
  150. $languages[$res['id']]['name']  = $res['name'];
  151. $languages[$res['id']]['dir'] = $location.'/'.$res['name'];
  152. }
  153. $languages[-1]['name'] = 'Tech bodies';
  154. $languages[-1]['dir'] = $location;
  155. foreach ($languages AS $lang_id => $lang_data) {
  156. if (!@file_exists($languages[$lang_id]['dir'])) {
  157. $errors[] = "Directory " . $languages[$lang_id]['dir'] . " doesn't exist: $php_errormsg";
  158. continue;
  159. if (!@is_dir($languages[$lang_id]['dir'])) {
  160. // It's a plain file, not a directory. Can't import like this.
  161. $errors[] = $languages[$lang_id]['dir'] . " exists but isn't a directory or can't be stat()'d: $php_errormsg";
  162. continue;
  163. }
  164. if (!$dirhandle = opendir($languages[$lang_id]['dir'])) {
  165. $errors[] = $languages[$lang_id]['dir'] . " exists but can't be opened for reading: $php_errormsg";
  166. continue;
  167. } else {
  168. while (false !== ($file = readdir($dirhandle))) { 
  169. $template = basename($file, '.txt');
  170. $file = $languages[$lang_id]['dir'].'/'.$file;
  171. if (($file != '.') AND ($file != '..') AND is_file($file)) {
  172. if ((stristr($file, 'TECHBODY') AND $get_tech) OR (!stristr($file, 'TECHBODY') AND !$get_tech) OR (!stristr($file, 'TECHBODY') AND $get_norm)) {
  173. if ($handle = @fopen($file, 'rb')) {
  174. $data = array();
  175. while (!feof($handle)) {
  176. $data[] = fgets($handle, 4096);
  177. }
  178. if (preg_match("/^Subject:(.*)$/i", $data[0], $matches)) {
  179. $subject = ", subject = '" . mysql_escape_string(trim($matches[1])) . "'";
  180. array_shift($data);
  181. } else {
  182. $subject = '';
  183. }
  184. $data = join('', $data);
  185. $parsed = parse_conditionals($data);
  186. $db->query("SELECT id FROM template_email WHERE
  187. name = '" . mysql_escape_string($template) . "'
  188. AND language = $lang_id
  189. AND !backup");
  190. if ($db->num_rows()) {
  191. $db->query("UPDATE template_email 
  192. SET template = '" . mysql_escape_string($parsed) . "',
  193. template_unparsed = '" . mysql_escape_string($data) . "'
  194. $subject
  195. WHERE language = $lang_id
  196. AND name = '" . mysql_escape_string($template) . "'
  197. AND !backup
  198. ");
  199. if ($db->affected_rows()) {
  200. $imported[$template][$lang_id] = -2;
  201. } else {
  202. $imported[$template][$lang_id] = -1;
  203. }
  204. } else {
  205. $imported[$template][$lang_id] = -2;
  206. if (stristr($file, 'TECHBODY')) {
  207. $import_cat = 'Tech Emails';
  208. } else{
  209. $import_cat = 'User Emails';
  210. }
  211. $db->query("INSERT INTO template_email SET
  212. template = '" . mysql_escape_string($parsed) . "',
  213. template_unparsed = '" . mysql_escape_string($data) . "',
  214. name = '" . mysql_escape_string($template) . "',
  215. language = '$lang_id',
  216. category = '$import_cat',
  217. description = '',
  218. upgraded = '0',
  219. changed = '0',
  220. custom = '1',
  221. version_upgrade = '0',
  222. displayorder = '9999',
  223. backup = '0'
  224. $subject
  225. ");
  226. $db->query("INSERT INTO template_email SET
  227. template = '" . mysql_escape_string($parsed) . "',
  228. template_unparsed = '" . mysql_escape_string($data) . "',
  229. name = '" . mysql_escape_string($template) . "',
  230. language = '$lang_id',
  231. category = '$import_cat',
  232. description = '',
  233. upgraded = '0',
  234. changed = '0',
  235. custom = '1',
  236. version_upgrade = '0',
  237. displayorder = '9999',
  238. backup = '1'
  239. $subject
  240. ");
  241. }
  242. } else {
  243. $imported[$template][$lang_id] = 0;
  244. $errors[] = "Can't open $file: $php_errormsg";
  245. }
  246. }
  247. }
  248. }
  249. closedir($dirhandle);
  250. }
  251. }
  252. $cols = array('Template Name');
  253. foreach ($languages as $lang) {
  254. $cols[] = $lang['name'];
  255. }
  256. foreach ($imported AS $template => $val) {
  257. $row = array($template);
  258. foreach ($languages AS $lang_id => $lang) {
  259. if ($val[$lang_id] == -2) {
  260. $result = '<FONT COLOR="green">Imported</FONT>';
  261. } elseif ($val[$lang_id] == -1) {
  262. $result = '<FONT COLOR="green">No Change</FONT>';
  263. } elseif ($val[$lang_id] === FALSE) {
  264. $result = '<FONT COLOR="red">Error</FONT>';
  265. } else {
  266. $result = 'Not defined';
  267. }
  268. $row[] = "<CENTER>$result</CENTER>";
  269. if (is_string($val[$lang_id])) {
  270. $errors[] = $val[$lang_id];
  271. }
  272. }
  273. $rows[] = $row;
  274. }
  275. }
  276. table_header('Import Results');
  277. table_content($cols, $rows);
  278. table_footer();
  279. if (count($errors)) {
  280. table_header('Import Errors');
  281. table_content(NULL, $errors);
  282. table_footer();
  283. }
  284. }
  285. /*****************************************************
  286. function dev_remove_edit()
  287. -----DESCRIPTION: -----------------------------------
  288. Remove the "changed" and "upgraded" status flags on
  289. all templates.
  290. -----ARGUMENTS: -------------------------------------
  291. None
  292. -----RETURNS: ---------------------------------------
  293. Nothing.
  294. *****************************************************/
  295. function dev_remove_edit() {
  296. global $db;
  297. $db->query('UPDATE template SET changed = 0, upgraded = 0, version_upgrade = 0');
  298. }
  299. /*****************************************************
  300. function dev_make_default()
  301. -----DESCRIPTION: -----------------------------------
  302. Make all templates "stock" templates (remove their
  303. custom flag)
  304. -----ARGUMENTS: -------------------------------------
  305. None
  306. -----RETURNS: ---------------------------------------
  307. Nothing.
  308. *****************************************************/
  309. function dev_make_default() {
  310. global $db;
  311. $db->query("UPDATE template SET custom = '0'");
  312. }
  313. /*****************************************************
  314. function dev_undo_changes()
  315. -----DESCRIPTION: -----------------------------------
  316. Clear all templates' changed and upgraded flags.
  317. -----ARGUMENTS: -------------------------------------
  318. None
  319. -----RETURNS: ---------------------------------------
  320. Nothing.
  321. *****************************************************/
  322. function dev_undo_changes() {
  323. global $db;
  324. $db->query("UPDATE template SET changed = '0', upgraded = '0'");
  325. }
  326. /*****************************************************
  327. function dev_export_templates()
  328. -----DESCRIPTION: -----------------------------------
  329. Export HTML templates to files in the specified
  330. directory.
  331. -----ARGUMENTS: -------------------------------------
  332. location Directory to place templates into
  333. -----RETURNS: ---------------------------------------
  334. Nothing.
  335. *****************************************************/
  336. function dev_export_templates($location) {
  337. global $db, $_REQUEST;
  338. if (!file_exists($location)) {
  339. mistake("[ERROR] $location doesn't exist; cannot export HTML templates");
  340. }
  341. if (!is_dir($location)) {
  342. mistake("[ERROR] $location isn't a directory; cannot export HTML templates");
  343. }
  344. if ($_REQUEST['id']) {
  345. $db->query("SELECT * FROM template WHERE !backup AND id = '$_REQUEST[id]'");
  346. } elseif ($_REQUEST['search']) {
  347. $db->query("SELECT * FROM template WHERE !backup AND template.name LIKE '%" . mysql_escape_string($_REQUEST['search']) . "%'");
  348. } else {
  349. $db->query("SELECT * FROM template WHERE !backup");
  350. }
  351. if (!$db->num_rows()) {
  352. error('No templates exported');
  353. }
  354. while ($data = $db->row_array()) {
  355. if ($handle = @fopen($location . '/' . $data['name'] . '.html', 'wb')) {
  356. @fwrite($handle, $data['template_unparsed']);
  357. @fclose($handle);
  358. echo "[NOTICE] Exported $data[name].html<br />";
  359. } else {
  360. echo "[WARN] Couldn't open $location/$data[name] for writing.<br />";
  361. }
  362. }
  363. }
  364. /*****************************************************
  365. function dev_export_mail_templates()
  366. -----DESCRIPTION: -----------------------------------
  367. Export e-mail templates to files in the specified
  368. directory.
  369. -----ARGUMENTS: -------------------------------------
  370. location Directory to place templates into
  371. -----RETURNS: ---------------------------------------
  372. Nothing.
  373. *****************************************************/
  374. function dev_export_mail_templates($location) {
  375. global $db, $_REQUEST;
  376. umask(0);
  377. $orig_langs = $_REQUEST['languages'];
  378. if (in_array('tech', $_REQUEST['languages'])) {
  379. $get_tech = 1;
  380. if (count($_REQUEST['languages']) > 1) {
  381. foreach($_REQUEST['languages'] AS $val) {
  382. if ($val != 'tech') {
  383. $langs[] = $val;
  384. }
  385. $_REQUEST['languages'] = $langs;
  386. }
  387. $get_norm = 1;
  388. } else {
  389. $_REQUEST['languages'] = NULL;
  390. }
  391. } else {
  392. $get_norm = 1;
  393. }
  394. if (!file_exists($location)) {
  395. // Try to create the directory if it doesn't exist
  396. if (!@mkdir($location, '0775')) {
  397. // We couldn't create the directory, so we can't export this language
  398. $errors[] = "[ERROR] $location doesn't exist and cannot be created: $php_errormsg";
  399. } else {
  400. $errors[] = "[NOTICE] Created directory $location<BR />n";
  401. }
  402. }
  403. if (!@is_dir($location)) {
  404. $errors[] = "[ERROR] $location isn't a directory or can't be stat()'d; cannot export e-mail templates: $php_errormsg";
  405. }
  406. // Fetch languages to process
  407. if (!count($errors)) {
  408. if ($_REQUEST['languages']) {
  409. $langs = ' where ID in ' . array2sql($_REQUEST['languages']);
  410. }
  411. $db->query("SELECT id, name FROM languages $langs");
  412. if (!$db->num_rows()) {
  413. $errors[] = "No languages are defined, or none were selected. Cannot export.";
  414. }
  415. while ($res = $db->row_array()) {
  416. $languages[$res['id']]['name']  = $res['name'];
  417. $languages[$res['id']]['dir'] = $location.'/'.$res['name'];
  418. if (!@file_exists($languages[$res['id']]['dir'])) {
  419. // First try to create the directory
  420. if (!@mkdir($languages[$res['id']]['dir'], '0775')) {
  421. $errors[] = "Directory " . $languages[$res['id']]['dir'] . " doesn't exist and couldn't be created: $php_errormsg";
  422. } else {
  423. $errors[] = "[NOTICE] Created directory " . $languages[$res['id']]['dir'];
  424. }
  425. }
  426. if (!@is_dir($languages[$res['id']]['dir'])) {
  427. // It's a plain file, not a directory. Can't export like this.
  428. $errors[] = $languages[$res['id']]['dir'] . " exists but isn't a directory or can't be stat()'d: $php_errormsg";
  429. }
  430. }
  431. // Process each language
  432. $db->query("SELECT template_unparsed, subject, name, language FROM template_email WHERE language AND !backup ORDER BY language");
  433. if (!$db->num_rows()) {
  434. mistake("No e-mail templates are defined. Cannot export.");
  435. }
  436. while ($res = $db->row_array()) {
  437. if (stristr($res['name'], 'TECHBODY')) {
  438. if (!$get_tech) {
  439. continue;
  440. }
  441. $name = "$location/$res[name].txt";
  442. } else {
  443. if (!$get_norm) {
  444. continue;
  445. }
  446. $name = $languages[$res['language']]['dir'] . '/' . $res['name'] . '.txt';
  447. }
  448. if ($handle = @fopen($name, 'wb')) {
  449. @fwrite($handle, "Subject: $res[subject]n");
  450. @fwrite($handle, $res['template_unparsed']);
  451. @fclose($handle);
  452. if(stristr($res['name'], 'TECHBODY')) {
  453. $exported[$res['name']][-1] = -1;
  454. } else {
  455. $exported[$res['name']][$res['language']] = -1;
  456. }
  457. } else {
  458. $exported[$res['name']][$res['language']] = "[WARNING] Couldn't export $res[name] to $name: $php_errormsg";
  459. }
  460. }
  461. $cols = array('Template Name');
  462. $languages['-1']['name'] = "Tech Mails";
  463. foreach ($languages as $lang_id => $lang) {
  464. if (in_array($lang_id, $orig_langs)) {
  465. $cols[] = $lang['name'];
  466. }
  467. }
  468. foreach ($exported AS $template => $val) {
  469. $row = array($template);
  470. foreach ($languages AS $lang_id => $lang) {
  471. if (in_array($lang_id, $orig_langs)) {
  472. if(stristr($template, 'TECHBODY')) {
  473. if ($val[-1] == -1) {
  474. $result = '<FONT COLOR="green">Tech E-mail Template Exported</FONT>';
  475. } elseif ($val[-1]) {
  476. $result = '<FONT COLOR="red">Error</FONT>';
  477. }
  478. } else {
  479. if ($val[$lang_id] == -1) {
  480. $result = '<FONT COLOR="green">Exported</FONT>';
  481. } elseif ($val[$lang_id]) {
  482. $result = '<FONT COLOR="red">Error</FONT>';
  483. } else {
  484. $result = 'Not Defined';
  485. }
  486. }
  487. $row[] = "<CENTER>$result</CENTER>";
  488. if (is_string($val[$lang_id])) {
  489. $errors[] = $val[$lang_id];
  490. }
  491. if(stristr($template, 'TECHBODY')) {
  492. break;
  493. }
  494. }
  495. }
  496. $rows[] = $row;
  497. }
  498. }
  499. table_header('Export Results');
  500. table_content($cols, $rows);
  501. table_footer();
  502. if (count($errors)) {
  503. table_header('Export Errors');
  504. table_content(NULL, $errors);
  505. table_footer();
  506. }
  507. }
  508. /*****************************************************
  509. function dev_reset_backup_templates()
  510. -----DESCRIPTION: -----------------------------------
  511. Recreate backups from current templates for all
  512. templates
  513. -----ARGUMENTS: -------------------------------------
  514. None
  515. -----RETURNS: ---------------------------------------
  516. Nothing.
  517. *****************************************************/
  518. function dev_reset_backup_templates() {
  519. global $db;
  520. $db->query("DELETE FROM template WHERE backup");
  521. $data = $db->query_return_array("SELECT * FROM template");
  522. if (@is_array($data)) {
  523. foreach($data AS $val) {
  524. $db->query('INSERT INTO template
  525. (name, template, category, description, upgraded, changed, custom, version_upgrade, template_unparsed, displayorder, backup) VALUES (
  526. ''.mysql_escape_string($val[name]).'',
  527. ''.mysql_escape_string($val[template]).'',
  528. ''.mysql_escape_string($val[category]).'',
  529. ''.mysql_escape_string($val[description]).'',
  530. '0',
  531. '0',
  532. '0',
  533. '0',
  534. ''.mysql_escape_string($val[template_unparsed]).'',
  535. ''.mysql_escape_string($val[displayorder]).'',
  536. '1'
  537. )');
  538. }
  539. }
  540. }
  541. /*****************************************************
  542. function dev_reset_backups()
  543. -----DESCRIPTION: -----------------------------------
  544. Makes copies of all current non-backup templates
  545. as the system's backup templates, replacing 
  546. backup templates of the same name if they already
  547. existed.
  548. -----ARGUMENTS: -------------------------------------
  549. None
  550. -----RETURNS: ---------------------------------------
  551. Nothing.
  552. *****************************************************/
  553. function dev_reset_backups() {
  554. global $db;
  555. $db->query('SELECT * FROM template_email');
  556. while($res = $db->row_array()) {
  557. if ($res['backup']) {
  558. $ids[] = $res['name'];
  559. } else {
  560. $data[] = $res;
  561. }
  562. }
  563. if (count($ids)) {
  564. $db->query('DELETE FROM template_email WHERE backup AND name IN ' . array2sql($ids));
  565. }
  566. if (@is_array($data)) {
  567. foreach($data AS $val) {
  568. $db->query('INSERT INTO template_email
  569. (name, template, category, description, upgraded, changed, custom, version_upgrade, template_unparsed, displayorder, backup, language, subject) VALUES (
  570. ''.mysql_escape_string($val[name]).'',
  571. ''.mysql_escape_string($val[template]).'',
  572. ''.mysql_escape_string($val[category]).'',
  573. ''.mysql_escape_string($val[description]).'',
  574. '0',
  575. '0',
  576. '0',
  577. '0',
  578. ''.mysql_escape_string($val[template_unparsed]).'',
  579. ''.mysql_escape_string($val[displayorder]).'',
  580. 1,
  581. ''.mysql_escape_string($val[language]).'',
  582. ''.mysql_escape_string($val[subject]).''
  583. )');
  584. }
  585. }
  586. }
  587. /*****************************************************
  588. function dev_restore_norm_templates()
  589. -----DESCRIPTION: -----------------------------------
  590. Makes copies of all current backup templates
  591. and makes non-backup templates from them.
  592. Destroys non-backup templates.
  593. -----ARGUMENTS: -------------------------------------
  594. None
  595. -----RETURNS: ---------------------------------------
  596. Nothing.
  597. *****************************************************/
  598. function dev_restore_norm_templates() {
  599. global $db;
  600. $templates = $db->query_return_array('SELECT * FROM template WHERE backup');
  601. $db->query("DELETE FROM template WHERE !backup");
  602. if (@is_array($templates)) {
  603. foreach($templates AS $val) {
  604. $db->query('INSERT INTO template
  605. (name, template, category, description, upgraded, changed, custom, version_upgrade, template_unparsed, displayorder, backup) VALUES (
  606. ''.mysql_escape_string($val[name]).'',
  607. ''.mysql_escape_string($val[template]).'',
  608. ''.mysql_escape_string($val[category]).'',
  609. ''.mysql_escape_string($val[description]).'',
  610. '0',
  611. '0',
  612. '0',
  613. '0',
  614. ''.mysql_escape_string($val[template_unparsed]).'',
  615. ''.mysql_escape_string($val[displayorder]).'',
  616. '0'
  617. )');
  618. }
  619. }
  620. $templates = $db->query_return_array('SELECT * FROM template_email WHERE backup');
  621. $db->query("DELETE FROM template_email WHERE !backup");
  622. if (@is_array($templates)) {
  623. foreach($templates AS $val) {
  624. $db->query('INSERT INTO template_email
  625. (name, template, category, description, upgraded, changed, custom, version_upgrade, template_unparsed, displayorder, backup, language, subject) VALUES (
  626. ''.mysql_escape_string($val[name]).'',
  627. ''.mysql_escape_string($val[template]).'',
  628. ''.mysql_escape_string($val[category]).'',
  629. ''.mysql_escape_string($val[description]).'',
  630. '0',
  631. '0',
  632. '0',
  633. '0',
  634. ''.mysql_escape_string($val[template_unparsed]).'',
  635. ''.mysql_escape_string($val[displayorder]).'',
  636. '0',
  637. ''.mysql_escape_string($val[language]).'',
  638. ''.mysql_escape_string($val[subject]).''
  639. )');
  640. }
  641. }
  642. }
  643. /*****************************************************
  644. function dev_words_export()
  645. -----DESCRIPTION: -----------------------------------
  646. Exports all language translations.
  647. -----ARGUMENTS: -------------------------------------
  648. location Directory to export to
  649. -----RETURNS: ---------------------------------------
  650. Nothing.
  651. *****************************************************/
  652. function dev_words_export($location) {
  653. global $db;
  654. umask(0);
  655. if (!file_exists($location)) {
  656. // Try to create the directory if it doesn't exist
  657. if (!@mkdir($location, '0775')) {
  658. // We couldn't create the directory, so we can't export this language
  659. $errors[] = "[ERROR] $location doesn't exist and cannot be created: $php_errormsg";
  660. } else {
  661. $errors[] = "[NOTICE] Created directory $location<BR />n";
  662. }
  663. }
  664. if (!@is_dir($location)) {
  665. $errors[] = "[ERROR] $location isn't a directory or can't be stat()'d; cannot export template phrases: $php_errormsg";
  666. }
  667. // Fetch languages to process
  668. if (!count($errors)) {
  669. $catnames = $db->query_return_array_id("SELECT id, name FROM template_words_cat", 'name');
  670. if ($_REQUEST['languages']) {
  671. $db->query("SELECT id, name FROM languages WHERE id IN " . array2sql($_REQUEST['languages']));
  672. if (!$db->num_rows()) {
  673. $errors[] = "No languages were selected. Cannot export.";
  674. }
  675. } else {
  676. $db->query("SELECT id, name FROM languages");
  677. if (!$db->num_rows()) {
  678. $errors[] = "No languages are defined. Cannot export.";
  679. }
  680. }
  681. $languages = array();
  682. $legend = "# Format:n#n# Empty lines, and lines beginning with "#" are comments. Lines beginning withn# "%%" specify a new (or continuing) category. Empty lines are ignored asn# comments. When a category is specified, every wordref beneath it is added ton# that category. The template file should begin with a category specification,n# otherwise, wordrefs appearing prior to a category specifier will be assignedn# no category.n#n# All other lines are expected to be in the format: n# wordref: full phrase textn#n# To delete a wordref, specify it on a line by itself with no phrase n# definition, as shown: n# wordref:nn";
  683. if (!$_REQUEST['languages']) {
  684. echo "No languages selected";
  685. return;
  686. }
  687. while ($res = $db->row_array()) {
  688. if (!$res['id'] AND !@in_array('0', $_REQUEST['languages'])) {
  689. continue;
  690. }
  691. $languages[$res['id']]['name'] = $res['name'];
  692. $languages[$res['id']]['file'] = $location . '/' . str_replace('/', '_', $res['name']);
  693. $languages[$res['id']]['prev'] = 0;
  694. if (!$languages[$res['id']]['handle'] = @fopen($languages[$res['id']]['file'], 'wb')) {
  695. $errors[] = "Cannot open " . $languages[$res['id']]['file'] . "for writing $php_errormsg";
  696. }
  697. if (!@fwrite($languages[$res['id']]['handle'], $legend)) {
  698. $errors[] = "Couldn't write to " . $languages[$res['id']]['file'] . " for header: $php_errormsg";
  699. }
  700. }
  701. // Process data
  702. $data = $db->query_return_array("SELECT * FROM template_words ORDER BY language, category, wordref");
  703. if (!$db->num_rows()) {
  704. mistake("No template phrases are defined. Cannot export.");
  705. }
  706. foreach($data AS $val) {
  707. if ($val['category'] != $languages[$val['language']]['prev']) {
  708. $languages[$val['language']]['prev'] = $val['category'];
  709. $line = "n%%{$catnames[$val['category']]}nn";
  710. if (!@fwrite($languages[$val['language']]['handle'], $line)) {
  711. $errors[] = "Couldn't write to " . $languages[$val['language']]['file'] . " for entry $val[wordref]: $php_errormsg";
  712. }
  713. }
  714. $line = "$val[wordref]: $val[text]n";
  715. if (!@fwrite($languages[$val['language']]['handle'], $line)) {
  716. $errors[] = "Couldn't write to " . $languages[$val['language']]['file'] . " for entry $val[wordref]: $php_errormsg";
  717. $exported[$val['wordref']][$val['language']] = 1;
  718. }
  719. $exported[$val['wordref']][$val['language']] = -1;
  720. }
  721. $cols = array('Template Name');
  722. foreach ($languages as $lang) {
  723. $cols[] = $lang['name'];
  724. @fclose($lang['handle']);
  725. }
  726. foreach ($exported AS $template => $val) {
  727. $row = array($template);
  728. foreach ($languages AS $lang_id => $lang) {
  729. if ($val[$lang_id] == -1) {
  730. $result = '<FONT COLOR="green">Exported</FONT>';
  731. } elseif ($val[$lang_id] > 0) {
  732. $result = '<FONT COLOR="red">Error</FONT>';
  733. } else {
  734. $result = 'Not Defined';
  735. }
  736. $row[] = "<CENTER>$result</CENTER>";
  737. if (is_string($val[$lang_id])) {
  738. $errors[] = $val[$lang_id];
  739. }
  740. }
  741. $rows[] = $row;
  742. }
  743. }
  744. table_header('Export Results');
  745. table_content($cols, $rows);
  746. table_footer();
  747. if (count($errors)) {
  748. table_header('Export Errors');
  749. table_content(NULL, $errors);
  750. table_footer();
  751. }
  752. }
  753. /*****************************************************
  754. function dev_words_import()
  755. -----DESCRIPTION: -----------------------------------
  756. Imports all language translations.
  757. -----ARGUMENTS: -------------------------------------
  758. location Directory to import from
  759. -----RETURNS: ---------------------------------------
  760. Nothing.
  761. *****************************************************/
  762. function dev_words_import($location) {
  763. global $db, $_REQUEST;
  764. if (!file_exists($location)) {
  765. $errors[] = "[ERROR] $location doesn't exist; cannot import templates: $php_errormsg";
  766. }
  767. if (!@is_dir($location)) {
  768. $errors[] = "[ERROR] $location isn't a directory or can't be stat()'d; cannot import templates: $php_errormsg";
  769. }
  770. if (!count($errors)) {
  771. if ($_REQUEST['dryrun']) {
  772. $errors[] = "[NOTICE] Dry run; no changes were made.";
  773. }
  774. $catnames = $db->query_return_array_id("SELECT id, name FROM template_words_cat", 'name');
  775. $catnames[0] = '';
  776. $languages = array();
  777. if (@in_array('0', $_REQUEST['languages']) OR !$_REQUEST['languages']) {
  778. $languages[0] = array(
  779. 'name' => 'Default',
  780. 'file' => "$location/Default",
  781. );
  782. }
  783. if ($_REQUEST['languages']) {
  784. $langs = ' WHERE id IN ' . array2sql($_REQUEST['languages']);
  785. }
  786. $db->query("SELECT id, name FROM languages $langs");
  787. if (!$db->num_rows()) {
  788. $errors[] = "No languages are defined, or none were selected. Cannot export.";
  789. } else {
  790. while ($res = $db->row_array()) {
  791. $languages[$res['id']]['name'] = $res['name'];
  792. $languages[$res['id']]['file'] = $location . '/' . str_replace('/', '_', $res['name']);
  793. }
  794. foreach ($languages AS $langid => $lang) {
  795. if (!$_REQUEST['dryrun']) {
  796. if ($_REQUEST['replace_all'] AND $_REQUEST['replace_all_confirm']) {
  797. $db->query("DELETE FROM template_words WHERE language = '$langid'");
  798. $errors[] = "[NOTICE] Purged all existing words for the $lang[name] language.";
  799. }
  800. } else {
  801. if ($_REQUEST['replace_all'] AND $_REQUEST['replace_all_confirm']) {
  802. $errors[] = "[NOTICE] Would delete all existing words for the $lang[name] language.";
  803. }
  804. }
  805. if (!$handle = fopen($lang['file'], 'rb')) {
  806. $errors[] = "Cannot open " . $langid['file'] . "for reading $php_errormsg";
  807. } else {
  808. $data = array();
  809. while (!feof($handle)) {
  810. $data[] = fgets($handle, 4096);
  811. }
  812. @fclose($handle);
  813. $count = 0;
  814. $catid = 0;
  815. foreach ($data as $line) {
  816. $count++;
  817. $matches = array();
  818. $line = trim($line);
  819. if (!$line or (preg_match('/^#/', $line))) {
  820. continue;
  821. }
  822. if (preg_match("/^%%(.*)/", $line, $cat)) {
  823. $catname = $cat[1];
  824. $catid = array_search($catname, $catnames);
  825. if (!$catid) {
  826. if (!$_REQUEST['dryrun']) {
  827. $db->query("INSERT INTO template_words_cat (name) VALUES ('" . mysql_escape_string($catname) . "')");
  828. $catid = $db->last_id();
  829. }
  830. $errors[] = "Category $catname not found, created new category, ID #$catid";
  831. $catnames = $db->query_return_array_id("SELECT id, name FROM template_words_cat", 'name');
  832. }
  833. continue;
  834. }
  835. if (preg_match("/^([^:]*):(.*)$/", $line, $matches)) {
  836. $matches[1] = mysql_escape_string(trim($matches[1]));
  837. $matches[2] = mysql_escape_string(trim($matches[2]));
  838. $db->query("SELECT * FROM template_words WHERE
  839. wordref = '$matches[1]' AND
  840. language = '$langid'
  841. ");
  842. if ($db->num_rows()) {
  843. if (!$matches[2]) {
  844. if (!$_REQUEST['dryrun']) {
  845. $db->query("DELETE FROM template_words
  846. WHERE wordref = '$matches[1]' AND
  847. language = '$landid'
  848. ");
  849. }
  850. $imported[$matches[1]][$langid] = -4;
  851. }
  852. if (!$_REQUEST['dryrun'] AND !$_REQUEST['replace_all']) {
  853. $db->query("
  854. UPDATE template_words SET
  855. category = '$catid',
  856. text = '$matches[2]'
  857. WHERE
  858. wordref = '$matches[1]'
  859. AND language = '$langid'
  860. ");
  861. if ($db->affected_rows()) {
  862. $imported[$matches[1]][$langid] = -1;
  863. } else {
  864. $imported[$matches[1]][$langid] = -2;
  865. }
  866. } else {
  867. if ($imported[$matches[1]][$langid] == 0) {
  868. $imported[$matches[1]][$langid] = -1;
  869. }
  870. }
  871. } else {
  872. if (!$_REQUEST['dryrun']) {
  873. $db->query("INSERT INTO template_words (wordref, category, text, language)
  874. VALUES ('$matches[1]', '$catid', '$matches[2]', '$langid')
  875. ");
  876. }
  877. $imported[$matches[1]][$langid] = -3;
  878. }
  879. } else {
  880. $errors[] = "Error in file " . $languages[$langid]['file'] . " on line $count.";
  881. }
  882. }
  883. }
  884. }
  885. }
  886. $cols = array('Template Name');
  887. foreach ($languages as $lang) {
  888. $cols[] = $lang['name'];
  889. }
  890. foreach ($imported AS $template => $val) {
  891. $row = array($template);
  892. foreach ($languages AS $lang_id => $lang) {
  893. if ($val[$lang_id] == -1) {
  894. $result = iff($_REQUEST['dryrun'], '<FONT COLOR="green">Would Import</FONT>', '<FONT COLOR="green">Imported</FONT>');
  895. } elseif ($val[$lang_id] == -2) {
  896. $result = '<FONT COLOR="green">No Change</FONT>';
  897. } elseif ($val[$lang_id] == -3) {
  898. $result = iff($_REQUEST['dryrun'], '<FONT COLOR="green">Would Add</FONT>', '<FONT COLOR="green">Added</FONT>');
  899. } elseif ($val[$lang_id] == -4) {
  900. $result = iff($_REQUEST['dryrun'], '<FONT COLOR="red">Would Delete</FONT>', '<FONT COLOR="red">Deleted</FONT>');
  901. } elseif ($val[$lang_id] === FALSE) {
  902. $result = '<FONT COLOR="red">Error</FONT>';
  903. } else {
  904. $result = 'Not defined';
  905. }
  906. $row[] = "<CENTER>$result</CENTER>";
  907. if (is_string($val[$lang_id])) {
  908. $errors[] = $val[$lang_id];
  909. }
  910. }
  911. $rows[] = $row;
  912. }
  913. }
  914. table_header('Import Results');
  915. table_content($cols, $rows);
  916. table_footer();
  917. if (count($errors)) {
  918. table_header('Import Errors');
  919. table_content(NULL, $errors);
  920. table_footer();
  921. }
  922. return;
  923. }
  924. /*****************************************************
  925. function dev_install_words_default()
  926. -----DESCRIPTION: -----------------------------------
  927. Imports all language translations.
  928. -----ARGUMENTS: -------------------------------------
  929. location Directory to import from
  930. -----RETURNS: ---------------------------------------
  931. Nothing.
  932. *****************************************************/
  933. function dev_install_words_default() {
  934. global $db;
  935. $db->query("SELECT * FROM template_words WHERE language = '1'");
  936. while ($result = $db->row_array()) {
  937. $data[] = array(
  938. $result['wordref'],
  939. 0,
  940. $result['text'],
  941. $result['category'],
  942. 0
  943. );
  944. }
  945. $db->query("
  946. INSERT INTO template_words 
  947. (wordref, language, text, category, cust) 
  948. VALUES " . multi_array2sql($data) . "
  949. ");
  950. }
  951. /*****************************************************
  952. function dev_install_mail_templates()
  953. -----DESCRIPTION: -----------------------------------
  954. Read all mail templates in from files, parse them, and
  955. update the database.
  956. -----ARGUMENTS: -------------------------------------
  957. location Directory to import from
  958. -----RETURNS: ---------------------------------------
  959. Nothing.
  960. *****************************************************/
  961. function dev_install_mail_templates($location) {
  962. global $db, $_REQUEST;
  963. if (!file_exists($location)) {
  964. $errors[] .= "[ERROR] $location doesn't exist; cannot import e-mail templates: $php_errormsgn";
  965. }
  966. if (!@is_dir($location)) {
  967. $errors[] .= "[ERROR] $location isn't a directory or can't be stat()'d; cannot import e-mail templates: $php_errormsgn";
  968. }
  969. $db->query("DELETE FROM template_email");
  970. $languages = array();
  971. $db->query("SELECT installid AS id, name FROM languages WHERE !custom");
  972. if (!$db->num_rows()) {
  973. $errors .= "No languages are defined, or none were selected. Cannot import.";
  974. return $errors;
  975. }
  976. while ($res = $db->row_array()) {
  977. $languages[$res['id']]['name']  = $res['name'];
  978. $languages[$res['id']]['dir'] = $location.'/'.$res['name'];
  979. }
  980. $languages[-1]['name'] = 'Tech bodies';
  981. $languages[-1]['dir'] = $location;
  982. foreach ($languages AS $lang_id => $lang_data) {
  983. if (!@file_exists($languages[$lang_id]['dir'])) {
  984. $errors .= "[ERROR] Directory " . $languages[$lang_id]['dir'] . " doesn't exist: $php_errormsgn";
  985. continue;
  986. if (!@is_dir($languages[$lang_id]['dir'])) {
  987. // It's a plain file, not a directory. Can't import like this.
  988. $errors .= "[ERROR] " . $languages[$lang_id]['dir'] . " exists but isn't a directory or can't be stat()'d: $php_errormsgn";
  989. continue;
  990. }
  991. if (!$dirhandle = opendir($languages[$lang_id]['dir'])) {
  992. $errors .= "[ERROR] " . $languages[$lang_id]['dir'] . " exists but can't be opened for reading: $php_errormsgn";
  993. continue;
  994. } else {
  995. $errors .= "Opening " . $languages[$lang_id]['dir'] . "n";
  996. while (false !== ($file = readdir($dirhandle))) { 
  997. $template = basename($file, '.txt');
  998. $file = $languages[$lang_id]['dir'].'/'.$file;
  999. if (($file != '.') AND ($file != '..') AND is_file($file)) {
  1000. if ($handle = @fopen($file, 'rb')) {
  1001. $data = array();
  1002. while (!feof($handle)) {
  1003. $data[] = fgets($handle, 4096);
  1004. }
  1005. if (preg_match("/^Subject:(.*)$/i", $data[0], $matches)) {
  1006. $subject = mysql_escape_string(trim($matches[1]));
  1007. array_shift($data);
  1008. } else {
  1009. $subject = '';
  1010. }
  1011. if (preg_match("/^Description:(.*)$/i", $data[0], $matches)) {
  1012. $description = mysql_escape_string(trim($matches[1]));
  1013. array_shift($data);
  1014. } else {
  1015. unset($description);
  1016. }
  1017. $data = join('', $data);
  1018. $parsed = parse_conditionals($data);
  1019. if (stristr($file, 'TECHBODY')) {
  1020. $import_cat = 'Tech Emails';
  1021. } else{
  1022. $import_cat = 'User Emails';
  1023. }
  1024. $thelanguage = $lang_id;
  1025. if ($thelanguage == '-1') {
  1026. $thelanguage = '0';
  1027. }
  1028. $db->query("
  1029. INSERT INTO template_email SET
  1030. description = '$description',
  1031. template = '" . mysql_escape_string($parsed) . "',
  1032. template_unparsed = '" . mysql_escape_string($data) . "',
  1033. name = '" . mysql_escape_string($template) . "',
  1034. language = '$thelanguage',
  1035. category = '$import_cat',
  1036. subject = '$subject'
  1037. ");
  1038. } else {
  1039. $imported[$template][$lang_id] = 0;
  1040. $errors .= "Can't open $file: $php_errormsgn";
  1041. }
  1042. }
  1043. }
  1044. closedir($dirhandle);
  1045. }
  1046. }
  1047. // now give the descriptions to all the languages that don't have a description
  1048. $db->query("SELECT name, description FROM template_email WHERE description != ''");
  1049. while ($result = $db->row_array()) {
  1050. $template_data[$result[name]] = $result[description];
  1051. }
  1052. foreach ($template_data AS $key => $var) {
  1053. $db->query("UPDATE template_email SET description = '" . addslashes($var) . "' WHERE name = '" . addslashes($key) . "'");
  1054. }
  1055. return $errors;
  1056. }
  1057. /*****************************************************
  1058. function install_words_import()
  1059. -----DESCRIPTION: -----------------------------------
  1060. Imports all language translations.
  1061. -----ARGUMENTS: -------------------------------------
  1062. location Directory to import from
  1063. -----RETURNS: ---------------------------------------
  1064. Nothing.
  1065. *****************************************************/
  1066. function dev_install_words_import($location) {
  1067. global $db;
  1068. if (!file_exists($location)) {
  1069. $errors .= "[ERROR] $location doesn't exist; cannot import templates: $php_errormsgn";
  1070. }
  1071. if (!@is_dir($location)) {
  1072. $errors .= "[ERROR] $location isn't a directory or can't be stat()'d; cannot import templates: $php_errormsgn";
  1073. }
  1074. $db->query("DELETE FROM template_words");
  1075. $catnames = $db->query_return_array_id("SELECT id, name FROM template_words_cat", 'name');
  1076. $catnames[0] = '';
  1077. $languages = array();
  1078. $db->query("SELECT installid AS id, name FROM languages WHERE !custom");
  1079. if (!$db->num_rows()) {
  1080. $errors .= "No languages are defined, or none were selected. Cannot export.";
  1081. return $errors;
  1082. }
  1083. while ($res = $db->row_array()) {
  1084. $languages[$res['id']]['name'] = $res['name'];
  1085. $languages[$res['id']]['file'] = $location . '/' . str_replace('/', '_', $res['name']);
  1086. }
  1087. foreach ($languages AS $langid => $lang) {
  1088. if (!$handle = fopen($lang['file'], 'rb')) {
  1089. $errors .= "Cannot open " . $langid['file'] . "for reading $php_errormsgn";
  1090. return $errors;
  1091. }
  1092. $data = array();
  1093. while (!feof($handle)) {
  1094. $data[] = fgets($handle, 4096);
  1095. }
  1096. @fclose($handle);
  1097. $count = 0;
  1098. $catid = 0;
  1099. foreach ($data as $line) {
  1100. $count++;
  1101. $matches = array();
  1102. $line = trim($line);
  1103. if (!$line or (preg_match('/^#/', $line))) {
  1104. continue;
  1105. }
  1106. if (preg_match("/^%%(.*)/", $line, $cat)) {
  1107. $catname = $cat[1];
  1108. $catid = array_search($catname, $catnames);
  1109. if (!$catid) {
  1110. $db->query("INSERT INTO template_words_cat (name) VALUES ('" . mysql_escape_string($catname) . "')");
  1111. $catid = $db->last_id();
  1112. $errors .= "Category $catname not found, created new category, ID #$catidn";
  1113. $catnames = $db->query_return_array_id("SELECT id, name FROM template_words_cat", 'name');
  1114. }
  1115. continue;
  1116. }
  1117. if (preg_match("/^([^:]*):(.*)$/", $line, $matches)) {
  1118. $matches[1] = mysql_escape_string(trim($matches[1]));
  1119. $matches[2] = mysql_escape_string(trim($matches[2]));
  1120. if ($imported[$matches[1]][$langid] == 1) {
  1121. $errors .= "Duplicate wordref ($matches[1]) for language ". $languages[$langid]['name'] . "n";
  1122. } else {
  1123. $db->query("
  1124. INSERT INTO template_words (wordref, category, text, language)
  1125. VALUES ('$matches[1]', '$catid', '$matches[2]', '$langid')
  1126. ");
  1127. $imported[$matches[1]][$langid] = 1;
  1128. }
  1129. } else {
  1130. $errors .= "Error in file " . $languages[$langid]['file'] . " on line $count.n";
  1131. }
  1132. }
  1133. }
  1134. foreach ($imported AS $wordref => $val) {
  1135. foreach ($languages AS $lang_id => $lang) {
  1136. if ($val[$lang_id] != 1) {
  1137. $missing_words[$lang_id] .= "t - $wordrefn";
  1138. }
  1139. }
  1140. $rows[] = $row;
  1141. }
  1142. foreach ($missing_words AS $key => $var) {
  1143. $errors .= "Missing words for " . $languages[$key]['name'] . "n$var";
  1144. }
  1145. return $errors;
  1146. }
  1147. // Load 250,000 tickets into the database. 
  1148. // Do not do this unless you really, really mean it.
  1149. function load_fake_tickets($location, $ticket_count = 0) {
  1150. global $db;
  1151. // Load some fragments.
  1152. if (!is_dir($location)) {
  1153. mistake("$location isn't a directory. Nothing to load.");
  1154. }
  1155. if (!($dir = @opendir($location))) {
  1156. mistake("Can't open $location for reading.");
  1157. }
  1158. $fragments = array();
  1159. while ($file = @readdir($dir)) {
  1160. if ($file == '.' OR $file == '..' OR (substr($file, 0, 1) == '.') OR !is_file("$location/$file")) {
  1161. continue;
  1162. }
  1163. if ($handle = @fopen($location . "/$file", 'rb')) {
  1164. $data = @fread($handle, filesize("$location/$file"));
  1165. @fclose($handle);
  1166. $data = explode("nn", $data);
  1167. $fragments = array_merge($fragments, $data);
  1168. }
  1169. }
  1170. $tech_ids = $db->query_return_array_id("SELECT id FROM tech WHERE !disabled", 'id');
  1171. $user_ids = $db->query_return_array_id("SELECT id FROM user WHERE !disabled", 'id');
  1172. $cat_ids = $db->query_return_array_id("SELECT id FROM ticket_cat", 'id');
  1173. $pri_ids = $db->query_return_array_id("SELECT id FROM ticket_pri", 'id');
  1174. $startdate = strtotime(date('Y-m-d') . ' - 1 weeks');
  1175. while ($ticket_count < 250000) {
  1176. $ticket_count++;
  1177. $user_msgs = rand(1,3);
  1178. $tech_msgs = rand(1,3);
  1179. $minutes = rand(1,100);
  1180. $subject = "Test ticket #$ticket_count";
  1181. $techid = array_rand($tech_ids);
  1182. $userid = array_rand($user_ids);
  1183. $pri = array_rand($pri_ids);
  1184. $cat = array_rand($cat_ids);
  1185. $this_start = $startdate;
  1186. $awaiting_tech = (rand(1,2) - 1);
  1187. $ref = make_ticket_ref();
  1188. // Create the ticket
  1189. $db->query("INSERT INTO ticket SET
  1190. subject = '$subject',
  1191. userid = '$userid',
  1192. tech = '$techid',
  1193. category = '$cat',
  1194. priority = '$pri',
  1195. language = '1',
  1196. is_open = '1',
  1197. awaiting_tech = '$awaiting_tech',
  1198. date_opened = '$this_start',
  1199. ref = '$ref'");
  1200. $id = $db->last_id();
  1201. unset($messages);
  1202. for ($i = 1; $i <= $user_msgs; $i++) {
  1203. $message['type'] = 'user';
  1204. $this_start = strtotime(date('Y-m-d') . " +$minutes minutes");
  1205. $message['date'] = $this_start;
  1206. $message['message'] = mysql_escape_string(array_rand($fragments));
  1207. $messages[] = $message;
  1208. }
  1209. for ($i = 1; $i <= $tech_msgs; $i++) {
  1210. $message['type'] = 'user';
  1211. $this_start = strtotime(date('Y-m-d') . " +$minutes minutes");
  1212. $message['date'] = $this_start;
  1213. $message['message'] = mysql_escape_string($fragments[array_rand($fragments)]);
  1214. $messages[] = $message;
  1215. }
  1216. shuffle($messages);
  1217. foreach($messages AS $message) {
  1218. if ($message['type'] == 'user') {
  1219. $uid = $userid;
  1220. $tid = 0;
  1221. $userdate = $message['date'];
  1222. } else {
  1223. $uid = 0;
  1224. $tid = $techid;
  1225. $techdate = $message['date'];
  1226. }
  1227. $db->query("INSERT INTO ticket_message SET
  1228. ticketid = '$id',
  1229. message = '$message[message]',
  1230. date = '$message[date]',
  1231. techid = '$techid',
  1232. userid = '$userid'");
  1233. }
  1234. $db->query("UPDATE ticket SET 
  1235. date_lastreply = '$userdate',
  1236. date_lastreply_tech = '$techdate'");
  1237. if (!($ticket_count % 20)) {
  1238. echo "Created $ticket_count tickets so far...<br />";
  1239. }
  1240. if (!($ticket_count % 1000)) {
  1241. break;
  1242. }
  1243. }
  1244. return $ticket_count;
  1245. }