Blame view
sources/3rdparty/sabre/dav/lib/Sabre/CardDAV/VCFExportPlugin.php
2.71 KB
|
03e52840d
|
1 |
<?php |
|
6d9380f96
|
2 3 4 |
namespace Sabre\CardDAV; use Sabre\DAV; |
|
03e52840d
|
5 6 7 8 9 10 11 12 13 |
use Sabre\VObject; /** * VCF Exporter * * This plugin adds the ability to export entire address books as .vcf files. * This is useful for clients that don't support CardDAV yet. They often do * support vcf files. * |
|
6d9380f96
|
14 15 |
* @copyright Copyright (C) 2007-2014 fruux GmbH (https://fruux.com/). * @author Evert Pot (http://evertpot.com/) |
|
03e52840d
|
16 |
* @author Thomas Tanghus (http://tanghus.net/) |
|
6d9380f96
|
17 |
* @license http://sabre.io/license/ Modified BSD License |
|
03e52840d
|
18 |
*/ |
|
6d9380f96
|
19 |
class VCFExportPlugin extends DAV\ServerPlugin {
|
|
03e52840d
|
20 21 22 23 |
/**
* Reference to Server class
*
|
|
6d9380f96
|
24 |
* @var Sabre\DAV\Server |
|
03e52840d
|
25 26 27 28 29 30 |
*/
protected $server;
/**
* Initializes the plugin and registers event handlers
*
|
|
6d9380f96
|
31 |
* @param DAV\Server $server |
|
03e52840d
|
32 33 |
* @return void
*/
|
|
6d9380f96
|
34 |
public function initialize(DAV\Server $server) {
|
|
03e52840d
|
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
$this->server = $server;
$this->server->subscribeEvent('beforeMethod',array($this,'beforeMethod'), 90);
}
/**
* 'beforeMethod' event handles. This event handles intercepts GET requests ending
* with ?export
*
* @param string $method
* @param string $uri
* @return bool
*/
public function beforeMethod($method, $uri) {
if ($method!='GET') return;
if ($this->server->httpRequest->getQueryString()!='export') return;
// splitting uri
list($uri) = explode('?',$uri,2);
$node = $this->server->tree->getNodeForPath($uri);
|
|
6d9380f96
|
58 |
if (!($node instanceof IAddressBook)) return; |
|
03e52840d
|
59 60 61 62 63 64 65 66 67 68 |
// Checking ACL, if available.
if ($aclPlugin = $this->server->getPlugin('acl')) {
$aclPlugin->checkPrivileges($uri, '{DAV:}read');
}
$this->server->httpResponse->setHeader('Content-Type','text/directory');
$this->server->httpResponse->sendStatus(200);
$nodes = $this->server->getPropertiesForPath($uri, array(
|
|
6d9380f96
|
69 |
'{' . Plugin::NS_CARDDAV . '}address-data',
|
|
03e52840d
|
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
),1);
$this->server->httpResponse->sendBody($this->generateVCF($nodes));
// Returning false to break the event chain
return false;
}
/**
* Merges all vcard objects, and builds one big vcf export
*
* @param array $nodes
* @return string
*/
public function generateVCF(array $nodes) {
$output = "";
foreach($nodes as $node) {
|
|
6d9380f96
|
90 |
if (!isset($node[200]['{' . Plugin::NS_CARDDAV . '}address-data'])) {
|
|
03e52840d
|
91 92 |
continue;
}
|
|
6d9380f96
|
93 |
$nodeData = $node[200]['{' . Plugin::NS_CARDDAV . '}address-data'];
|
|
03e52840d
|
94 95 96 97 98 99 100 101 102 103 104 105 |
// Parsing this node so VObject can clean up the output.
$output .=
VObject\Reader::read($nodeData)->serialize();
}
return $output;
}
}
|