3232 */
3333namespace OCA \DAV \CardDAV ;
3434
35+ use OCA \DAV \Db \PropertyMapper ;
3536use OCP \Constants ;
36- use OCP \IAddressBook ;
37+ use OCP \IAddressBookEnabled ;
3738use OCP \IURLGenerator ;
3839use Sabre \VObject \Component \VCard ;
3940use Sabre \VObject \Property ;
4041use Sabre \VObject \Reader ;
4142use Sabre \VObject \UUIDUtil ;
4243
43- class AddressBookImpl implements IAddressBook {
44+ class AddressBookImpl implements IAddressBookEnabled {
4445
4546 /** @var CardDavBackend */
4647 private $ backend ;
@@ -54,23 +55,35 @@ class AddressBookImpl implements IAddressBook {
5455 /** @var IURLGenerator */
5556 private $ urlGenerator ;
5657
58+ /** @var PropertyMapper */
59+ private $ propertyMapper ;
60+
61+ /** @var string|null */
62+ private $ userId ;
63+
5764 /**
5865 * AddressBookImpl constructor.
5966 *
6067 * @param AddressBook $addressBook
6168 * @param array $addressBookInfo
6269 * @param CardDavBackend $backend
6370 * @param IUrlGenerator $urlGenerator
71+ * @param PropertyMapper $propertyMapper
72+ * @param string|null $userId
6473 */
6574 public function __construct (
6675 AddressBook $ addressBook ,
6776 array $ addressBookInfo ,
6877 CardDavBackend $ backend ,
69- IURLGenerator $ urlGenerator ) {
78+ IURLGenerator $ urlGenerator ,
79+ PropertyMapper $ propertyMapper ,
80+ ?string $ userId ) {
7081 $ this ->addressBook = $ addressBook ;
7182 $ this ->addressBookInfo = $ addressBookInfo ;
7283 $ this ->backend = $ backend ;
7384 $ this ->urlGenerator = $ urlGenerator ;
85+ $ this ->propertyMapper = $ propertyMapper ;
86+ $ this ->userId = $ userId ;
7487 }
7588
7689 /**
@@ -348,4 +361,25 @@ public function isSystemAddressBook(): bool {
348361 $ this ->addressBookInfo ['{DAV:}displayname ' ] === $ this ->urlGenerator ->getBaseUrl ()
349362 );
350363 }
364+
365+ public function isEnabled (): bool {
366+ if (!$ this ->userId ) {
367+ return true ;
368+ }
369+
370+ if ($ this ->isSystemAddressBook ()) {
371+ $ user = $ this ->userId ;
372+ $ uri = 'z-server-generated--system ' ;
373+ } else {
374+ $ user = str_replace ('principals/users/ ' , '' , $ this ->addressBookInfo ['principaluri ' ]);
375+ $ uri = $ this ->addressBookInfo ['uri ' ];
376+ }
377+
378+ $ path = 'addressbooks/users/ ' . $ user . '/ ' . $ uri ;
379+ $ properties = $ this ->propertyMapper ->findPropertyByPathAndName ($ user , $ path , '{http://owncloud.org/ns}enabled ' );
380+ if (count ($ properties ) > 0 ) {
381+ return (bool )$ properties [0 ]->getPropertyvalue ();
382+ }
383+ return true ;
384+ }
351385}
0 commit comments