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

电子政务应用

开发平台:

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: reports.php,v $
  15. // | $Date: 2004/02/10 01:34:25 $
  16. // | $Revision: 1.61 $
  17. // +-------------------------------------------------------------+
  18. // | File Details:
  19. // | - Report and statistic maintenance and launcher (administration
  20. // |   interface)
  21. // +-------------------------------------------------------------+
  22. error_reporting(E_ALL & ~E_NOTICE);
  23. require_once('./global.php');
  24. //Nullify WTN-WDYL Team
  25. feature_check('reports');
  26. // default do
  27. $_REQUEST['do'] = trim($_REQUEST['do']);
  28. if (!isset($_REQUEST['do']) or $_REQUEST['do'] == "") {
  29. $_REQUEST['do'] = "listreports";
  30. }
  31. // globalise variables
  32. $global = array (
  33. array('id', 'number')
  34. );
  35. rg($global);
  36. ############################### LIST REPORTS ###############################
  37. if ($_REQUEST['do'] == "viewreports") {
  38. admin_header('Reports', 'View Reports');
  39. $db->query("SELECT id, title FROM report_stat");
  40. while ($result = $db->row_array()) {
  41. $stat[$result[id]] = $result[title];
  42. }
  43. $db->query("SELECT * FROM report_relations");
  44. while ($result = $db->row_array()) {
  45. $relations[$result[reportid]][] = $stat[$result[statid]];
  46. }
  47. $db->query("SELECT * FROM report");
  48. while ($result = $db->row_array()) {
  49. $table[] = array(
  50. "<form method="post" action="runreport.php"><b>$result[name]</b>",
  51. 'Start on ' . form_date('date', '', '', '', '', date('Y-m-d', strtotime(date('Y-m-01') . '-1 month'))).
  52. ' and report for ' .
  53. form_input('number', 
  54. 1, 
  55. 4) 
  56. . form_select('type', 
  57. array('days' => 'day(s)', 
  58. 'months' => 'month(s)', 
  59. 'years' => 'year(s)'), 
  60. '', 
  61. 'months') 
  62. . form_hidden('id', $result[id]) 
  63. . "<input type="submit" name="Run" value="Run"></form>",
  64. "<a href="reports.php?do=editreport&id=$result[id]">View / Edit Report",
  65. jprompt('Are you sure you want to delete this report?', 
  66. "reports.php?do=deletereport&id=$result[id]", 'Delete')
  67. );
  68. }
  69. $cols = array('Report Title', 'Specify Date Range', 'View/Edit Report', 'Delete');
  70. table_header('Reports', 'runreport.php');
  71. table_content($cols, $table);
  72. table_footer();
  73. }
  74. ############################### DELETE REPORT ###############################
  75. if ($_REQUEST['do'] == "deletereport") {
  76. $db->query("DELETE FROM report WHERE id = '$id'");
  77. $db->query("DELETE FROM report_relations WHERE reportid = '$id'");
  78. jump('reports.php?do=viewreports', 'Report Deleted');
  79. }
  80. ############################### DELETE STAT ###############################
  81. if ($_REQUEST['do'] == "deletestat") {
  82. $db->query("DELETE FROM report_stat WHERE id = '$id'");
  83. jump('reports.php?do=viewstats', 'Statistic Deleted');
  84. }
  85. ############################### LIST STATS ###############################
  86. if ($_REQUEST['do'] == "viewstats") {
  87. admin_header('Reports', 'View Stats');
  88. $db->query("SELECT id, title, description FROM report_stat");
  89. while ($result = $db->row_array()) {
  90. $table[] = array(
  91. $result[title], 
  92. $result[description], 
  93. "<a href="reports.php?do=editstat&id=$result[id]">View / Edit Statistic</A>",
  94. "<a href="runreport.php?do=previewstat&id=$result[id]">Preview</A>",
  95. jprompt('Are you sure you want to delete this statistic?', "reports.php?do=deletestat&id=$result[id]", 'Delete')
  96. );
  97. }
  98. $cols = array('Statistic Title', 'Statistic Description', 'View/Edit Statistic', 'Preview', 'Delete');
  99. table_header('Reports');
  100. table_content($cols, $table);
  101. table_footer();
  102. }
  103. ############################### EDIT / NEW REPORT ###############################
  104. if ($_REQUEST['do'] == "editreport" OR $_REQUEST['do'] == "newreport") {
  105. if ($_REQUEST['do'] == 'newreport') {
  106. admin_header('Reports', 'New Report');
  107. } else {
  108. admin_header('Reports', 'Edit Report');
  109. }
  110. $report = $db->query_return("SELECT * FROM report WHERE id = '$id'");
  111. echo get_javascript('selectBox.js');
  112. $table[] = array('<b>Report Name</b><BR>
  113. This report's short (display) name.', 
  114. form_input('name', $report[name])
  115. );
  116. $table[] = array('<b>Report Title</b><br />
  117. This report's printed name (shown on the generated report)', 
  118. form_input('title', $report[title])
  119. );
  120. $table[] = array('<b>Report Description</b><br />
  121. This report's detailed description (shown on the generated report)', 
  122. form_textarea('description', 60, 5, $report[description])
  123. );
  124. $db->query("SELECT name, id FROM report_style");
  125. while ($result = $db->row_array()) {
  126. $styles[$result[id]] = $result[name];
  127. }
  128. $table[] = array('<b>Report Style</b><BR>
  129. Select the desired style to apply to this report.', 
  130. form_select('style', $styles, '', $report[style])
  131. );
  132. $table[] = array('<b>E-mail Report</b><br />
  133. [Optional] Comma-separated list of addresses to e-mail a copy of the
  134. generated report to.', 
  135. form_textarea('email', 60, 6, $report[email])
  136. );
  137. give_default($report[path], '');
  138. $table[] = array('<b>Save Report</b><br />
  139. [Optional] Save a copy of the generated report as ...
  140. <I>(this requires write access to the given directory)</I>', 
  141. form_input('path', $report[path])
  142. );
  143. $table[] = array('<b>Report Format</b><BR>
  144. Select the desired reporting format.', 
  145. form_select('format', array('HTML' => 'HTML', 'PDF' => 'PDF'), 
  146. '', 
  147. $report[format])
  148. );
  149. $month = array('1' => 'Jan', 
  150. '2' => 'Feb', 
  151. '3' => 'Mar', 
  152. '4' => 'Apr', 
  153. '5' => 'May', 
  154. '6' => 'Jun', 
  155. '7' => 'Jul', 
  156. '8' => 'Aug', 
  157. '9' => 'Sep', 
  158. '10' => 'Oct', 
  159. '11' => 'Nov', 
  160. '12' => 'Dec'
  161. );
  162. $table[] = table_midheader('Statistics to Use');
  163. $reportarray = array();
  164. if ($_REQUEST['do'] == "editreport") {
  165. $db->query("SELECT report_stat.id, report_stat.title
  166. FROM report_relations
  167. LEFT JOIN report_stat ON (report_stat.id = report_relations.statid)
  168. WHERE reportid = '$id'
  169. ");
  170. while ($result = $db->row_array()) {
  171. $reportarray[] = $result[id];
  172. $html2 .= "<option value="$result[id]">$result[title]</option>";
  173. }
  174. }
  175. $db->query("SELECT id, title FROM report_stat");
  176. while ($result = $db->row_array()) {
  177. if (!in_array($result[id], $reportarray)) {
  178. $html .= "<option value="$result[id]">$result[title]</option>";
  179. }
  180. }
  181. $table[] = array("<b>Select Statistics</b><BR> 
  182. Select which statistics should be included in this report. Note that
  183. each statistic will generate its own data table or graph <I>(Note:
  184. CSV-format statistics cannot be mixed with other formats. Only one
  185. CSV-format statistic can be specified a single report (and it must be
  186. the only statistic in the report.).</I>", "
  187. <TABLE BORDER=0>
  188. <TR>
  189. <TD VALIGN=MIDDLE ALIGN=CENTER>
  190. <b>Available Statistics</b><br />
  191. <SELECT  style="width:200px" NAME="list11" MULTIPLE SIZE=10 onDblClick="moveSelectedOptions(this.form.list11,this.form.list21,false)">
  192. $html
  193. </SELECT>
  194. </TD>
  195. <td>&nbsp;</td>
  196. <TD VALIGN=MIDDLE ALIGN=CENTER>
  197. <INPUT TYPE="button" NAME="right" VALUE="Add &gt;&gt;" onClick="moveSelectedOptions(document.forms[0].list11,document.forms[0].list21,false);return false;"><BR><BR>
  198. <INPUT TYPE="button" NAME="right" VALUE="Add All &gt;&gt;" onClick="moveAllOptions(document.forms[0].list11,document.forms[0].list21,false); return false;"><BR><BR>
  199. <INPUT TYPE="button" NAME="left" VALUE="&lt;&lt; Delete" onClick="moveSelectedOptions(document.forms[0].list21,document.forms[0].list11,false); return false;"><BR><BR>
  200. <INPUT TYPE="button" NAME="left" VALUE="&lt;&lt; Delete All" onClick="moveAllOptions(document.forms[0].list21,document.forms[0].list11,false); return false;">
  201. </TD>
  202. <td>&nbsp;</td>
  203. <TD VALIGN=MIDDLE ALIGN=CENTER>
  204. <b>Selected Statistics</b><br />
  205. <SELECT style="width:200px" NAME="list21" MULTIPLE SIZE=10 onDblClick="moveSelectedOptions(this.form.list21,this.form.list11,false)">
  206. $html2
  207. </SELECT>
  208. </TD>
  209. <td>&nbsp;</td>
  210. <TD ALIGN="CENTER" VALIGN="MIDDLE">
  211. <b>Move Selected Statistic</b><br />
  212. <input type="hidden" name="stats">
  213. <INPUT TYPE="button" VALUE="&nbsp;Up&nbsp;" onClick="moveOptionUp(this.form.list21)">
  214. <INPUT TYPE="button" VALUE="Down" onClick="moveOptionDown(this.form.list21)">
  215. </TD>
  216. </TR>
  217. </TABLE>");
  218. $table[] = table_midheader('Repetition Options');
  219. if (!$report[repeattype]) {
  220. $table[] = array('<b>No Repeat</b>', 
  221. "<input type="radio" name="type" value="0" checked=checked>&nbsp;&nbsp;&nbsp;Don't run this report automatically " 
  222. );
  223. } else {
  224. $table[] = array('<b>Daily Repeat</b>', 
  225. "<input type="radio" name="type" value="0">&nbsp;&nbsp;&nbsp;Don't run this report automatically " 
  226. );
  227. }
  228. if ($report[repeattype] == 1) {
  229. $table[] = array('<b>Daily Repeat</b>', 
  230. "<input type="radio" name="type" value="1" checked=checked>&nbsp;&nbsp;&nbsp;Run this report every " 
  231. . form_input('type1_day', $report[value1], 1) . " day(s)<br />"
  232. );
  233. } else {
  234. $table[] = array('<b>Daily Repeat</b>', 
  235. "<input type="radio" name="type" value="1">&nbsp;&nbsp;&nbsp;Run this report every " 
  236. . form_input('type1_day', '', 1) . " day(s)<br />"
  237. );
  238. }
  239. if ($report[repeattype] == 2) {
  240. $days = unserialize($report[value2]);
  241. $table[] = array('<b>Weekly Repeat</b>',
  242. "<input type="radio" name="type" value="2" checked=checked>&nbsp;&nbsp;&nbsp;
  243. Run this report every " 
  244. . form_input('type2_week', $report[value1], 1) 
  245. . " week(s) on <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" 
  246. . form_checkbox_single('1', 1, @in_array(1, $days), 'type2_day') . "&nbsp;Mon&nbsp;&nbsp;" 
  247. . form_checkbox_single('2', 1, @in_array(2, $days), 'type2_day') . "&nbsp;Tue&nbsp;&nbsp;" 
  248. . form_checkbox_single('3', 1, @in_array(3, $days), 'type2_day') . "&nbsp;Wed&nbsp;&nbsp;" 
  249. . form_checkbox_single('4', 1, @in_array(4, $days), 'type2_day') . "&nbsp;Thu&nbsp;&nbsp;"
  250. . form_checkbox_single('5', 1, @in_array(5, $days), 'type2_day') . "&nbsp;Fri&nbsp;&nbsp;" 
  251. . form_checkbox_single('6', 1, @in_array(6, $days), 'type2_day') . "&nbsp;Sat&nbsp;&nbsp;" 
  252. . form_checkbox_single('7', 1, @in_array(7, $days), 'type2_day') . "&nbsp;Sun&nbsp;&nbsp;"
  253. );
  254. } else {
  255. $table[] = array('<b>Weekly Repeat</b>',
  256. "<input type="radio" name="type" value="2">&nbsp;&nbsp;&nbsp;
  257. Run this report every " 
  258. . form_input('type2_week', '', 1) . " week(s) on <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" 
  259. . form_checkbox_single('1', 1, '', 'type2_day') . "&nbsp;Mon&nbsp;&nbsp;" 
  260. . form_checkbox_single('2', 1, '', 'type2_day') . "&nbsp;Tue&nbsp;&nbsp;" 
  261. . form_checkbox_single('3', 1, '', 'type2_day') . "&nbsp;Wed&nbsp;&nbsp;" 
  262. . form_checkbox_single('4', 1, '', 'type2_day') . "&nbsp;Thu&nbsp;&nbsp;" 
  263. . form_checkbox_single('5', 1, '', 'type2_day') . "&nbsp;Fri&nbsp;&nbsp;" 
  264. . form_checkbox_single('6', 1, '', 'type2_day') . "&nbsp;Sat&nbsp;&nbsp;" 
  265. . form_checkbox_single('7', 1, '', 'type2_day') . "&nbsp;Sun&nbsp;&nbsp;"
  266. );
  267. }
  268. if ($report[repeattype] == 3) {
  269. $table[] = array('<b>Monthly Repeat</b>',
  270. "<input type="radio" name="type" value="3" checked=checked>&nbsp;&nbsp;&nbsp;
  271. Run this report on the " 
  272. . form_select('type3_day', make_numberarray(1, 31), '', $report[value1]) 
  273. . " day of every " 
  274. . form_input('type3_month', $report[value2], 3) 
  275. . " month(s)"
  276. );
  277. } else {
  278. $table[] = array('<b>Monthly Repeat</b>',
  279. "<input type="radio" name="type" value="3">&nbsp;&nbsp;&nbsp;
  280. Run this report on the " 
  281. . form_select('type3_day', make_numberarray(1, 31), '', $report[value1]) 
  282. . " day of every " 
  283. . form_input('type3_month', '', 3) 
  284. . " month(s)"
  285. );
  286. }
  287. if ($report[repeattype] == 4) {
  288. $table[] = array('<b>Yearly Repeat</b>',
  289. "<input type="radio" name="type" value="4" checked=checked>&nbsp;&nbsp;&nbsp;
  290. Run this report every year on " 
  291. . form_select('type4_day', make_numberarray(1, 31), '', $report[value1]) 
  292. . " " 
  293. . form_select('type4_month', $month, '', $report[value2])
  294. );
  295. } else {
  296. $table[] = array('<b>Yearly Repeat</b>',
  297. "<input type="radio" name="type" value="4">&nbsp;&nbsp;&nbsp;
  298. Run this report every year on " 
  299. . form_select('type4_day', make_numberarray(1, 31)) 
  300. . " " 
  301. . form_select('type4_month', $month)
  302. );
  303. }
  304. if ($_REQUEST['do'] == 'editreport') {
  305. $hidden = array('do' => 'editreport2', 'id' => $report[id]);
  306. $end = 'Edit Report';
  307. } else {
  308. $hidden = array('do' => 'newreport2');
  309. $end = 'Create Report';
  310. }
  311. $width = array('40%', '60%');
  312. table_header('Field Display Properties', 'reports.php', $hidden, '', 'dpform');
  313. table_content('', $table, '', '', '', '', $width);
  314. table_footer($end, 'center', '', '', "onclick="submitAllOptions(this.form.list21, this.form.stats)"");
  315. }
  316. ############################### EDIT / NEW REPORT ###############################
  317. if ($_REQUEST['do'] == "newreport2" OR $_REQUEST['do'] == "editreport2") {
  318. if ($_REQUEST[type] == '1') {
  319. $repeattype = 'daily';
  320. $val1 = $_REQUEST[type1_day];
  321. } elseif ($_REQUEST[type] == '2') {
  322. $repeattype = 'weekly';
  323. $val1 = $_REQUEST[type2_week];
  324. if (is_array($_REQUEST[type2_day])) {
  325. foreach ($_REQUEST[type2_day] AS $key => $var) {
  326. if ($var > 0) {
  327. $tmp_array[] = $key;
  328. }
  329. }
  330. }
  331. $val2 = serialize($tmp_array);
  332. unset($tmp_array);
  333. } elseif ($_REQUEST[type] == '3') {
  334. $repeattype = 'monthly';
  335. $val1 = $_REQUEST[type3_day];
  336. $val2 = $_REQUEST[type3_month];
  337. } elseif ($_REQUEST[type] == '4') {
  338. $repeattype = 'yearly';
  339. $val1 = $_REQUEST[type4_day];
  340. $val2 = $_REQUEST[type4_month];
  341. }
  342. if ($_REQUEST['do'] == 'newreport2') {
  343. $db->query("INSERT INTO report SET
  344. name = '" . mysql_escape_string($_REQUEST[name]) . "',
  345. title = '" . mysql_escape_string($_REQUEST[title]) . "',
  346. description = '" . mysql_escape_string($_REQUEST[description]) . "',
  347. style = '" . mysql_escape_string($_REQUEST[style]) . "',
  348. format = '" . mysql_escape_string($_REQUEST[format]) . "',
  349. path = '" . mysql_escape_string($_REQUEST[path]) . "',
  350. value1 = '" . mysql_escape_string($val1) . "',
  351. value2 = '" . mysql_escape_string($val2) . "',
  352. repeattype = '$repeattype',
  353. email = '" . mysql_escape_string($_REQUEST[email]) . "'
  354. ");
  355. $id = $db->last_id();
  356. } else {
  357. $db->query("UPDATE report SET
  358. name = '" . mysql_escape_string($_REQUEST[name]) . "',
  359. title = '" . mysql_escape_string($_REQUEST[title]) . "',
  360. description = '" . mysql_escape_string($_REQUEST[description]) . "',
  361. style = '" . mysql_escape_string($_REQUEST[style]) . "',
  362. format = '" . mysql_escape_string($_REQUEST[format]) . "',
  363. path = '" . mysql_escape_string($_REQUEST[path]) . "',
  364. value1 = '" . mysql_escape_string($val1) . "',
  365. value2 = '" . mysql_escape_string($val2) . "',
  366. repeattype = '$repeattype',
  367. email = '" . mysql_escape_string($_REQUEST[email]) . "'
  368. WHERE id = '$id'
  369. ");
  370. $db->query("DELETE FROM report_relations WHERE reportid = '$id'");
  371. }
  372. $relations = split(',', $_REQUEST[stats]);
  373. foreach ($relations AS $key => $var) {
  374. if ($var) {
  375. $array[] = array($id, $var);
  376. }
  377. }
  378. if (is_array($array)) {
  379. $db->query("INSERT INTO report_relations (reportid, statid) VALUES " . insertsql($array));
  380. }
  381. if ($_REQUEST['do'] == 'newreport2') {
  382. jump("reports.php?do=editreport&id=$id", 'New Report Created');
  383. } else {
  384. jump("reports.php?do=editreport&id=$id", 'Report Updated');
  385. }
  386. }
  387. ############################### EDIT / NEW STAT ###############################
  388. if ($_REQUEST['do'] == "newstat2" OR $_REQUEST['do'] == "editstat2") {
  389. // sort out ticket fields
  390. if ($_REQUEST[awaiting_status]) {
  391. $fixed_general[awaiting_status] = $_REQUEST[awaiting_status];
  392. }
  393. if ($_REQUEST[open_status]) {
  394. $fixed_general[open_status] = $_REQUEST[open_status];
  395. }
  396. if ($_REQUEST[category]) {
  397. $fixed_general[category] = $_REQUEST[category];
  398. }
  399. if ($_REQUEST[priority]) {
  400. $fixed_general[priority] = $_REQUEST[priority];
  401. }
  402. // sort out ticket fields
  403. $db->query("SELECT * from ticket_def");
  404. while ($result = $db->row_array()) {
  405. $data = field_def_val($result, $_REQUEST[ticketfields][$result[name]], $_REQUEST[ticketfields]["extra" . $result[name]], 1);
  406. $fixed_ticket[$result[name]] = $data;
  407. $fixed_ticket["$result[name]_not"] = $_REQUEST['ticketfields'][$result[name].'_not'];
  408. $fixed_ticket["$result[name]_match"] = $_REQUEST['ticketfields'][$result[name].'_match'];
  409. }
  410. // sort out user fields
  411. $db->query("SELECT * from user_def");
  412. while ($result = $db->row_array()) {
  413. $data = field_def_val($result, $_REQUEST[userfields][$result[name]], $_REQUEST[userfields]["extra" . $result[name]], 1);
  414. $fixed_user[$result[name]] = $data;
  415. $fixed_user["$result[name]_not"] = $_REQUEST['userfields'][$result[name].'_not'];
  416. $fixed_user["$result[name]_match"] = $_REQUEST['userfields'][$result[name].'_match'];
  417. }
  418. $fixed_user = serialize($fixed_user);
  419. $fixed_ticket = serialize($fixed_ticket);
  420. $fixed_general = serialize($fixed_general);
  421. $interval = intval($_REQUEST[txtYears]).','.
  422. intval($_REQUEST[txtDays]).','.
  423. intval($_REQUEST[txtHours]).','.
  424. intval($_REQUEST[txtMinutes]);
  425. if ($_REQUEST['do'] == 'newstat2') {
  426. $db->query("INSERT INTO report_stat SET
  427. title = '" . mysql_escape_string($_REQUEST[title]) . "',
  428. description = '" . mysql_escape_string($_REQUEST[description]) . "',
  429. variable1 = '" . mysql_escape_string($_REQUEST[variable1]) . "',
  430. variable2 = '" . mysql_escape_string($_REQUEST[variable2]) . "',
  431. appendix = '" . mysql_escape_string($_REQUEST[appendix]) . "',
  432. dateaffect = '" . mysql_escape_string($_REQUEST[dateaffect]) . "',
  433. displaytype = '" . mysql_escape_string($_REQUEST[displaytype]) . "',
  434. fixed_user = '" . mysql_escape_string($fixed_user) . "',
  435. displayfields = '" . mysql_escape_string($_REQUEST[fields]) . "',
  436. fixed_ticket = '" . mysql_escape_string($fixed_ticket) . "',
  437. fixed_general = '" . mysql_escape_string($fixed_general) . "',
  438. variable1times = '" . mysql_escape_string($interval) . "'
  439. ");
  440. $id = $db->last_id();
  441. } else {
  442. $db->query("UPDATE report_stat SET
  443. title = '" . mysql_escape_string($_REQUEST[title]) . "',
  444. description = '" . mysql_escape_string($_REQUEST[description]) . "',
  445. variable1 = '" . mysql_escape_string($_REQUEST[variable1]) . "',
  446. variable2 = '" . mysql_escape_string($_REQUEST[variable2]) . "',
  447. appendix = '" . mysql_escape_string($_REQUEST[appendix]) . "',
  448. dateaffect = '" . mysql_escape_string($_REQUEST[dateaffect]) . "',
  449. displaytype = '" . mysql_escape_string($_REQUEST[displaytype]) . "',
  450. fixed_user = '" . mysql_escape_string($fixed_user) . "',
  451. displayfields = '" . mysql_escape_string($_REQUEST[fields]) . "',
  452. fixed_ticket = '" . mysql_escape_string($fixed_ticket) . "',
  453. fixed_general = '" . mysql_escape_string($fixed_general) . "',
  454. variable1times = '" . mysql_escape_string($interval) . "'
  455. WHERE id = '$id'
  456. ");
  457. }
  458. if ($_REQUEST['do'] == 'newstat2') {
  459. jump("reports.php?do=editstat&id=$id", 'New Statistic Created');
  460. } else {
  461. jump("reports.php?do=editstat&id=$id", 'Statistic Updated');
  462. }
  463. }
  464. ############################### EDIT / NEW STAT ###############################
  465. if ($_REQUEST['do'] == "editstat" OR $_REQUEST['do'] == "newstat") {
  466. if ($_REQUEST['do'] == 'editstat') {
  467. admin_header('Reports', 'Edit Stat');
  468. } else {
  469. admin_header('Reports', 'New Stat');
  470. }
  471. echo get_javascript('selectBox.js');
  472. if ($_REQUEST['do'] == "editstat") {
  473. $stat = $db->query_return("SELECT * FROM report_stat WHERE id = '$id'");
  474. $fixed_user = unserialize($stat[fixed_user]);
  475. $fixed_general = unserialize($stat[fixed_general]);
  476. $fixed_ticket = unserialize($stat[fixed_ticket]);
  477. }
  478. $db->query("SELECT id, name FROM ticket_cat");
  479. while ($result = $db->row_array()) {
  480. $cat_array[$result[id]] = $result[name];
  481. }
  482. $db->query("SELECT id, name FROM ticket_pri");
  483. while ($result = $db->row_array()) {
  484. $pri_array[$result[id]] = $result[name];
  485. }
  486. $table[] = array('<b>Title</b> ' . ahelp('Reports', 'Title'),
  487. form_input('title', $stat[title])
  488. );
  489. $table[] = array('<b>Description</b> ' . ahelp('Reports', 'Description'),
  490. form_textarea('description', 60, 5, $stat[description])
  491. );
  492. $table[] = array('<b>Display Type</b> ' . ahelp('Reports', 'Display Type'),
  493. form_select('displaytype', 
  494. array('data' => 'Data (Show a Table)', 
  495. 'bar' => 'Bar Graph',
  496. 'databar' => 'Table and Bar Graph',
  497. 'pie' => 'Pie Chart',
  498. 'datapie' => 'Table and Pie Chart',
  499. 'csv' => 'CSV File'), 
  500. '', 
  501. $stat[displaytype])
  502. );
  503. $table[] = array('<b>Date Affects</B> ' . ahelp('Reports','Date Affects'),
  504. form_select('dateaffect', 
  505. array('none' => 'None', 
  506. 'opened' => '[interval] Ticket Opened', 
  507. 'closed' => '[interval] Ticket Closed', 
  508. 'reply' => '[interval] Ticket Replied', 
  509. '1streply_less' => '[length] 1st Ticket Reply (less than)', 
  510. '1streply_greater' => '[length] 1st Ticket Reply (greater than)', 
  511. 'span_less' => '[length] Ticket Lifetime (less than)',
  512. 'span_more' => '[length] Ticket Lifetime (greater than)'),
  513. '', 
  514. $stat[dateaffect])
  515. );
  516. $intervals = explode(',', $stat[variable1times]);
  517. if (isset($intervals[0])) {
  518. $i_years = $intervals[0];
  519. } else {
  520. $i_years = 0;
  521. }
  522. if (isset($intervals[1])) {
  523. $i_days  = $intervals[1];
  524. } else {
  525. $i_days = 0;
  526. }
  527. if (isset($intervals[2])) {
  528. $i_hours = $intervals[2];
  529. } else {
  530. $i_hours = 0;
  531. }
  532. if (isset($intervals[3])) {
  533. $i_mins  = $intervals[3];
  534. } else {
  535. $i_mins = 0;
  536. }
  537. $table[] = array('<b>Search Length/Interval</b> ' . ahelp('Reports', 'Search Length/Interval'),
  538. form_input('txtYears', $i_years, 5) . '&nbsp;Year(s)<BR>' .
  539. form_input('txtDays', $i_days, 5) . '&nbsp;Day(s)<BR>' .
  540. form_input('txtHours', $i_hours, 5) . '&nbsp;Hour(s)<BR>' .
  541. form_input('txtMinutes', $i_mins, 5) . '&nbsp;Minute(s)<BR>'
  542. );
  543. $array = array(
  544. 'is_open' => 'Ticket Status: open/closed', 
  545. 'priority' => 'Ticket Priority', 
  546. 'category' => 'Ticket Category', 
  547. 'awaiting_tech' => 'Awaiting Response From: tech/user', 
  548. 'tech' => 'Assigned Technician',
  549. 'userid' => 'User'
  550. );
  551. // get rest of ticket data
  552. $db->query(
  553. "SELECT * from ticket_def
  554. ORDER by displayorder"
  555. );
  556. while ($result = $db->row_array()) {
  557. unset($name, $description, $error, $html);
  558. $tmp = unserialize($result[display_name]);
  559. $name = $tmp[$settings[default_language]];
  560. $array[$result[name]] = $name;
  561. }
  562. $table[] = array('<b>1st Variable</b> ' . ahelp('Reports', '1st Variable'),
  563. form_select('variable1', $array, '', $stat[variable1])
  564. );
  565. $array = array_merge(array(''), $array);
  566. $table[] = array('<b>2nd Variable</b> ' . ahelp('Reports', '2nd Variable'),
  567. form_select('variable2', $array, '', $stat[variable2])
  568. );
  569. // <body onLoad="retrieveVals()"> <input type="button" name="Submit" value="Submit" onClick="postThis()">
  570. $table[] = table_midheader('Ticket Search Restrictions');
  571. $table[] = array('<b>Open/Closed</b><BR> [Optional] Search only for open
  572. (or closed) tickets.', 
  573. form_select('open_status', 
  574. array('', 
  575. 'closed' => 'Ticket Closed', 
  576. 'open' => 'Ticket Open'
  577. ), 
  578. '', 
  579. $fixed_general[open_status], 
  580. 1)
  581. );
  582. $table[] = array('<b>Awaiting Response From...</b><BR> [Optional] Search
  583. only for tickets awaiting a response from a technician (or a user).',
  584. form_select('awaiting_status', 
  585. array('', 
  586. 'tech' => 'Awaiting Technician Reponse', 
  587. 'user' => 'Awaiting User Response'
  588. ), 
  589. '',
  590. $fixed_general[awaiting_status], 1)
  591. );
  592. $table[] = array('<b>Priority</b><BR> [Optional] Search only for tickets
  593. with a priority of...', 
  594. form_select('priority', 
  595. $pri_array, 
  596. '',
  597. $fixed_general[priority], 
  598. '', 
  599. '', 
  600. 5)
  601. );
  602. $table[] = array('<b>Category</b><BR> [Optional] Search only for tickets 
  603. with a category of...', 
  604. form_select('category', 
  605. $cat_array, 
  606. '', 
  607. $fixed_general[category], 
  608. '', 
  609. '',
  610. 5)
  611. );
  612. // used for fields to display
  613. $statarray = split(',', $stat[displayfields]);
  614. unset($options, $options2);
  615. if (!in_array('subject', $statarray)) {
  616. $options .= "<option value="subject">Subject</option>n";
  617. } else {
  618. $options2 .= "<option value="subject">Subject</option>n";
  619. }
  620. if (!in_array('category', $statarray)) {
  621. $options .= "<option value="category">Category</option>n";
  622. } else {
  623. $options2 .= "<option value="category">Category</option>n";
  624. }
  625. if (!in_array('priority', $statarray)) {
  626. $options .= "<option value="priority">Priority</option>n";
  627. } else {
  628. $options2 .= "<option value="priority">Priority</option>n";
  629. }
  630. if (!in_array('tech', $statarray)) {
  631. $options .= "<option value="tech">Tech Owner</option>n";
  632. } else {
  633. $options2 .= "<option value="tech">Tech Owner</option>n";
  634. }
  635. if (!in_array('user', $statarray)) {
  636. $options .= "<option value="user">User Owner</option>n";
  637. } else {
  638. $options2 .= "<option value="user">User Owner</option>n";
  639. }
  640. // get rest of ticket data
  641. $db->query(
  642. "SELECT * from ticket_def
  643. ORDER by displayorder"
  644. );
  645. while ($result = $db->row_array()) {
  646. unset($name, $description, $error, $html);
  647. $tmp = unserialize($result[display_name]);
  648. $name = $tmp[$settings[default_language]];
  649. // for fields
  650. if (in_array($result[name], $statarray)) {
  651. $options2 .= "<option value="$result[name]">$name</option>n";
  652. } else {
  653. $options .= "<option value="$result[name]">$name</option>n";
  654. }
  655. if ($_REQUEST['do'] == "editstat") {
  656. $action = 1;
  657. }
  658. if ($fixed_ticket[$result[name]]) { // Function iff() doesn't quite do what we need it to here
  659. $html = field_def($result, iff($action, 'edit', 'default'), '', '', $fixed_ticket[$result[name]],  'ticketfields', 1, $fixed_ticket["$result[name]_match"], $fixed_ticket["$result[name]_not"]);
  660. } else {
  661. $html = field_def($result, iff($action, 'edit', 'default'), '', '', '',  'ticketfields', 1, $fixed_ticket["$result[name]_match"], $fixed_ticket["$result[name]_not"]);
  662. }
  663. $description = unserialize($result[description]);
  664. if ($description[1]) {
  665. $description = "<BR>$description[1]";
  666. } else {
  667. $description = "<BR><I>No description</I>";
  668. }
  669. $table[] = array("<b>$name</b>$description", $html);
  670. }
  671. $table[] = table_midheader('User Search Restrictions');
  672. $table[] = array('<I>Make selections here to restrict which users' tickets are included by this statistic.</I>');
  673.     // get rest of ticket data
  674.     $db->query(
  675.     "SELECT * from user_def
  676.     ORDER by displayorder"
  677.     );
  678.     $custom = array();
  679.     while ($result = $db->row_array()) {
  680.         unset($name, $description, $error, $html);
  681.         $tmp = unserialize($result[display_name]);
  682.         $name = $tmp[$settings[default_language]];
  683.         if ($fixed_user[$result[name]]) { // Function iff() doesn't quite do what we need it to here
  684.             $html = field_def($result, iff($action, 'edit', 'default'), '', '', $fixed_user[$result[name]],  'userfields', 1, $fixed_user["$result[name]_match"], $fixed_user["$result[name]_not"]);
  685.         } else {
  686.             $html = field_def($result, iff($action, 'edit', 'default'), '', '', '',  'userfields', 1, $fixed_user["$result[name]_match"], $fixed_user["$result[name]_not"]);
  687.         }
  688.         $description = unserialize($result[description]);
  689.         if ($description[1]) {
  690.             $description = "<BR>[Custom] $description[1]";
  691.         } else {
  692.             $description = "<BR>[Custom] <I>No description</I>";
  693.         }
  694.         $table[] = array("<b>$name</b>$description", $html);
  695.     }
  696. $display = array('ID', 'Subject', 'Category', 'Priority', 'Status');
  697. $table[] = table_midheader('Detailed Ticket Listing');
  698. $table[] = array('<b>List Matching Tickets After Statistic?</b><BR> If
  699. "yes", a list of all tickets matched by this statistic will be shown
  700. beneath the chart or graph of the data. <I>(Cannot be specified for CSV
  701. display types</I>.', 
  702. form_radio_yn('appendix', 
  703. '', 
  704. $stat[appendix])
  705. );
  706. $table[] = array('<b>Fields to Display</b><BR> For each matched ticket,
  707. display these fields... <I>(note: selecting too many fields here can
  708. produce very wide reports, possibly causing formatting errors when
  709. displaying or printing reports)</I>', 
  710. " <TABLE BORDER=0>
  711. <TR>
  712. <TD VALIGN=MIDDLE ALIGN=CENTER>
  713. <b>Avaliable Fields</b><br />
  714. <SELECT  style="width:200px" NAME="list11" MULTIPLE SIZE=10 onDblClick="moveSelectedOptions(this.form.list11,this.form.list21,false)">
  715. $options
  716. </SELECT>
  717. </TD>
  718. <TD VALIGN=MIDDLE ALIGN=CENTER>
  719. <INPUT TYPE="button" NAME="right" VALUE="&gt;&gt;" onClick="moveSelectedOptions(document.forms[0].list11,document.forms[0].list21,false);return false;"><BR><BR>
  720. <INPUT TYPE="button" NAME="right" VALUE="All &gt;&gt;" onClick="moveAllOptions(document.forms[0].list11,document.forms[0].list21,false); return false;"><BR><BR>
  721. <INPUT TYPE="button" NAME="left" VALUE="&lt;&lt;" onClick="moveSelectedOptions(document.forms[0].list21,document.forms[0].list11,false); return false;"><BR><BR>
  722. <INPUT TYPE="button" NAME="left" VALUE="All &lt;&lt;" onClick="moveAllOptions(document.forms[0].list21,document.forms[0].list11,false); return false;">
  723. </TD>
  724. <TD VALIGN=MIDDLE ALIGN=CENTER>
  725. <input type="hidden" name="fields">
  726. <b>Selected Fields</b><br />
  727. <SELECT style="width:200px" NAME="list21" MULTIPLE SIZE=10 onDblClick="moveSelectedOptions(this.form.list21,this.form.list11,false)">
  728. $options2
  729. </SELECT>
  730. </TD>
  731. </TR>
  732. </TABLE>");
  733. if ($_REQUEST['do'] == 'editstat') {
  734. $hidden = array('do' => 'editstat2', 'id' => $stat[id]);
  735. $end = 'Edit Statistic';
  736. } else {
  737. $hidden = array('do' => 'newstat2');
  738. $end = 'Create Statistic';
  739. }
  740. $width = array("40%", "60%");
  741. table_header('Statistic', 'reports.php', $hidden, '', 'dpform');
  742. table_content('', $table, '', '', '', '', $width);
  743. table_footer($end, 'center', '', '', "onclick="submitAllOptions(this.form.list21, this.form.fields)"");
  744. }