1<?php
2
3namespace Sabre\DAVACL\PrincipalBackend;
4
5/**
6 * Abstract Principal Backend
7 *
8 * Currently this class has no function. It's here for consistency and so we
9 * have a non-bc-breaking way to add a default generic implementation to
10 * functions we may add in the future.
11 *
12 * @copyright Copyright (C) fruux GmbH (https://fruux.com/)
13 * @author Evert Pot (http://evertpot.com/)
14 * @license http://sabre.io/license/ Modified BSD License
15 */
16abstract class AbstractBackend implements BackendInterface {
17
18    /**
19     * Finds a principal by its URI.
20     *
21     * This method may receive any type of uri, but mailto: addresses will be
22     * the most common.
23     *
24     * Implementation of this API is optional. It is currently used by the
25     * CalDAV system to find principals based on their email addresses. If this
26     * API is not implemented, some features may not work correctly.
27     *
28     * This method must return a relative principal path, or null, if the
29     * principal was not found or you refuse to find it.
30     *
31     * @param string $uri
32     * @param string $principalPrefix
33     * @return string
34     */
35    function findByUri($uri, $principalPrefix) {
36
37        // Note that the default implementation here is a bit slow and could
38        // likely be optimized.
39        if (substr($uri, 0, 7) !== 'mailto:') {
40            return;
41        }
42        $result = $this->searchPrincipals(
43            $principalPrefix,
44            ['{http://sabredav.org/ns}email-address' => substr($uri, 7)]
45        );
46
47        if ($result) {
48            return $result[0];
49        }
50
51    }
52
53}
54