1<?php
2
3namespace Sabre\CardDAV;
4
5use Sabre\DAVACL;
6
7/**
8 * AddressBook rootnode
9 *
10 * This object lists a collection of users, which can contain addressbooks.
11 *
12 * @copyright Copyright (C) 2007-2015 fruux GmbH (https://fruux.com/).
13 * @author Evert Pot (http://evertpot.com/)
14 * @license http://sabre.io/license/ Modified BSD License
15 */
16class AddressBookRoot extends DAVACL\AbstractPrincipalCollection {
17
18    /**
19     * Principal Backend
20     *
21     * @var Sabre\DAVACL\PrincipalBackend\BackendInteface
22     */
23    protected $principalBackend;
24
25    /**
26     * CardDAV backend
27     *
28     * @var Backend\BackendInterface
29     */
30    protected $carddavBackend;
31
32    /**
33     * Constructor
34     *
35     * This constructor needs both a principal and a carddav backend.
36     *
37     * By default this class will show a list of addressbook collections for
38     * principals in the 'principals' collection. If your main principals are
39     * actually located in a different path, use the $principalPrefix argument
40     * to override this.
41     *
42     * @param DAVACL\PrincipalBackend\BackendInterface $principalBackend
43     * @param Backend\BackendInterface $carddavBackend
44     * @param string $principalPrefix
45     */
46    function __construct(DAVACL\PrincipalBackend\BackendInterface $principalBackend, Backend\BackendInterface $carddavBackend, $principalPrefix = 'principals') {
47
48        $this->carddavBackend = $carddavBackend;
49        parent::__construct($principalBackend, $principalPrefix);
50
51    }
52
53    /**
54     * Returns the name of the node
55     *
56     * @return string
57     */
58    function getName() {
59
60        return Plugin::ADDRESSBOOK_ROOT;
61
62    }
63
64    /**
65     * This method returns a node for a principal.
66     *
67     * The passed array contains principal information, and is guaranteed to
68     * at least contain a uri item. Other properties may or may not be
69     * supplied by the authentication backend.
70     *
71     * @param array $principal
72     * @return \Sabre\DAV\INode
73     */
74    function getChildForPrincipal(array $principal) {
75
76        return new AddressBookHome($this->carddavBackend, $principal['uri']);
77
78    }
79
80}
81