mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-22 14:41:29 +01:00
206 lines
5.7 KiB
PHP
206 lines
5.7 KiB
PHP
<?php
|
|
/**
|
|
* eGroupWare
|
|
*
|
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
|
* @package timesheet
|
|
* @subpackage importexport
|
|
* @link http://www.egroupware.org
|
|
* @author Knut Moeller <k.moeller@metaways.de>
|
|
* @copyright Knut Moeller <k.moeller@metaways.de>
|
|
* @version $Id: $
|
|
*/
|
|
|
|
require_once(EGW_INCLUDE_ROOT. '/etemplate/inc/class.etemplate.inc.php');
|
|
require_once(EGW_INCLUDE_ROOT. '/importexport/inc/class.iface_export_plugin.inc.php');
|
|
require_once(EGW_INCLUDE_ROOT. '/timesheet/inc/class.uitimesheet.inc.php');
|
|
require_once(EGW_INCLUDE_ROOT. '/timesheet/inc/class.botimesheet.inc.php');
|
|
|
|
/**
|
|
* export plugin of addressbook
|
|
*/
|
|
class export_timesheet_openoffice implements iface_export_plugin {
|
|
|
|
|
|
|
|
/**
|
|
* Exports records as defined in $_definition
|
|
*
|
|
* @param egw_record $_definition
|
|
*/
|
|
public static function export( $_stream, $_charset, definition $_definition) {
|
|
|
|
$options = $_definition->options;
|
|
|
|
$botimesheet = new botimesheet();
|
|
|
|
// get current display selection
|
|
|
|
$query = $GLOBALS['egw']->session->appsession('index',TIMESHEET_APP);
|
|
|
|
$bo_pm = CreateObject('projectmanager.boprojectmanager');
|
|
$childs = $bo_pm->children( $query['col_filter']['pm_id'] );
|
|
$childs[] = $query['col_filter']['pm_id'];
|
|
$pmChilds = implode(",",$childs);
|
|
$botimesheet->db->select( 'egw_links','link_id, link_id1','',
|
|
__LINE__,__FILE__,False,
|
|
'',False,0,
|
|
'JOIN egw_pm_projects ON (pm_id = link_id2)
|
|
JOIN egw_timesheet ON (ts_id=link_id1)
|
|
WHERE
|
|
link_app1 = \'timesheet\' AND
|
|
link_app2 = \'projectmanager\' AND
|
|
link_id2 IN ('.$pmChilds.') AND ts_start >= '.$query['startdate'].' AND ts_start < '.$query['enddate'] );
|
|
|
|
while($row = $botimesheet->db->row(true)) {
|
|
$tslist[$row['link_id']] = $row['link_id1'];
|
|
}
|
|
|
|
//error_log(print_r($query,true));
|
|
//error_log(print_r($tslist,true));
|
|
|
|
$ids = implode(',', $tslist);
|
|
|
|
// no result
|
|
if (strlen($ids)==0) return false;
|
|
|
|
//error_log('IDS: '.$ids);
|
|
|
|
// get full result
|
|
|
|
$rows = $botimesheet->search(array("egw_timesheet.ts_id IN ($ids)"),
|
|
false, 'ts_owner,ts_start', array('cat_name') ,
|
|
'', false, 'AND', false, null,
|
|
'LEFT JOIN egw_categories ON (egw_categories.cat_id=egw_timesheet.cat_id AND egw_categories.cat_appname=\'timesheet\')');
|
|
|
|
|
|
if (is_array($rows) && count($rows)>0 ) {
|
|
//error_log(print_r($rows,true));
|
|
// export rows
|
|
|
|
$export_object = new export_openoffice($_stream, $charset, (array)$options);
|
|
$export_object->init();
|
|
|
|
|
|
// get date values
|
|
|
|
$tstamp_min = 0; // date range for table date entries (KW...)
|
|
$tstamp_max = 0;
|
|
|
|
foreach($rows as $row) {
|
|
if ($row['ts_start']<$tstamp_min || $tstamp_min == 0) $tstamp_min = $row['ts_start'];
|
|
if ($row['ts_start']>$tstamp_max || $tstamp_max == 0) $tstamp_max = $row['ts_start'];
|
|
}
|
|
|
|
|
|
// init summarytable
|
|
$export_object->create_summarytable();
|
|
|
|
|
|
// user tables
|
|
$last_username = 0;
|
|
$first_table = true;
|
|
|
|
foreach($rows as $row) {
|
|
|
|
// read in extra values (custom fields)
|
|
$extrarows = $botimesheet->search(array("egw_timesheet.ts_id=".$row['ts_id']), false, '', 'ts_extra_name,ts_extra_value' ,
|
|
'', false, 'AND', false, null,
|
|
'LEFT JOIN egw_timesheet_extra ON (egw_timesheet_extra.ts_id=egw_timesheet.ts_id)' );
|
|
$extras = array();
|
|
foreach($extrarows as $extrarow) {
|
|
$extras[$extrarow['ts_extra_name']] = $extrarow['ts_extra_value'];
|
|
}
|
|
|
|
// change projectname
|
|
$titleRegex = '/^.*:.*-\s(.*)$/';
|
|
preg_match($titleRegex, $row['ts_project'], $title);
|
|
$row['ts_project'] = $title[1];
|
|
|
|
// get firstname, lastname
|
|
$res = array();
|
|
// $nameRegex = '/\s(.*)\s(.*)$/'; // z.B. "[admin] Richard Blume"
|
|
$nameRegex = '/(.*),\s(.*)$/'; // z.B. "Blume, Richard"
|
|
preg_match($nameRegex, $GLOBALS['egw']->common->grab_owner_name($row['ts_owner']), $res);
|
|
// error_log('|'.$name . '| -> ' . print_r($res,true));
|
|
$firstname = $res[2];
|
|
$lastname = $res[1];
|
|
$fullname = $firstname.' '.$lastname;
|
|
|
|
// new table on username change
|
|
if ($row['ts_owner'] != $last_username) {
|
|
|
|
// create sum as last tablerow before creating new table
|
|
if (!$first_table) {
|
|
$export_object->summarize();
|
|
}
|
|
else {
|
|
$first_table = false;
|
|
}
|
|
|
|
// create new table sheet
|
|
$export_object->create_usertable($lastname,
|
|
$fullname, $tstamp_min, $tstamp_max);
|
|
|
|
}
|
|
$export_object->add_record($row, $extras);
|
|
$last_username = $row['ts_owner'];
|
|
}
|
|
$export_object->summarize(); // for last table
|
|
|
|
// fill collected sums into sum-table
|
|
$export_object->fill_summarytable($tstamp_min, $tstamp_max);
|
|
|
|
// write to zipfile, cleanup
|
|
$export_object->finalize();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* returns translated name of plugin
|
|
*
|
|
* @return string name
|
|
*/
|
|
public static function get_name() {
|
|
return lang('Timesheet OpenOffice export');
|
|
}
|
|
|
|
/**
|
|
* returns translated (user) description of plugin
|
|
*
|
|
* @return string descriprion
|
|
*/
|
|
public static function get_description() {
|
|
return lang("Export to OpenOffice Spreadsheet");
|
|
}
|
|
|
|
/**
|
|
* retruns file suffix for exported file
|
|
*
|
|
* @return string suffix
|
|
*/
|
|
public static function get_filesuffix() {
|
|
return 'ods';
|
|
}
|
|
|
|
/**
|
|
* return html for options.
|
|
* this way the plugin has all opertunities for options tab
|
|
*
|
|
* @return string html
|
|
*/
|
|
public static function get_options_etpl() {
|
|
return 'timesheet.export_openoffice_options';
|
|
}
|
|
|
|
/**
|
|
* returns slectors of this plugin via xajax
|
|
*
|
|
*/
|
|
public static function get_selectors_etpl() {
|
|
return '<b>Selectors:</b>';
|
|
}
|
|
}
|
|
|
|
|