* @param boolean $fromString
* @return Tinebase_Record_RecordSet
*/
- protected function _importHelper($filename, $expectedNumber = 1, $fromString = false)
+ protected function _importHelper($filename, $expectedNumber = 1, $fromString = false, $additionalOptions = array())
{
- $importer = new Calendar_Import_Ical(array(
+ $importer = new Calendar_Import_Ical(array_merge($additionalOptions, array(
'importContainerId' => $this->_testCalendar->getId(),
- ));
+ )));
if ($fromString) {
$icalData = file_get_contents(dirname(__FILE__) . '/files/' . $filename);
$this->assertEquals('2014-04-30 22:00:00', $firstOfMay2014->dtstart);
}
+
+ /**
+ * @see 0010449: allow to ignore data when importing ics
+ */
+ public function testImportWithOnlyBasicData()
+ {
+ $importEvents = $this->_importHelper('exchange2007_mail_anhang.ics', 1, false, array(
+ 'onlyBasicData' => true
+ ));
+ $event = $importEvents->getFirstRecord();
+
+ Tinebase_Alarm::getInstance()->getAlarmsOfRecord('Calendar_Model_Event', $event);
+
+ $emptyFields = array('alarms', 'attendee', 'uid');
+ foreach ($emptyFields as $field) {
+ $this->assertTrue(empty($event->alarms), 'field ' . $field . ' should be empty in event ' . print_r($event->toArray(), true));
+ }
+ }
}
protected $_method;
/**
+ * options array
+ * @var array
+ *
+ * TODO allow more options
+ *
+ * current options:
+ * - onlyBasicData (only use basic event data when converting from VCALENDAR to Tine 2.0)
+ */
+ protected $_options = array();
+
+ /**
+ * set options
+ * @param array $options
+ */
+ public function setOptions($options)
+ {
+ $this->_options = $options;
+ }
+
+ /**
* convert Tinebase_Record_RecordSet to Sabre\VObject\Component
*
* @param Tinebase_Record_RecordSet $_records
$shortenedFields = array();
$attachments = new Tinebase_Record_RecordSet('Tinebase_Model_Tree_Node');
$event->alarms = new Tinebase_Record_RecordSet('Tinebase_Model_Alarm');
+ $skipFieldsIfOnlyBasicData = array('ATTENDEE', 'UID', 'ORGANIZER', 'VALARM', 'ATTACH', 'CATEGORIES');
foreach ($vevent->children() as $property) {
+ if (isset($this->_options['onlyBasicData'])
+ && $this->_options['onlyBasicData']
+ && in_array((string) $property->name, $skipFieldsIfOnlyBasicData))
+ {
+ if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG))
+ Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Skipping '
+ . $property->name . ' (using option onlyBasicData)');
+ continue;
+ }
+
switch ($property->name) {
case 'CREATED':
case 'DTSTAMP':
case 'DESCRIPTION':
case 'LOCATION':
- case 'UID':
case 'SUMMARY':
$key = strtolower($property->name);
$value = $property->getValue();
* @var string
*/
'importContainerId' => NULL,
+ /**
+ * import only basic data (i.e. without attendee, alarms, uid, ...)
+ * @var string
+ */
+ 'onlyBasicData' => NULL,
);
/**
}
$converter = Calendar_Convert_Event_VCalendar_Factory::factory(Calendar_Convert_Event_VCalendar_Factory::CLIENT_GENERIC);
+ if (isset($this->_options['onlyBasicData'])) {
+ $converter->setOptions(array('onlyBasicData' => $this->_options['onlyBasicData']));
+ }
try {
$events = $converter->toTine20RecordSet($_resource);
} catch (Exception $e) {
Tinebase_Exception::log($e);
- $isce = new Calendar_Exception_IcalParser();
+ $isce = new Calendar_Exception_IcalParser('Can not parse ics file: ' . $e->getMessage());
$isce->setParseError($e);
throw $isce;
}