completed migration of ticket-class to PDO database class and bugfixing admin-tickets, refs #1287

Signed-off-by: Michael Kaufmann (d00p) <d00p@froxlor.org>
This commit is contained in:
Michael Kaufmann (d00p)
2013-11-06 15:24:39 +01:00
parent 941a391c0e
commit f2643103b3
3 changed files with 110 additions and 102 deletions

View File

@@ -630,8 +630,11 @@ if ($page == 'tickets'
$categories[$x] = isset($_POST['category' . $x]) ? $_POST['category' . $x] : ''; $categories[$x] = isset($_POST['category' . $x]) ? $_POST['category' . $x] : '';
} }
// FIXME migrate to PDO $archive_search = ticket::getArchiveSearchStatement($subject, $priority, $fromdate, $todate, $message, $customer, $userinfo['adminid'], $categories);
$query = ticket::getArchiveSearchStatement($db, $subject, $priority, $fromdate, $todate, $message, $customer, $userinfo['adminid'], $categories);
$query = $archive_search[0];
$archive_params = $archive_search[1];
$fields = array( $fields = array(
'lastchange' => $lng['ticket']['lastchange'], 'lastchange' => $lng['ticket']['lastchange'],
'ticket_answers' => $lng['ticket']['ticket_answers'], 'ticket_answers' => $lng['ticket']['ticket_answers'],
@@ -640,15 +643,15 @@ if ($page == 'tickets'
'priority' => $lng['ticket']['priority'] 'priority' => $lng['ticket']['priority']
); );
$paging = new paging($userinfo, $db, TABLE_PANEL_TICKETS, $fields, $settings['panel']['paging'], $settings['panel']['natsorting']); $paging = new paging($userinfo, $db, TABLE_PANEL_TICKETS, $fields, $settings['panel']['paging'], $settings['panel']['natsorting']);
// FIXME migrate (the above) to PDO $result_stmt = Database::prepare($query . $paging->getSqlWhere(true) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit());
$result = $db->query($query . $paging->getSqlWhere(true) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit()); Database::pexecute($result_stmt, $archive_params);
$sortcode = $paging->getHtmlSortCode($lng); $sortcode = $paging->getHtmlSortCode($lng);
$arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s); $arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s);
$searchcode = $paging->getHtmlSearchCode($lng); $searchcode = $paging->getHtmlSearchCode($lng);
$pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s); $pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s);
$ctickets = array(); $ctickets = array();
while ($row = $db->fetch_array($result)) { while ($row = $result_stmt->fetch(PDO::FETCH_ASSOC)) {
if (!isset($ctickets[$row['customerid']]) if (!isset($ctickets[$row['customerid']])
|| !is_array($ctickets[$row['customerid']]) || !is_array($ctickets[$row['customerid']])
) { ) {
@@ -678,7 +681,7 @@ if ($page == 'tickets'
ksort($ticketrows); ksort($ticketrows);
} }
$_cid = 0; $_cid = -1;
foreach ($ticketrows as $ticket) { foreach ($ticketrows as $ticket) {
if ($paging->checkDisplay($i)) { if ($paging->checkDisplay($i)) {
$ticket['lastchange'] = date("d.m.y H:i", $ticket['lastchange']); $ticket['lastchange'] = date("d.m.y H:i", $ticket['lastchange']);
@@ -697,6 +700,8 @@ if ($page == 'tickets'
$customerid = $usr['customerid']; $customerid = $usr['customerid'];
} else { } else {
$customer = $lng['ticket']['nonexistingcustomer']; $customer = $lng['ticket']['nonexistingcustomer'];
$customerid = 0;
$customerloginname = '';
} }
eval("\$tickets.=\"" . getTemplate("tickets/tickets_customer") . "\";"); eval("\$tickets.=\"" . getTemplate("tickets/tickets_customer") . "\";");
} }

View File

@@ -266,4 +266,4 @@ class Database {
die("We are sorry, but a MySQL - error occurred. The administrator may find more information in in the sql-error.log in the logs/ directory"); die("We are sorry, but a MySQL - error occurred. The administrator may find more information in in the sql-error.log in the logs/ directory");
} }
} }
} }

View File

@@ -499,9 +499,9 @@ class ticket {
FROM `" . TABLE_PANEL_TICKETS . "` `main` FROM `" . TABLE_PANEL_TICKETS . "` `main`
WHERE `main`.`answerto` = '0' AND `main`.`archived` = '1' WHERE `main`.`answerto` = '0' AND `main`.`archived` = '1'
AND `main`.`adminid` = :adminid AND `main`.`adminid` = :adminid
ORDER BY `main`.`lastchange` DESC LIMIT 0, :limit" ORDER BY `main`.`lastchange` DESC LIMIT 0, ".(int)$_num
); );
Database::pexecute($result_stmt, array('adminid' => $_admin, 'limit' => $_num)); Database::pexecute($result_stmt, array('adminid' => $_admin));
while ($row = $result_stmt->fetch(PDO::FETCH_ASSOC)) { while ($row = $result_stmt->fetch(PDO::FETCH_ASSOC)) {
@@ -531,133 +531,136 @@ class ticket {
/** /**
* Returns a sql-statement to search the archive * Returns a sql-statement to search the archive
* including necessary parameter-array for PDO
* *
* @FIXME migrate to PDO * @return array 0 = query, 1 = params-array
*/ */
static public function getArchiveSearchStatement($db, $subject = NULL, $priority = NULL, $fromdate = NULL, $todate = NULL, $message = NULL, $customer = - 1, $admin = 1, $categories = NULL) static public function getArchiveSearchStatement($subject = null, $priority = null, $fromdate = null, $todate = null, $message = null, $customer = - 1, $admin = 1, $categories = null)
{ {
$query = 'SELECT `main`.*, $search_params = array();
(SELECT COUNT(`sub`.`id`) FROM `' . TABLE_PANEL_TICKETS . '` `sub`
WHERE `sub`.`answerto` = `main`.`id`) as `ticket_answers`
FROM `' . TABLE_PANEL_TICKETS . '` `main`
WHERE `main`.`archived` = "1" AND `main`.`adminid` = "' . (int)$admin . '" ';
if($subject != NULL $query = "
&& $subject != '') SELECT `main`.*, (
{ SELECT COUNT(`sub`.`id`) FROM `" . TABLE_PANEL_TICKETS . "` `sub`
$query.= 'AND `main`.`subject` LIKE "' . $db->escape("%$subject%") . '" '; WHERE `sub`.`answerto` = `main`.`id`
) as `ticket_answers`
FROM `" . TABLE_PANEL_TICKETS . "` `main`
WHERE `main`.`archived` = '1' AND `main`.`adminid` = :admin"
;
$search_params['admin'] = $admin;
if ($subject != NULL
&& $subject != ''
) {
$query .= " AND `main`.`subject` LIKE :subject";
$search_params['subject'] = "%".$subject."%";
} }
if($priority != NULL if ($priority != null
&& isset($priority[0]) && isset($priority[0])
&& $priority[0] != '') && $priority[0] != ''
{ ) {
if(isset($priority[1])
&& $priority[1] != '') if (isset($priority[1])
{ && $priority[1] != ''
if(isset($priority[2]) ) {
&& $priority[2] != '')
{ if (isset($priority[2])
$query.= 'AND (`main`.`priority` = "1" && $priority[2] != ''
OR `main`.`priority` = "2" ) {
OR `main`.`priority` = "3") ';
} $query .= " AND (`main`.`priority` = '1' OR `main`.`priority` = '2' OR `main`.`priority` = '3')";
else
{ } else {
$query.= 'AND (`main`.`priority` = "1"
OR `main`.`priority` = "2") '; $query .= " AND (`main`.`priority` = '1' OR `main`.`priority` = '1')";
} }
} elseif (isset($priority[2])
&& $priority[2] != ''
) {
$query .= " AND (`main`.`priority` = '1' OR `main`.`priority` = '3')";
} else {
$query .= " AND `main`.`priority` = '1'";
} }
elseif(isset($priority[2])
&& $priority[2] != '') } elseif($priority != null
{ && isset($priority[1])
$query.= 'AND (`main`.`priority` = "1" && $priority[1] != ''
OR `main`.`priority` = "3") '; ) {
if (isset($priority[2])
&& $priority[2] != ''
) {
$query .= " AND (`main`.`priority` = '2' OR `main`.`priority` = '3')";
} else {
$query .= " AND `main`.`priority` = '2'";
} }
else
{ } elseif($priority != null) {
$query.= 'AND `main`.`priority` = "1" ';
} if (isset($priority[3])
} && $priority[3] != ''
elseif($priority != NULL ) {
&& isset($priority[1]) $query .= " AND `main`.`priority` = '3'";
&& $priority[1] != '')
{
if(isset($priority[2])
&& $priority[2] != '')
{
$query.= 'AND (`main`.`priority` = "2" OR `main`.`priority` = "3") ';
}
else
{
$query.= 'AND `main`.`priority` = "2" ';
}
}
elseif($priority != NULL)
{
if(isset($priority[3])
&& $priority[3] != '')
{
$query.= 'AND `main`.`priority` = "3" ';
} }
} }
if($fromdate != NULL if ($fromdate != null
&& $fromdate > 0) && $fromdate > 0
{ ) {
$query.= 'AND `main`.`lastchange` > "' . $db->escape(strtotime($fromdate)) . '" '; $query .= " AND `main`.`lastchange` > :fromdate";
$search_params['fromdate'] = strtotime($fromdate);
} }
if($todate != NULL if ($todate != null
&& $todate > 0) && $todate > 0
{ ) {
$query.= 'AND `main`.`lastchange` < "' . $db->escape(strtotime($todate)) . '" '; $query .= " AND `main`.`lastchange` < :todate";
$search_params['todate'] = strtotime($todate);
} }
if($message != NULL if ($message != null
&& $message != '') && $message != ''
{ ) {
$query.= 'AND `main`.`message` LIKE "' . $db->escape("%$message%") . '" '; $query .= " AND `main`.`message` LIKE :message";
$search_params['message'] = "%".$message."%";
} }
if($customer != - 1) if ($customer != - 1) {
{ $query .= " AND `main`.`customerid` = :customer";
$query.= 'AND `main`.`customerid` = "' . (int)$customer . '" '; $search_params['customer'] = $customer;
} }
if($categories != NULL) if ($categories != null) {
{
$cats = array(); $cats = array();
foreach($categories as $index => $catid) foreach ($categories as $index => $catid) {
{ if ($catid != "") {
if ($catid != "")
{
$cats[] = $catid; $cats[] = $catid;
} }
} }
if (count($cats) > 0) if (count($cats) > 0) {
{ $query .= " AND (";
$query.= 'AND (';
} }
foreach($cats as $catid) foreach ($cats as $catid) {
{ if (isset($catid) && $catid > 0) {
if(isset($catid) $query .= "`main`.`category` = :catid_".$catid." OR ";
&& $catid > 0) $search_params['catid_'.$catid] = $catid;
{
$query.= '`main`.`category` = "' . (int)$catid . '" OR ';
} }
} }
if (count($cats) > 0) if (count($cats) > 0) {
{
$query = substr($query, 0, strlen($query) - 3); $query = substr($query, 0, strlen($query) - 3);
$query.= ') '; $query .= ") ";
} }
} }
return $query; return array('0' => $query, '1' => $search_params);
} }
/** /**