1 | <?php |
---|
2 | /** |
---|
3 | * eGroupWare |
---|
4 | * |
---|
5 | * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License |
---|
6 | * @package timesheet |
---|
7 | * @subpackage importexport |
---|
8 | * @link http://www.egroupware.org |
---|
9 | * @author Knut Moeller <k.moeller@metaways.de> |
---|
10 | * @copyright Knut Moeller <k.moeller@metaways.de> |
---|
11 | * @version $Id: $ |
---|
12 | */ |
---|
13 | |
---|
14 | require_once(PHPGW_INCLUDE_ROOT. '/etemplate/inc/class.etemplate.inc.php'); |
---|
15 | require_once(PHPGW_INCLUDE_ROOT. '/importexport/inc/class.iface_export_plugin.inc.php'); |
---|
16 | require_once(PHPGW_INCLUDE_ROOT. '/timesheet/inc/class.uitimesheet.inc.php'); |
---|
17 | require_once(PHPGW_INCLUDE_ROOT. '/timesheet/inc/class.botimesheet.inc.php'); |
---|
18 | |
---|
19 | /** |
---|
20 | * export plugin of addressbook |
---|
21 | */ |
---|
22 | class export_timesheet_openoffice implements iface_export_plugin { |
---|
23 | |
---|
24 | |
---|
25 | |
---|
26 | /** |
---|
27 | * Exports records as defined in $_definition |
---|
28 | * |
---|
29 | * @param phpgw_record $_definition |
---|
30 | */ |
---|
31 | public static function export( $_stream, $_charset, definition $_definition) { |
---|
32 | |
---|
33 | $options = $_definition->options; |
---|
34 | |
---|
35 | $botimesheet = new botimesheet(); |
---|
36 | |
---|
37 | // get current display selection |
---|
38 | |
---|
39 | $query = $GLOBALS['phpgw']->session->appsession('index',TIMESHEET_APP); |
---|
40 | |
---|
41 | $bo_pm = CreateObject('projectmanager.boprojectmanager'); |
---|
42 | $childs = $bo_pm->children( $query['col_filter']['pm_id'] ); |
---|
43 | $childs[] = $query['col_filter']['pm_id']; |
---|
44 | $pmChilds = implode(",",$childs); |
---|
45 | $botimesheet->db->select( 'phpgw_links','link_id, link_id1','', |
---|
46 | __LINE__,__FILE__,False, |
---|
47 | '',False,0, |
---|
48 | 'JOIN phpgw_pm_projects ON (pm_id = link_id2) |
---|
49 | JOIN phpgw_timesheet ON (ts_id=link_id1) |
---|
50 | WHERE |
---|
51 | link_app1 = \'timesheet\' AND |
---|
52 | link_app2 = \'projectmanager\' AND |
---|
53 | link_id2 IN ('.$pmChilds.') AND ts_start >= '.$query['startdate'].' AND ts_start < '.$query['enddate'] ); |
---|
54 | |
---|
55 | while($row = $botimesheet->db->row(true)) { |
---|
56 | $tslist[$row['link_id']] = $row['link_id1']; |
---|
57 | } |
---|
58 | |
---|
59 | //error_log(print_r($query,true)); |
---|
60 | //error_log(print_r($tslist,true)); |
---|
61 | |
---|
62 | $ids = implode(',', $tslist); |
---|
63 | |
---|
64 | // no result |
---|
65 | if (strlen($ids)==0) return false; |
---|
66 | |
---|
67 | //error_log('IDS: '.$ids); |
---|
68 | |
---|
69 | // get full result |
---|
70 | |
---|
71 | $rows = $botimesheet->search(array("phpgw_timesheet.ts_id IN ($ids)"), |
---|
72 | false, 'ts_owner,ts_start', array('cat_name') , |
---|
73 | '', false, 'AND', false, null, |
---|
74 | 'LEFT JOIN phpgw_categories ON (phpgw_categories.cat_id=phpgw_timesheet.cat_id AND phpgw_categories.cat_appname=\'timesheet\')'); |
---|
75 | |
---|
76 | |
---|
77 | if (is_array($rows) && count($rows)>0 ) { |
---|
78 | //error_log(print_r($rows,true)); |
---|
79 | // export rows |
---|
80 | |
---|
81 | $export_object = new export_openoffice($_stream, $charset, (array)$options); |
---|
82 | $export_object->init(); |
---|
83 | |
---|
84 | |
---|
85 | // get date values |
---|
86 | |
---|
87 | $tstamp_min = 0; // date range for table date entries (KW...) |
---|
88 | $tstamp_max = 0; |
---|
89 | |
---|
90 | foreach($rows as $row) { |
---|
91 | if ($row['ts_start']<$tstamp_min || $tstamp_min == 0) $tstamp_min = $row['ts_start']; |
---|
92 | if ($row['ts_start']>$tstamp_max || $tstamp_max == 0) $tstamp_max = $row['ts_start']; |
---|
93 | } |
---|
94 | |
---|
95 | |
---|
96 | // init summarytable |
---|
97 | $export_object->create_summarytable(); |
---|
98 | |
---|
99 | |
---|
100 | // user tables |
---|
101 | $last_username = 0; |
---|
102 | $first_table = true; |
---|
103 | |
---|
104 | foreach($rows as $row) { |
---|
105 | |
---|
106 | // read in extra values (custom fields) |
---|
107 | $extrarows = $botimesheet->search(array("phpgw_timesheet.ts_id=".$row['ts_id']), false, '', 'ts_extra_name,ts_extra_value' , |
---|
108 | '', false, 'AND', false, null, |
---|
109 | 'LEFT JOIN phpgw_timesheet_extra ON (phpgw_timesheet_extra.ts_id=phpgw_timesheet.ts_id)' ); |
---|
110 | $extras = array(); |
---|
111 | foreach($extrarows as $extrarow) { |
---|
112 | $extras[$extrarow['ts_extra_name']] = $extrarow['ts_extra_value']; |
---|
113 | } |
---|
114 | |
---|
115 | // change projectname |
---|
116 | $titleRegex = '/^.*:.*-\s(.*)$/'; |
---|
117 | preg_match($titleRegex, $row['ts_project'], $title); |
---|
118 | $row['ts_project'] = $title[1]; |
---|
119 | |
---|
120 | // get firstname, lastname |
---|
121 | $res = array(); |
---|
122 | // $nameRegex = '/\s(.*)\s(.*)$/'; // z.B. "[admin] Richard Blume" |
---|
123 | $nameRegex = '/(.*),\s(.*)$/'; // z.B. "Blume, Richard" |
---|
124 | preg_match($nameRegex, $GLOBALS['phpgw']->common->grab_owner_name($row['ts_owner']), $res); |
---|
125 | // error_log('|'.$name . '| -> ' . print_r($res,true)); |
---|
126 | $firstname = $res[2]; |
---|
127 | $lastname = $res[1]; |
---|
128 | $fullname = $firstname.' '.$lastname; |
---|
129 | |
---|
130 | // new table on username change |
---|
131 | if ($row['ts_owner'] != $last_username) { |
---|
132 | |
---|
133 | // create sum as last tablerow before creating new table |
---|
134 | if (!$first_table) { |
---|
135 | $export_object->summarize(); |
---|
136 | } |
---|
137 | else { |
---|
138 | $first_table = false; |
---|
139 | } |
---|
140 | |
---|
141 | // create new table sheet |
---|
142 | $export_object->create_usertable($lastname, |
---|
143 | $fullname, $tstamp_min, $tstamp_max); |
---|
144 | |
---|
145 | } |
---|
146 | $export_object->add_record($row, $extras); |
---|
147 | $last_username = $row['ts_owner']; |
---|
148 | } |
---|
149 | $export_object->summarize(); // for last table |
---|
150 | |
---|
151 | // fill collected sums into sum-table |
---|
152 | $export_object->fill_summarytable($tstamp_min, $tstamp_max); |
---|
153 | |
---|
154 | // write to zipfile, cleanup |
---|
155 | $export_object->finalize(); |
---|
156 | } |
---|
157 | } |
---|
158 | |
---|
159 | /** |
---|
160 | * returns translated name of plugin |
---|
161 | * |
---|
162 | * @return string name |
---|
163 | */ |
---|
164 | public static function get_name() { |
---|
165 | return lang('Timesheet OpenOffice export'); |
---|
166 | } |
---|
167 | |
---|
168 | /** |
---|
169 | * returns translated (user) description of plugin |
---|
170 | * |
---|
171 | * @return string descriprion |
---|
172 | */ |
---|
173 | public static function get_description() { |
---|
174 | return lang("Export to OpenOffice Spreadsheet"); |
---|
175 | } |
---|
176 | |
---|
177 | /** |
---|
178 | * retruns file suffix for exported file |
---|
179 | * |
---|
180 | * @return string suffix |
---|
181 | */ |
---|
182 | public static function get_filesuffix() { |
---|
183 | return 'ods'; |
---|
184 | } |
---|
185 | |
---|
186 | /** |
---|
187 | * return html for options. |
---|
188 | * this way the plugin has all opertunities for options tab |
---|
189 | * |
---|
190 | * @return string html |
---|
191 | */ |
---|
192 | public static function get_options_etpl() { |
---|
193 | return 'timesheet.export_openoffice_options'; |
---|
194 | } |
---|
195 | |
---|
196 | /** |
---|
197 | * returns slectors of this plugin via xajax |
---|
198 | * |
---|
199 | */ |
---|
200 | public static function get_selectors_etpl() { |
---|
201 | return '<b>Selectors:</b>'; |
---|
202 | } |
---|
203 | } |
---|
204 | |
---|
205 | |
---|