[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