1

从今年 3 月左右开始,我们的 osTicket 系统开始发布重复的票证和重复的线程。

我已经尝试了所有我知道的方法来排除故障并确定发生这种情况的位置和原因。我什至实现了一个捕获条件来在插入票证和线程之前检查数据库表,以查看 $vars[] 的内容是否与数据库表中已有的内容相匹配。

无论如何解决这个问题都没有成功。

我已经用谷歌搜索了它,看看这个问题在哪里存在并且可以追溯到几年前。

有没有人有关于如何阻止 osTicket 持续创建重复票证和线程的解决方案?

我尝试了以下方法,将其他人在 v1.10 之前的各种 osTicket 中提出的建议拼凑在一起。这是我尝试过的代码。它实际上连续工作了 2 天,然后昨天又开始失败。

在 ./include/class.ticket.php 之前的第 2498 行附近插入if($errors) return 0;

/**
  * J.Doe added to intercept duplicate ticket entries.
  * Updated:   2017-06-12
  * @author    John Doe <jd@example.com>
  */

  $sql1='
    SELECT ticketID FROM ost_ticket
    WHERE
          source      = "' . $vars['source'] . '"
      AND topic_id    = "' . $vars['topicId'] . '"
      AND url         = "' . $vars['url'] . '"
      AND priority_id = "' . $vars['priorityId'] . '"
      AND duedate     = "' . date( 'Y-m-d H:i:s', strtotime( $vars['duedate'] . ' ' . $vars['time'] ) ) . '"
      AND team_id     = "' . $vars['assignId'] . '"
      AND subject     = "' . $vars['subject'] . '"
      AND dept_id     = "' . $vars['deptId'] . '"
      AND email       = "' . $vars['email'] . '"
      AND name        = "' . $vars['name'] . '"
  ';

  $sql2='
    SELECT id FROM ost_ticket_thread
    WHERE
          staff_id = "' . $vars['assignId'] . '"
      AND poster   = "' . $vars['name'] . '"
      AND title    = "' . $vars['subject'] . '"
      AND body     = "' . $vars['message'] . '"
  ';

  $res1=db_query($sql1);
  $res2=db_query($sql2);

  if( ( $res1 && db_num_rows( $res1 ) ) || ( $res2 && db_num_rows( $res2 ) ) ) {
      header( 'Location: http://example.com/workorders/' );
      exit;
  }

        //Any error above is fatal.
        if($errors)  return 0;
4

0 回答 0