From cc2bee8dd0c1484ff41ea4270e756022a102fb35 Mon Sep 17 00:00:00 2001 From: Nathan Gray Date: Tue, 12 Oct 2010 22:45:02 +0000 Subject: [PATCH] Add exporting iCal and CSV via importexport --- .../inc/class.calendar_egw_record.inc.php | 149 ++++++++++++++++++ .../inc/class.calendar_export_csv.inc.php | 101 ++++++++++++ .../class.calendar_wizard_export_csv.inc.php | 27 ++++ calendar/setup/etemplates.inc.php | 4 +- 4 files changed, 280 insertions(+), 1 deletion(-) create mode 100644 calendar/inc/class.calendar_egw_record.inc.php create mode 100644 calendar/inc/class.calendar_export_csv.inc.php create mode 100644 calendar/inc/class.calendar_wizard_export_csv.inc.php diff --git a/calendar/inc/class.calendar_egw_record.inc.php b/calendar/inc/class.calendar_egw_record.inc.php new file mode 100644 index 0000000000..f52c96f65f --- /dev/null +++ b/calendar/inc/class.calendar_egw_record.inc.php @@ -0,0 +1,149 @@ +identifier = $_identifier; + if(!is_object($this->bo)) { + $this->bo = new calendar_bo(); + } + if($this->identifier) { + $this->record = $this->bo->read($this->identifier); + } + } + + /** + * magic method to set attributes of record + * + * @param string $_attribute_name + */ + public function __get($_attribute_name) { + + } + + /** + * magig method to set attributes of record + * + * @param string $_attribute_name + * @param data $data + */ + public function __set($_attribute_name, $data) { + + } + + /** + * converts this object to array. + * @abstract We need such a function cause PHP5 + * dosn't allow objects do define it's own casts :-( + * once PHP can deal with object casts we will change to them! + * + * @return array complete record as associative array + */ + public function get_record_array() { + return $this->record; + } + + /** + * gets title of record + * + *@return string tiltle + */ + public function get_title() { + if (empty($this->record)) { + $this->get_record(); + } + return $this->record['title']; + } + + /** + * sets complete record from associative array + * + * @todo add some checks + * @return void + */ + public function set_record(array $_record){ + $this->record = $_record; + } + + /** + * gets identifier of this record + * + * @return string identifier of current record + */ + public function get_identifier() { + return $this->identifier; + } + + /** + * saves record into backend + * + * @return string identifier + */ + public function save ( $_dst_identifier ) { + + } + + /** + * copys current record to record identified by $_dst_identifier + * + * @param string $_dst_identifier + * @return string dst_identifier + */ + public function copy ( $_dst_identifier ) { + + } + + /** + * moves current record to record identified by $_dst_identifier + * $this will become moved record + * + * @param string $_dst_identifier + * @return string dst_identifier + */ + public function move ( $_dst_identifier ) { + + } + + /** + * delets current record from backend + * + */ + public function delete () { + + } + + /** + * destructor + * + */ + public function __destruct() { + } + +} // end of calendar_egw_record +?> diff --git a/calendar/inc/class.calendar_export_csv.inc.php b/calendar/inc/class.calendar_export_csv.inc.php new file mode 100644 index 0000000000..9ad98d4a1e --- /dev/null +++ b/calendar/inc/class.calendar_export_csv.inc.php @@ -0,0 +1,101 @@ +plugin_options; + $this->bo = new calendar_bo(); + $events =& $this->bo->search(array( + 'start' => $options['selection']['start'], + 'end' => $options['selection']['end'], + 'categories' => $options['categories'] ? $options['categories'] : $options['selection']['categories'], + 'enum_recuring' => false, + 'daywise' => false, + 'owner' => $options['owner'], + 'date_format' => $options['date_format'], + )); + + $export_object = new importexport_export_csv($_stream, (array)$options); + $export_object->set_mapping($options['mapping']); + + // $options['selection'] is array of identifiers as this plugin doesn't + // support other selectors atm. + $record = new calendar_egw_record(); + foreach ($events as $event) { + $record->set_record($event); + $export_object->export_record($record); + } + unset($record); + } + + /** + * returns translated name of plugin + * + * @return string name + */ + public static function get_name() { + return lang('Calendar CSV export'); + } + + /** + * returns translated (user) description of plugin + * + * @return string descriprion + */ + public static function get_description() { + return lang("Exports events from your Calendar into a CSV File."); + } + + /** + * retruns file suffix for exported file + * + * @return string suffix + */ + public static function get_filesuffix() { + return 'csv'; + } + + public static function get_mimetype() { + return 'text/csv'; + } + + /** + * return html for options. + * + */ + public function get_options_etpl() { + } + + /** + * returns selectors of this plugin + * + */ + public function get_selectors_etpl() { + return array( + 'name' => 'calendar.export_csv_select', + 'content' => array( + 'start' => time(), + 'end' => time() + ) + ); + } +} diff --git a/calendar/inc/class.calendar_wizard_export_csv.inc.php b/calendar/inc/class.calendar_wizard_export_csv.inc.php new file mode 100644 index 0000000000..2eebf9c036 --- /dev/null +++ b/calendar/inc/class.calendar_wizard_export_csv.inc.php @@ -0,0 +1,27 @@ +export_fields = $bo->field2label; + $custom = config::get_customfields('calendar', true); + foreach($custom as $name => $data) { + $this->export_fields['#'.$name] = $data['label']; + } + + } + + +} diff --git a/calendar/setup/etemplates.inc.php b/calendar/setup/etemplates.inc.php index d91e14d915..98abe5854d 100644 --- a/calendar/setup/etemplates.inc.php +++ b/calendar/setup/etemplates.inc.php @@ -2,7 +2,7 @@ /** * eGroupWare - eTemplates for Application calendar * http://www.egroupware.org - * generated by soetemplate::dump4setup() 2010-10-07 08:23 + * generated by soetemplate::dump4setup() 2010-10-12 16:44 * * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @package calendar @@ -45,6 +45,8 @@ $templ_data[] = array('name' => 'calendar.edit_series','template' => '','lang' = $templ_data[] = array('name' => 'calendar.export','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:8:{i:0;a:2:{s:2:"h5";s:2:",1";s:2:"h1";s:6:",!@msg";}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:11:"all,message";s:4:"name";s:3:"msg";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:8:",,,start";s:5:"label";s:5:"Start";}s:1:"B";a:3:{s:4:"type";s:4:"date";s:4:"name";s:5:"start";s:4:"help";s:23:"Startdate of the export";}}i:3;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:6:",,,end";s:5:"label";s:3:"End";}s:1:"B";a:3:{s:4:"type";s:4:"date";s:4:"name";s:3:"end";s:4:"help";s:21:"Enddate of the export";}}i:4;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:7:",,,file";s:5:"label";s:8:"Filename";}s:1:"B";a:3:{s:4:"type";s:4:"text";s:4:"name";s:4:"file";s:4:"help";s:24:"Filename of the download";}}i:5;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:10:",,,version";s:5:"label";s:7:"Version";}s:1:"B";a:2:{s:4:"type";s:6:"select";s:4:"name";s:7:"version";}}i:6;a:2:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:3:{s:4:"type";s:6:"button";s:5:"label";s:8:"Download";s:4:"name";s:8:"download";}}i:7;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:7;s:4:"cols";i:2;s:5:"align";s:6:"center";s:7:"options";a:0:{}}}','size' => '','style' => '','modified' => '1130738737',); +$templ_data[] = array('name' => 'calendar.export_csv_select','template' => '','lang' => '','group' => '0','version' => '1.9.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:5:{i:0;a:1:{s:2:"h1";s:6:",!@msg";}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:11:"all,message";s:4:"name";s:3:"msg";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:8:",,,start";s:5:"label";s:5:"Start";}s:1:"B";a:3:{s:4:"type";s:4:"date";s:4:"name";s:16:"selection[start]";s:4:"help";s:23:"Startdate of the export";}}i:3;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:6:",,,end";s:5:"label";s:3:"End";}s:1:"B";a:3:{s:4:"type";s:4:"date";s:4:"name";s:14:"selection[end]";s:4:"help";s:21:"Enddate of the export";}}i:4;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:4;s:4:"cols";i:2;s:5:"align";s:6:"center";s:7:"options";a:0:{}}}','size' => '','style' => '','modified' => '1286919523',); + $templ_data[] = array('name' => 'calendar.freetimesearch','template' => '','lang' => '','group' => '0','version' => '1.3.001','data' => 'a:1:{i:0;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:7:{i:0;a:0:{}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:9:",size120b";s:5:"label";s:15:"Freetime Search";}s:1:"B";a:4:{s:4:"type";s:5:"label";s:4:"span";s:10:",redItalic";s:7:"no_lang";s:1:"1";s:4:"name";s:3:"msg";}}i:2;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:17:"Startdate / -time";}s:1:"B";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:5:"start";s:4:"help";s:33:"Startdate and -time of the search";}}i:3;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:8:"Duration";}s:1:"B";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";i:1;a:6:{s:4:"type";s:6:"select";s:7:"no_lang";s:1:"1";s:4:"name";s:8:"duration";s:4:"help";s:23:"Duration of the meeting";s:8:"onchange";s:92:"set_style_by_class(\'table\',\'end_hide\',\'visibility\',this.value == \'\' ? \'visible\' : \'hidden\');";s:4:"size";s:12:"Use end date";}i:2;a:4:{s:4:"type";s:9:"date-time";s:4:"name";s:3:"end";s:4:"help";s:57:"Enddate / -time of the meeting, eg. for more then one day";s:4:"span";s:9:",end_hide";}}}i:4;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:9:"Timeframe";}s:1:"B";a:7:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"5";i:1;a:3:{s:4:"type";s:13:"date-houronly";s:4:"name";s:10:"start_time";s:4:"help";s:19:"Timeframe to search";}i:2;a:2:{s:4:"type";s:5:"label";s:5:"label";s:3:"til";}i:3;a:3:{s:4:"type";s:13:"date-houronly";s:4:"name";s:8:"end_time";s:4:"help";s:19:"Timeframe to search";}i:4;a:2:{s:4:"type";s:5:"label";s:5:"label";s:8:"Weekdays";}i:5;a:4:{s:4:"type";s:10:"select-dow";s:4:"size";s:1:"3";s:4:"name";s:8:"weekdays";s:4:"help";s:25:"Weekdays to use in search";}}}i:5;a:2:{s:1:"A";a:4:{s:4:"type";s:6:"button";s:5:"label";s:10:"New search";s:4:"name";s:6:"search";s:4:"help";s:36:"new search with the above parameters";}s:1:"B";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";i:1;a:4:{s:4:"type";s:6:"select";s:7:"no_lang";s:1:"1";s:4:"name";s:13:"search_window";s:4:"help";s:34:"how far to search (from startdate)";}i:2;a:5:{s:4:"type";s:6:"button";s:4:"name";s:6:"cancel";s:5:"label";s:6:"Cancel";s:4:"help";s:16:"Close the window";s:7:"onclick";s:15:"window.close();";}}}i:6;a:2:{s:1:"A";a:4:{s:4:"type";s:8:"template";s:4:"size";s:8:"freetime";s:4:"span";s:3:"all";s:4:"name";s:4:"rows";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:6;s:4:"cols";i:2;}}','size' => '','style' => '.size120b { text-size: 120%; font-weight: bold; } .redItalic { color: red; font-style: italic; } .end_hide { visibility: hidden; }','modified' => '1149297367',);