diff options
author | John Molakvoæ <skjnldsv@users.noreply.github.com> | 2019-02-27 10:20:56 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-27 10:20:56 +0100 |
commit | 018343b7d4ae563473c0cca9f08386f0b2a672b6 (patch) | |
tree | 65c3f93edbff960a3207351c8be1556ace5b9e3f /apps | |
parent | 36b01e3c2d4033f690b30b4fcf92711da28cb2ed (diff) | |
parent | cea53d0a07843ccddad9a6bf4c984617435c9409 (diff) | |
download | nextcloud-server-018343b7d4ae563473c0cca9f08386f0b2a672b6.tar.gz nextcloud-server-018343b7d4ae563473c0cca9f08386f0b2a672b6.zip |
Merge pull request #14389 from nextcloud/dav-photo-prop
Add HasPhoto DAV plugin
Diffstat (limited to 'apps')
-rw-r--r-- | apps/dav/composer/composer/autoload_classmap.php | 1 | ||||
-rw-r--r-- | apps/dav/composer/composer/autoload_static.php | 1 | ||||
-rw-r--r-- | apps/dav/lib/CardDAV/HasPhotoPlugin.php | 100 | ||||
-rw-r--r-- | apps/dav/lib/Server.php | 2 |
4 files changed, 104 insertions, 0 deletions
diff --git a/apps/dav/composer/composer/autoload_classmap.php b/apps/dav/composer/composer/autoload_classmap.php index 8bb2b077edd..61fd5c25917 100644 --- a/apps/dav/composer/composer/autoload_classmap.php +++ b/apps/dav/composer/composer/autoload_classmap.php @@ -69,6 +69,7 @@ return array( 'OCA\\DAV\\CardDAV\\CardDavBackend' => $baseDir . '/../lib/CardDAV/CardDavBackend.php', 'OCA\\DAV\\CardDAV\\ContactsManager' => $baseDir . '/../lib/CardDAV/ContactsManager.php', 'OCA\\DAV\\CardDAV\\Converter' => $baseDir . '/../lib/CardDAV/Converter.php', + 'OCA\\DAV\\CardDAV\\HasPhotoPlugin' => $baseDir . '/../lib/CardDAV/HasPhotoPlugin.php', 'OCA\\DAV\\CardDAV\\ImageExportPlugin' => $baseDir . '/../lib/CardDAV/ImageExportPlugin.php', 'OCA\\DAV\\CardDAV\\MultiGetExportPlugin' => $baseDir . '/../lib/CardDAV/MultiGetExportPlugin.php', 'OCA\\DAV\\CardDAV\\PhotoCache' => $baseDir . '/../lib/CardDAV/PhotoCache.php', diff --git a/apps/dav/composer/composer/autoload_static.php b/apps/dav/composer/composer/autoload_static.php index e4b69b5a747..4898c78021c 100644 --- a/apps/dav/composer/composer/autoload_static.php +++ b/apps/dav/composer/composer/autoload_static.php @@ -84,6 +84,7 @@ class ComposerStaticInitDAV 'OCA\\DAV\\CardDAV\\CardDavBackend' => __DIR__ . '/..' . '/../lib/CardDAV/CardDavBackend.php', 'OCA\\DAV\\CardDAV\\ContactsManager' => __DIR__ . '/..' . '/../lib/CardDAV/ContactsManager.php', 'OCA\\DAV\\CardDAV\\Converter' => __DIR__ . '/..' . '/../lib/CardDAV/Converter.php', + 'OCA\\DAV\\CardDAV\\HasPhotoPlugin' => __DIR__ . '/..' . '/../lib/CardDAV/HasPhotoPlugin.php', 'OCA\\DAV\\CardDAV\\ImageExportPlugin' => __DIR__ . '/..' . '/../lib/CardDAV/ImageExportPlugin.php', 'OCA\\DAV\\CardDAV\\MultiGetExportPlugin' => __DIR__ . '/..' . '/../lib/CardDAV/MultiGetExportPlugin.php', 'OCA\\DAV\\CardDAV\\PhotoCache' => __DIR__ . '/..' . '/../lib/CardDAV/PhotoCache.php', diff --git a/apps/dav/lib/CardDAV/HasPhotoPlugin.php b/apps/dav/lib/CardDAV/HasPhotoPlugin.php new file mode 100644 index 00000000000..58fffd275d9 --- /dev/null +++ b/apps/dav/lib/CardDAV/HasPhotoPlugin.php @@ -0,0 +1,100 @@ +<?php +declare (strict_types = 1); +/** + * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com> + * + * @author John Molakvoæ <skjnldsv@protonmail.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\DAV\CardDAV; + +use Sabre\CardDAV\Card; +use Sabre\DAV\INode; +use Sabre\DAV\PropFind; +use Sabre\DAV\Server; +use Sabre\VObject\Component\VCard; +use Sabre\VObject\Reader; + +class HasPhotoPlugin extends \Sabre\CardDAV\Plugin { + + /** @var Server */ + protected $server; + + /** + * Initializes the plugin and registers event handlers + * + * @param Server $server + * @return void + */ + function initialize(Server $server) { + $server->on('propFind', [$this, 'propFind']); + parent::initialize($server); + } + + /** + * Adds all CardDAV-specific properties + * + * @param PropFind $propFind + * @param INode $node + * @return void + */ + function propFind(PropFind $propFind, INode $node) { + + $ns = '{http://nextcloud.com/ns}'; + + if ($node instanceof Card) { + $propFind->handle($ns . 'has-photo', function () use ($node) { + $vcard = Reader::read($node->get()); + return ($vcard instanceof VCard && $vcard->PHOTO); + }); + } + } + + /** + * Returns a plugin name. + * + * Using this name other plugins will be able to access other plugins + * using \Sabre\DAV\Server::getPlugin + * + * @return string + */ + public function getPluginName() { + return 'vcard-has-photo'; + } + + /** + * Returns a bunch of meta-data about the plugin. + * + * Providing this information is optional, and is mainly displayed by the + * Browser plugin. + * + * The description key in the returned array may contain html and will not + * be sanitized. + * + * @return array + */ + public function getPluginInfo() { + return [ + 'name' => $this->getPluginName(), + 'description' => 'Return a boolean stating if the vcard have a photo property set or not.' + ]; + + } + +} diff --git a/apps/dav/lib/Server.php b/apps/dav/lib/Server.php index 5335db98fce..84a914dbe9a 100644 --- a/apps/dav/lib/Server.php +++ b/apps/dav/lib/Server.php @@ -35,6 +35,7 @@ namespace OCA\DAV; use OCA\DAV\CalDAV\BirthdayService; use OCA\DAV\CardDAV\ImageExportPlugin; use OCA\DAV\CardDAV\MultiGetExportPlugin; +use OCA\DAV\CardDAV\HasPhotoPlugin; use OCA\DAV\CardDAV\PhotoCache; use OCA\DAV\Comments\CommentsPlugin; use OCA\DAV\Connector\Sabre\Auth; @@ -169,6 +170,7 @@ class Server { $this->server->addPlugin(new \OCA\DAV\CardDAV\Plugin()); $this->server->addPlugin(new VCFExportPlugin()); $this->server->addPlugin(new MultiGetExportPlugin()); + $this->server->addPlugin(new HasPhotoPlugin()); $this->server->addPlugin(new ImageExportPlugin(new PhotoCache( \OC::$server->getAppDataDir('dav-photocache'), \OC::$server->getLogger()) |