* @copyright Knut Moeller * @version $Id: $ */ require_once(PHPGW_INCLUDE_ROOT. '/etemplate/inc/class.etemplate.inc.php'); require_once(PHPGW_INCLUDE_ROOT. '/importexport/inc/class.iface_export_plugin.inc.php'); require_once(PHPGW_INCLUDE_ROOT. '/timesheet/inc/class.uitimesheet.inc.php'); require_once(PHPGW_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 phpgw_record $_definition */ public static function export( $_stream, $_charset, definition $_definition) { $options = $_definition->options; $botimesheet = new botimesheet(); // get current display selection $query = $GLOBALS['phpgw']->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( 'phpgw_links','link_id, link_id1','', __LINE__,__FILE__,False, '',False,0, 'JOIN phpgw_pm_projects ON (pm_id = link_id2) JOIN phpgw_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("phpgw_timesheet.ts_id IN ($ids)"), false, 'ts_owner,ts_start', array('cat_name') , '', false, 'AND', false, null, 'LEFT JOIN phpgw_categories ON (phpgw_categories.cat_id=phpgw_timesheet.cat_id AND phpgw_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("phpgw_timesheet.ts_id=".$row['ts_id']), false, '', 'ts_extra_name,ts_extra_value' , '', false, 'AND', false, null, 'LEFT JOIN phpgw_timesheet_extra ON (phpgw_timesheet_extra.ts_id=phpgw_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['phpgw']->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 'Selectors:'; } }