2014-03-23 16:03:30 -04:00
< ? php
/*******************************************************************************
* Title : Help Desk Software HESK
2015-08-29 21:44:26 -04:00
* Version : 2.6 . 5 from 28 th August 2015
2014-03-23 16:03:30 -04:00
* Author : Klemen Stirn
* Website : http :// www . hesk . com
********************************************************************************
* COPYRIGHT AND TRADEMARK NOTICE
2015-02-22 22:17:56 -05:00
* Copyright 2005 - 2015 Klemen Stirn . All Rights Reserved .
2014-03-23 16:03:30 -04:00
* HESK is a registered trademark of Klemen Stirn .
* The HESK may be used and modified free of charge by anyone
* AS LONG AS COPYRIGHT NOTICES AND ALL THE COMMENTS REMAIN INTACT .
* By using this code you agree to indemnify Klemen Stirn from any
* liability that might arise from it ' s use .
* Selling the code for this program , in part or full , without prior
* written consent is expressly forbidden .
* Using this code , in part or full , to create derivate work ,
* new scripts or products is expressly forbidden . Obtain permission
* before redistributing this software over the Internet or in
* any other medium . In all cases copyright and header must remain intact .
* This Copyright is in full effect in any country that has International
* Trade Agreements with the United States of America or
* with the European Union .
* Removing any of the copyright notices without purchasing a license
* is expressly forbidden . To remove HESK copyright notice you must purchase
* a license for this script . For more information on how to obtain
* a license please visit the page below :
* https :// www . hesk . com / buy . php
*******************************************************************************/
define ( 'IN_SCRIPT' , 1 );
define ( 'HESK_PATH' , '../' );
/* Get all the required files and functions */
require ( HESK_PATH . 'hesk_settings.inc.php' );
require ( HESK_PATH . 'inc/common.inc.php' );
require ( HESK_PATH . 'inc/admin_functions.inc.php' );
require ( HESK_PATH . 'inc/reporting_functions.inc.php' );
2015-07-30 12:35:30 -04:00
require ( HESK_PATH . 'inc/status_functions.inc.php' );
2014-03-23 16:03:30 -04:00
hesk_load_database_functions ();
hesk_session_start ();
hesk_dbConnect ();
hesk_isLoggedIn ();
// Check permissions for this feature
hesk_checkPermission ( 'can_export' );
2015-09-01 12:22:03 -04:00
$modsForHesk_settings = mfh_getSettings ();
2014-03-23 16:03:30 -04:00
// Set default values
define ( 'CALENDAR' , 1 );
define ( 'MAIN_PAGE' , 1 );
define ( 'LOAD_TABS' , 1 );
$selected = array (
'w' => 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
2015-07-30 12:35:30 -04:00
$statuses = mfh_getAllStatuses ();
2014-06-25 09:07:41 -04:00
$possible_status = array ();
2015-07-30 12:35:30 -04:00
foreach ( $statuses as $row )
2014-06-25 09:07:41 -04:00
{
2015-07-28 13:00:26 -04:00
$possible_status [ $row [ 'ID' ]] = mfh_getDisplayTextForStatusId ( $row [ 'ID' ]);
2014-06-25 09:07:41 -04:00
}
2014-03-23 16:03:30 -04:00
$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?
2015-07-30 12:35:30 -04:00
$allStatusCount = count ( $statuses );
2014-03-23 16:03:30 -04:00
$tmp = count ( $status );
// Do we need to search by status?
2014-06-25 09:07:41 -04:00
if ( $tmp < $allStatusCount )
2014-03-23 16:03:30 -04:00
{
// 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 ();
2015-07-03 22:23:09 -04:00
$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 " );
2014-03-23 16:03:30 -04:00
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 .= '<option value="' . $row [ 'id' ] . '" ' . $cat_selected . '>' . $row [ 'name' ] . '</option>' ;
}
// 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 ();
2015-01-11 17:01:36 -05:00
$result = hesk_dbQuery ( " SELECT `id`,`name` FROM ` " . hesk_dbEscape ( $hesk_settings [ 'db_pfix' ]) . " users` ORDER BY `name` ASC " );
2014-03-23 16:03:30 -04:00
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 = '<br /><br />' ;
$flush_me .= hesk_date () . " | { $hesklang [ 'inite' ] } " ;
if ( $date_from == $date_to )
{
$flush_me .= " ( " . hesk_dateToString ( $date_from , 0 ) . " )<br /> \n " ;
}
else
{
$flush_me .= " ( " . hesk_dateToString ( $date_from , 0 ) . " - " . hesk_dateToString ( $date_to , 0 ) . " )<br /> \n " ;
}
// Start generating file contents
$tmp = ' < ? xml version = " 1.0 " encoding = " UTF-8 " ?>
< ? mso - application progid = " Excel.Sheet " ?>
< Workbook xmlns = " urn:schemas-microsoft-com:office:spreadsheet "
xmlns : o = " urn:schemas-microsoft-com:office:office "
xmlns : x = " urn:schemas-microsoft-com:office:excel "
xmlns : ss = " urn:schemas-microsoft-com:office:spreadsheet "
xmlns : html = " http://www.w3.org/TR/REC-html40 " >
< OfficeDocumentSettings xmlns = " urn:schemas-microsoft-com:office:office " >
< AllowPNG />
</ OfficeDocumentSettings >
< ExcelWorkbook xmlns = " urn:schemas-microsoft-com:office:excel " >
< WindowHeight > 8250 </ WindowHeight >
< WindowWidth > 16275 </ WindowWidth >
< WindowTopX > 360 </ WindowTopX >
< WindowTopY > 90 </ WindowTopY >
< ProtectStructure > False </ ProtectStructure >
< ProtectWindows > False </ ProtectWindows >
</ ExcelWorkbook >
< Styles >
< Style ss : ID = " Default " ss : Name = " Normal " >
< Alignment ss : Vertical = " Bottom " />
< Borders />
< Font ss : FontName = " Calibri " x : CharSet = " 238 " x : Family = " Swiss " ss : Size = " 11 "
ss : Color = " #000000 " />
< Interior />
< NumberFormat />
< Protection />
</ Style >
< Style ss : ID = " s62 " >
< NumberFormat ss : Format = " General Date " />
</ Style >
< Style ss : ID = " s65 " >
< NumberFormat ss : Format = " [h]:mm:ss " />
</ Style >
</ Styles >
< Worksheet ss : Name = " Sheet1 " >
< Table >
' ;
// Define column width
$tmp .= '
< Column ss : AutoFitWidth = " 0 " ss : Width = " 50 " />
< Column ss : AutoFitWidth = " 0 " ss : Width = " 84 " ss : Span = " 1 " />
< Column ss : AutoFitWidth = " 0 " ss : Width = " 110 " />
< Column ss : AutoFitWidth = " 0 " ss : Width = " 110 " />
< Column ss : AutoFitWidth = " 0 " ss : Width = " 90 " />
< Column ss : AutoFitWidth = " 0 " ss : Width = " 90 " />
< Column ss : AutoFitWidth = " 0 " ss : Width = " 87 " />
< Column ss : AutoFitWidth = " 0 " ss : Width = " 57.75 " />
< Column ss : AutoFitWidth = " 0 " ss : Width = " 57.75 " />
< Column ss : AutoFitWidth = " 0 " ss : Width = " 100 " />
< Column ss : AutoFitWidth = " 0 " ss : Width = " 100 " />
< Column ss : AutoFitWidth = " 0 " ss : Width = " 80 " />
< Column ss : AutoFitWidth = " 0 " ss : Width = " 80 " />
' ;
foreach ( $hesk_settings [ 'custom_fields' ] as $k => $v )
{
if ( $v [ 'use' ])
{
$tmp .= '<Column ss:AutoFitWidth="0" ss:Width="80"/>' . " \n " ;
}
}
// Define first row (header)
$tmp .= '
< Row >
< Cell >< Data ss : Type = " String " > #</Data></Cell>
< Cell >< Data ss : Type = " String " > '.$hesklang[' trackID '].' </ Data ></ Cell >
< Cell >< Data ss : Type = " String " > '.$hesklang[' date '].' </ Data ></ Cell >
< Cell >< Data ss : Type = " String " > '.$hesklang[' last_update '].' </ Data ></ Cell >
< Cell >< Data ss : Type = " String " > '.$hesklang[' name '].' </ Data ></ Cell >
< Cell >< Data ss : Type = " String " > '.$hesklang[' email '].' </ Data ></ Cell >
< Cell >< Data ss : Type = " String " > '.$hesklang[' category '].' </ Data ></ Cell >
< Cell >< Data ss : Type = " String " > '.$hesklang[' priority '].' </ Data ></ Cell >
< Cell >< Data ss : Type = " String " > '.$hesklang[' status '].' </ Data ></ Cell >
< Cell >< Data ss : Type = " String " > '.$hesklang[' subject '].' </ Data ></ Cell >
< Cell >< Data ss : Type = " String " > '.$hesklang[' message '].' </ Data ></ Cell >
< Cell >< Data ss : Type = " String " > '.$hesklang[' owner '].' </ Data ></ Cell >
< Cell >< Data ss : Type = " String " > '.$hesklang[' ts '].' </ Data ></ Cell >
' ;
foreach ( $hesk_settings [ 'custom_fields' ] as $k => $v )
{
if ( $v [ 'use' ])
{
2014-12-29 00:11:32 -05:00
if ( $modsForHesk_settings [ 'custom_field_setting' ])
{
$v [ 'name' ] = $hesklang [ $v [ 'name' ]];
}
2014-03-23 16:03:30 -04:00
$tmp .= '<Cell><Data ss:Type="String">' . $v [ 'name' ] . '</Data></Cell>' . " \n " ;
}
}
$tmp .= " </Row> \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' ] } <br /> \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 ))
{
2015-07-28 13:00:26 -04:00
$ticket [ 'status' ] = mfh_getDisplayTextForStatusId ( $ticket [ 'status' ]);
2014-03-23 16:03:30 -04:00
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' ];
2015-03-22 19:56:17 -04:00
$ticket [ 'message' ] = hesk_msgToPlain ( $ticket [ 'message' ], 1 , 0 );
$ticket [ 'subject' ] = hesk_msgToPlain ( $ticket [ 'subject' ], 1 , 0 );
2014-03-23 16:03:30 -04:00
$ticket [ 'owner' ] = isset ( $admins [ $ticket [ 'owner' ]]) ? $admins [ $ticket [ 'owner' ]] : '' ;
2015-01-11 17:01:36 -05:00
$ticket [ 'category' ] = isset ( $my_cat [ $ticket [ 'category' ]]) ? $my_cat [ $ticket [ 'category' ]] : '' ;
2014-08-05 20:26:47 -04:00
// Format for export dates
$hesk_settings [ 'timeformat' ] = " Y-m-d \T H:i:s \ .000 " ;
2014-03-23 16:03:30 -04:00
// Create row for the XML file
$tmp .= '
< Row >
< Cell >< Data ss : Type = " Number " > '.$ticket[' id '].' </ Data ></ Cell >
< Cell >< Data ss : Type = " String " ><! [ CDATA [ '.$ticket[' trackid '].' ]] ></ Data ></ Cell >
2014-08-05 20:26:47 -04:00
< Cell ss : StyleID = " s62 " >< Data ss : Type = " DateTime " > '.hesk_date($ticket[' dt '], true).' </ Data ></ Cell >
< Cell ss : StyleID = " s62 " >< Data ss : Type = " DateTime " > '.hesk_date($ticket[' lastchange '], true).' </ Data ></ Cell >
2014-03-23 16:03:30 -04:00
< Cell >< Data ss : Type = " String " ><! [ CDATA [ '.hesk_msgToPlain($ticket[' name '], 1).' ]] ></ Data ></ Cell >
< Cell >< Data ss : Type = " String " ><! [ CDATA [ '.$ticket[' email '].' ]] ></ Data ></ Cell >
2015-01-11 17:01:36 -05:00
< Cell >< Data ss : Type = " String " ><! [ CDATA [ '.$ticket[' category '].' ]] ></ Data ></ Cell >
2014-03-23 16:03:30 -04:00
< Cell >< Data ss : Type = " String " ><! [ CDATA [ '.$ticket[' priority '].' ]] ></ Data ></ Cell >
< Cell >< Data ss : Type = " String " ><! [ CDATA [ '.$ticket[' status '].' ]] ></ Data ></ Cell >
< Cell >< Data ss : Type = " String " ><! [ CDATA [ '.$ticket[' subject '].' ]] ></ Data ></ Cell >
< Cell >< Data ss : Type = " String " ><! [ CDATA [ '.$ticket[' message '].' ]] ></ Data ></ Cell >
< Cell >< Data ss : Type = " String " ><! [ CDATA [ '.$ticket[' owner '].' ]] ></ Data ></ Cell >
< Cell >< Data ss : Type = " String " ><! [ CDATA [ '.$ticket[' time_worked '].' ]] ></ Data ></ Cell >
' ;
// Add custom fields
foreach ( $hesk_settings [ 'custom_fields' ] as $k => $v )
{
if ( $v [ 'use' ])
{
2015-03-22 19:56:17 -04:00
$tmp .= '<Cell><Data ss:Type="String"><![CDATA[' . hesk_msgToPlain ( $ticket [ $k ], 1 , 0 ) . ']]></Data></Cell> ' . " \n " ;
2014-03-23 16:03:30 -04:00
}
}
$tmp .= " </Row> \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
2014-08-05 20:26:47 -04:00
// Go back to the HH:MM:SS format for hesk_date()
$hesk_settings [ 'timeformat' ] = 'H:i:s' ;
2014-03-23 16:03:30 -04:00
// 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 = '
</ Table >
< WorksheetOptions xmlns = " urn:schemas-microsoft-com:office:excel " >
< PageSetup >
< Header x : Margin = " 0.3 " />
< Footer x : Margin = " 0.3 " />
< PageMargins x : Bottom = " 0.75 " x : Left = " 0.7 " x : Right = " 0.7 " x : Top = " 0.75 " />
</ PageSetup >
< Selected />
< Panes >
< Pane >
< Number > 3 </ Number >
< ActiveRow > 4 </ ActiveRow >
</ Pane >
</ Panes >
< ProtectObjects > False </ ProtectObjects >
< ProtectScenarios > False </ ProtectScenarios >
</ WorksheetOptions >
</ Worksheet >
< Worksheet ss : Name = " Sheet2 " >
< Table ss : ExpandedColumnCount = " 1 " ss : ExpandedRowCount = " 1 " x : FullColumns = " 1 "
x : FullRows = " 1 " ss : DefaultRowHeight = " 15 " >
</ Table >
< WorksheetOptions xmlns = " urn:schemas-microsoft-com:office:excel " >
< PageSetup >
< Header x : Margin = " 0.3 " />
< Footer x : Margin = " 0.3 " />
< PageMargins x : Bottom = " 0.75 " x : Left = " 0.7 " x : Right = " 0.7 " x : Top = " 0.75 " />
</ PageSetup >
< ProtectObjects > False </ ProtectObjects >
< ProtectScenarios > False </ ProtectScenarios >
</ WorksheetOptions >
</ Worksheet >
< Worksheet ss : Name = " Sheet3 " >
< Table ss : ExpandedColumnCount = " 1 " ss : ExpandedRowCount = " 1 " x : FullColumns = " 1 "
x : FullRows = " 1 " ss : DefaultRowHeight = " 15 " >
</ Table >
< WorksheetOptions xmlns = " urn:schemas-microsoft-com:office:excel " >
< PageSetup >
< Header x : Margin = " 0.3 " />
< Footer x : Margin = " 0.3 " />
< PageMargins x : Bottom = " 0.75 " x : Left = " 0.7 " x : Right = " 0.7 " x : Top = " 0.75 " />
</ PageSetup >
< ProtectObjects > False </ ProtectObjects >
< ProtectScenarios > False </ ProtectScenarios >
</ WorksheetOptions >
</ Worksheet >
</ Workbook >
' ;
file_put_contents ( $save_to , $tmp , FILE_APPEND );
// Log how many rows we exported
$flush_me .= hesk_date () . " | " . sprintf ( $hesklang [ 'nrow' ], $tickets_exported ) . " <br /> \n " ;
// We will convert XML to Zip to save a lot of space
$save_to_zip = $export_dir . $export_name . '.zip' ;
// Log start of Zip creation
$flush_me .= hesk_date () . " | { $hesklang [ 'cZIP' ] } <br /> \n " ;
// Preferrably use the zip extension
if ( extension_loaded ( 'zip' ))
{
$save_to_zip = $export_dir . $export_name . '.zip' ;
$zip = new ZipArchive ;
$res = $zip -> open ( $save_to_zip , ZipArchive :: CREATE );
if ( $res === TRUE )
{
$zip -> addFile ( $save_to , " { $export_name } .xml " );
$zip -> close ();
}
else
{
die ( " { $hesklang [ 'eZIP' ] } < $save_to_zip > \n " );
}
}
// Some servers have ZipArchive class enabled anyway - can we use it?
elseif ( class_exists ( 'ZipArchive' ) )
{
require ( HESK_PATH . 'inc/zip/Zip.php' );
$zip = new Zip ();
$zip -> addLargeFile ( $save_to , " { $export_name } .xml " );
$zip -> finalize ();
$zip -> setZipFile ( $save_to_zip );
}
// If not available, use a 3rd party Zip class included with HESK
else
{
require ( HESK_PATH . 'inc/zip/pclzip.lib.php' );
$zip = new PclZip ( $save_to_zip );
$zip -> add ( $save_to , PCLZIP_OPT_REMOVE_ALL_PATH );
}
// Delete XML, just leave the Zip archive
hesk_unlink ( $save_to );
// Echo memory peak usage
$flush_me .= hesk_date () . " | " . sprintf ( $hesklang [ 'pmem' ], ( @ memory_get_peak_usage ( true ) / 1048576 )) . " <br /> \r \n " ;
// We're done!
$flush_me .= hesk_date () . " | { $hesklang [ 'fZIP' ] } <br /><br /> " ;
$flush_me .= '<a href="' . $save_to_zip . '">' . $hesklang [ 'ch2d' ] . " </a> \n " ;
}
// No tickets exported, cleanup
else
{
hesk_unlink ( $save_to );
}
}
/* Print header */
require_once ( HESK_PATH . 'inc/headerAdmin.inc.php' );
/* Print main manage users page */
require_once ( HESK_PATH . 'inc/show_admin_nav.inc.php' );
?>
2015-09-10 13:30:58 -04:00
< div class = " row move-down-20 " >
2014-08-09 19:52:35 -04:00
< div class = " col-md-4 " >
< div class = " panel panel-default " >
< div class = " panel-heading " >< ? php echo $hesklang [ 'export' ]; ?> </div>
< ? php
if ( hesk_checkPermission ( 'can_run_reports' , 0 )) {
$canRunReports = true ;
} else {
$canRunReports = false ;
}
?>
< div class = " panel-body " < ? php if ( $canRunReports ) { echo 'style="margin-top: -15px;"' ;} ?> >
< ? php if ( $canRunReports ) { echo '<small><a href="reports.php">' . $hesklang [ 'reports_tab' ] . '</a></small><div class="blankSpace"></div>' ;} ?>
< p >< ? php echo $hesklang [ 'export_intro' ]; ?> </p>
</ div >
</ div >
2014-03-23 16:03:30 -04:00
</ div >
< div class = " col-md-8 " >
< ? php
/* This will handle error, success and notice messages */
hesk_handle_messages ();
// If an export was generated, show the link to download
if ( isset ( $flush_me ))
{
if ( $tickets_exported > 0 )
{
hesk_show_success ( $flush_me );
}
else
{
hesk_show_notice ( $hesklang [ 'n2ex' ]);
}
}
?>
< h3 >< ? php echo $hesklang [ 'export' ]; ?> </h3>
< div class = " footerWithBorder blankSpace " ></ div >
< form name = " showt " action = " export.php " method = " get " class = " form-horizontal " role = " form " >
< div class = " form-group " >
< label for = " time " class = " control-label col-sm-2 " >< ? php echo $hesklang [ 'dtrg' ]; ?> :</label>
< div class = " col-sm-10 " >
<!-- START DATE -->
< input type = " radio " name = " w " value = " 0 " id = " w0 " < ? php echo $selected [ 'w' ][ 0 ]; ?> />
< select name = " time " onclick = " document.getElementById('w0').checked = true " onfocus = " document.getElementById('w0').checked = true " style = " margin-top:5px;margin-bottom:5px; " >
< option value = " 1 " < ? php echo $selected [ 'time' ][ 1 ]; ?> ><?php echo $hesklang['r1']; ?> (<?php echo $hesklang['d'.date('w')]; ?>)</option>
< option value = " 2 " < ? php echo $selected [ 'time' ][ 2 ]; ?> ><?php echo $hesklang['r2']; ?> (<?php echo $hesklang['d'.date('w',mktime(0, 0, 0, date('m'), date('d')-1, date('Y')))]; ?>)</option>
< option value = " 3 " < ? php echo $selected [ 'time' ][ 3 ]; ?> ><?php echo $hesklang['r3']; ?> (<?php echo $hesklang['m'.date('n')]; ?>)</option>
< option value = " 4 " < ? php echo $selected [ 'time' ][ 4 ]; ?> ><?php echo $hesklang['r4']; ?> (<?php echo $hesklang['m'.date('n',mktime(0, 0, 0, date('m')-1, date('d'), date('Y')))]; ?>)</option>
< option value = " 5 " < ? php echo $selected [ 'time' ][ 5 ]; ?> ><?php echo $hesklang['r5']; ?></option>
< option value = " 6 " < ? php echo $selected [ 'time' ][ 6 ]; ?> ><?php echo $hesklang['r6']; ?></option>
< option value = " 7 " < ? php echo $selected [ 'time' ][ 7 ]; ?> ><?php echo $hesklang['r7']; ?></option>
< option value = " 8 " < ? php echo $selected [ 'time' ][ 8 ]; ?> ><?php echo $hesklang['r8']; ?></option>
< option value = " 9 " < ? php echo $selected [ 'time' ][ 9 ]; ?> ><?php echo $hesklang['r9']; ?></option>
< option value = " 10 " < ? php echo $selected [ 'time' ][ 10 ]; ?> ><?php echo $hesklang['r10']; ?> (<?php echo date('Y'); ?>)</option>
< option value = " 11 " < ? php echo $selected [ 'time' ][ 11 ]; ?> ><?php echo $hesklang['r11']; ?> (<?php echo date('Y',mktime(0, 0, 0, date('m'), date('d'), date('Y')-1)); ?>)</option>
< option value = " 12 " < ? php echo $selected [ 'time' ][ 12 ]; ?> ><?php echo $hesklang['r12']; ?></option>
</ select >
< br />
< input type = " radio " name = " w " value = " 1 " id = " w1 " < ? php echo $selected [ 'w' ][ 1 ]; ?> />
< ? php echo $hesklang [ 'from' ]; ?> <input type="text" name="datefrom" value="<?php echo $input_datefrom; ?>" id="datefrom" class="tcal" size="10" onclick="document.getElementById('w1').checked = true" onfocus="document.getElementById('w1').checked = true;this.focus;" />
< ? php echo $hesklang [ 'to' ]; ?> <input type="text" name="dateto" value="<?php echo $input_dateto; ?>" id="dateto" class="tcal" size="10" onclick="document.getElementById('w1').checked = true" onfocus="document.getElementById('w1').checked = true; this.focus;" />
<!-- END DATE -->
</ div >
</ div >
< div class = " form-group " >
< label for = " status " class = " control-label col-sm-2 " >< ? php echo $hesklang [ 'status' ]; ?> :</label>
< div class = " col-sm-10 " >
2014-06-25 09:07:41 -04:00
< ? php
2015-07-30 12:35:30 -04:00
$statuses = mfh_getAllStatuses ();
foreach ( $statuses as $row )
2014-06-25 09:07:41 -04:00
{
?>
< div class = " col-xs-4 " >
< div class = " checkbox " >
2015-07-30 12:35:30 -04:00
< label >< input type = " checkbox " name = " s<?php echo $row['ID'] ; ?> " value = " 1 " < ? php if ( isset ( $status [ $row [ 'ID' ]])) { echo 'checked="checked"' ;} ?> /> <span style="color: <?php echo $row['TextColor']; ?>"><?php echo $row['text']; ?></span></label>
2014-06-25 09:07:41 -04:00
</ div >
</ div >
< ? php
}
?>
2014-03-23 16:03:30 -04:00
</ div >
</ div >
< div class = " form-group " >
< label for = " priority " class = " col-sm-2 control-label " >< ? php echo $hesklang [ 'priority' ]; ?> :</label>
< div class = " col-sm-10 " >
< div class = " col-xs-4 " >
< div class = " checkbox " >
< label >< input type = " checkbox " name = " p0 " value = " 1 " < ? php if ( isset ( $priority [ 0 ])) { echo 'checked="checked"' ;} ?> /> <span class="critical"><?php echo $hesklang['critical']; ?></span></label>
</ div >
< div class = " checkbox " >
< label >< input type = " checkbox " name = " p1 " value = " 1 " < ? php if ( isset ( $priority [ 1 ])) { echo 'checked="checked"' ;} ?> /> <span class="important"><?php echo $hesklang['high']; ?></span></label>
</ div >
</ div >
< div class = " col-xs-4 " >
< div class = " checkbox " >
< label >< input type = " checkbox " name = " p2 " value = " 1 " < ? php if ( isset ( $priority [ 2 ])) { echo 'checked="checked"' ;} ?> /> <span class="medium"><?php echo $hesklang['medium']; ?></span></label>
</ div >
< div class = " checkbox " >
< label >< input type = " checkbox " name = " p3 " value = " 1 " < ? php if ( isset ( $priority [ 3 ])) { echo 'checked="checked"' ;} ?> /> <span class="normal"><?php echo $hesklang['low']; ?></span></label>
</ div >
</ div >
</ div >
</ div >
< div class = " form-group " >
< label for = " assign " class = " col-sm-2 control-label " >< ? php echo $hesklang [ 'show' ]; ?> :</label>
< div class = " col-sm-10 " >
< div class = " col-xs-4 " >
< div class = " checkbox " >
< label >< input type = " checkbox " name = " s_my " value = " 1 " < ? php if ( $s_my [ 1 ]) echo 'checked="checked"' ; ?> /> <?php echo $hesklang['s_my']; ?></label>
</ div >
< ? php
if ( $can_view_unassigned )
{
?>
< div class = " checkbox " >
< label >< input type = " checkbox " name = " s_un " value = " 1 " < ? php if ( $s_un [ 1 ]) echo 'checked="checked"' ; ?> /> <?php echo $hesklang['s_un']; ?></label>
</ div >
< ? php
}
?>
</ div >
< div class = " col-xs-4 " >
< ? php
if ( $can_view_ass_others )
{
?>
< div class = " checkbox " >
< label >< input type = " checkbox " name = " s_ot " value = " 1 " < ? php if ( $s_ot [ 1 ]) echo 'checked="checked"' ; ?> /> <?php echo $hesklang['s_ot']; ?></label>
</ div >
< ? php
}
?>
< div class = " checkbox " >
< label >< input type = " checkbox " name = " archive " value = " 1 " < ? php if ( $archive [ 1 ]) echo 'checked="checked"' ; ?> /> <?php echo $hesklang['disp_only_archived']; ?></label>
</ div >
</ div >
</ div >
</ div >
< div class = " form-group " >
< label for = " sort " class = " col-sm-2 control-label " >< ? php echo $hesklang [ 'sort_by' ]; ?> :</label>
< div class = " col-sm-10 " >
< div class = " col-xs-4 " >
< div class = " radio " >
< label >< input type = " radio " name = " sort " value = " priority " < ? php if ( $sort == 'priority' ) { echo 'checked="checked"' ;} ?> /> <?php echo $hesklang['priority']; ?></label>
</ div >
< div class = " radio " >
< label >< input type = " radio " name = " sort " value = " lastchange " < ? php if ( $sort == 'lastchange' ) { echo 'checked="checked"' ;} ?> /> <?php echo $hesklang['last_update']; ?></label>
</ div >
</ div >
< div class = " col-xs-4 " >
< div class = " radio " >
< label >< input type = " radio " name = " sort " value = " name " < ? php if ( $sort == 'name' ) { echo 'checked="checked"' ;} ?> /> <?php echo $hesklang['name']; ?></label>
</ div >
< div class = " radio " >
< label >< input type = " radio " name = " sort " value = " subject " < ? php if ( $sort == 'subject' ) { echo 'checked="checked"' ;} ?> /> <?php echo $hesklang['subject']; ?></label>
</ div >
</ div >
< div class = " col-xs-4 " >
< div class = " radio " >
< label >< input type = " radio " name = " sort " value = " status " < ? php if ( $sort == 'status' ) { echo 'checked="checked"' ;} ?> /> <?php echo $hesklang['status']; ?></label>
</ div >
< div class = " radio " >
< label >< input type = " radio " name = " sort " value = " id " < ? php if ( $sort == 'id' ) { echo 'checked="checked"' ;} ?> /> <?php echo $hesklang['sequentially']; ?></label>
</ div >
</ div >
</ div >
</ div >
< div class = " form-group " >
< label for = " asc " class = " col-sm-2 control-label " >< ? php echo $hesklang [ 'category' ]; ?> :</label>
< div class = " col-sm-10 " >
< select name = " category " class = " form-control " >
< option value = " 0 " >< ? php echo $hesklang [ 'any_cat' ]; ?> </option>
< ? php echo $category_options ; ?>
</ select >
</ div >
</ div >
< div class = " form-group " >
< label for = " asc " class = " col-sm-2 control-label " >< ? php echo $hesklang [ 'order' ]; ?> :</label>
< div class = " col-sm-10 " >
< div class = " col-xs-4 " >
< div class = " radio " >
< label >< input type = " radio " name = " asc " value = " 1 " < ? php if ( $asc ) { echo 'checked="checked"' ;} ?> /> <?php echo $hesklang['ascending']; ?></label>
</ div >
< div class = " radio " >
2015-02-05 20:39:49 -05:00
< label >< input type = " radio " name = " asc " value = " 0 " < ? php if ( ! $asc ) { echo 'checked="checked"' ;} ?> /> <?php echo $hesklang['descending']; ?></label>
2014-03-23 16:03:30 -04:00
</ div >
</ div >
</ div >
</ div >
2015-09-10 16:47:31 -04:00
< div class = " form-group text-center " >
2014-03-23 16:03:30 -04:00
< input type = " submit " value = " <?php echo $hesklang['export_btn'] ; ?> " class = " btn btn-default " />
< input type = " hidden " name = " cot " value = " 1 " />
</ div >
</ form >
</ div >
</ div >
< ? php
require_once ( HESK_PATH . 'inc/footer.inc.php' );
exit ();
?>