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

电子政务应用

开发平台:

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: admin-tech_functions.php,v $
  15. // | $Date: 2004/02/12 21:16:57 $
  16. // | $Revision: 1.179 $
  17. // +-------------------------------------------------------------+
  18. // | File Details:
  19. // | - Utility functions for the administration and user interfaces
  20. // +-------------------------------------------------------------+
  21. error_reporting(E_ALL ^ E_NOTICE);
  22. /*****************************************************
  23. function language_check
  24. -----DESCRIPTION: -----------------------------------
  25. Determine whether multiple language handling is enabled or not
  26. because it only makes sense if there is a language to actually
  27. use as well as the default language
  28. -----RETURNS: ---------------------------------------
  29. TRUE if yes, FALSE if no.
  30. *****************************************************/
  31. function language_check() {
  32. global $db, $settings;
  33. if ($settings[language_on]) {
  34. $db->query("SELECT id FROM languages WHERE is_selectable AND id != '$settings[default_language]'");
  35. if (!$db->num_rows()) {
  36. unset($settings[language_on]);
  37. return FALSE;
  38. } else {
  39. return TRUE;
  40. }
  41. }
  42. }
  43. /*****************************************************
  44. functions reload_index and reload_index_nourl and reload_index_frameset
  45. -----DESCRIPTION: -----------------------------------
  46. Generate a JavaScript segment that automatically redirects the browser to
  47. the index page to enforce the use of frames. Used for frames that should
  48. never be viewed outside of the tech interface frameset.
  49. reload_index_nourl ignores the requested URL and redirects straight back
  50. to home/index.php.
  51. reload_index_frameset does the reverse and is used for tech/home/index.php;
  52. if the browser *is* in a frameset, break out and start it over again
  53. -----RETURNS:----------------------------------------
  54. None; directly produces output.
  55. *****************************************************/
  56. function reload_index() {
  57. ?>
  58. <SCRIPT language="JavaScript">
  59. if (parent.location.href == self.location.href) {
  60. window.location.href = "./index.php?url=" + self.location.href;
  61. }
  62. </SCRIPT>
  63. <?php
  64. }
  65. function reload_index_nourl() {
  66. ?>
  67. <SCRIPT language="JavaScript">
  68. if (parent.location.href == self.location.href) {
  69. window.location.href = "./index.php";
  70. }
  71. </SCRIPT>
  72. <?php
  73. }
  74. function reload_index_frameset() {
  75. ?>
  76. <SCRIPT language="JavaScript">
  77. if (parent.location.href != self.location.href) {
  78. window.location.href = "./index.php";
  79. }
  80. </SCRIPT>
  81. <?php
  82. }
  83. /*****************************************************
  84. function p_ticket
  85. -----DESCRIPTION: -----------------------------------
  86. Determines whether the current tech has permission to perform specific
  87. tasks involving the current ticket.
  88. -----ARGUMENTS: -------------------------------------
  89. action The action the tech is trying to perform
  90. edit Edit the ticket (or its attachments, messages, etc.)
  91. view View the ticket (or its attachments, messages, etc.)
  92. delete Delete the ticket entirely
  93. close Close or re-open the ticket
  94. ticket [Optional] Ticket data array
  95. -----RETURNS:----------------------------------------
  96. TRUE if the technician has permission, FALSE if not.
  97. *****************************************************/
  98. function p_ticket($action, $ticket='') {
  99. global $user;
  100. if (!$ticket) {
  101. global $ticket;
  102. }
  103. // We're not letting the user do *anything* if he's banned from this category
  104. $bannedcats = split(',', $user[cats_admin]);
  105. if ((in_array($ticket[category], $bannedcats))) {
  106. return 0;
  107. }
  108. if ($action == 'edit') {
  109. // ticket owned by user
  110. if ($ticket['tech'] == $user[id]) {
  111. return 1;
  112. }
  113. // user has permission to edit others tickets (make sure ticket is not locked)
  114. if ($user[p_tech_edit] == '1' AND $ticket[tech] != $user[id] AND $ticket[is_locked] != '1') {
  115. return 1;
  116. }
  117. // not owned by anyone
  118. if (($ticket[tech] == '0') OR ($ticket[tech] == '')) {
  119. return 1;
  120. }
  121. } elseif ($action == 'view') {
  122. // can edit own tickets
  123. if ($ticket[tech] == $user[id]) {
  124. return 1;
  125. }
  126. // check to view others tickets
  127. if ($user[p_tech_view] == '1') {
  128. return 1;
  129. }
  130. // unassigned
  131. if (($ticket[tech] == '0') OR ($ticket[tech] == '')) {
  132. return 1;
  133. }
  134. } elseif ($action == 'delete') {
  135. // delete own tickets
  136. if (($ticket[tech] == $user[id]) AND ($user[p_delete_own] == '1')) {
  137. return 1;
  138. }
  139. // delete others tickets
  140. if (($ticket[tech] != $user[id]) AND ($user[p_delete_other] == '1')) {
  141. return 1;
  142. }
  143. } elseif ($action == 'close') {
  144. // close own tickets
  145. if (($ticket[tech] == $user[id]) AND ($user[p_close_ticket] == '1')) {
  146. return 1;
  147. }
  148. // close others tickets (also need to be able to edit others tickets)
  149. if (($ticket[tech] != $user[id]) AND ($user['p_tech_edit']) AND ($user[p_close_ticket] == '1')) {
  150. return 1;
  151. }
  152. }
  153. return 0;
  154. }
  155. /*****************************************************
  156. function change_index
  157. -----DESCRIPTION: -----------------------------------
  158. - Changes is the index with an assoicative array
  159. *****************************************************/
  160. function change_index($array, $new_index) {
  161. if (is_array($array)) {
  162. foreach ($array AS $key => $var) {
  163. $tmp[$new_index[$key]] = $var;
  164. }
  165. }
  166. return $tmp;
  167. }
  168. /*****************************************************
  169. function error_marker
  170. -----DESCRIPTION: -----------------------------------
  171. Reformats fields differently if they appear in the global value $error_array.
  172. -----ARGUMENTS: -------------------------------------
  173. fieldname The field name to check.
  174. -----GLOBALS: -------------------------------------
  175. error_array The array of errors to check
  176. -----RETURNS:----------------------------------------
  177. If the field is in the array, returns HTML to show the field.
  178. Nothing otherwise.
  179. *****************************************************/
  180. function error_marker($fieldname) {
  181. global $error_array;
  182. if (is_array($error_array)) {
  183. if (in_array($fieldname, $error_array)) {
  184. return "<font color="red"><b>*</b></font>&nbsp;&nbsp;&nbsp;";
  185. }
  186. }
  187. }
  188. /*****************************************************
  189. function pagenav
  190. -----DESCRIPTION: -----------------------------------
  191. Generate links to navigate multiple page result sets.
  192. -----ARGUMENTS: -------------------------------------
  193. total The total number of entries
  194. perpage Entries shown per page
  195. start Starting entry being viewed
  196. link Base URL to use for all links
  197. form [T/F] Generate form widgets instead of links.
  198. type Show select box and links, or just select box
  199. select Box and links
  200. select_only Box only
  201. elementname The variable containing the identifier value
  202. -----RETURNS:----------------------------------------
  203. HTML to display the navigation links.
  204. *****************************************************/
  205. function pagenav($total, $perpage='20', $start='1', $link, $form, $type, $elementname='searchvalue') {
  206. $pages = ceil($total / $perpage);
  207. if ($pages == 1) {
  208. return '';
  209. }
  210. $html = "<table width="300" align="center"><tr>";
  211. if ($type == "select") {
  212. if ($start > 2) {
  213. if ($form) {
  214. $html .= "<td><a href="javascript:submitform('$form','$elementname','1');">Page 1</a></td>";
  215. } else {
  216. $html .= "<td><a href="$link&$elementname=1">Page 1</a></td>";
  217. }
  218. }
  219. if ($start > 1) {
  220. if ($form) {
  221. $html .= "<td><a href="javascript:submitform('$form','$elementname','" . ($start - 1) . "');">Previous</a></td>";
  222. } else {
  223. $html .= "<td><a href="$link">Previous</a></td>";
  224. }
  225. }
  226. }
  227. if ($type == "select_only" OR $type == "select") {
  228. if ($form) {
  229. $html .= "<td><select name="$elementname" onchange="this.form.submit();">";
  230. } else {
  231. $html .= "<td><select name="$elementname">";
  232. }
  233. for ($i = 1; $i <= $pages; $i++) {
  234. if ($i == $start) {
  235. $selected = ' selected="selected"';
  236. }
  237. $html .= "<option value="$i"$selected>Page $i</option>";
  238. unset($selected);
  239. }
  240. $html .= "</td>";
  241. }
  242. if ($type == "select") {
  243. if (($pages - $start) >= 2) {
  244. if ($form) {
  245. $html .= "<td><a href="javascript:submitform('$form','$elementname','" . ($start + 1) . "');">Next</a></td>";
  246. } else {
  247. $html .= "<td><a href="$link">Previous</a></td>";
  248. }
  249. }
  250. if (($pages - $start) >= 1) {
  251. if ($form) {
  252. $html .= "<td><a href="javascript:submitform('$form','$elementname','$pages');">Page $pages</a></td>";
  253. } else {
  254. $html .= "<td><a href="$link">Page 1</a></td>";
  255. }
  256. }
  257. }
  258. $html .= "</tr></table>";
  259. return $html;
  260. }
  261. /*****************************************************
  262. function alert
  263. -----DESCRIPTION: -----------------------------------
  264. Create a JavaScript alert to display a message.
  265. -----ARGUMENTS: -------------------------------------
  266. text Text to display in the alert box.
  267. -----RETURNS:----------------------------------------
  268. None; directly generates output
  269. *****************************************************/
  270. function alert($text) {
  271. $text = addslashes_js($text);
  272. echo "<SCRIPT language="javascript">
  273. alert('$text');
  274. </SCRIPT>";
  275. }
  276. /*****************************************************
  277. function make_numberarray
  278. -----DESCRIPTION: -----------------------------------
  279. Create an array of numbers.
  280. -----ARGUMENTS: -------------------------------------
  281. start First number
  282. end Last number
  283. empty [T/F] Generate an empty first value
  284. -----RETURNS:----------------------------------------
  285. Array containing the generated number sequence.
  286. *****************************************************/
  287. function make_numberarray($start, $end, $empty='') {
  288. if ($empty) {
  289. $array[0] = '';
  290. }
  291. for ($i = $start; $i < ($end + 1); $i++) {
  292. $array[$i] = $i;
  293. }
  294. return ($array);
  295. }
  296. /*****************************************************
  297. function array_order / array_order2
  298. -----DESCRIPTION: -----------------------------------
  299. Functions used by usort() for ordering.
  300. *****************************************************/
  301. function array_order($a, $b) {
  302. return $a[0] - $b[0];
  303. }
  304. function array_order2($a, $b) {
  305. return $a[1] - $b[1];
  306. }
  307. /*****************************************************
  308. function table_header
  309. -----DESCRIPTION: -----------------------------------
  310. Create a table header.
  311. -----ARGUMENTS: -------------------------------------
  312. title Table title
  313. action [Optional] If specified, generate a form start tag that submits to this file.
  314. hidden [Optional] Associative array of hidden variables for a form
  315. show [Optional] [T/F] Expand the table by default
  316. name [Optional] Name of generated form
  317. binary [Optional] [T/F] Form is a binary submission form.
  318. js [Optional] JavaScript to fire on form submit.
  319. -----RETURNS:----------------------------------------
  320. None; directly generates HTML.
  321. *****************************************************/
  322. function table_header ($title, $action='', $hidden = '', $show = '', $name = '', $binary = '', $js = '') {
  323. global $settings;
  324. $title = str_replace('<a href=', '<a class='titl' href=', $title);
  325. $title2 = $title . "2";
  326. $js_title = addslashes_js($title);
  327. $js_title2 = addslashes_js($title2);
  328. if (!$name) {
  329. $name2 = explode(' ', $title);
  330. if ($name2 == ' ') {
  331. $name = $title;
  332. } else {
  333. $name = $name2[1];
  334. }
  335. }
  336. echo "nn<!-- Begin table $title -->nn";
  337. if ($action) {
  338. $form = "<form action="$action" method="post" name="$name"" . iff($binary, "enctype="multipart/form-data"") . iff($js, $js) . ">n";
  339. }
  340. if (is_array($hidden)) {
  341. while (list ($key, $value) = each ($hidden)) {
  342. $form .= form_hidden($key, $value);
  343. }
  344. }
  345. echo $form;
  346. echo "
  347. <div id="$title2">
  348. <table border="0" cellspacing="0" cellpadding="0" height="21" width="100%">
  349. <tr>
  350.     <td width="19" bgcolor="#BF4343" align="center">" . 
  351. html_image('spacer.gif', 3) . 
  352. html_image('tech/bul040.gif', 13, 14) . 
  353. html_image('spacer.gif', 3) . 
  354. "</td>
  355. <td width="10" align="center" bgcolor="#727272">" . 
  356. html_image('spacer.gif', 10) . 
  357. "</td>
  358.     <td nowrap="nowrap" bgcolor="#727272"><div class="tit1">
  359. <B>$title</B>&nbsp;<a href="javascript:void(0)" onclick="oc('$js_title2');oc('$js_title');">" .
  360. html_image('tech/bul100.gif') . 
  361. "</a></td>
  362. </tr>
  363. </table></div>";
  364. echo "
  365. <div id="$title">
  366. <table border="0" cellspacing="0" cellpadding="0" height="21" width="100%">
  367. <tr>
  368.     <td width="19" bgcolor="#BF4343" align="center"><img src="".constant('LOC_IMAGES')."spacer.gif" width="3"><img src="".constant('LOC_IMAGES')."tech/bul040.gif" width="13" height="14"><img src="".constant('LOC_IMAGES')."spacer.gif" width="3"></td>
  369.     <td width="10" align="center" bgcolor="#727272"><img src="".constant('LOC_IMAGES')."spacer.gif" width="10"></td>
  370.     <td nowrap="nowrap" bgcolor="#727272"><div class="tit1">
  371. <b>$title</b>&nbsp;<a href="javascript:void(0)" onclick="oc('$js_title2');oc('$js_title');"><img src="".constant('LOC_IMAGES')."tech/bul101.gif" border=0></a>
  372. </td>
  373.     <td width="10" align="center" bgcolor="#727272">&nbsp;</td>
  374. <td bgcolor="#A4A4A4" width="100%">
  375.     </tr></table>
  376. <table border="0" cellpadding="5" width="100%" align="center" cellspacing="0">
  377. ";
  378. echo "<SCRIPT language="javascript">";
  379. if (!$show) {
  380. echo "oc('$js_title2');";
  381. } else {
  382. echo "oc('$js_title');";
  383. }
  384. echo "</SCRIPT>";
  385. }
  386. function redirect_button($value, $url, $name="button") {
  387. return "<input type="button" name="$name" value="$value" onclick="javascript:top.center.location='$url'">";
  388. }
  389. /*****************************************************
  390. function table_footer
  391. -----DESCRIPTION: -----------------------------------
  392. Produce the table footer to close a table started by table_header.
  393. -----ARGUMENTS: -------------------------------------
  394. submit [Optional] Displayed value of the submit button (if any)
  395. align [Optional] Alignment of the button
  396. extra [Optional] Additional text to show next to the Submit button
  397. nospace [Optional] [T/F] Do NOT produce a <br /> tag after the table close tag
  398. js [Optional] Additional JS to fire on form submission.
  399. submitname [Optional] Name of the submit button.
  400. -----RETURNS:----------------------------------------
  401. None; directly generates output.
  402. *****************************************************/
  403. function table_footer ($submit='', $align='center', $extra='', $nospace='', $js='', $submitname = 'submit') {
  404. if (!$align) {
  405. $align = 'center';
  406. }
  407. if ($submit OR $extra) {
  408. if ($submit) {
  409. $submit = "<input type="submit" name="$submitname" value="$submit"$js>";
  410. }
  411. echo "<tr align="$align"><td colspan="50" class="footerCell">";
  412. echo "&nbsp;&nbsp;$extra&nbsp;&nbsp;$submit</td></tr>" . iff($submit, "</form>") . "</table>";
  413. } else {
  414. echo "<tr align="$align"><td colspan="50">&nbsp;&nbsp;$extra</td></tr></table>";
  415. }
  416. echo "</div>";
  417. if (!$nospace) {
  418. echo "<br />";
  419. }
  420. }
  421. /*****************************************************
  422. function table_content
  423. -----DESCRIPTION: -----------------------------------
  424. Generate HTML content of a table started by table_header
  425. -----ARGUMENTS: -------------------------------------
  426. columns An array containing the names of columns defined in the next argument
  427. rows An array containing individual rows of data (each row should be an array)
  428. lines [Optional] An array containing additional rows; row keys here matching row keys in 
  429. the "rows" argument are displayed as expandable detail rows
  430. class *** Deprecated -- to be removed ***
  431. top_html [Optional] Additional row of HTML to display before any rows (including the
  432. "columns" row
  433. bottomline [Optional] Additional row of HTML to display as an expandable row at the bottom of the table.
  434. width [Optional] An array of widths (element count should match the number of columns)
  435. secondrow [Optional] Additional content below the columns
  436. -----RETURNS:----------------------------------------
  437. None; directly generates output
  438. *****************************************************/
  439. function table_content($columns, $rows, $lines='', $class='', $top_html='', $bottomline='', $width='', $secondrow='') {
  440. // expand arrays if bottomline specified
  441. if (is_array($bottomline)) {
  442. $javascript = "<SCRIPT>n";
  443. while (list ($key, $val) = each ($rows)) {
  444. if (count($rows[$key]) != 1) {
  445. if (trim($bottomline[$key]) != '') {
  446. $key_image1 = $key . 'image1';
  447. $key_image2 = $key . 'image2';
  448. array_unshift($rows[$key], "<img align="center" id="$key_image1" src="" . constant('LOC_IMAGES') . "tech/bul101.gif" onclick="oc('$key');oc('$key_image1');oc('$key_image2');"><img align="center" id="$key_image2" src="" . constant('LOC_IMAGES') . "tech/bul100.gif" onclick="oc('$key');oc('$key_image1');oc('$key_image2');">");
  449. $javascript .= "oc('$key');oc('$key_image1')n";
  450. } else {
  451. array_unshift($rows[$key], "&nbsp;");
  452. }
  453. }
  454. }
  455. $javascript .= "</SCRIPT>";
  456. reset($rows);
  457. }
  458. // find max cols
  459. if (is_array($rows)) {
  460. while (list($key1,$val1) = each($rows)) {
  461. if (count($val1) > $cols) {
  462. $cols=count($val1);
  463. }
  464. }
  465. reset($rows);
  466. }
  467. // columns might be greater max cols
  468. if (count($columns) > $cols) {
  469. $cols = count($columns);
  470. }
  471. // allow something before start of internal table
  472. if ($top_html != "") {
  473. echo "<tr><td colspan="$cols">$top_html</td></tr>";
  474. }
  475. // generate columns (top row)
  476. if (is_array($columns)) {
  477. echo "n<tr class="headerRow">n ";
  478. // if we have bottom row add that
  479. if (is_array($bottomline)) {
  480. echo "<td width="15" class="headerLeftCell">&nbsp;</td>n";
  481. $count = false;
  482. } else {
  483. $count = true;
  484. }
  485. while (list ($key, $val) = each ($columns)) {
  486. if ($count) {
  487. echo "<td class="headerLeftCell"><span class="headerText">$val</span></th>n";
  488. } else {
  489. echo "<td class="headerCell"><span class="headerText">$val</span></th>n";
  490. }
  491. $count = false;
  492. }
  493. echo "n</tr>";
  494. }
  495. if (!$rows) {
  496. return;
  497. }
  498. // generate the rows
  499. while (list ($key, $val) = each ($rows)) {
  500. // create the row including extra row is $lines is specified
  501. if ($x==1) {
  502. if ($lines[$key]) {
  503. echo "n<tr class="normalRow">n <td colspan="$cols" class="normalCellalt1">$lines[$key]</td></tr>";
  504. }
  505. echo  "n<tr class="normalRow">";
  506. $x=0;
  507. } else {
  508. if ($lines[$key]) {
  509. echo "n<tr class="normalRow">n <td colspan="$cols" class="normalCellalt2">$lines[$key]</td></tr>";
  510. }
  511. echo "n<tr class="normalRow">n ";
  512. $x=1;
  513. }
  514. // colspan if not all cols avaliable
  515. $col2 = count($val);
  516. if ($col2 < $cols) {
  517. $colspan = $cols/$col2;
  518. }
  519. if (is_array($val)) {
  520. while (list ($key2, $val2) = each ($val)) {
  521. // extra settings
  522. if (is_array($class)) {
  523. $td_extra .= " class = "$class[$i]"";
  524. } else {
  525. if ($x==1) {
  526. $td_extra .= " class="normalCellalt2"";
  527. } else {
  528. $td_extra .= " class="normalCellalt1"";
  529. }
  530. }
  531. if ($colspan) {
  532. $td_extra .= " colspan="$colspan"";
  533. }
  534. if ((is_array($width)) AND ($cols != $colspan)) {
  535. $td_extra .= " width = "$width[$td_count]"";
  536. }
  537. $td_count++;
  538. give_default($val2, '&nbsp;');
  539. echo "n<td$td_extra>$val2</td>";
  540. unset($td_extra);
  541. $i++;
  542. }
  543. unset($colspan);
  544. // just one column
  545. } else {
  546. if ($colspan) {
  547. $td_extra .= " colspan="$colspan"";
  548. }
  549. $one_column = 1;
  550. echo "n<td$td_extra" . iff($x, " class="normalCellalt1">", " class="normalCellalt2">") . "$val</td>";
  551. }
  552. echo "n</tr>";
  553. $td_count = 0;
  554. // general second line if specified
  555. if ($secondrow[$key]) {
  556. if ($bottomline[$key]) { // extra table column
  557. $bottom_extra = "<td" . iff($x, " class="normalCellalt1">", " class="normalCellalt2">") . "></td>";
  558. }
  559. give_default($secondrow[$key], '&nbsp;');
  560. if ($x == 1) {
  561. echo "n<tr>$bottom_extran <td colspan="$cols" class="normalCellalt2">$secondrow[$key] sdsdf</td></tr>";
  562. } else {
  563. echo "n<tr>$bottom_extran <td colspan="$cols" class="normalCellalt1">$secondrow[$key]</td></tr>";
  564. }
  565. }
  566. // generate bottom line if specified
  567. if (trim($bottomline[$key]) != '') {
  568. if ($x == 1) {
  569. echo "n<tr id="$key" class="normalCellalt1">n<td colspan="$cols" class="normalCellalt2">$bottomline[$key]</td></tr>";
  570. } else {
  571. echo "n<tr id="$key" class="normalCellalt2">n<td colspan="$cols" class="normalCellalt1">$bottomline[$key]</td></tr>";
  572. }
  573. }
  574. echo "<tr class="borderCell">";
  575. if ($one_column) {
  576. ?>
  577. <td height="1" class="borderCell"><img src="<?php echo constant('LOC_IMAGES'); ?>spacer.gif" width="1" height="1"></td><?php
  578. } else {
  579. ?>
  580.  <td height="1" class="borderCell" colspan="30"><img src="<?php echo constant('LOC_IMAGES'); ?>spacer.gif" width="1" height="1"></td>
  581.  <?php
  582. }
  583. echo "</tr>";
  584. unset($one_column);
  585. }
  586. // end table
  587. echo $javascript;
  588. }
  589. /*****************************************************
  590. function js_linespan
  591. -----DESCRIPTION: -----------------------------------
  592. Correct line spanning issues in JS strings.
  593. -----ARGUMENTS: -------------------------------------
  594. text Text to correct
  595. -----RETURNS:----------------------------------------
  596. Corrected text usable in JavaScript
  597. *****************************************************/
  598. function js_linespan($text) {
  599. $text = str_replace("nr","\r\n", $text);
  600. $text = str_replace("rn","\r\n", $text);
  601. $text = str_replace("n","\r\n", $text);
  602. $text = str_replace("r","\r\n", $text);
  603. return $text;
  604. }
  605. /*****************************************************
  606. function nopermission
  607. -----DESCRIPTION: -----------------------------------
  608. Display a "no permission" error page
  609. -----ARGUMENTS: -------------------------------------
  610. message Message to display
  611. -----RETURNS:----------------------------------------
  612. None; directly generates output and exits
  613. *****************************************************/
  614. function nopermission($message='') {
  615. if (defined('ADMIN_ZONE')) {
  616. admin_header();
  617. }
  618. if (defined('TECH_ZONE')) {
  619. tech_nav();
  620. }
  621. echo "<br /><br />";
  622. if ($message) {
  623. echo table_border("<center><b>You do not have permission to $message</b><br /><br />If you believe this is an error, please contact your helpdesk admin</center>");
  624. } else {
  625. echo table_border("<center><b>You do not have permission to complete that action</b><br /><br />If you believe this is an error, please contact your helpdesk admin</center>");
  626. }
  627. exit();
  628. }
  629. /*****************************************************
  630. function mistake
  631. -----DESCRIPTION: -----------------------------------
  632. Display an general error page.
  633. -----ARGUMENTS: -------------------------------------
  634. message Message to display
  635. -----RETURNS:----------------------------------------
  636. None; directly generates output and exits
  637. *****************************************************/
  638. function mistake($message='', $noheader = 0) {
  639. if (!$noheader) {
  640. if (defined('ADMINZONE')) {
  641. admin_header();
  642. }
  643. if (defined('TECHZONE')) {
  644. tech_nav();
  645. }
  646. }
  647. echo "<br /><br />";
  648. if ($message) {
  649. echo table_border("<P><b>There has been an error:</b><BR /><BR />$message</b></P>");
  650. } else {
  651. echo table_border("<P><B>There has been an error:</B><BR /><BR />The action you attempted could not be completed. Please contact your helpdesk administrator for assistance.</P>");
  652. }
  653. exit();
  654. }
  655. /*****************************************************
  656. function time_since
  657. -----DESCRIPTION: -----------------------------------
  658. Calculates time passed since the specified time.
  659. - converts number of seconds into days/hours/minutes/seconds
  660. - displays in x days, y hours, z minutes, v seconds format.
  661. -----ARGUMENTS: -------------------------------------
  662. time Timestamp
  663. -----RETURNS:----------------------------------------
  664. Time elapsed, expressed in "X days, Y hours, Z minutes, V seconds" format.
  665. *****************************************************/
  666. function display_time($time) {
  667. // calculate components
  668. $days = floor(($time / (60 * 60 * 24)));
  669. $time = $time - ($days * 60 * 60 * 24);
  670. $hours = floor(($time / (60 * 60)));
  671. $time = $time - ($hours * 60 * 60);
  672. $minutes = floor(($time / 60));
  673. $time = ($time - ($minutes * 60));
  674. $seconds = $time;
  675. // format time
  676. if ($days != "") {
  677. if ($days == "1") {
  678. return $days . " day";
  679. } else {
  680. return $days . " days";
  681. }
  682. }
  683. if ($hours != "") {
  684. if ($hours == "1") {
  685. return $hours . " hour";
  686. } else {
  687. return $hours . " hours";
  688. }
  689. }
  690. if ($minutes != "") {
  691. if ($minutes == "1") {
  692. return $minutes . " minute";
  693. } else {
  694. return $minutes . " minutes";
  695. }
  696. }
  697. if ($seconds != "") {
  698. if ($seconds == "1") {
  699. return $seconds . " second";
  700. } else {
  701. return $seconds . " seconds";
  702. }
  703. }
  704. }
  705. /*****************************************************
  706. function array_unshift_keys
  707. -----DESCRIPTION: -----------------------------------
  708. *****************************************************/
  709. function array_unshift_keys(&$arr, $key, $val) { 
  710. $arr = array_reverse($arr, true); 
  711. $arr[$key] = $val; 
  712. $arr = array_reverse($arr, true); 
  713. count($arr); 
  714. }
  715. /*****************************************************
  716. function mini_table
  717. -----DESCRIPTION: -----------------------------------
  718. Generates HTML for a small message table
  719. -----ARGUMENTS: -------------------------------------
  720. content HTML to insert into the table
  721. color Table background color (#ABCDEF format)
  722. width [Optional] Table width.
  723. -----RETURNS: ---------------------------------------
  724. HTML for the table.
  725. *****************************************************/
  726. function mini_table($content, $color, $width="100%") {
  727. return "<table width="$width" align="center" cellpadding="3"><tr><td bgcolor="$color">$content</td></tr></table>";
  728. }
  729. /*****************************************************
  730. function convert_date
  731. -----DESCRIPTION: -----------------------------------
  732. Calculate timestamp for a given numeric date.
  733. -----ARGUMENTS: -------------------------------------
  734. date Date to convert (YYYY-MM-DD format)
  735. -----RETURNS:----------------------------------------
  736. Timestamp of specified date, or FALSE for invalid date.
  737. *****************************************************/
  738. function convert_date($date) {
  739. $datebits = explode("-",$date);
  740. $time = mktime(0, 0, 0, $datebits[1], $datebits[2], $datebits[0]);
  741. return $time;
  742. }
  743. /*****************************************************
  744. function wysiwyg
  745. -----DESCRIPTION: -----------------------------------
  746. Return HTML for a submit button to open the
  747. WYSIWYG editor.
  748. -----ARGUMENTS: -------------------------------------
  749. form Name of the form to update
  750. element Form element to update
  751. text Button name and value
  752. return [Optional] Return value
  753. -----RETURNS: ---------------------------------------
  754. HTML for the submit button.
  755. *****************************************************/
  756. function wysiwyg($form, $element, $text, $return='') {
  757.  
  758. return "<input type="button" name="$text" value="$text" onclick="wysiwyg('$form', '$element', '$return')">";
  759. }
  760. /*****************************************************
  761. function form_jump
  762. -----DESCRIPTION: -----------------------------------
  763. Display a popup message, then redirect to the specified
  764. form handler (passing hidden form values along).
  765. -----ARGUMENTS: -------------------------------------
  766. url URL to submit to
  767. message Message to display before jumping
  768. hidden Form values to submit
  769. -----RETURNS: ---------------------------------------
  770. Nothing.
  771. *****************************************************/
  772. function form_jump($url, $message, $hidden='') {
  773. if (defined('ADMINZONE')) {
  774. admin_mini_header('', "<title>$message</title>");
  775. }
  776. if (defined('TECHZONE')) {
  777. tech_mini_header('', "<title>$message</title>");
  778. }
  779. if (!$message) {
  780. $message = "No actions were specified; no changes made.";
  781. }
  782. echo "
  783. <html>
  784. <body onload="alert('$message');deskpro.submit();">
  785. <form method="post" name="deskpro" action="$url">";
  786. if (is_array($hidden)) {
  787. foreach ($hidden AS $key => $var) {
  788. echo form_hidden($key, $var);
  789. }
  790. }
  791. echo "
  792. <br /><br /><br /><br /><br /><p align="center">
  793. <input type="submit" name="Click here to continue" value="Click here to continue" onclick="javascript:deskpro.submit();">
  794. </p>
  795. </form>
  796. </body>
  797. </html>
  798. ";
  799. exit();
  800. }
  801. /*****************************************************
  802. function jump
  803. -----DESCRIPTION: -----------------------------------
  804. Redirect to another URL
  805. -----ARGUMENTS: -------------------------------------
  806. url URL to redirect to
  807. message Message to show during redirection
  808. -----RETURNS: ---------------------------------------
  809. Nothing.
  810. *****************************************************/
  811. function jump($url, $message) {
  812. if (defined('ADMINZONE')) {
  813. admin_mini_header('', "<title>$message</title><meta http-equiv="Refresh" content="1; URL=$url">");
  814. }
  815. if (defined('TECHZONE')) {
  816. tech_mini_header('', "<title>$message</title><meta http-equiv="Refresh" content="1; URL=$url">");
  817. }
  818. echo "
  819. <br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
  820. <table width="720" border="0" cellspacing="0" cellpadding="0" align="left">
  821. <tr align="center" valign="middle">
  822. <td align="center">
  823. <table border="0" cellspacing="0" cellpadding="10" bgcolor="" width="70%">
  824. <tr>
  825. <td>
  826. <center><p><b>$message</b><br />
  827. <br />
  828. You are now being re-directed<br />
  829. <a href="$url">Click here if you do not
  830. want to wait any longer (or if your browser does not automatically
  831. forward you).</a> </smallfont> </p></center>
  832. </td>
  833. </tr>
  834. </table>
  835. </td>
  836. </tr>
  837. </table>
  838. </body>
  839. </html>
  840. ";
  841. }
  842. /*****************************************************
  843. function jprompt
  844. -----DESCRIPTION: -----------------------------------
  845. Return HTML to generate a link that produces a confirmation 
  846. popup, redirecting to the specified URL if the user
  847. selects 'okay'.
  848. -----ARGUMENTS: -------------------------------------
  849. message Message to display
  850. url URL to redirect to
  851. text Link text to display
  852. danger [Deprecated]
  853. -----RETURNS: ---------------------------------------
  854. HTML to generate the link.
  855. *****************************************************/
  856. function jprompt($message, $url, $text, $danger=0) {
  857. $nonjs = "<a href="$url">$text</a>";
  858. $message = addslashes_js($message);
  859. $url = addslashes_js($url);
  860. $text = addslashes_js($text);
  861. $js = "<a href="javascript:jprompt('$message', '$url')">$text</a>";
  862. return "<script language="JavaScript">document.write('$js');</script><noscript>$nonjs</noscript>";
  863. }
  864. /*****************************************************
  865. function jprompt_multi
  866. -----DESCRIPTION: -----------------------------------
  867. Return HTLM to generate a link that produces a double
  868. popup; the first confirms that an action is desired, and
  869. the second selects between two actions.
  870. -----ARGUMENTS: -------------------------------------
  871. message First message to display
  872. message2 Second message to display
  873. urltrue URL to redirect to if second message is answered with "true"
  874. urlfalse URL to redirect to if second message is answered with "false"
  875. text Link text to display
  876. -----RETURNS: ---------------------------------------
  877. HTML to generate the link.
  878. *****************************************************/
  879. function jprompt_multi($message, $message2, $urltrue, $urlfalse, $text) {
  880. return "<a href="javascript:jprompt_multi('$message', '$message2', '$urltrue', '$urlfalse')">$text</a>";
  881. }
  882. /*****************************************************
  883. function table_thelp
  884. -----DESCRIPTION: -----------------------------------
  885. *****************************************************/
  886. function table_thelp($text, $category, $topic) {
  887. return "<TABLE><TR><TD>$text</TD><TD VALIGN="middle">" . thelp($category, $topic) . "</TD></TR></TABLE>";
  888. }
  889. /*****************************************************
  890. function thelp
  891. -----DESCRIPTION: -----------------------------------
  892. Return a link to popup a tech interface help dialog 
  893. for the given topic
  894. -----ARGUMENTS: -------------------------------------
  895. category Category (string, not integer)
  896. topic Topic (string, not integer)
  897. -----RETURNS:----------------------------------------
  898. The HTML for a graphical link to pop up a window
  899. containing the appropriate help text, or NULL if
  900. no matching topic is found.
  901. *****************************************************/
  902. function thelp($category, $topic) {
  903. global $settings;
  904. $category = urlencode($category);
  905. $topic = urlencode($topic);
  906. $url = "'../help/deskpro_help.php?category=$category&entry=$topic&mini=1'";
  907. $gfx = ""../../images/help.gif"";
  908. return "<A onClick="openWindow($url, 650, 550, 'Help')"><IMG SRC=$gfx BORDER="0" ALIGN="bottom"></A>";
  909. }
  910. /*****************************************************
  911. function ahelp
  912. -----DESCRIPTION: -----------------------------------
  913. return a link to popup an admin interface help dialog 
  914. for the given topic
  915. -----ARGUMENTS: -------------------------------------
  916. category Category (string, not an integer)
  917. topic Topic (string, not an integer)
  918. -----RETURNS:----------------------------------------
  919. The HTML for a graphical link to pop up a window
  920. containing the appropriate help text, or NULL if
  921. no matching topic is found.
  922. *****************************************************/
  923. function ahelp($category, $topic) {
  924. global $settings;
  925. $category = urlencode($category);
  926. $topic = urlencode($topic);
  927. $url = "'../admin/help.php?category=$category&entry=$topic&mini=1'";
  928. $gfx = ""../images/but071.gif"";
  929. return "<A onClick="openWindow($url, 500, 550, 'Help')"><IMG SRC=$gfx BORDER="0" ALIGN="bottom"></A>";
  930. }
  931. /*****************************************************
  932. function get_intervals
  933. -----DESCRIPTION: -----------------------------------
  934. - Divide the period of time specified by
  935. $start and $end into time units of $interval
  936. length.
  937. -----ARGUMENTS: -------------------------------------
  938. start : Starting time and date, UNIX
  939.   time stamp format
  940. end : Ending time and date, UNIX
  941.               time stamp format
  942. interval    : strtotime() acceptable format
  943.               of time and date specification
  944.   (e.g. "+1 years 4 days 3 hours
  945.   2 minutes")
  946. -----RETURNS:----------------------------------------
  947. Returns a two-dimensional array:
  948. $span[0] = array($spanstart, $spanend);
  949. $span[1] = array($spanstart, $spanend);
  950. Values returned are UNIX timestamps.
  951. *****************************************************/
  952. function get_intervals($start, $end, $interval) {
  953. $spans = array();
  954. while ($start < $end) {
  955. $spanstart = $start;
  956. $start = strtotime(date('r', $start) . " $interval");
  957. if ($start >= $end) {
  958. $spanend = $end;
  959. } else {
  960. $spanend = $start;
  961. }
  962. $spans[] = array($spanstart, $spanend);
  963. }
  964. return $spans;
  965. }
  966. /*****************************************************
  967. function user_delete
  968. -----DESCRIPTION: -----------------------------------
  969. -  Delete one or more users, passed in as a value 
  970. (for one user) or an array. This checks the current 
  971. user's permissions before performing the actual
  972. deletes.
  973. -----ARGUMENTS: -------------------------------------
  974. userlist : If an integer, a userid. If an array, 
  975. an array of userids.
  976. -----RETURNS:----------------------------------------
  977. Returns the number of users deleted, including zero 
  978. (no users deleted). Returns -1 if the user doesn't have 
  979. permission to delete the user.
  980. *****************************************************/
  981. function user_delete($userlist = '') {
  982. global $user, $db;
  983. if (!$user['p_delete_users'] AND !$user['is_admin']) {
  984. return -1;
  985. }
  986. $deleted = 0;
  987. if (is_array($userlist) OR ((int)$userlist)) {
  988. $queries = array(
  989. 'DELETE FROM user_session WHERE userid IN ',
  990. 'DELETE FROM faq_comments WHERE userid IN ',
  991. 'DELETE FROM faq_rating WHERE userid IN ',
  992. 'DELETE FROM faq_subscriptions WHERE id IN ',
  993. 'DELETE FROM tech_start_tickets WHERE userid IN ',
  994. 'DELETE FROM user_bill WHERE userid IN ',
  995. 'DELETE FROM user_email WHERE userid IN ',
  996. 'DELETE FROM user_notes WHERE userid IN ',
  997. 'UPDATE faq_articles SET userid = 0 WHERE userid IN ',
  998. 'DELETE FROM user WHERE id IN '
  999. );
  1000. if (is_array($userlist)) {
  1001. $term = array2sql($userlist);
  1002. } else {
  1003. $term = array2sql(array($userlist));
  1004. }
  1005. // run those queries
  1006. foreach ($queries AS $val) {
  1007. $db->query($val . $term);
  1008. }
  1009. if ($db->affected_rows()) {
  1010. $deleted++;
  1011. }
  1012. $db->query("SELECT id FROM ticket WHERE userid IN $term");
  1013. while ($result = $db->row_array()) {
  1014. $ids[] = $result[id];
  1015. }
  1016. ticket_delete($ids);
  1017. }
  1018. return $deleted;
  1019. }
  1020. /*****************************************************
  1021. function ticket_delete
  1022. -----DESCRIPTION: -----------------------------------
  1023. -  Delete one or more tickets, passed in as a 
  1024. value (for one ticket) or an array. This checks 
  1025. the current user's permissions before performing the
  1026. actual deletes.
  1027. -----ARGUMENTS: -------------------------------------
  1028. ticketlist : If an integer, a ticketid. If an 
  1029. array, an array of ticketids.
  1030. -----RETURNS:----------------------------------------
  1031. Returns an array, containing two elements:
  1032. noperms : An array, a list of tickets the calling 
  1033. tech has no permission to delete
  1034. deleted : An array, a list of tickets deleted 
  1035. by the function.
  1036. If both arrays count() to zero, no tickets were passed 
  1037. to the function.
  1038. *****************************************************/
  1039. function ticket_delete($ticketlist = '') {
  1040. global $user, $db;
  1041. if (is_array($ticketlist)) {
  1042. $term = array2sql($ticketlist);
  1043. } else {
  1044. $term = array2sql(array($ticketlist));
  1045. $ticketlist = array($ticketlist);
  1046. }
  1047. if (!count($ticketlist)) {
  1048. return array(NULL, NULL);
  1049. }
  1050. $db->query("SELECT id, tech FROM ticket WHERE id IN $term");
  1051. while ($res = $db->row_array()) {
  1052. if ($res['tech'] == $user['id']) {
  1053. if ($user['p_delete_own']) {
  1054. $delete[] = $res['id'];
  1055. } else {
  1056. $noperms[] = $res['id'];
  1057. }
  1058. } else {
  1059. if ($user['p_delete_other'] or $user['is_admin']) {
  1060. $delete[] = $res['id'];
  1061. } else {
  1062. $noperms[] = $res['id'];
  1063. }
  1064. }
  1065. }
  1066. if (!@count($delete)) {
  1067. return array($noperms, NULL);
  1068. } else {
  1069. $term = array2sql($delete);
  1070. }
  1071. $deleted = 0;
  1072. if (is_array($ticketlist) OR ((int)$ticketlist)) {
  1073. $queries = array(
  1074. 'DELETE FROM tech_ticket_watch WHERE ticketid IN ',
  1075. 'DELETE FROM ticket_attachments WHERE ticketid IN ',
  1076. 'DELETE FROM ticket_log WHERE ticketid IN ',
  1077. 'DELETE FROM ticket_notes WHERE ticketid IN ',
  1078. 'DELETE FROM tech_ticket_save WHERE ticketid IN ',
  1079. 'DELETE FROM ticket_message WHERE ticketid IN ',
  1080. 'DELETE FROM user_bill WHERE ticketid IN ',
  1081. 'DELETE FROM ticket WHERE id IN ',
  1082. 'DELETE FROM tech_ticket_watch WHERE ticketid IN '
  1083. );
  1084. // Grab attachment blobs to delete
  1085. $db->query("SELECT blobid FROM ticket_attachments WHERE ticketid IN $term");
  1086. while ($res = $db->row_array()) {
  1087. $blobs[] = $res['blobid'];
  1088. }
  1089. $db->query("DELETE FROM blobs WHERE id IN " . array2sql($blobs));
  1090. // get ticket messages and delete the source
  1091. $db->query("SELECT id FROM ticket_message WHERE ticketid IN $term");
  1092. while ($res = $db->row_array()) {
  1093. $sources[] = $res['id'];
  1094. }
  1095. $db->query("DELETE FROM gateway_source WHERE id IN " . array2sql($sources));
  1096. foreach ($queries AS $val) {
  1097. $db->query($val . $term);
  1098. }
  1099. }
  1100. return array($noperms, $delete);
  1101. }
  1102. /*****************************************************
  1103. function ban_email
  1104. -----DESCRIPTION: -----------------------------------
  1105. -  Adds an e-mail address to the banned list.
  1106. -----ARGUMENTS: -------------------------------------
  1107. email : E-mail address to ban.
  1108. -----RETURNS:----------------------------------------
  1109. Returns -1 if permission denied (can't ban
  1110. users), 0 if already banned, 1 if added
  1111. successfully to banned list.
  1112. *****************************************************/
  1113. function ban_email($email) {
  1114. global $user;
  1115. if (!$user['p_edit_users'] AND !$user['is_admin']) {
  1116. return -1;
  1117. }
  1118. $banned = unserialize(get_data('email_ban'));
  1119. if (!@in_array($email, $banned)) {
  1120. $banned[] = $email;
  1121. update_data('email_ban', serialize($banned));
  1122. return 1;
  1123. } else {
  1124. return 0;
  1125. }
  1126. }
  1127. #####################################################################################
  1128. ################## HTML OUTPUT FUNCTIONS ###########################################
  1129. #####################################################################################
  1130. /*****************************************************
  1131. function start_outline_table
  1132. -----DESCRIPTION: -----------------------------------
  1133. - makes a border for a table (generally for links)
  1134. -----ARGUMENTS: -------------------------------------
  1135. none
  1136. -----RETURNS:----------------------------------------
  1137. echos the HTML directly
  1138. *****************************************************/
  1139. function outline_table($title='', $content='', $width='100%') {
  1140. ?>
  1141. <table width="<?php echo $width; ?>" border="0" cellspacing="0" cellpadding="0">
  1142. <tr><td height="18">
  1143. <font color="#BF4343">\</font> <strong><?php echo $title; ?></strong>
  1144. </td></tr>
  1145. <tr>
  1146. <td height="19" bgcolor="#D1D1D1">
  1147. <?php
  1148. if (!$width) {
  1149. $width = '100%';
  1150. }
  1151. ?>
  1152. <table width="100%" border="0" cellspacing="1" cellpadding="5">
  1153. <tr><td bgcolor="#FFFFFF"> 
  1154. <table width="95%" border="0" align="center" cellpadding="0" cellspacing="2">
  1155. <tr><td>
  1156. <?php echo $content; ?>
  1157. </td></tr>
  1158. </table>
  1159. </td></tr></table>
  1160. </td></tr></table>
  1161. <?
  1162. }
  1163. /*****************************************************
  1164. function get_javascript
  1165. -----DESCRIPTION: -----------------------------------
  1166. - gets a javascript; takes account of where we are
  1167. -----ARGUMENTS: -------------------------------------
  1168. action : location of the javascript file
  1169. -----RETURNS:----------------------------------------
  1170. The html to the javascript
  1171. *****************************************************/
  1172. function get_javascript($loc) {
  1173. return "n<script language="javascript" src="" . constant('LOC_JAVASCRIPT') . $loc . ""></script>n";
  1174. }
  1175. /*****************************************************
  1176. function get_css
  1177. -----DESCRIPTION: -----------------------------------
  1178. - gets a css; takes account of where we are
  1179. -----ARGUMENTS: -------------------------------------
  1180. action : location of the css file
  1181. -----RETURNS:----------------------------------------
  1182. The html to the css
  1183. *****************************************************/
  1184. function get_css($loc) {
  1185. return "n<link rel="stylesheet" href="" . constant('LOC_CSS') . $loc . "" type="text/css">";
  1186. }
  1187. /*****************************************************
  1188. function global_login
  1189. -----DESCRIPTION: -----------------------------------
  1190. - gets a css; takes account of where we are
  1191. *****************************************************/
  1192. function global_login($message='', $logout = 0) {
  1193. global $_REQUEST, $_GET, $_POST, $_FILES, $req, $settings;
  1194. header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
  1195. header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  1196. header("Cache-Control: no-cache, must-revalidate");
  1197. header("Pragma: no-cache"); 
  1198. if (defined('ADMINZONE')) {
  1199. admin_mini_header();
  1200. if ($logout OR !$req) {
  1201. $req = 'index.php';
  1202. }
  1203. } else {
  1204. tech_mini_header();
  1205. if ($logout OR !$req) {
  1206. $req = '../home/index.php';
  1207. }
  1208. }
  1209. echo '
  1210. <SCRIPT language="javascript">
  1211. if (parent.frames.length > 0) {
  1212.     parent.location.href = self.document.location
  1213. }
  1214. </SCRIPT>
  1215. ';
  1216. echo "<center><BR>";
  1217. echo "<P><BR><BR><table width="400"><tr><td>";
  1218. if ($message) {
  1219. echo table_border('<b><center>' . $message . '</center></b>');
  1220. }
  1221. $bit = array('<B>Username</B>', form_input('username', ''));
  1222. $table[] = $bit;
  1223. if (!$_REQUEST['_getvars']) {
  1224. $get = $_GET;
  1225. } else {
  1226. $get = $_REQUEST['_getvars'];
  1227. }
  1228. if (!$_REQUEST['_postvars']) {
  1229. $post = $_POST;
  1230. } else {
  1231. $post = $_REQUEST['_postvars'];
  1232. }
  1233. if (!$_REQUEST['_filevars']) {
  1234. $file = $_FILE;
  1235. } else {
  1236. $file = $_REQUEST['_filevars'];
  1237. }
  1238. $bit = array('<B>Password</B>', form_password('password', '') . 
  1239. form_hidden('_getvars', htmlspecialchars(serialize($get))) .
  1240. form_hidden('_postvars', htmlspecialchars(serialize($post))) .
  1241. form_hidden('_filevars', htmlspecialchars(serialize($file))) .
  1242. form_hidden('_request', htmlspecialchars(serialize($_REQUEST))));
  1243. $table[] = $bit;
  1244. $bit = array('<b>Remember me<br /></b>until I log out manually', form_radio_yn('cookie').form_hidden('login_form', 'login').form_hidden('original_uri', urldecode($req)));
  1245. $table[] = $bit;
  1246. echo table_header('Please log in', urldecode($req));
  1247. echo table_content('', $table);
  1248. echo table_footer('Login');
  1249. echo "</td></tr></table></center>";
  1250. echo "<script language="JavaScript">
  1251. document.forms[0].username.focus();
  1252. </SCRIPT>";
  1253. echo "<BR><BR><BR><BR><center>Powered by: <!--WTN-WDYL-->DeskPRO v $settings[deskpro_version]</a><br />
  1254. Copyright