diff --git a/.travis.yml b/.travis.yml index fd90e38..810bd3c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,6 @@ language: php php: + - 7.3 - 7.2 - 7.1 - 7.0 diff --git a/src/JMBTechnologyLimited/ICalDissect/ICalParser.php b/src/JMBTechnologyLimited/ICalDissect/ICalParser.php index 5a7d46e..33d88cc 100755 --- a/src/JMBTechnologyLimited/ICalDissect/ICalParser.php +++ b/src/JMBTechnologyLimited/ICalDissect/ICalParser.php @@ -17,7 +17,9 @@ class ICalParser protected $timezone; protected $events = array(); - + + protected $raw = array(); + public function __construct() { $this->timezone = new ICalTimeZone(); } @@ -89,7 +91,12 @@ public function parseFromFile($filename) $this->events[count($this->events)-1]->processLine($line['KEYWORD'],$line['VALUE'], $line['KEYWORDOPTIONS']); } elseif ($currentlyIn == 'VTIMEZONE') { $this->timezone->processLine($line['KEYWORD'],$line['VALUE'], $line['KEYWORDOPTIONS']); - } + } elseif ($currentlyIn == 'VCALENDAR') { + if (!isset($this->raw[strtoupper($line['KEYWORD'])])) { + $this->raw[strtoupper($line['KEYWORD'])] = array(); + } + $this->raw[strtoupper($line['KEYWORD'])][] = $line['VALUE']; + } } } @@ -114,6 +121,31 @@ public function getEvents() return $this->events; } + /** + * + * Returns raw line data for this calendar file, but only data that is not in another object. + * + * @parameter $keyword pass keyword you want, or null to get all data as an array + * + * If $keyword parameter is passed, values for that only will be returned. + * This will always be in array form, even if there was no data. (ie an empty array) + * This is to make it easy to loop over + * + * If $keyword parameter is null, all values will be returned in an array of arrays. + * + * Note all keywords are always in upper case. + * + * @return array + */ + public function getRaw($keyword = null) + { + if ($keyword) { + return isset($this->raw[strtoupper($keyword)]) ? $this->raw[strtoupper($keyword)] : array(); + } else { + return $this->raw; + } + } + } diff --git a/tests/JMBTechnologyLimited/ICalDissect/RawTest.php b/tests/JMBTechnologyLimited/ICalDissect/RawTest.php index d2cb2bd..47924cb 100644 --- a/tests/JMBTechnologyLimited/ICalDissect/RawTest.php +++ b/tests/JMBTechnologyLimited/ICalDissect/RawTest.php @@ -12,7 +12,7 @@ class RawTest extends \PHPUnit_Framework_TestCase { - function testGetDefaultValuesIfKeyNotFound () { + function testGetDefaultValuesIfKeyNotFoundFromEvent() { $parser = new ICalParser(); $this->assertTrue($parser->parseFromFile(dirname(__FILE__)."/data/rawtest1.ics")); $events = $parser->getEvents(); @@ -28,4 +28,32 @@ function testGetDefaultValuesIfKeyNotFound () { $this->assertEquals(0, count($event->getRaw('OUEHUENU'))); } + + function testGetFromFile() + { + $parser = new ICalParser(); + $this->assertTrue($parser->parseFromFile(dirname(__FILE__) . "/data/rawtest1.ics")); + $events = $parser->getEvents(); + $this->assertEquals(1, count($events)); + + $this->assertTrue(is_array($parser->getRaw('X-WR-CALNAME'))); + $this->assertEquals(1, count($parser->getRaw('X-WR-CALNAME'))); + $this->assertEquals('TEST', $parser->getRaw('X-WR-CALNAME')[0]); + + } + + function testGetFromEvent() + { + $parser = new ICalParser(); + $this->assertTrue($parser->parseFromFile(dirname(__FILE__) . "/data/rawtest1.ics")); + $events = $parser->getEvents(); + $this->assertEquals(1, count($events)); + + /** @var $event ICalEvent */ + $event = $events[0]; + + $this->assertTrue(is_array($event->getRaw('UID'))); + $this->assertEquals(1, count($event->getRaw('UID'))); + $this->assertEquals('gktoo7adirkje5lgvt6gqf14ik@google.com', $event->getRaw('UID')[0]); + } }