diff --git a/apps/dav/l10n/.gitkeep b/apps/dav/l10n/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/apps/dav/lib/CalDAV/CalDavBackend.php b/apps/dav/lib/CalDAV/CalDavBackend.php index d742061428..07b61285ec 100644 --- a/apps/dav/lib/CalDAV/CalDavBackend.php +++ b/apps/dav/lib/CalDAV/CalDavBackend.php @@ -59,6 +59,9 @@ use Sabre\VObject\Recur\EventIterator; */ class CalDavBackend extends AbstractBackend implements SyncSupport, SubscriptionSupport, SchedulingSupport { + const PERSONAL_CALENDAR_URI = 'personal'; + const PERSONAL_CALENDAR_NAME = 'Personal'; + /** * We need to specify a max date, because we need to stop *somewhere* * diff --git a/apps/dav/lib/CalDAV/Calendar.php b/apps/dav/lib/CalDAV/Calendar.php index 3fbcd87acc..fc08c9ac87 100644 --- a/apps/dav/lib/CalDAV/Calendar.php +++ b/apps/dav/lib/CalDAV/Calendar.php @@ -38,6 +38,10 @@ class Calendar extends \Sabre\CalDAV\Calendar implements IShareable { if ($this->getName() === BirthdayService::BIRTHDAY_CALENDAR_URI) { $this->calendarInfo['{DAV:}displayname'] = $l10n->t('Contact birthdays'); } + if ($this->getName() === CalDavBackend::PERSONAL_CALENDAR_URI && + $this->calendarInfo['{DAV:}displayname'] === CalDavBackend::PERSONAL_CALENDAR_NAME) { + $this->calendarInfo['{DAV:}displayname'] = $l10n->t('Personal'); + } } /** diff --git a/apps/dav/lib/CardDAV/AddressBook.php b/apps/dav/lib/CardDAV/AddressBook.php index 7663351150..1c13ac00ae 100644 --- a/apps/dav/lib/CardDAV/AddressBook.php +++ b/apps/dav/lib/CardDAV/AddressBook.php @@ -22,6 +22,8 @@ namespace OCA\DAV\CardDAV; use OCA\DAV\DAV\Sharing\IShareable; +use OCP\IL10N; +use Sabre\CardDAV\Backend\BackendInterface; use Sabre\CardDAV\Card; use Sabre\DAV\Exception\Forbidden; use Sabre\DAV\Exception\NotFound; @@ -29,6 +31,22 @@ use Sabre\DAV\PropPatch; class AddressBook extends \Sabre\CardDAV\AddressBook implements IShareable { + /** + * AddressBook constructor. + * + * @param BackendInterface $carddavBackend + * @param array $addressBookInfo + * @param IL10N $l10n + */ + public function __construct(BackendInterface $carddavBackend, array $addressBookInfo, IL10N $l10n) { + parent::__construct($carddavBackend, $addressBookInfo); + + if ($this->getName() === CardDavBackend::PERSONAL_ADDRESSBOOK_URI && + $this->addressBookInfo['{DAV:}displayname'] === CardDavBackend::PERSONAL_ADDRESSBOOK_NAME) { + $this->addressBookInfo['{DAV:}displayname'] = $l10n->t('Contacts'); + } + } + /** * Updates the list of shares. * diff --git a/apps/dav/lib/CardDAV/AddressBookRoot.php b/apps/dav/lib/CardDAV/AddressBookRoot.php index 41c858e35e..88435165a8 100644 --- a/apps/dav/lib/CardDAV/AddressBookRoot.php +++ b/apps/dav/lib/CardDAV/AddressBookRoot.php @@ -21,8 +21,23 @@ */ namespace OCA\DAV\CardDAV; +use OCP\IL10N; + class AddressBookRoot extends \Sabre\CardDAV\AddressBookRoot { + /** @var IL10N */ + protected $l10n; + + /** + * @param \Sabre\DAVACL\PrincipalBackend\BackendInterface $principalBackend + * @param \Sabre\CardDAV\Backend\BackendInterface $carddavBackend + * @param string $principalPrefix + */ + public function __construct(\Sabre\DAVACL\PrincipalBackend\BackendInterface $principalBackend, \Sabre\CardDAV\Backend\BackendInterface $carddavBackend, $principalPrefix = 'principals') { + parent::__construct($principalBackend, $carddavBackend, $principalPrefix); + $this->l10n = \OC::$server->getL10N('dav'); + } + /** * This method returns a node for a principal. * @@ -35,7 +50,7 @@ class AddressBookRoot extends \Sabre\CardDAV\AddressBookRoot { */ function getChildForPrincipal(array $principal) { - return new UserAddressBooks($this->carddavBackend, $principal['uri']); + return new UserAddressBooks($this->carddavBackend, $principal['uri'], $this->l10n); } diff --git a/apps/dav/lib/CardDAV/CardDavBackend.php b/apps/dav/lib/CardDAV/CardDavBackend.php index 3aab271212..de717a1764 100644 --- a/apps/dav/lib/CardDAV/CardDavBackend.php +++ b/apps/dav/lib/CardDAV/CardDavBackend.php @@ -48,6 +48,9 @@ use Symfony\Component\EventDispatcher\GenericEvent; class CardDavBackend implements BackendInterface, SyncSupport { + const PERSONAL_ADDRESSBOOK_URI = 'contacts'; + const PERSONAL_ADDRESSBOOK_NAME = 'Contacts'; + /** @var Principal */ private $principalBackend; diff --git a/apps/dav/lib/CardDAV/ContactsManager.php b/apps/dav/lib/CardDAV/ContactsManager.php index 3f2019d582..b2e3544b28 100644 --- a/apps/dav/lib/CardDAV/ContactsManager.php +++ b/apps/dav/lib/CardDAV/ContactsManager.php @@ -25,19 +25,25 @@ namespace OCA\DAV\CardDAV; use OCP\Contacts\IManager; +use OCP\IL10N; use OCP\IURLGenerator; class ContactsManager { /** @var CardDavBackend */ private $backend; + /** @var IL10N */ + private $l10n; + /** * ContactsManager constructor. * * @param CardDavBackend $backend + * @param IL10N $l10n */ - public function __construct(CardDavBackend $backend) { + public function __construct(CardDavBackend $backend, IL10N $l10n) { $this->backend = $backend; + $this->l10n = $l10n; } /** @@ -59,7 +65,7 @@ class ContactsManager { */ private function register(IManager $cm, $addressBooks, $urlGenerator) { foreach ($addressBooks as $addressBookInfo) { - $addressBook = new \OCA\DAV\CardDAV\AddressBook($this->backend, $addressBookInfo); + $addressBook = new \OCA\DAV\CardDAV\AddressBook($this->backend, $addressBookInfo, $this->l10n); $cm->registerAddressBook( new AddressBookImpl( $addressBook, diff --git a/apps/dav/lib/CardDAV/UserAddressBooks.php b/apps/dav/lib/CardDAV/UserAddressBooks.php index 2ac89f302f..4c7626ba42 100644 --- a/apps/dav/lib/CardDAV/UserAddressBooks.php +++ b/apps/dav/lib/CardDAV/UserAddressBooks.php @@ -21,19 +21,27 @@ */ namespace OCA\DAV\CardDAV; +use OCP\IL10N; + class UserAddressBooks extends \Sabre\CardDAV\AddressBookHome { + /** @var IL10N */ + protected $l10n; + /** * Returns a list of addressbooks * * @return array */ function getChildren() { + if ($this->l10n === null) { + $this->l10n = \OC::$server->getL10N('dav'); + } $addressBooks = $this->carddavBackend->getAddressBooksForUser($this->principalUri); $objects = []; foreach($addressBooks as $addressBook) { - $objects[] = new AddressBook($this->carddavBackend, $addressBook); + $objects[] = new AddressBook($this->carddavBackend, $addressBook, $this->l10n); } return $objects; diff --git a/apps/dav/lib/HookManager.php b/apps/dav/lib/HookManager.php index 364db19d76..92aa4fce7f 100644 --- a/apps/dav/lib/HookManager.php +++ b/apps/dav/lib/HookManager.php @@ -21,7 +21,6 @@ */ namespace OCA\DAV; -use OCA\DAV\CalDAV\BirthdayService; use OCA\DAV\CalDAV\CalDavBackend; use OCA\DAV\CardDAV\CardDavBackend; use OCA\DAV\CardDAV\SyncService; @@ -124,16 +123,18 @@ class HookManager { $principal = 'principals/users/' . $user->getUID(); if ($this->calDav->getCalendarsForUserCount($principal) === 0) { try { - $this->calDav->createCalendar($principal, 'personal', [ - '{DAV:}displayname' => 'Personal']); + $this->calDav->createCalendar($principal, CalDavBackend::PERSONAL_CALENDAR_URI, [ + '{DAV:}displayname' => CalDavBackend::PERSONAL_CALENDAR_NAME, + ]); } catch (\Exception $ex) { \OC::$server->getLogger()->logException($ex); } } if ($this->cardDav->getAddressBooksForUserCount($principal) === 0) { try { - $this->cardDav->createAddressBook($principal, 'contacts', [ - '{DAV:}displayname' => 'Contacts']); + $this->cardDav->createAddressBook($principal, CardDavBackend::PERSONAL_ADDRESSBOOK_URI, [ + '{DAV:}displayname' => CardDavBackend::PERSONAL_ADDRESSBOOK_NAME, + ]); } catch (\Exception $ex) { \OC::$server->getLogger()->logException($ex); } diff --git a/apps/dav/tests/unit/CardDAV/AddressBookTest.php b/apps/dav/tests/unit/CardDAV/AddressBookTest.php index 8a608e277e..22992d564f 100644 --- a/apps/dav/tests/unit/CardDAV/AddressBookTest.php +++ b/apps/dav/tests/unit/CardDAV/AddressBookTest.php @@ -25,6 +25,7 @@ namespace OCA\DAV\Tests\unit\CardDAV; use OCA\DAV\CardDAV\AddressBook; use OCA\DAV\CardDAV\CardDavBackend; +use OCP\IL10N; use Sabre\DAV\PropPatch; use Test\TestCase; @@ -40,9 +41,11 @@ class AddressBookTest extends TestCase { $calendarInfo = [ '{http://owncloud.org/ns}owner-principal' => 'user1', 'principaluri' => 'user2', - 'id' => 666 + 'id' => 666, + 'uri' => 'default', ]; - $c = new AddressBook($backend, $calendarInfo); + $l = $this->createMock(IL10N::class); + $c = new AddressBook($backend, $calendarInfo, $l); $c->delete(); } @@ -59,9 +62,11 @@ class AddressBookTest extends TestCase { $calendarInfo = [ '{http://owncloud.org/ns}owner-principal' => 'user1', 'principaluri' => 'user2', - 'id' => 666 + 'id' => 666, + 'uri' => 'default', ]; - $c = new AddressBook($backend, $calendarInfo); + $l = $this->createMock(IL10N::class); + $c = new AddressBook($backend, $calendarInfo, $l); $c->delete(); } @@ -74,9 +79,11 @@ class AddressBookTest extends TestCase { $calendarInfo = [ '{http://owncloud.org/ns}owner-principal' => 'user1', 'principaluri' => 'user2', - 'id' => 666 + 'id' => 666, + 'uri' => 'default', ]; - $c = new AddressBook($backend, $calendarInfo); + $l = $this->createMock(IL10N::class); + $c = new AddressBook($backend, $calendarInfo, $l); $c->propPatch(new PropPatch([])); } @@ -98,7 +105,8 @@ class AddressBookTest extends TestCase { if ($hasOwnerSet) { $calendarInfo['{http://owncloud.org/ns}owner-principal'] = 'user1'; } - $c = new AddressBook($backend, $calendarInfo); + $l = $this->createMock(IL10N::class); + $c = new AddressBook($backend, $calendarInfo, $l); $acl = $c->getACL(); $childAcl = $c->getChildACL(); diff --git a/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php b/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php index cf5972f79b..890b70d6af 100644 --- a/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php +++ b/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php @@ -33,6 +33,7 @@ use OCA\DAV\CardDAV\CardDavBackend; use OCA\DAV\Connector\Sabre\Principal; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\IDBConnection; +use OCP\IL10N; use Sabre\DAV\PropPatch; use Sabre\VObject\Component\VCard; use Sabre\VObject\Property\Text; @@ -146,7 +147,8 @@ class CardDavBackendTest extends TestCase { $this->backend->createAddressBook(self::UNIT_TEST_USER, 'Example', []); $books = $this->backend->getAddressBooksForUser(self::UNIT_TEST_USER); $this->assertEquals(1, count($books)); - $addressBook = new AddressBook($this->backend, $books[0]); + $l = $this->createMock(IL10N::class); + $addressBook = new AddressBook($this->backend, $books[0], $l); $this->backend->updateShares($addressBook, [ [ 'href' => 'principal:' . self::UNIT_TEST_USER1, @@ -329,7 +331,8 @@ class CardDavBackendTest extends TestCase { $books = $this->backend->getAddressBooksForUser(self::UNIT_TEST_USER); $this->assertEquals(1, count($books)); - $exampleBook = new AddressBook($this->backend, $books[0]); + $l = $this->createMock(IL10N::class); + $exampleBook = new AddressBook($this->backend, $books[0], $l); $this->backend->updateShares($exampleBook, [['href' => 'principal:principals/best-friend']], []); $shares = $this->backend->getShares($exampleBook->getResourceId()); diff --git a/apps/dav/tests/unit/CardDAV/ContactsManagerTest.php b/apps/dav/tests/unit/CardDAV/ContactsManagerTest.php index 6859d0686d..062ef72dbf 100644 --- a/apps/dav/tests/unit/CardDAV/ContactsManagerTest.php +++ b/apps/dav/tests/unit/CardDAV/ContactsManagerTest.php @@ -27,6 +27,7 @@ namespace OCA\DAV\Tests\unit\CardDAV; use OCA\DAV\CardDAV\CardDavBackend; use OCA\DAV\CardDAV\ContactsManager; use OCP\Contacts\IManager; +use OCP\IL10N; use Test\TestCase; class ContactsManagerTest extends TestCase { @@ -38,10 +39,11 @@ class ContactsManagerTest extends TestCase { /** @var CardDavBackend | \PHPUnit_Framework_MockObject_MockObject $backEnd */ $backEnd = $this->getMockBuilder('OCA\DAV\CardDAV\CardDavBackend')->disableOriginalConstructor()->getMock(); $backEnd->method('getAddressBooksForUser')->willReturn([ - [] + ['uri' => 'default'], ]); - $app = new ContactsManager($backEnd); + $l = $this->createMock(IL10N::class); + $app = new ContactsManager($backEnd, $l); $app->setupContactsProvider($cm, 'user01', $urlGenerator); } } diff --git a/l10n/.tx/config b/l10n/.tx/config index 6f489f031d..3554cf6954 100644 --- a/l10n/.tx/config +++ b/l10n/.tx/config @@ -26,6 +26,12 @@ source_file = templates/lib.pot source_lang = en type = PO +[nextcloud.dav] +file_filter = /dav.po +source_file = templates/dav.pot +source_lang = en +type = PO + [nextcloud.files_encryption] file_filter = /encryption.po source_file = templates/encryption.pot