[Pkg-owncloud-commits] [php-sabredav] 77/220: What do you do for a living?

David Prévot taffit at moszumanska.debian.org
Thu May 12 01:21:10 UTC 2016


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository php-sabredav.

commit 6e55707016f90fb745b3789cb41dfb2f87914a50
Author: Evert Pot <me at evertpot.com>
Date:   Tue Mar 8 21:34:33 2016 -0500

    What do you do for a living?
    
    I build ugly web interfaces.
---
 lib/CalDAV/Plugin.php               |  1 -
 lib/DAV/Browser/Plugin.php          |  5 ++-
 lib/DAV/Browser/assets/sabredav.css |  6 +--
 lib/DAV/Sharing/Plugin.php          | 87 +++++++++++++++++++++++++++++++++++--
 4 files changed, 90 insertions(+), 9 deletions(-)

diff --git a/lib/CalDAV/Plugin.php b/lib/CalDAV/Plugin.php
index 7979856..4ac6256 100644
--- a/lib/CalDAV/Plugin.php
+++ b/lib/CalDAV/Plugin.php
@@ -934,7 +934,6 @@ class Plugin extends DAV\ServerPlugin {
 
     }
 
-
     /**
      * This method is used to generate HTML output for the
      * DAV\Browser\Plugin. This allows us to generate an interface users
diff --git a/lib/DAV/Browser/Plugin.php b/lib/DAV/Browser/Plugin.php
index 5027020..7cee59b 100644
--- a/lib/DAV/Browser/Plugin.php
+++ b/lib/DAV/Browser/Plugin.php
@@ -354,7 +354,7 @@ class Plugin extends DAV\ServerPlugin {
 
         $output = '';
         if ($this->enablePost) {
-            $this->server->emit('onHTMLActionsPanel', [$node, &$output]);
+            $this->server->emit('onHTMLActionsPanel', [$node, &$output, $path]);
         }
 
         if ($output) {
@@ -493,9 +493,10 @@ HTML;
      *
      * @param DAV\INode $node
      * @param mixed $output
+     * @param string $path
      * @return void
      */
-    function htmlActionsPanel(DAV\INode $node, &$output) {
+    function htmlActionsPanel(DAV\INode $node, &$output, $path) {
 
         if (!$node instanceof DAV\ICollection)
             return;
diff --git a/lib/DAV/Browser/assets/sabredav.css b/lib/DAV/Browser/assets/sabredav.css
index c9ab2c7..8869597 100644
--- a/lib/DAV/Browser/assets/sabredav.css
+++ b/lib/DAV/Browser/assets/sabredav.css
@@ -96,12 +96,12 @@ header a {
   vertical-align: middle;
   border: 0;
 }
-input, button {
+input, button, select {
     font: inherit;
     color: inherit;
 }
 
-input[type=text] {
+input[type=text], select {
   border: 1px solid #bbbbbb;
   line-height: 22px;
   padding: 5px 10px;
@@ -200,7 +200,7 @@ section table {
     line-height: 40px;
 }
 
-.actions input[type=text] {
+.actions input[type=text], select {
     width: 450px;
 }
 
diff --git a/lib/DAV/Sharing/Plugin.php b/lib/DAV/Sharing/Plugin.php
index df56c85..a10dd27 100644
--- a/lib/DAV/Sharing/Plugin.php
+++ b/lib/DAV/Sharing/Plugin.php
@@ -9,6 +9,7 @@ use Sabre\DAV\PropFind;
 use Sabre\DAV\Server;
 use Sabre\DAV\ServerPlugin;
 use Sabre\DAV\Xml\Property;
+use Sabre\DAV\Xml\Element\Sharee;
 use Sabre\HTTP\RequestInterface;
 use Sabre\HTTP\ResponseInterface;
 
@@ -93,8 +94,10 @@ class Plugin extends ServerPlugin {
             '{DAV:}share-mode'
         );
 
-        $server->on('method:POST',  [$this, 'httpPost']);
-        $server->on('propFind',     [$this, 'propFind']);
+        $server->on('method:POST',         [$this, 'httpPost']);
+        $server->on('propFind',            [$this, 'propFind']);
+        $server->on('onHTMLActionsPanel',  [$this, 'htmlActionsPanel']);
+        $server->on('onBrowserPostAction', [$this, 'browserPostAction']);
 
     }
 
@@ -155,7 +158,7 @@ class Plugin extends ServerPlugin {
             });
             $propFind->handle('{DAV:}invite', function() use ($node) {
 
-                return new Property\Invites($node->getInvites());
+                return new Property\Invite($node->getInvites());
 
             });
             $propFind->handle('{DAV:}share-resource-uri', function() use ($node) {
@@ -232,4 +235,82 @@ class Plugin extends ServerPlugin {
 
     }
 
+    /**
+     * This method is used to generate HTML output for the
+     * DAV\Browser\Plugin.
+     *
+     * @param INode $node
+     * @param string $output
+     * @param string $path
+     * @return bool|null
+     */
+    function htmlActionsPanel(INode $node, &$output, $path) {
+
+        $aclPlugin = $this->server->getPlugin('acl');
+        if ($aclPlugin) {
+          if (!$acl->checkPrivileges($path, '{DAV:}share', \Sabre\DAVACL\Plugin::R_PARENT, false)) {
+                // Sharing is not permitted, we will not draw this interface.
+                return;
+            }
+        }
+
+        $output .= '<tr><td colspan="2"><form method="post" action="">
+            <h3>Share this resource</h3>
+            <input type="hidden" name="sabreAction" value="share" />
+            <label>Share with (uri):</label> <input type="text" name="href" placeholder="mailto:user at example.org"/><br />
+            <label>Access</label>
+                <select name="access">
+                    <option value="readwrite">Read-write</option>
+                    <option value="read">Read-only</option>
+                    <option value="no-access">Revoke access</option>
+                </select><br />
+             <input type="submit" value="share" />
+            </form>
+            </td></tr>';
+
+    }
+
+    /**
+     * This method is triggered for POST actions generated by the browser
+     * plugin.
+     *
+     * @param string $path
+     * @param string $action
+     * @param array $postVars
+     */
+    function browserPostAction($path, $action, $postVars) {
+
+        if ($action!=='share') {
+            return;
+        }
+
+        if (empty($postVars['href'])) {
+            throw new BadRequest('The "href" POST parameter is required');
+        }
+        if (empty($postVars['access'])) {
+            throw new BadRequest('The "access" POST parameter is required');
+        }
+
+        $accessMap = [
+            'readwrite' => self::ACCESS_READWRITE,
+            'read'      => self::ACCESS_READ,
+            'no-access' => self::ACCESS_NOACCESS,
+        ];
+
+        if (!isset($accessMap[$postVars['access']])) {
+            throw new BadRequest('The "access" POST must be readwrite, read or no-access');
+        }
+        $sharee = new Sharee([
+            'href' => $postVars['href'],
+            'access' => $accessMap[$postVars['access']],
+        ]);
+
+        $this->shareResource(
+            $path,
+            [$sharee]
+        );
+        return false;
+
+    }
+
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-php/php-sabredav.git



More information about the Pkg-owncloud-commits mailing list