array(0 => '', 1 => ''), 'time' => array(1 => '', 2 => '', 3 => '', 4 => '', 5 => '', 6 => '', 7 => '', 8 => '', 9 => '', 10 => '', 11 => '', 12 => ''), ); $is_all_time = 0; // Default this month to date $date_from = date('Y-m-d', mktime(0, 0, 0, date("m"), 1, date("Y"))); $date_to = date('Y-m-d'); $input_datefrom = date('m/d/Y', strtotime('last month')); $input_dateto = date('m/d/Y'); /* Date */ if (!empty($_GET['w'])) { $df = preg_replace('/[^0-9]/', '', hesk_GET('datefrom')); if (strlen($df) == 8) { $date_from = substr($df, 4, 4) . '-' . substr($df, 0, 2) . '-' . substr($df, 2, 2); $input_datefrom = substr($df, 0, 2) . '/' . substr($df, 2, 2) . '/' . substr($df, 4, 4); } else { $date_from = date('Y-m-d', strtotime('last month')); } $dt = preg_replace('/[^0-9]/', '', hesk_GET('dateto')); if (strlen($dt) == 8) { $date_to = substr($dt, 4, 4) . '-' . substr($dt, 0, 2) . '-' . substr($dt, 2, 2); $input_dateto = substr($dt, 0, 2) . '/' . substr($dt, 2, 2) . '/' . substr($dt, 4, 4); } else { $date_to = date('Y-m-d'); } if ($date_from > $date_to) { $tmp = $date_from; $tmp2 = $input_datefrom; $date_from = $date_to; $input_datefrom = $input_dateto; $date_to = $tmp; $input_dateto = $tmp2; $note_buffer = $hesklang['datetofrom']; } if ($date_to > date('Y-m-d')) { $date_to = date('Y-m-d'); $input_dateto = date('m/d/Y'); } $selected['w'][1] = 'checked="checked"'; $selected['time'][3] = 'selected="selected"'; } else { $selected['w'][0] = 'checked="checked"'; $_GET['time'] = intval(hesk_GET('time', 3)); switch ($_GET['time']) { case 1: /* Today */ $date_from = date('Y-m-d'); $date_to = $date_from; $selected['time'][1] = 'selected="selected"'; $is_all_time = 1; break; case 2: /* Yesterday */ $date_from = date('Y-m-d', mktime(0, 0, 0, date("m"), date("d") - 1, date("Y"))); $date_to = $date_from; $selected['time'][2] = 'selected="selected"'; $is_all_time = 1; break; case 4: /* Last month */ $date_from = date('Y-m-d', mktime(0, 0, 0, date("m") - 1, 1, date("Y"))); $date_to = date('Y-m-d', mktime(0, 0, 0, date("m"), 0, date("Y"))); $selected['time'][4] = 'selected="selected"'; break; case 5: /* Last 30 days */ $date_from = date('Y-m-d', mktime(0, 0, 0, date("m") - 1, date("d"), date("Y"))); $date_to = date('Y-m-d'); $selected['time'][5] = 'selected="selected"'; break; case 6: /* This week */ list($date_from, $date_to) = dateweek(0); $date_to = date('Y-m-d'); $selected['time'][6] = 'selected="selected"'; break; case 7: /* Last week */ list($date_from, $date_to) = dateweek(-1); $selected['time'][7] = 'selected="selected"'; break; case 8: /* This business week */ list($date_from, $date_to) = dateweek(0, 1); $date_to = date('Y-m-d'); $selected['time'][8] = 'selected="selected"'; break; case 9: /* Last business week */ list($date_from, $date_to) = dateweek(-1, 1); $selected['time'][9] = 'selected="selected"'; break; case 10: /* This year */ $date_from = date('Y') . '-01-01'; $date_to = date('Y-m-d'); $selected['time'][10] = 'selected="selected"'; break; case 11: /* Last year */ $date_from = date('Y') - 1 . '-01-01'; $date_to = date('Y') - 1 . '-12-31'; $selected['time'][11] = 'selected="selected"'; break; case 12: /* All time */ $date_from = hesk_getOldestDate(); $date_to = date('Y-m-d'); $selected['time'][12] = 'selected="selected"'; $is_all_time = 1; break; default: $_GET['time'] = 3; $selected['time'][3] = 'selected="selected"'; } } unset($tmp); // Start SQL statement for selecting tickets $sql = "SELECT * FROM `" . hesk_dbEscape($hesk_settings['db_pfix']) . "tickets` WHERE "; // Some default settings $archive = array(1 => 0, 2 => 0); $s_my = array(1 => 1, 2 => 1); $s_ot = array(1 => 1, 2 => 1); $s_un = array(1 => 1, 2 => 1); // --> TICKET CATEGORY $category = intval(hesk_GET('category', 0)); // Make sure user has access to this category if ($category && hesk_okCategory($category, 0)) { $sql .= " `category`='{$category}' "; } // No category selected, show only allowed categories else { $sql .= hesk_myCategories(); } // Show only tagged tickets? if (!empty($_GET['archive'])) { $archive[1] = 1; $sql .= " AND `archive`='1' "; } // Ticket owner preferences $fid = 1; require(HESK_PATH . 'inc/assignment_search.inc.php'); // --> TICKET STATUS $statuses = mfh_getAllStatuses(); $possible_status = array(); foreach ($statuses as $row) { $possible_status[$row['ID']] = mfh_getDisplayTextForStatusId($row['ID']); } $status = $possible_status; foreach ($status as $k => $v) { if (empty($_GET['s' . $k])) { unset($status[$k]); } } // How many statuses are we pulling out of the database? $allStatusCount = count($statuses); $tmp = count($status); // Do we need to search by status? if ($tmp < $allStatusCount) { // If no statuses selected, show all if ($tmp == 0) { $status = $possible_status; } else { // Add to the SQL $sql .= " AND `status` IN ('" . implode("','", array_keys($status)) . "') "; } } // --> TICKET PRIORITY $possible_priority = array( 0 => 'CRITICAL', 1 => 'HIGH', 2 => 'MEDIUM', 3 => 'LOW', ); $priority = $possible_priority; foreach ($priority as $k => $v) { if (empty($_GET['p' . $k])) { unset($priority[$k]); } } // How many priorities are we pulling out of the database? $tmp = count($priority); // Create the SQL based on the number of priorities we need if ($tmp == 0 || $tmp == 4) { // Nothing or all selected, no need to modify the SQL code $priority = $possible_priority; } else { // A custom selection of priorities $sql .= " AND `priority` IN ('" . implode("','", array_keys($priority)) . "') "; } // Prepare variables used in search and forms require_once(HESK_PATH . 'inc/prepare_ticket_export.inc.php'); //////////////////////////////////////////////////////////////////////////////// // Can view tickets that are unassigned or assigned to others? $can_view_ass_others = hesk_checkPermission('can_view_ass_others', 0); $can_view_unassigned = hesk_checkPermission('can_view_unassigned', 0); // Category options $category_options = ''; $my_cat = array(); $orderBy = $modsForHesk_settings['category_order_column']; $res2 = hesk_dbQuery("SELECT `id`, `name` FROM `" . hesk_dbEscape($hesk_settings['db_pfix']) . "categories` WHERE " . hesk_myCategories('id') . " ORDER BY `" . $orderBy . "` ASC"); while ($row = hesk_dbFetchAssoc($res2)) { $my_cat[$row['id']] = hesk_msgToPlain($row['name'], 1); $row['name'] = (strlen($row['name']) > 50) ? substr($row['name'], 0, 50) . '...' : $row['name']; $cat_selected = ($row['id'] == $category) ? 'selected="selected"' : ''; $category_options .= ''; } // Generate export file if (isset($_GET['w'])) { // We'll need HH:MM:SS format for hesk_date() here $hesk_settings['timeformat'] = 'H:i:s'; // Get staff names $admins = array(); $result = hesk_dbQuery("SELECT `id`,`name` FROM `" . hesk_dbEscape($hesk_settings['db_pfix']) . "users` ORDER BY `name` ASC"); while ($row = hesk_dbFetchAssoc($result)) { $admins[$row['id']] = $row['name']; } // This will be the export directory $export_dir = HESK_PATH . $hesk_settings['attach_dir'] . '/export/'; // This will be the name of the export and the XML file $export_name = 'hesk_export_' . date('Y-m-d_H-i-s') . '_' . mt_rand(10000, 99999); $save_to = $export_dir . $export_name . '.xml'; // Do we have the export directory? if (is_dir($export_dir) || (@mkdir($export_dir, 0777) && is_writable($export_dir))) { // Cleanup old files $files = glob($export_dir . '*', GLOB_NOSORT); if (is_array($files) && count($files)) { foreach ($files as $file) { hesk_unlink($file, 86400); } } } else { hesk_error($hesklang['ede']); } // Make sure the file can be saved and written to @file_put_contents($save_to, ''); if (!file_exists($save_to)) { hesk_error($hesklang['eef']); } // Start generating the report message and generating the export $flush_me = '

'; $flush_me .= hesk_date() . " | {$hesklang['inite']} "; if ($date_from == $date_to) { $flush_me .= "(" . hesk_dateToString($date_from, 0) . ")
\n"; } else { $flush_me .= "(" . hesk_dateToString($date_from, 0) . " - " . hesk_dateToString($date_to, 0) . ")
\n"; } // Start generating file contents $tmp = ' 8250 16275 360 90 False False '; // Define column width $tmp .= ' '; foreach ($hesk_settings['custom_fields'] as $k => $v) { if ($v['use']) { $tmp .= '' . "\n"; } } // Define first row (header) $tmp .= ' # ' . $hesklang['trackID'] . ' ' . $hesklang['date'] . ' ' . $hesklang['last_update'] . ' ' . $hesklang['name'] . ' ' . $hesklang['email'] . ' ' . $hesklang['category'] . ' ' . $hesklang['priority'] . ' ' . $hesklang['status'] . ' ' . $hesklang['subject'] . ' ' . $hesklang['message'] . ' ' . $hesklang['owner'] . ' ' . $hesklang['ts'] . ' '; foreach ($hesk_settings['custom_fields'] as $k => $v) { if ($v['use']) { if ($modsForHesk_settings['custom_field_setting']) { $v['name'] = $hesklang[$v['name']]; } $tmp .= '' . $v['name'] . '' . "\n"; } } $tmp .= "\n"; // Write what we have by now into the XML file file_put_contents($save_to, $tmp, FILE_APPEND); $flush_me .= hesk_date() . " | {$hesklang['gXML']}
\n"; // OK, now start dumping data and writing it into the file $tickets_exported = 0; $save_after = 100; $this_round = 0; $tmp = ''; $result = hesk_dbQuery($sql); while ($ticket = hesk_dbFetchAssoc($result)) { $ticket['status'] = mfh_getDisplayTextForStatusId($ticket['status']); switch ($ticket['priority']) { case 0: $ticket['priority'] = $hesklang['critical']; break; case 1: $ticket['priority'] = $hesklang['high']; break; case 2: $ticket['priority'] = $hesklang['medium']; break; default: $ticket['priority'] = $hesklang['low']; } $ticket['archive'] = !($ticket['archive']) ? $hesklang['no'] : $hesklang['yes']; $ticket['message'] = hesk_msgToPlain($ticket['message'], 1, 0); $ticket['subject'] = hesk_msgToPlain($ticket['subject'], 1, 0); $ticket['owner'] = isset($admins[$ticket['owner']]) ? $admins[$ticket['owner']] : ''; $ticket['category'] = isset($my_cat[$ticket['category']]) ? $my_cat[$ticket['category']] : ''; // Format for export dates $hesk_settings['timeformat'] = "Y-m-d\TH:i:s\.000"; // Create row for the XML file $tmp .= ' ' . $ticket['id'] . ' ' . hesk_date($ticket['dt'], true) . ' ' . hesk_date($ticket['lastchange'], true) . ' '; // Add custom fields foreach ($hesk_settings['custom_fields'] as $k => $v) { if ($v['use']) { $output = $ticket[$k]; if ($v['type'] == 'date' && !empty($ticket[$k])) { $dt = date('Y-m-d', $ticket[$k]); $output = hesk_dateToString($dt, 0); } $tmp .= ' ' . "\n"; } } $tmp .= "\n"; // Write every 100 rows into the file if ($this_round >= $save_after) { file_put_contents($save_to, $tmp, FILE_APPEND); $this_round = 0; $tmp = ''; usleep(1); } $tickets_exported++; $this_round++; } // End of while loop // Go back to the HH:MM:SS format for hesk_date() $hesk_settings['timeformat'] = 'H:i:s'; // Append any remaining rows into the file if ($this_round > 0) { file_put_contents($save_to, $tmp, FILE_APPEND); } // If any tickets were exported, continue, otherwise cleanup if ($tickets_exported > 0) { // Finish the XML file $tmp = '