1<?php
2
3namespace Sabre\DAVACL;
4
5use Sabre\DAV;
6
7/**
8 * IPrincipal interface
9 *
10 * Implement this interface to define your own principals
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 */
16interface IPrincipal extends DAV\INode {
17
18    /**
19     * Returns a list of alternative urls for a principal
20     *
21     * This can for example be an email address, or ldap url.
22     *
23     * @return array
24     */
25    function getAlternateUriSet();
26
27    /**
28     * Returns the full principal url
29     *
30     * @return string
31     */
32    function getPrincipalUrl();
33
34    /**
35     * Returns the list of group members
36     *
37     * If this principal is a group, this function should return
38     * all member principal uri's for the group.
39     *
40     * @return array
41     */
42    function getGroupMemberSet();
43
44    /**
45     * Returns the list of groups this principal is member of
46     *
47     * If this principal is a member of a (list of) groups, this function
48     * should return a list of principal uri's for it's members.
49     *
50     * @return array
51     */
52    function getGroupMembership();
53
54    /**
55     * Sets a list of group members
56     *
57     * If this principal is a group, this method sets all the group members.
58     * The list of members is always overwritten, never appended to.
59     *
60     * This method should throw an exception if the members could not be set.
61     *
62     * @param array $principals
63     * @return void
64     */
65    function setGroupMemberSet(array $principals);
66
67    /**
68     * Returns the displayname
69     *
70     * This should be a human readable name for the principal.
71     * If none is available, return the nodename.
72     *
73     * @return string
74     */
75    function getDisplayName();
76
77}
78