[Pkg-owncloud-commits] [php-sabredav] 17/275: Adding Inbox getChildren, SchedulingMessage, and associated database table
David Prévot
taffit at moszumanska.debian.org
Thu Sep 25 14:55:45 UTC 2014
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to branch master
in repository php-sabredav.
commit e723d196fd369ea8d6c849fed3f013df0309c74d
Author: root <myfakeplasticsim at gmail.com>
Date: Tue Sep 17 02:19:57 2013 -0700
Adding Inbox getChildren, SchedulingMessage, and associated database table
---
examples/sql/mysql.calendars.sql | 10 +
lib/Sabre/CalDAV/Backend/PDO.php | 76 ++++++-
lib/Sabre/CalDAV/Schedule/Inbox.php | 18 +-
lib/Sabre/CalDAV/Schedule/SchedulingMessage.php | 280 ++++++++++++++++++++++++
lib/Sabre/CalDAV/UserCalendars.php | 2 +-
5 files changed, 382 insertions(+), 4 deletions(-)
diff --git a/examples/sql/mysql.calendars.sql b/examples/sql/mysql.calendars.sql
old mode 100644
new mode 100755
index e31f1b4..8be8380
--- a/examples/sql/mysql.calendars.sql
+++ b/examples/sql/mysql.calendars.sql
@@ -51,3 +51,13 @@ CREATE TABLE calendarsubscriptions (
lastmodified INT(11) UNSIGNED,
UNIQUE(principaluri, uri)
);
+
+CREATE TABLE schedulingmessages (
+ id INT(11) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ principaluri VARCHAR(255),
+ calendardata MEDIUMBLOB,
+ uri VARCHAR(200),
+ lastmodified INT(11) UNSIGNED,
+ etag VARCHAR(32),
+ size INT(11) UNSIGNED NOT NULL,
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
diff --git a/lib/Sabre/CalDAV/Backend/PDO.php b/lib/Sabre/CalDAV/Backend/PDO.php
old mode 100644
new mode 100755
index 0528134..c64a90d
--- a/lib/Sabre/CalDAV/Backend/PDO.php
+++ b/lib/Sabre/CalDAV/Backend/PDO.php
@@ -57,6 +57,13 @@ class PDO extends AbstractBackend implements SyncSupport, SubscriptionSupport {
* @var string
*/
protected $calendarChangesTableName;
+
+ /**
+ * The table name that will be used for holding inbox scheduling messages.
+ *
+ * @var string
+ */
+ protected $schedulingMessageTableName;
/**
* List of CalDAV properties, and how they map to database fieldnames
@@ -96,12 +103,13 @@ class PDO extends AbstractBackend implements SyncSupport, SubscriptionSupport {
* @param string $calendarTableName
* @param string $calendarObjectTableName
*/
- public function __construct(\PDO $pdo, $calendarTableName = 'calendars', $calendarObjectTableName = 'calendarobjects', $calendarChangesTableName = 'calendarchanges') {
+ public function __construct(\PDO $pdo, $calendarTableName = 'calendars', $calendarObjectTableName = 'calendarobjects', $calendarChangesTableName = 'calendarchanges', $schedulingMessageTableName = "schedulingmessages") {
$this->pdo = $pdo;
$this->calendarTableName = $calendarTableName;
$this->calendarObjectTableName = $calendarObjectTableName;
$this->calendarChangesTableName = $calendarChangesTableName;
+ $this->schedulingMessageTableName = $schedulingMessageTableName;
}
@@ -1149,4 +1157,70 @@ class PDO extends AbstractBackend implements SyncSupport, SubscriptionSupport {
}
+ /**
+ * Gets a single scheduling message
+ *
+ * @param string $principalUri
+ * @param string $objectUri
+ * @return array
+ */
+ public function getSchedulingMessage($principalUri, $objectUri) {
+
+ $stmt = $this->pdo->prepare('SELECT id, calendardata, lastmodified, etag, size FROM '.$this->schedulingMessageTableName.' WHERE principaluri = ? AND uri = ?');
+ $stmt->execute([$principalUri, $objectUri]);
+ $row = $stmt->fetch(\PDO::FETCH_ASSOC);
+
+ if(!$row) return null;
+
+ return [
+ 'id' => $row['id'],
+ 'calendardata' => $row['calendardata'],
+ 'lastmodified' => $row['lastmodified'],
+ 'etag' => '"' . $row['etag'] . '"',
+ 'size' => (int)$row['size'],
+ ];
+
+ }
+
+ /**
+ * Gets scheduling messages for the inbox collection
+ *
+ * @param string $principalUri
+ * @return array
+ */
+ public function getSchedulingMessages($principalUri) {
+
+ $stmt = $this->pdo->prepare('SELECT id, calendardata, uri, lastmodified, etag, size FROM '.$this->schedulingMessageTableName.' WHERE principaluri = ?');
+ $stmt->execute([$principalUri]);
+
+ $result = [];
+ foreach($stmt->fetchAll(\PDO::FETCH_ASSOC) as $row) {
+ $result[] = [
+ 'id' => $row['id'],
+ 'calendardata' => $row['calendardata'],
+ 'uri' => $row['uri'],
+ 'lastmodified' => $row['lastmodified'],
+ 'etag' => '"' . $row['etag'] . '"',
+ 'size' => (int)$row['size'],
+ ];
+ }
+
+ return $result;
+
+ }
+
+ /**
+ * Deletes a scheduling message
+ *
+ * @param string $principalUri
+ * @param string $objectUri
+ * @return void
+ */
+ public function deleteSchedulingMessage($principalUri, $objectUri) {
+
+ $stmt = $this->pdo->prepare('DELETE FROM '.$this->schedulingMessageTableName.' WHERE principaluri = ? AND uri = ?');
+ $stmt->execute([$principalUri, $objectUri]);
+
+ }
+
}
diff --git a/lib/Sabre/CalDAV/Schedule/Inbox.php b/lib/Sabre/CalDAV/Schedule/Inbox.php
old mode 100644
new mode 100755
index 25273f8..5290d83
--- a/lib/Sabre/CalDAV/Schedule/Inbox.php
+++ b/lib/Sabre/CalDAV/Schedule/Inbox.php
@@ -15,6 +15,13 @@ use Sabre\DAVACL;
class Inbox extends DAV\Collection implements IInbox {
/**
+ * CalDAV backend
+ *
+ * @var Backend\BackendInterface
+ */
+ protected $caldavBackend;
+
+ /**
* The principal Uri
*
* @var string
@@ -26,8 +33,9 @@ class Inbox extends DAV\Collection implements IInbox {
*
* @param string $principalUri
*/
- public function __construct($principalUri) {
+ public function __construct(Backend\BackendInterface $caldavBackend, $principalUri) {
+ $this->caldavBackend = $caldavBackend;
$this->principalUri = $principalUri;
}
@@ -52,7 +60,13 @@ class Inbox extends DAV\Collection implements IInbox {
*/
public function getChildren() {
- return array();
+ $objs = $this->caldavBackend->getSchedulingMessages($this->principalUri);
+ $children = [];
+ foreach($objs as $obj) {
+ $obj['acl'] = $this->getACL();
+ $children[] = new SchedulingMessage($this->caldavBackend,$this->calendarInfo,$obj);
+ }
+ return $children;
}
diff --git a/lib/Sabre/CalDAV/Schedule/SchedulingMessage.php b/lib/Sabre/CalDAV/Schedule/SchedulingMessage.php
new file mode 100755
index 0000000..fa28a54
--- /dev/null
+++ b/lib/Sabre/CalDAV/Schedule/SchedulingMessage.php
@@ -0,0 +1,280 @@
+<?php
+
+namespace Sabre\CalDAV;
+
+/**
+ * The Scheduling Message represents a scheduling object in the Inbox collection
+ *
+ * @author Brett (https://github.com/bretten)
+ * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
+ */
+class SchedulingMessage extends \Sabre\DAV\File implements ISchedulingMessage, \Sabre\DAVACL\IACL {
+
+ /**
+ * Sabre\CalDAV\Backend\BackendInterface
+ *
+ * @var Sabre\CalDAV\Backend\AbstractBackend
+ */
+ protected $caldavBackend;
+
+ /**
+ * Array with information about this SchedulingMessage
+ *
+ * @var array
+ */
+ protected $objectData;
+
+ /**
+ * Array with information about the containing calendar
+ *
+ * @var array
+ */
+ protected $calendarInfo;
+
+ /**
+ * Constructor
+ *
+ * The following properties may be passed within $objectData:
+ *
+ * * uri - A unique uri. Only the 'basename' must be passed.
+ * * calendardata (optional) - The iCalendar data
+ * * etag - (optional) The etag for this object, MUST be encloded with
+ * double-quotes.
+ * * size - (optional) The size of the data in bytes.
+ * * lastmodified - (optional) format as a unix timestamp.
+ * * acl - (optional) Use this to override the default ACL for the node.
+ *
+ * @param Backend\BackendInterface $caldavBackend
+ * @param array $calendarInfo
+ * @param array $objectData
+ */
+ public function __construct(Backend\BackendInterface $caldavBackend,array $calendarInfo,array $objectData) {
+
+ $this->caldavBackend = $caldavBackend;
+
+ if (!isset($objectData['uri'])) {
+ throw new \InvalidArgumentException('The objectData argument must contain an \'uri\' property');
+ }
+
+ $this->calendarInfo = $calendarInfo;
+ $this->objectData = $objectData;
+
+ }
+
+ /**
+ * Returns the uri for this object
+ *
+ * @return string
+ */
+ public function getName() {
+
+ return $this->objectData['uri'];
+
+ }
+
+ /**
+ * Returns the ICalendar-formatted object
+ *
+ * @return string
+ */
+ public function get() {
+
+ // Pre-populating the 'calendardata' is optional, if we don't have it
+ // already we fetch it from the backend.
+ if (!isset($this->objectData['calendardata'])) {
+ $this->objectData = $this->caldavBackend->getSchedulingMessage($this->calendarInfo['principaluri'], $this->objectData['uri']);
+ }
+ return $this->objectData['calendardata'];
+
+ }
+
+ /**
+ * Updates the ICalendar-formatted object
+ *
+ * @param string|resource $calendarData
+ * @return string
+ */
+ public function put($calendarData) {
+
+ }
+
+ /**
+ * Deletes the scheduling message
+ *
+ * @return void
+ */
+ public function delete() {
+
+ $this->caldavBackend->deleteSchedulingMessage($this->calendarInfo['principaluri'],$this->objectData['uri']);
+
+ }
+
+ /**
+ * Returns the mime content-type
+ *
+ * @return string
+ */
+ public function getContentType() {
+
+ $mime = 'text/calendar; charset=utf-8';
+ if ($this->objectData['component']) {
+ $mime.='; component=' . $this->objectData['component'];
+ }
+ return $mime;
+
+ }
+
+ /**
+ * Returns an ETag for this object.
+ *
+ * The ETag is an arbitrary string, but MUST be surrounded by double-quotes.
+ *
+ * @return string
+ */
+ public function getETag() {
+
+ if (isset($this->objectData['etag'])) {
+ return $this->objectData['etag'];
+ } else {
+ return '"' . md5($this->get()). '"';
+ }
+
+ }
+
+ /**
+ * Returns the last modification date as a unix timestamp
+ *
+ * @return int
+ */
+ public function getLastModified() {
+
+ return $this->objectData['lastmodified'];
+
+ }
+
+ /**
+ * Returns the size of this object in bytes
+ *
+ * @return int
+ */
+ public function getSize() {
+
+ if (array_key_exists('size',$this->objectData)) {
+ return $this->objectData['size'];
+ } else {
+ return strlen($this->get());
+ }
+
+ }
+
+ /**
+ * Returns the owner principal
+ *
+ * This must be a url to a principal, or null if there's no owner
+ *
+ * @return string|null
+ */
+ public function getOwner() {
+
+ return $this->calendarInfo['principaluri'];
+
+ }
+
+ /**
+ * Returns a group principal
+ *
+ * This must be a url to a principal, or null if there's no owner
+ *
+ * @return string|null
+ */
+ public function getGroup() {
+
+ return null;
+
+ }
+
+ /**
+ * Returns a list of ACE's for this node.
+ *
+ * Each ACE has the following properties:
+ * * 'privilege', a string such as {DAV:}read or {DAV:}write. These are
+ * currently the only supported privileges
+ * * 'principal', a url to the principal who owns the node
+ * * 'protected' (optional), indicating that this ACE is not allowed to
+ * be updated.
+ *
+ * @return array
+ */
+ public function getACL() {
+
+ // An alternative acl may be specified in the object data.
+ if (isset($this->objectData['acl'])) {
+ return $this->objectData['acl'];
+ }
+
+ // The default ACL
+ return array(
+ array(
+ 'privilege' => '{DAV:}read',
+ 'principal' => $this->calendarInfo['principaluri'],
+ 'protected' => true,
+ ),
+ array(
+ 'privilege' => '{DAV:}write',
+ 'principal' => $this->calendarInfo['principaluri'],
+ 'protected' => true,
+ ),
+ array(
+ 'privilege' => '{DAV:}read',
+ 'principal' => $this->calendarInfo['principaluri'] . '/calendar-proxy-write',
+ 'protected' => true,
+ ),
+ array(
+ 'privilege' => '{DAV:}write',
+ 'principal' => $this->calendarInfo['principaluri'] . '/calendar-proxy-write',
+ 'protected' => true,
+ ),
+ array(
+ 'privilege' => '{DAV:}read',
+ 'principal' => $this->calendarInfo['principaluri'] . '/calendar-proxy-read',
+ 'protected' => true,
+ ),
+
+ );
+
+ }
+
+ /**
+ * Updates the ACL
+ *
+ * This method will receive a list of new ACE's.
+ *
+ * @param array $acl
+ * @return void
+ */
+ public function setACL(array $acl) {
+
+ throw new \Sabre\DAV\Exception\MethodNotAllowed('Changing ACL is not yet supported');
+
+ }
+
+ /**
+ * Returns the list of supported privileges for this node.
+ *
+ * The returned data structure is a list of nested privileges.
+ * See \Sabre\DAVACL\Plugin::getDefaultSupportedPrivilegeSet for a simple
+ * standard structure.
+ *
+ * If null is returned from this method, the default privilege set is used,
+ * which is fine for most common usecases.
+ *
+ * @return array|null
+ */
+ public function getSupportedPrivilegeSet() {
+
+ return null;
+
+ }
+
+}
+
diff --git a/lib/Sabre/CalDAV/UserCalendars.php b/lib/Sabre/CalDAV/UserCalendars.php
old mode 100644
new mode 100755
index 466d010..ba019e8
--- a/lib/Sabre/CalDAV/UserCalendars.php
+++ b/lib/Sabre/CalDAV/UserCalendars.php
@@ -174,7 +174,7 @@ class UserCalendars implements DAV\IExtendedCollection, DAVACL\IACL {
$objs[] = new Calendar($this->caldavBackend, $calendar);
}
}
- $objs[] = new Schedule\Inbox($this->principalInfo['uri']);
+ $objs[] = new Schedule\Inbox($this->caldavBackend, $this->principalInfo['uri']);
$objs[] = new Schedule\Outbox($this->principalInfo['uri']);
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/php-sabredav.git
More information about the Pkg-owncloud-commits
mailing list