Skip to content

Commit

Permalink
feat: add notion of addressbooks (#3749)
Browse files Browse the repository at this point in the history
  • Loading branch information
asbiin authored Dec 15, 2020
1 parent f10638c commit a18962e
Show file tree
Hide file tree
Showing 24 changed files with 455 additions and 102 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

### New features:

* Add the notion of AddressBooks
* Allow customization of life event types

### Enhancements:
Expand Down
4 changes: 2 additions & 2 deletions app/Helpers/AccountHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public static function hasLimitations(Account $account): bool
*/
public static function hasReachedContactLimit(Account $account): bool
{
return $account->contacts()->real()->active()->count() >= config('monica.number_of_allowed_contacts_free_account');
return $account->allContacts()->real()->active()->count() >= config('monica.number_of_allowed_contacts_free_account');
}

/**
Expand All @@ -54,7 +54,7 @@ public static function canDowngrade(Account $account): bool
$canDowngrade = true;
$numberOfUsers = $account->users()->count();
$numberPendingInvitations = $account->invitations()->count();
$numberActiveContacts = $account->contacts()->active()->count();
$numberActiveContacts = $account->allContacts()->active()->count();

// number of users in the account should be == 1
if ($numberOfUsers > 1) {
Expand Down
9 changes: 6 additions & 3 deletions app/Helpers/SearchHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,10 @@ class SearchHelper
* @param string $needle
* @param string $orderByColumn
* @param string $orderByDirection
* @param string|null $addressBookName
* @return Builder
*/
public static function searchContacts(string $needle, string $orderByColumn, string $orderByDirection = 'asc'): Builder
public static function searchContacts(string $needle, string $orderByColumn, string $orderByDirection = 'asc', string $addressBookName = null): Builder
{
$accountId = Auth::user()->account_id;

Expand All @@ -41,9 +42,11 @@ public static function searchContacts(string $needle, string $orderByColumn, str
]);
});

return $b->orderBy($orderByColumn, $orderByDirection);
return $b->addressBook($accountId, $addressBookName)
->orderBy($orderByColumn, $orderByDirection);
}

return Contact::search($needle, $accountId, $orderByColumn, $orderByDirection);
return Contact::search($needle, $accountId, $orderByColumn, $orderByDirection)
->addressBook($accountId, $addressBookName);
}
}
2 changes: 1 addition & 1 deletion app/Http/Controllers/Contacts/IntroductionsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class IntroductionsController extends Controller
*/
public function edit(Contact $contact)
{
$contacts = auth()->user()->account->contacts()
$contacts = $contact->siblingContacts()
->real()
->active()
->get();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ abstract class AbstractCalDAVBackend implements ICalDAVBackend, IDAVBackend

public function getDescription()
{
$token = DAVSyncPlugin::SYNCTOKEN_PREFIX.$this->refreshSyncToken()->id;
$token = DAVSyncPlugin::SYNCTOKEN_PREFIX.$this->refreshSyncToken(null)->id;
$des = [
'id' => $this->backendUri(),
'uri' => $this->backendUri(),
Expand Down
8 changes: 4 additions & 4 deletions app/Http/Controllers/DAV/Backend/CalDAV/CalDAVBackend.php
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ public function getChangesForCalendar($calendarId, $syncToken, $syncLevel, $limi
{
$backend = $this->getBackend($calendarId);
if ($backend) {
return $backend->getChanges($syncToken);
return $backend->getChanges($calendarId, $syncToken);
}

return [];
Expand Down Expand Up @@ -166,7 +166,7 @@ public function getCalendarObjects($calendarId)
{
$backend = $this->getBackend($calendarId);
if ($backend) {
$objs = $backend->getObjects();
$objs = $backend->getObjects($calendarId);

return $objs
->map(function ($date) use ($backend) {
Expand Down Expand Up @@ -201,7 +201,7 @@ public function getCalendarObject($calendarId, $objectUri)
{
$backend = $this->getBackend($calendarId);
if ($backend) {
$obj = $backend->getObject($objectUri);
$obj = $backend->getObject($calendarId, $objectUri);

if ($obj) {
return $backend->prepareData($obj);
Expand Down Expand Up @@ -257,7 +257,7 @@ public function updateCalendarObject($calendarId, $objectUri, $calendarData): ?s
$backend = $this->getBackend($calendarId);

return $backend ?
$backend->updateOrCreateCalendarObject($objectUri, $calendarData)
$backend->updateOrCreateCalendarObject($calendarId, $objectUri, $calendarData)
: null;
}

Expand Down
11 changes: 6 additions & 5 deletions app/Http/Controllers/DAV/Backend/CalDAV/CalDAVBirthdays.php
Original file line number Diff line number Diff line change
Expand Up @@ -95,10 +95,11 @@ private function hasBirthday($contact)
/**
* Returns the date for the specific uuid.
*
* @param string|null $collectionId
* @param string $uuid
* @return mixed
*/
public function getObjectUuid($uuid)
public function getObjectUuid($collectionId, $uuid)
{
return SpecialDate::where([
'account_id' => Auth::user()->account_id,
Expand All @@ -111,10 +112,10 @@ public function getObjectUuid($uuid)
*
* @return \Illuminate\Support\Collection
*/
public function getObjects()
public function getObjects($collectionId)
{
$contacts = Auth::user()->account
->contacts()
// We only return the birthday of default addressBook
$contacts = Auth::user()->account->contacts()
->real()
->active()
->get();
Expand All @@ -130,7 +131,7 @@ public function getObjects()
/**
* @return string|null
*/
public function updateOrCreateCalendarObject($objectUri, $calendarData): ?string
public function updateOrCreateCalendarObject($calendarId, $objectUri, $calendarData): ?string
{
return null;
}
Expand Down
11 changes: 6 additions & 5 deletions app/Http/Controllers/DAV/Backend/CalDAV/CalDAVTasks.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public function getDescription()
*
* @return \Illuminate\Support\Collection
*/
public function getObjects()
public function getObjects($collectionId)
{
return Auth::user()->account
->tasks()
Expand All @@ -52,10 +52,11 @@ public function getObjects()
/**
* Returns the contact for the specific uuid.
*
* @param mixed|null $collectionId
* @param string $uuid
* @return mixed
*/
public function getObjectUuid($uuid)
public function getObjectUuid($collectionId, $uuid)
{
return Task::where([
'account_id' => Auth::user()->account_id,
Expand Down Expand Up @@ -123,11 +124,11 @@ public function prepareData($task)
* @param string $calendarData
* @return string|null
*/
public function updateOrCreateCalendarObject($objectUri, $calendarData): ?string
public function updateOrCreateCalendarObject($calendarId, $objectUri, $calendarData): ?string
{
$task_id = null;
if ($objectUri) {
$task = $this->getObject($objectUri);
$task = $this->getObject($this->backendUri(), $objectUri);

if ($task) {
$task_id = $task->id;
Expand Down Expand Up @@ -167,7 +168,7 @@ public function updateOrCreateCalendarObject($objectUri, $calendarData): ?string
*/
public function deleteCalendarObject($objectUri)
{
$task = $this->getObject($objectUri);
$task = $this->getObject($this->backendUri(), $objectUri);

if ($task) {
try {
Expand Down
6 changes: 4 additions & 2 deletions app/Http/Controllers/DAV/Backend/CalDAV/ICalDAVBackend.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,11 @@ public function getDescription();
* The getChanges method returns all the changes that have happened, since
* the specified syncToken in the specified calendar.
*
* @param string|null $calendarId
* @param string $syncToken
* @return array
*/
public function getChanges($syncToken);
public function getChanges($calendarId, $syncToken);

/**
* Returns calendar object.
Expand Down Expand Up @@ -98,11 +99,12 @@ public function prepareData($obj);
* calendar-data. If the result of a subsequent GET to this object is not
* the exact same as this request body, you should omit the ETag.
*
* @param string|null $calendarId
* @param string $objectUri
* @param string $calendarData
* @return string|null
*/
public function updateOrCreateCalendarObject($objectUri, $calendarData): ?string;
public function updateOrCreateCalendarObject($calendarId, $objectUri, $calendarData): ?string;

/**
* Deletes an existing calendar object.
Expand Down
4 changes: 2 additions & 2 deletions app/Http/Controllers/DAV/Backend/CardDAV/AddressBook.php
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ public function getLastModified(): ?int
{
$carddavBackend = $this->carddavBackend;
if ($carddavBackend instanceof CardDAVBackend) {
$date = $carddavBackend->getLastModified();
$date = $carddavBackend->getLastModified(null);
if (! is_null($date)) {
return (int) $date->timestamp;
}
Expand All @@ -92,7 +92,7 @@ public function getSyncToken(): ?string
{
$carddavBackend = $this->carddavBackend;
if ($carddavBackend instanceof CardDAVBackend) {
return (string) $carddavBackend->refreshSyncToken()->id;
return (string) $carddavBackend->refreshSyncToken(null)->id;
}

return null;
Expand Down
Loading

0 comments on commit a18962e

Please sign in to comment.