Further cleanup

Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
Julius Härtl
2020-09-01 14:04:06 +02:00
parent 6502657b72
commit 341a9628e9
7 changed files with 27 additions and 36 deletions

View File

@@ -28,6 +28,7 @@ use OCA\Deck\Db\Acl;
use OCA\Deck\Db\Board;
use Sabre\CalDAV\Xml\Property\SupportedCalendarComponentSet;
use Sabre\DAV\Exception\Forbidden;
use Sabre\DAV\Exception\NotFound;
use Sabre\DAV\PropPatch;
class Calendar extends ExternalCalendar {
@@ -66,24 +67,9 @@ class Calendar extends ExternalCalendar {
'privilege' => '{DAV:}read',
'principal' => $this->getOwner(),
'protected' => true,
],
[
'privilege' => '{DAV:}read',
'principal' => $this->getOwner() . '/calendar-proxy-write',
'protected' => true,
],
[
'privilege' => '{DAV:}read',
'principal' => $this->getOwner() . '/calendar-proxy-read',
'protected' => true,
],
]
];
if ($this->backend->checkBoardPermission($this->board->getId(), Acl::PERMISSION_EDIT)) {
$acl[] = [
'privilege' => '{DAV:}write',
'principal' => $this->getOwner(),
'protected' => true,
];
if ($this->backend->checkBoardPermission($this->board->getId(), Acl::PERMISSION_MANAGE)) {
$acl[] = [
'privilege' => '{DAV:}write-properties',
'principal' => $this->getOwner(),
@@ -109,7 +95,7 @@ class Calendar extends ExternalCalendar {
}
public function createFile($name, $data = null) {
throw new \Sabre\DAV\Exception\Forbidden('Creating a new entry is not implemented');
throw new Forbidden('Creating a new entry is not implemented');
}
public function getChild($name) {
@@ -121,9 +107,10 @@ class Calendar extends ExternalCalendar {
}
));
if (count($card) > 0) {
return new CalendarObject($this, $name, $card[0], $this->backend);
return new CalendarObject($this, $name, $this->backend, $card[0]);
}
}
throw new NotFound('Node not found');
}
public function getChildren() {
@@ -151,7 +138,7 @@ class Calendar extends ExternalCalendar {
public function delete() {
return null;
throw new Forbidden('Deleting an entry is not implemented');
}
public function getLastModified() {
@@ -171,7 +158,7 @@ class Calendar extends ExternalCalendar {
foreach ($properties as $key => $value) {
switch ($key) {
case '{DAV:}displayname':
if (mb_substr($value, 0, strlen('Deck: '))) {
if (mb_strpos($value, 'Deck: ') === 0) {
$value = mb_substr($value, strlen('Deck: '));
}
$this->board->setTitle($value);

View File

@@ -42,7 +42,7 @@ class CalendarObject implements ICalendarObject, IACL {
/** @var VCalendar */
private $calendarObject;
public function __construct(Calendar $calendar, string $name, $sourceItem = null, DeckCalendarBackend $backend) {
public function __construct(Calendar $calendar, string $name, DeckCalendarBackend $backend, $sourceItem) {
$this->calendar = $calendar;
$this->name = $name;
$this->sourceItem = $sourceItem;

View File

@@ -26,6 +26,7 @@ namespace OCA\Deck\DAV;
use OCA\DAV\CalDAV\Integration\ExternalCalendar;
use OCA\DAV\CalDAV\Integration\ICalendarProvider;
use OCA\Deck\Db\Board;
use Sabre\DAV\Exception\NotFound;
class CalendarPlugin implements ICalendarProvider {
@@ -55,10 +56,13 @@ class CalendarPlugin implements ICalendarProvider {
public function getCalendarInCalendarHome(string $principalUri, string $calendarUri): ?ExternalCalendar {
if ($this->hasCalendarInCalendarHome($principalUri, $calendarUri)) {
$board = $this->backend->getBoard((int)str_replace('board-', '', $calendarUri));
return new Calendar($principalUri, $calendarUri, $board, $this->backend);
try {
$board = $this->backend->getBoard((int)str_replace('board-', '', $calendarUri));
return new Calendar($principalUri, $calendarUri, $board, $this->backend);
} catch (NotFound $e) {
// We can just return null if we have no matching board
}
}
return null;
}
}

View File

@@ -32,6 +32,7 @@ use OCA\Deck\Service\BoardService;
use OCA\Deck\Service\CardService;
use OCA\Deck\Service\PermissionService;
use OCA\Deck\Service\StackService;
use Sabre\DAV\Exception\NotFound;
class DeckCalendarBackend {
@@ -62,7 +63,11 @@ class DeckCalendarBackend {
}
public function getBoard(int $id): Board {
return $this->boardService->find($id);
try {
return $this->boardService->find($id);
} catch (\Exception $e) {
throw new NotFound('Board with id ' . $id . ' not found');
}
}
public function checkBoardPermission(int $id, int $permission): bool {

View File

@@ -144,14 +144,9 @@ class Card extends RelationalEntity {
return $label->getTitle();
}, $this->getLabels());
}
foreach ($this->getAssignedUsers() as $user) {
$participant = $user->resolveParticipant();
// FIXME use proper uri
$event->add('ATTENDEE', 'https://localhost/remote.php/dav/principals/users/:' . $participant->getUID(), [ 'CN' => $participant->getDisplayName()]);
}
$event->SUMMARY = $this->getTitle();
$event->DESCRIPTION = $this->getDescription();
$calendar->add($event);
return $calendar;
}

View File

@@ -57,7 +57,7 @@ class Stack extends RelationalEntity {
$calendar = new VCalendar();
$event = $calendar->createComponent('VTODO');
$event->UID = 'deck-stack-' . $this->getId();
$event->SUMMARY = '[Stack]: ' . $this->getTitle();
$event->SUMMARY = 'List : ' . $this->getTitle();
$calendar->add($event);
return $calendar;
}

View File

@@ -348,7 +348,7 @@ class BoardService {
throw new BadRequestException('board id must be a number');
}
$this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_READ);
$this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_MANAGE);
$board = $this->find($id);
if ($board->getDeletedAt() > 0) {
throw new BadRequestException('This board has already been deleted');
@@ -377,7 +377,7 @@ class BoardService {
throw new BadRequestException('board id must be a number');
}
$this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_READ);
$this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_MANAGE);
$board = $this->find($id);
$board->setDeletedAt(0);
$board = $this->boardMapper->update($board);
@@ -404,7 +404,7 @@ class BoardService {
throw new BadRequestException('id must be a number');
}
$this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_READ);
$this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_MANAGE);
$board = $this->find($id);
$delete = $this->boardMapper->delete($board);