Compare commits
72 Commits
enh/addCar
...
v1.1.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
48e6bae44a | ||
|
|
c75463429e | ||
|
|
3d3f2de781 | ||
|
|
2454df9a35 | ||
|
|
2a7a0e4c6d | ||
|
|
6edf265b78 | ||
|
|
8e28f8e67c | ||
|
|
3b11c5c7ea | ||
|
|
be05ec1b45 | ||
|
|
b407f102fe | ||
|
|
e82a2be836 | ||
|
|
d7f7cf584f | ||
|
|
3fae174906 | ||
|
|
b58bba25bb | ||
|
|
407acc47a4 | ||
|
|
2ba19bd6fe | ||
|
|
16e79dc616 | ||
|
|
f48187f28c | ||
|
|
ea5aac3d27 | ||
|
|
3487e06c8c | ||
|
|
fd253009f1 | ||
|
|
039d3e8238 | ||
|
|
31d759ee62 | ||
|
|
53a30585f3 | ||
|
|
a2ebf3d3f0 | ||
|
|
5b7505c60c | ||
|
|
516b15d3a1 | ||
|
|
6ac8cafd46 | ||
|
|
e5c65a67a7 | ||
|
|
7b72c93076 | ||
|
|
f5550c456e | ||
|
|
fb8b724e1b | ||
|
|
a3da157aa4 | ||
|
|
0118c1e409 | ||
|
|
9dbf45ca25 | ||
|
|
184cb01f5a | ||
|
|
b3a4cca482 | ||
|
|
1272c672ae | ||
|
|
214898c3d6 | ||
|
|
7ba20e71ee | ||
|
|
49f84c31fb | ||
|
|
69f56981f4 | ||
|
|
7acd1a054e | ||
|
|
ef90ab0b2a | ||
|
|
1a275b0884 | ||
|
|
ffb25a7553 | ||
|
|
9a0476f538 | ||
|
|
9b9413c5e1 | ||
|
|
e22c6e675b | ||
|
|
92a6cbce37 | ||
|
|
871edf1a25 | ||
|
|
05376a5d3a | ||
|
|
5cc52526cf | ||
|
|
30bb429a57 | ||
|
|
52cbd3d6d8 | ||
|
|
15ae74249b | ||
|
|
aa069805c5 | ||
|
|
e5338bf6d2 | ||
|
|
65a3033403 | ||
|
|
8eb5adfac8 | ||
|
|
c4672f04d2 | ||
|
|
54536eff93 | ||
|
|
62f6cfecc2 | ||
|
|
d7d5365a67 | ||
|
|
8380ae69c8 | ||
|
|
6a409c508e | ||
|
|
31e42079d0 | ||
|
|
4c2346c66e | ||
|
|
79b950e192 | ||
|
|
012e5b8ef9 | ||
|
|
3914127b39 | ||
|
|
be7357d110 |
14
.drone.yml
14
.drone.yml
@@ -5,7 +5,7 @@ steps:
|
||||
image: nextcloudci/php7.3:latest
|
||||
environment:
|
||||
APP_NAME: deck
|
||||
CORE_BRANCH: master
|
||||
CORE_BRANCH: stable20
|
||||
DB: sqlite
|
||||
commands:
|
||||
# Pre-setup steps
|
||||
@@ -20,7 +20,7 @@ steps:
|
||||
image: nextcloudci/php7.2:latest
|
||||
environment:
|
||||
APP_NAME: deck
|
||||
CORE_BRANCH: master
|
||||
CORE_BRANCH: stable20
|
||||
DB: sqlite
|
||||
commands:
|
||||
- composer install
|
||||
@@ -29,7 +29,7 @@ steps:
|
||||
image: nextcloudci/php7.3:php7.3-2
|
||||
environment:
|
||||
APP_NAME: deck
|
||||
CORE_BRANCH: master
|
||||
CORE_BRANCH: stable20
|
||||
DB: sqlite
|
||||
commands:
|
||||
- composer install
|
||||
@@ -38,7 +38,7 @@ steps:
|
||||
image: nextcloudci/php7.4:latest
|
||||
environment:
|
||||
APP_NAME: deck
|
||||
CORE_BRANCH: master
|
||||
CORE_BRANCH: stable20
|
||||
DB: sqlite
|
||||
commands:
|
||||
- composer install
|
||||
@@ -58,7 +58,7 @@ steps:
|
||||
image: nextcloudci/php7.3:latest
|
||||
environment:
|
||||
APP_NAME: deck
|
||||
CORE_BRANCH: master
|
||||
CORE_BRANCH: stable20
|
||||
DB: sqlite
|
||||
commands:
|
||||
# Pre-setup steps
|
||||
@@ -84,7 +84,7 @@ steps:
|
||||
image: nextcloudci/php7.4:latest
|
||||
environment:
|
||||
APP_NAME: deck
|
||||
CORE_BRANCH: master
|
||||
CORE_BRANCH: stable20
|
||||
DB: sqlite
|
||||
commands:
|
||||
# Pre-setup steps
|
||||
@@ -111,7 +111,7 @@ steps:
|
||||
image: nextcloudci/php7.3:latest
|
||||
environment:
|
||||
APP_NAME: deck
|
||||
CORE_BRANCH: master
|
||||
CORE_BRANCH: stable20
|
||||
DB: sqlite
|
||||
commands:
|
||||
# Pre-setup steps
|
||||
|
||||
11
.travis.yml
11
.travis.yml
@@ -2,9 +2,13 @@ language: php
|
||||
services:
|
||||
- mysql
|
||||
php:
|
||||
- 7.2
|
||||
- 7.3
|
||||
- 7.4
|
||||
env:
|
||||
- CORE_BRANCH=master DB=mysql
|
||||
- CORE_BRANCH=stable20 DB=mysql
|
||||
- CORE_BRANCH=stable19 DB=mysql
|
||||
- CORE_BRANCH=stable18 DB=mysql
|
||||
|
||||
matrix:
|
||||
include:
|
||||
@@ -17,10 +21,13 @@ before_install:
|
||||
- wget https://raw.githubusercontent.com/nextcloud/travis_ci/master/before_install.sh
|
||||
- bash ./before_install.sh deck $CORE_BRANCH $DB
|
||||
- cd ../server
|
||||
- ./occ app:enable deck
|
||||
|
||||
before_script:
|
||||
- cd apps/deck
|
||||
- composer install --no-dev
|
||||
- cd ../../
|
||||
- ./occ app:enable deck
|
||||
- cd apps/deck
|
||||
|
||||
script:
|
||||
- composer install
|
||||
|
||||
56
CHANGELOG.md
56
CHANGELOG.md
@@ -1,31 +1,57 @@
|
||||
# Changelog
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
## 1.1.0 - unreleased
|
||||
## 1.1.1 - 2020-10-13
|
||||
|
||||
### Merged PRs
|
||||
## Bugfixes
|
||||
|
||||
* [#2364](https://github.com/nextcloud/deck/pull/2364) Use uid instead of displayname for sharee results
|
||||
* [#2365](https://github.com/nextcloud/deck/pull/2365) Comments do not depend on the comments app (@jakobroehrl)
|
||||
* [#2395](https://github.com/nextcloud/deck/pull/2395) Fix failure if full text search app was enabled
|
||||
* [#2396](https://github.com/nextcloud/deck/pull/2396) Also exclude deleted items from calendar boards
|
||||
* [#2425](https://github.com/nextcloud/deck/pull/2425) Fix filter popover styling (@Flamenco)
|
||||
* [#2432](https://github.com/nextcloud/deck/pull/2432) Properly handle multiple shares in a row and refactor sharee loading
|
||||
|
||||
## 1.1.0 - 2020-10-03
|
||||
|
||||
### Features
|
||||
|
||||
* [#2115](https://github.com/nextcloud/deck/pull/2115) Dashboard widget for Nextcloud 20
|
||||
* [#1545](https://github.com/nextcloud/deck/pull/1545) Show cards in calendar/tasks app and make them available though CalDAV
|
||||
* [#2200](https://github.com/nextcloud/deck/pull/2200) Unified search implementation for Nextcloud 20
|
||||
* [#1934](https://github.com/nextcloud/deck/pull/1934) Upcoming cards overview @jakobroehrl
|
||||
* [#2047](https://github.com/nextcloud/deck/pull/2047) Show card details in modal @jakobroehrl
|
||||
* [#1853](https://github.com/nextcloud/deck/pull/1853) Archive all cards from stack @jakobroehrl
|
||||
* [#1865](https://github.com/nextcloud/deck/pull/1865) Add stack button on empty board @jakobroehrl
|
||||
* [#1926](https://github.com/nextcloud/deck/pull/1926) New filter: unassigned cards @jakobroehrl
|
||||
* [#1934](https://github.com/nextcloud/deck/pull/1934) Card dashboard @jakobroehrl
|
||||
|
||||
### Bugfixes
|
||||
|
||||
* [#2035](https://github.com/nextcloud/deck/pull/2035) Attach files in description @jakobroehrl
|
||||
* [#2047](https://github.com/nextcloud/deck/pull/2047) Show card details in modal @jakobroehrl
|
||||
* [#2115](https://github.com/nextcloud/deck/pull/2115) Dashboard panel @juliushaertl
|
||||
* [#2123](https://github.com/nextcloud/deck/pull/2123) Fix control tooltip @jakobroehrl
|
||||
* [#2144](https://github.com/nextcloud/deck/pull/2144) Fix nextcloud if install with dev dependencies @matchish
|
||||
* [#2157](https://github.com/nextcloud/deck/pull/2157) Build/webpack shared config @juliushaertl
|
||||
* [#2158](https://github.com/nextcloud/deck/pull/2158) Fix description in dark mode @juliushaertl
|
||||
* [#2169](https://github.com/nextcloud/deck/pull/2169) Bump webpack-merge from 5.0.9 to 5.1.0 @dependabot
|
||||
* [#2170](https://github.com/nextcloud/deck/pull/2170) Add lastModified date to boards API documentation @stefan-niedermann
|
||||
* [#2158](https://github.com/nextcloud/deck/pull/2158) Fix description in dark mode
|
||||
* [#2188](https://github.com/nextcloud/deck/pull/2188) CardBadges: Count checkboxes started with "+ [ ]" @joreiff
|
||||
* [#2200](https://github.com/nextcloud/deck/pull/2200) Unified search implementation @juliushaertl
|
||||
* [#2206](https://github.com/nextcloud/deck/pull/2206) Fix read-only sidebar (fixes #2033) @juliushaertl
|
||||
* [#2208](https://github.com/nextcloud/deck/pull/2208) Fix design, dark mode and keyboard navigation of the board list @juliushaertl
|
||||
* [#2206](https://github.com/nextcloud/deck/pull/2206) Fix read-only sidebar (fixes #2033)
|
||||
* [#2208](https://github.com/nextcloud/deck/pull/2208) Fix design, dark mode and keyboard navigation of the board list
|
||||
* [#2210](https://github.com/nextcloud/deck/pull/2210) Fix an incorrect/misleading message in lib/Service/BoardService.php @jordanbancino
|
||||
* [#2211](https://github.com/nextcloud/deck/pull/2211) Update incorrect field in API documentation (docs/API.md) @jordanbancino
|
||||
* [#2243](https://github.com/nextcloud/deck/pull/2243) Various smaller styling fixes @juliushaertl
|
||||
* [#2244](https://github.com/nextcloud/deck/pull/2244) Toggle filter on clicking card labels @juliushaertl
|
||||
* [#2243](https://github.com/nextcloud/deck/pull/2243) Various smaller styling fixes
|
||||
* [#2244](https://github.com/nextcloud/deck/pull/2244) Toggle filter on clicking card labels
|
||||
* [#2117](https://github.com/nextcloud/deck/pull/2117) Activity fixes
|
||||
* [#2255](https://github.com/nextcloud/deck/pull/2255) Use unified search events to apply on board filtering
|
||||
* [#2271](https://github.com/nextcloud/deck/pull/2271) Sort tags in filter @jakobroehrl
|
||||
* [#2318](https://github.com/nextcloud/deck/pull/2318) Card title: prevent space and no text @jakobroehrl
|
||||
* [#2319](https://github.com/nextcloud/deck/pull/2319) Move style loading to BeforeTemplateRenderedEvent
|
||||
* [#2320](https://github.com/nextcloud/deck/pull/2320) Consistent naming @jakobroehrl
|
||||
* [#2252](https://github.com/nextcloud/deck/pull/2252) Fix double slash in the deck activity links @baraksoa
|
||||
* [#2270](https://github.com/nextcloud/deck/pull/2270) Fix empty content view to align with other widgets
|
||||
* [#2275](https://github.com/nextcloud/deck/pull/2275) Wait for services to be registered before performing further setup that requires services
|
||||
* [#2278](https://github.com/nextcloud/deck/pull/2278) Fix wrong SQL queries @Chartman123
|
||||
* [#2279](https://github.com/nextcloud/deck/pull/2279) L10n:add translation to card placeholder @mjanssens
|
||||
* [#2282](https://github.com/nextcloud/deck/pull/2282) Duedate picker localization
|
||||
* [#2283](https://github.com/nextcloud/deck/pull/2283) Do not handle exceptions from page controller in the ExceptionMiddleware
|
||||
* [#2298](https://github.com/nextcloud/deck/pull/2298) Use absolute URLs for the search @nickvergessen
|
||||
|
||||
|
||||
|
||||
## 1.0.5 - 2020-07-15
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
- 🚀 Get your project organized
|
||||
|
||||
</description>
|
||||
<version>1.1.0-beta2</version>
|
||||
<version>1.1.1</version>
|
||||
<licence>agpl</licence>
|
||||
<author>Julius Härtl</author>
|
||||
<namespace>Deck</namespace>
|
||||
@@ -36,7 +36,7 @@
|
||||
<database min-version="9.4">pgsql</database>
|
||||
<database>sqlite</database>
|
||||
<database min-version="5.5">mysql</database>
|
||||
<nextcloud min-version="18" max-version="21" />
|
||||
<nextcloud min-version="18" max-version="20" />
|
||||
</dependencies>
|
||||
<background-jobs>
|
||||
<job>OCA\Deck\Cron\DeleteCron</job>
|
||||
|
||||
@@ -191,6 +191,7 @@ OC.L10N.register(
|
||||
"Select Date" : "Seleccione la fecha",
|
||||
"Modified" : "Modificado",
|
||||
"Created" : "Creado",
|
||||
"The title cannot be empty." : "El título no puede estar vacío.",
|
||||
"No comments yet. Begin the discussion!" : "Todavía no hay comentarios. ¡Comienza la discusión!",
|
||||
"Save" : "Guardar",
|
||||
"The comment cannot be empty." : "El comentario no puede estar vacío.",
|
||||
@@ -216,6 +217,7 @@ OC.L10N.register(
|
||||
"Show boards in calendar/tasks" : "Mostrar tableros en calendario/tareas",
|
||||
"Limit deck usage of groups" : "Limitar el uso de Deck a grupos",
|
||||
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Limitar Deck impedirá que usuarios que no formen parte de esos grupos creen sus propios tableros. Los usuarios todavía podrán trabajar en tableros que hayan sido compartidos con ellos.",
|
||||
"Board name" : "Nombre del tablero",
|
||||
"Edit board" : "Editar tablero",
|
||||
"Clone board " : "Clonar tablero",
|
||||
"Unarchive board " : "Desarchivar tablero",
|
||||
|
||||
@@ -189,6 +189,7 @@
|
||||
"Select Date" : "Seleccione la fecha",
|
||||
"Modified" : "Modificado",
|
||||
"Created" : "Creado",
|
||||
"The title cannot be empty." : "El título no puede estar vacío.",
|
||||
"No comments yet. Begin the discussion!" : "Todavía no hay comentarios. ¡Comienza la discusión!",
|
||||
"Save" : "Guardar",
|
||||
"The comment cannot be empty." : "El comentario no puede estar vacío.",
|
||||
@@ -214,6 +215,7 @@
|
||||
"Show boards in calendar/tasks" : "Mostrar tableros en calendario/tareas",
|
||||
"Limit deck usage of groups" : "Limitar el uso de Deck a grupos",
|
||||
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Limitar Deck impedirá que usuarios que no formen parte de esos grupos creen sus propios tableros. Los usuarios todavía podrán trabajar en tableros que hayan sido compartidos con ellos.",
|
||||
"Board name" : "Nombre del tablero",
|
||||
"Edit board" : "Editar tablero",
|
||||
"Clone board " : "Clonar tablero",
|
||||
"Unarchive board " : "Desarchivar tablero",
|
||||
|
||||
@@ -240,9 +240,25 @@ class ActivityManager {
|
||||
}
|
||||
|
||||
public function triggerEvent($objectType, $entity, $subject, $additionalParams = [], $author = null) {
|
||||
if ($author === null) {
|
||||
$author = $this->userId;
|
||||
}
|
||||
try {
|
||||
$event = $this->createEvent($objectType, $entity, $subject, $additionalParams, $author);
|
||||
if ($event !== null) {
|
||||
$json = json_encode($event->getSubjectParameters());
|
||||
if (mb_strlen($json) > 4000) {
|
||||
$params = json_decode(json_encode($event->getSubjectParameters()), true);
|
||||
|
||||
$newContent = $params['after'];
|
||||
unset($params['before'], $params['after'], $params['card']['description']);
|
||||
|
||||
$params['after'] = mb_substr($newContent, 0, 2000);
|
||||
if (mb_strlen($newContent) > 2000) {
|
||||
$params['after'] .= '...';
|
||||
}
|
||||
$event->setSubject($event->getSubject(), $params);
|
||||
}
|
||||
$this->sendToUsers($event);
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
|
||||
@@ -96,6 +96,7 @@ class DeckProvider implements IProvider {
|
||||
unset($subjectParams['author']);
|
||||
}
|
||||
$user = $this->userManager->get($author);
|
||||
$params = [];
|
||||
if ($user !== null) {
|
||||
$params = [
|
||||
'user' => [
|
||||
@@ -328,8 +329,8 @@ class DeckProvider implements IProvider {
|
||||
if (array_key_exists('diff', $subjectParams) && $subjectParams['diff']) {
|
||||
$diff = new Diff();
|
||||
// Don't add diff as message since we are limited to 255 chars here
|
||||
//$event->setMessage($subjectParams['after']);
|
||||
$event->setParsedMessage('<pre class="visualdiff">' . $diff->render($subjectParams['before'], $subjectParams['after']) . '</pre>');
|
||||
$event->setParsedMessage($subjectParams['after']);
|
||||
//$event->setParsedMessage('<pre class="visualdiff">' . $diff->render($subjectParams['before'], $subjectParams['after']) . '</pre>');
|
||||
return $params;
|
||||
}
|
||||
if (array_key_exists('before', $subjectParams)) {
|
||||
|
||||
@@ -78,8 +78,8 @@ class CardController extends Controller {
|
||||
* @param int $order
|
||||
* @return \OCP\AppFramework\Db\Entity
|
||||
*/
|
||||
public function create($title, $stackId, $type = 'plain', $order = 999, $description = '', $duedate = null) {
|
||||
return $this->cardService->create($title, $stackId, $type, $order, $this->userId, $description, $duedate);
|
||||
public function create($title, $stackId, $type = 'plain', $order = 999) {
|
||||
return $this->cardService->create($title, $stackId, $type, $order, $this->userId);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -59,7 +59,7 @@ class DeckCalendarBackend {
|
||||
}
|
||||
|
||||
public function getBoards(): array {
|
||||
return $this->boardService->findAll();
|
||||
return $this->boardService->findAll(-1, null, false);
|
||||
}
|
||||
|
||||
public function getBoard(int $id): Board {
|
||||
|
||||
@@ -93,10 +93,18 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
|
||||
* @param null $offset
|
||||
* @return array
|
||||
*/
|
||||
public function findAllByUser($userId, $limit = null, $offset = null, $since = -1) {
|
||||
$sql = 'SELECT id, title, owner, color, archived, deleted_at, 0 as shared, last_modified FROM `*PREFIX*deck_boards` WHERE owner = ? AND last_modified > ? UNION ' .
|
||||
public function findAllByUser($userId, $limit = null, $offset = null, $since = -1, $includeArchived = true) {
|
||||
// FIXME: One moving to QBMapper we should allow filtering the boards probably by method chaining for additional where clauses
|
||||
$sql = 'SELECT id, title, owner, color, archived, deleted_at, 0 as shared, last_modified FROM `*PREFIX*deck_boards` WHERE owner = ? AND last_modified > ?';
|
||||
if (!$includeArchived) {
|
||||
$sql .= ' AND NOT archived AND deleted_at = 0';
|
||||
}
|
||||
$sql .= ' UNION ' .
|
||||
'SELECT boards.id, title, owner, color, archived, deleted_at, 1 as shared, last_modified FROM `*PREFIX*deck_boards` as boards ' .
|
||||
'JOIN `*PREFIX*deck_board_acl` as acl ON boards.id=acl.board_id WHERE acl.participant=? AND acl.type=? AND boards.owner != ? AND last_modified > ?';
|
||||
if (!$includeArchived) {
|
||||
$sql .= ' AND NOT archived AND deleted_at = 0';
|
||||
}
|
||||
$entries = $this->findEntities($sql, [$userId, $since, $userId, Acl::PERMISSION_TYPE_USER, $userId, $since], $limit, $offset);
|
||||
/* @var Board $entry */
|
||||
foreach ($entries as $entry) {
|
||||
@@ -120,7 +128,7 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
|
||||
* @param null $offset
|
||||
* @return array
|
||||
*/
|
||||
public function findAllByGroups($userId, $groups, $limit = null, $offset = null) {
|
||||
public function findAllByGroups($userId, $groups, $limit = null, $offset = null, $since = -1,$includeArchived = true) {
|
||||
if (count($groups) <= 0) {
|
||||
return [];
|
||||
}
|
||||
@@ -132,7 +140,10 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
|
||||
$sql .= ' OR ';
|
||||
}
|
||||
}
|
||||
$sql .= ');';
|
||||
$sql .= ')';
|
||||
if (!$includeArchived) {
|
||||
$sql .= ' AND NOT archived AND deleted_at = 0';
|
||||
}
|
||||
$entries = $this->findEntities($sql, array_merge([$userId, Acl::PERMISSION_TYPE_GROUP], $groups), $limit, $offset);
|
||||
/* @var Board $entry */
|
||||
foreach ($entries as $entry) {
|
||||
@@ -142,7 +153,7 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
|
||||
return $entries;
|
||||
}
|
||||
|
||||
public function findAllByCircles($userId, $limit = null, $offset = null) {
|
||||
public function findAllByCircles($userId, $limit = null, $offset = null, $since = -1,$includeArchived = true) {
|
||||
if (!$this->circlesEnabled) {
|
||||
return [];
|
||||
}
|
||||
@@ -161,7 +172,10 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
|
||||
$sql .= ' OR ';
|
||||
}
|
||||
}
|
||||
$sql .= ');';
|
||||
$sql .= ')';
|
||||
if (!$includeArchived) {
|
||||
$sql .= ' AND NOT archived AND deleted_at = 0';
|
||||
}
|
||||
$entries = $this->findEntities($sql, array_merge([$userId, Acl::PERMISSION_TYPE_CIRCLE], $circles), $limit, $offset);
|
||||
/* @var Board $entry */
|
||||
foreach ($entries as $entry) {
|
||||
|
||||
@@ -42,7 +42,7 @@ class FTSEvent extends Event {
|
||||
}
|
||||
|
||||
public function getArgument($key) {
|
||||
if ($this->hasArgument($key)) {
|
||||
if (isset($this->arguments[$key])) {
|
||||
return $this->arguments[$key];
|
||||
}
|
||||
|
||||
|
||||
@@ -107,11 +107,11 @@ class BoardService {
|
||||
$this->userId = $userId;
|
||||
}
|
||||
|
||||
public function getUserBoards(int $since = -1): array {
|
||||
public function getUserBoards(int $since = -1, $includeArchived = true): array {
|
||||
$userInfo = $this->getBoardPrerequisites();
|
||||
$userBoards = $this->boardMapper->findAllByUser($userInfo['user'], null, null, $since);
|
||||
$groupBoards = $this->boardMapper->findAllByGroups($userInfo['user'], $userInfo['groups'],null, null, $since);
|
||||
$circleBoards = $this->boardMapper->findAllByCircles($userInfo['user'], null, null, $since);
|
||||
$userBoards = $this->boardMapper->findAllByUser($userInfo['user'], null, null, $since, $includeArchived);
|
||||
$groupBoards = $this->boardMapper->findAllByGroups($userInfo['user'], $userInfo['groups'],null, null, $since, $includeArchived);
|
||||
$circleBoards = $this->boardMapper->findAllByCircles($userInfo['user'], null, null, $since, $includeArchived);
|
||||
$mergedBoards = array_merge($userBoards, $groupBoards, $circleBoards);
|
||||
$result = [];
|
||||
/** @var Board $item */
|
||||
@@ -125,11 +125,11 @@ class BoardService {
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function findAll($since = -1, $details = null) {
|
||||
public function findAll($since = -1, $details = null, $includeArchived = true) {
|
||||
if ($this->boardsCache) {
|
||||
return $this->boardsCache;
|
||||
}
|
||||
$complete = $this->getUserBoards($since);
|
||||
$complete = $this->getUserBoards($since, $includeArchived);
|
||||
$result = [];
|
||||
/** @var Board $item */
|
||||
foreach ($complete as &$item) {
|
||||
|
||||
@@ -415,8 +415,11 @@ class CardService {
|
||||
if ($card->getArchived()) {
|
||||
throw new StatusException('Operation not allowed. This card is archived.');
|
||||
}
|
||||
$changes = new ChangeSet($card);
|
||||
$card->setStackId($stackId);
|
||||
$this->cardMapper->update($card);
|
||||
$changes->setAfter($card);
|
||||
$this->activityManager->triggerUpdateEvents(ActivityManager::DECK_OBJECT_CARD, $changes, ActivityManager::SUBJECT_CARD_UPDATE);
|
||||
|
||||
$cards = $this->cardMapper->findAll($stackId);
|
||||
$result = [];
|
||||
|
||||
1581
package-lock.json
generated
1581
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
35
package.json
35
package.json
@@ -33,29 +33,30 @@
|
||||
"@juliushaertl/vue-richtext": "^0.3.3",
|
||||
"@nextcloud/auth": "^1.3.0",
|
||||
"@nextcloud/axios": "^1.4.0",
|
||||
"@nextcloud/dialogs": "^2.0.1",
|
||||
"@nextcloud/dialogs": "^3.0.0",
|
||||
"@nextcloud/event-bus": "^1.2.0",
|
||||
"@nextcloud/files": "^1.1.0",
|
||||
"@nextcloud/initial-state": "^1.1.2",
|
||||
"@nextcloud/initial-state": "^1.2.0",
|
||||
"@nextcloud/l10n": "^1.4.1",
|
||||
"@nextcloud/moment": "^1.1.1",
|
||||
"@nextcloud/router": "^1.2.0",
|
||||
"@nextcloud/vue": "^2.6.5",
|
||||
"@nextcloud/vue": "^2.7.0",
|
||||
"@nextcloud/vue-dashboard": "^1.0.1",
|
||||
"blueimp-md5": "^2.18.0",
|
||||
"dompurify": "^2.1.1",
|
||||
"lodash": "^4.17.20",
|
||||
"markdown-it": "^11.0.1",
|
||||
"markdown-it-task-lists": "^2.1.1",
|
||||
"moment": "^2.29.0",
|
||||
"moment": "^2.29.1",
|
||||
"nextcloud-vue-collections": "^0.8.1",
|
||||
"p-queue": "^6.6.1",
|
||||
"url-search-params-polyfill": "^8.1.0",
|
||||
"vue": "^2.6.12",
|
||||
"vue-at": "^2.5.0-beta.2",
|
||||
"vue-click-outside": "^1.1.0",
|
||||
"vue-easymde": "^1.2.2",
|
||||
"vue-easymde": "^1.3.0",
|
||||
"vue-infinite-loading": "^2.4.5",
|
||||
"vue-router": "^3.4.4",
|
||||
"vue-router": "^3.4.6",
|
||||
"vue-smooth-dnd": "^0.8.1",
|
||||
"vuex": "^3.5.1",
|
||||
"vuex-router-sync": "^5.0.0"
|
||||
@@ -72,44 +73,44 @@
|
||||
"@babel/preset-env": "^7.11.5",
|
||||
"@nextcloud/browserslist-config": "^1.0.0",
|
||||
"@nextcloud/eslint-config": "^2.1.0",
|
||||
"@nextcloud/eslint-plugin": "^1.4.0",
|
||||
"@nextcloud/eslint-plugin": "^1.5.0",
|
||||
"@nextcloud/webpack-vue-config": "^1.4.1",
|
||||
"@vue/test-utils": "^1.1.0",
|
||||
"acorn": "^8.0.1",
|
||||
"acorn": "^8.0.4",
|
||||
"babel-eslint": "^10.1.0",
|
||||
"babel-jest": "^26.3.0",
|
||||
"babel-jest": "^26.5.2",
|
||||
"babel-loader": "^8.1.0",
|
||||
"css-loader": "^4.3.0",
|
||||
"eslint": "^6.8.0",
|
||||
"eslint-config-standard": "^12.0.0",
|
||||
"eslint-friendly-formatter": "^4.0.1",
|
||||
"eslint-loader": "^3.0.4",
|
||||
"eslint-plugin-import": "^2.22.0",
|
||||
"eslint-plugin-import": "^2.22.1",
|
||||
"eslint-plugin-node": "^11.1.0",
|
||||
"eslint-plugin-promise": "^4.2.1",
|
||||
"eslint-plugin-standard": "^4.0.1",
|
||||
"eslint-plugin-vue": "^6.2.2",
|
||||
"file-loader": "^6.1.0",
|
||||
"jest": "^26.4.2",
|
||||
"file-loader": "^6.1.1",
|
||||
"jest": "^26.5.2",
|
||||
"jest-serializer-vue": "^2.0.2",
|
||||
"minimist": "^1.2.5",
|
||||
"node-sass": "^4.14.1",
|
||||
"raw-loader": "^4.0.1",
|
||||
"sass-loader": "^10.0.2",
|
||||
"style-loader": "^1.2.1",
|
||||
"raw-loader": "^4.0.2",
|
||||
"sass-loader": "^10.0.3",
|
||||
"style-loader": "^1.3.0",
|
||||
"stylelint": "^13.7.2",
|
||||
"stylelint-config-recommended": "^3.0.0",
|
||||
"stylelint-config-recommended-scss": "^4.2.0",
|
||||
"stylelint-scss": "^3.18.0",
|
||||
"stylelint-webpack-plugin": "^2.1.0",
|
||||
"url-loader": "^4.1.0",
|
||||
"url-loader": "^4.1.1",
|
||||
"vue-jest": "^3.0.7",
|
||||
"vue-loader": "^15.9.3",
|
||||
"vue-template-compiler": "^2.6.12",
|
||||
"webpack": "^4.44.2",
|
||||
"webpack-cli": "^3.3.12",
|
||||
"webpack-dev-server": "^3.11.0",
|
||||
"webpack-merge": "^5.1.4"
|
||||
"webpack-merge": "^5.2.0"
|
||||
},
|
||||
"jest": {
|
||||
"moduleFileExtensions": [
|
||||
|
||||
@@ -32,11 +32,6 @@
|
||||
</div>
|
||||
<div v-if="overviewName" class="board-title">
|
||||
<h2><a href="#">{{ overviewName }}</a></h2>
|
||||
<Actions>
|
||||
<ActionButton icon="icon-add" @click.stop="modalShow=true">
|
||||
{{ t('deck', 'Add card on today') }}
|
||||
</ActionButton>
|
||||
</Actions>
|
||||
</div>
|
||||
<div v-if="board" class="board-actions">
|
||||
<div v-if="canManage && !showArchived && !board.archived"
|
||||
@@ -198,8 +193,6 @@
|
||||
</Actions>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ControlsModal :modal-show="modalShow" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -207,12 +200,11 @@
|
||||
import { mapState, mapGetters } from 'vuex'
|
||||
import { Actions, ActionButton, Popover, Avatar } from '@nextcloud/vue'
|
||||
import labelStyle from '../mixins/labelStyle'
|
||||
import ControlsModal from './ControlsModal'
|
||||
|
||||
export default {
|
||||
name: 'Controls',
|
||||
components: {
|
||||
Actions, ActionButton, Popover, Avatar, ControlsModal,
|
||||
Actions, ActionButton, Popover, Avatar,
|
||||
},
|
||||
mixins: [ labelStyle ],
|
||||
props: {
|
||||
@@ -234,12 +226,6 @@ export default {
|
||||
showArchived: false,
|
||||
isAddStackVisible: false,
|
||||
filter: { tags: [], users: [], due: '', unassigned: false },
|
||||
|
||||
modalShow: false,
|
||||
selectedBoard: '',
|
||||
selectedStack: '',
|
||||
stacksFromBoard: [],
|
||||
newCardTitle: '',
|
||||
}
|
||||
},
|
||||
|
||||
@@ -247,8 +233,6 @@ export default {
|
||||
...mapGetters([
|
||||
'canEdit',
|
||||
'canManage',
|
||||
'lastBoardId',
|
||||
'lastListId',
|
||||
]),
|
||||
...mapState({
|
||||
compactMode: state => state.compactMode,
|
||||
@@ -273,15 +257,6 @@ export default {
|
||||
labelsSorted() {
|
||||
return [...this.board.labels].sort((a, b) => (a.title < b.title) ? -1 : 1)
|
||||
},
|
||||
boards() {
|
||||
return this.$store.getters.boards
|
||||
},
|
||||
addCardSetRequiredFields() {
|
||||
if (this.selectedBoard === '' || this.selectedStack === '' || this.newCardTitle.trim() === '') {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
board() {
|
||||
@@ -344,10 +319,6 @@ export default {
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
#new-stack-input-main {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.controls {
|
||||
display: flex;
|
||||
|
||||
@@ -424,6 +395,7 @@ export default {
|
||||
width: 250px;
|
||||
max-height: 80vh;
|
||||
overflow: auto;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
.filter h3 {
|
||||
|
||||
@@ -1,168 +0,0 @@
|
||||
<!--
|
||||
* @copyright Copyright (c) 2020 Jakob Röhrl <jakob.roehrl@web.de>
|
||||
*
|
||||
* @author Jakob Röhrl <jakob.roehrl@web.de>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
-->
|
||||
|
||||
<template>
|
||||
<Modal v-if="modalShow" :title="t('deck', 'Add card on Today')" @close="modalShow=false">
|
||||
<div class="modal__content">
|
||||
{{ lastBoardId - selectedBoard }}
|
||||
{{ lastListId }}
|
||||
<h3>{{ t('deck', 'Add card on Today') }}</h3>
|
||||
<Multiselect v-model="selectedBoard"
|
||||
:placeholder="t('deck', 'Select a board')"
|
||||
:options="boards"
|
||||
:max-height="100"
|
||||
label="title"
|
||||
@select="loadStacksFromBoard" />
|
||||
<Multiselect v-model="selectedStack"
|
||||
:placeholder="t('deck', 'Select a list')"
|
||||
:options="stacksFromBoard"
|
||||
:max-height="100"
|
||||
label="title" />
|
||||
|
||||
<label for="new-stack-input-main" class="hidden-visually">{{ t('deck', 'Add card on Today') }}</label>
|
||||
<input id="new-stack-input-main"
|
||||
ref="newCardInput"
|
||||
v-model="newCardTitle"
|
||||
v-focus
|
||||
type="text"
|
||||
class="no-close"
|
||||
:placeholder="t('deck', 'Card name')">
|
||||
|
||||
<button :disabled="!addCardSetRequiredFields" class="primary" @click="addCard">
|
||||
{{ t('deck', 'Add card') }}
|
||||
</button>
|
||||
<button @click="modalShow=false">
|
||||
{{ t('deck', 'Cancel') }}
|
||||
</button>
|
||||
</div>
|
||||
</Modal>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { Modal, Multiselect } from '@nextcloud/vue'
|
||||
import labelStyle from '../mixins/labelStyle'
|
||||
import axios from '@nextcloud/axios'
|
||||
import { generateUrl } from '@nextcloud/router'
|
||||
import { showError } from '@nextcloud/dialogs'
|
||||
|
||||
export default {
|
||||
name: 'ControlsModal',
|
||||
components: {
|
||||
Modal, Multiselect,
|
||||
},
|
||||
mixins: [ labelStyle ],
|
||||
props: {
|
||||
modalShow: {
|
||||
default: false,
|
||||
type: Boolean,
|
||||
},
|
||||
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
selectedBoard: '',
|
||||
selectedStack: '',
|
||||
stacksFromBoard: [],
|
||||
newCardTitle: '',
|
||||
lastBoardId: localStorage.getItem('deck.lastBoardId'),
|
||||
lastListId: localStorage.getItem('deck.lastListId'),
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
boards() {
|
||||
return this.$store.getters.boards
|
||||
},
|
||||
addCardSetRequiredFields() {
|
||||
if (this.selectedBoard === '' || this.selectedStack === '' || this.newCardTitle.trim() === '') {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
this.setLastBoardId()
|
||||
},
|
||||
|
||||
methods: {
|
||||
setLastBoardId() {
|
||||
if (this.lastBoardId === null || this.lastBoardId === 0) {
|
||||
this.selectedBoard = ''
|
||||
return
|
||||
}
|
||||
this.selectedBoard = this.selectedBoard = this.boards.filter(board => {
|
||||
return board.id === this.lastBoardId
|
||||
})
|
||||
},
|
||||
async loadStacksFromBoard(selectedBoard) {
|
||||
try {
|
||||
const url = generateUrl('/apps/deck/stacks/' + selectedBoard.id)
|
||||
const response = await axios.get(url)
|
||||
this.stacksFromBoard = response.data
|
||||
} catch (err) {
|
||||
return err
|
||||
}
|
||||
},
|
||||
async addCard() {
|
||||
try {
|
||||
const today = new Date()
|
||||
today.setHours(23, 59, 59, 999)
|
||||
await this.$store.dispatch('addCard', {
|
||||
title: this.newCardTitle,
|
||||
stackId: this.selectedStack.id,
|
||||
boardId: this.selectedBoard.id,
|
||||
duedate: today.toISOString(),
|
||||
})
|
||||
this.newCardTitle = ''
|
||||
localStorage.setItem('deck.lastBoardId', this.selectedBoard.id)
|
||||
localStorage.setItem('deck.lastListId', this.selectedStack.id)
|
||||
|
||||
} catch (e) {
|
||||
showError('Could not create card: ' + e.response.data.message)
|
||||
}
|
||||
// this.modalShow = false
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
#new-stack-input-main {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.modal__content {
|
||||
width: 25vw;
|
||||
min-width: 250px;
|
||||
min-height: 120px;
|
||||
text-align: center;
|
||||
margin: 20px 20px 100px 20px;
|
||||
|
||||
.multiselect {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.modal__content button {
|
||||
float: right;
|
||||
margin-top: 50px;
|
||||
}
|
||||
</style>
|
||||
@@ -7,10 +7,19 @@
|
||||
:options="formatedSharees"
|
||||
:user-select="true"
|
||||
label="displayName"
|
||||
:loading="isLoading || !!isSearching"
|
||||
:disabled="isLoading"
|
||||
track-by="multiselectKey"
|
||||
:internal-search="true"
|
||||
@input="clickAddAcl"
|
||||
@search-change="asyncFind" />
|
||||
@search-change="asyncFind">
|
||||
<template #noOptions>
|
||||
{{ isSearching ? t('deck', 'Searching for users, groups and circles ...') : t('deck', 'No participants found') }}
|
||||
</template>
|
||||
<template #noResult>
|
||||
{{ isSearching ? t('deck', 'Searching for users, groups and circles ...') : t('deck', 'No participants found') }}
|
||||
</template>
|
||||
</Multiselect>
|
||||
|
||||
<ul
|
||||
id="shareWithList"
|
||||
@@ -63,6 +72,7 @@ import { Avatar, Multiselect, Actions, ActionButton, ActionCheckbox } from '@nex
|
||||
import { CollectionList } from 'nextcloud-vue-collections'
|
||||
import { mapGetters, mapState } from 'vuex'
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
import { showError } from '@nextcloud/dialogs'
|
||||
|
||||
export default {
|
||||
name: 'SharingTabSidebar',
|
||||
@@ -83,6 +93,7 @@ export default {
|
||||
data() {
|
||||
return {
|
||||
isLoading: false,
|
||||
isSearching: false,
|
||||
addAcl: null,
|
||||
addAclForAPI: null,
|
||||
}
|
||||
@@ -102,7 +113,7 @@ export default {
|
||||
formatedSharees() {
|
||||
return this.unallocatedSharees.map(item => {
|
||||
const sharee = {
|
||||
user: item.label,
|
||||
user: item.value.shareWith,
|
||||
displayName: item.label,
|
||||
icon: 'icon-user',
|
||||
multiselectKey: item.shareType + ':' + item.primaryKey,
|
||||
@@ -119,7 +130,7 @@ export default {
|
||||
|
||||
sharee.value = item.value
|
||||
return sharee
|
||||
})
|
||||
}).slice(0, 10)
|
||||
},
|
||||
unallocatedSharees() {
|
||||
return this.sharees.filter((sharee) => {
|
||||
@@ -137,13 +148,20 @@ export default {
|
||||
this.asyncFind('')
|
||||
},
|
||||
methods: {
|
||||
asyncFind(query) {
|
||||
this.isLoading = true
|
||||
this.$store.dispatch('loadSharees', query).then(response => {
|
||||
this.isLoading = false
|
||||
})
|
||||
async asyncFind(query) {
|
||||
// manual debounce to handle async searching more easily and have more control over the loading state
|
||||
const timestamp = (new Date()).getTime()
|
||||
if (!this.isSearching || timestamp > this.isSearching + 300) {
|
||||
this.isSearching = timestamp
|
||||
await this.$store.dispatch('loadSharees', query)
|
||||
|
||||
// only reset searching flag if the most recent search finished
|
||||
if (this.isSearching === timestamp) {
|
||||
this.isSearching = false
|
||||
}
|
||||
}
|
||||
},
|
||||
clickAddAcl() {
|
||||
async clickAddAcl() {
|
||||
this.addAclForAPI = {
|
||||
type: this.addAcl.value.shareType,
|
||||
participant: this.addAcl.value.shareWith,
|
||||
@@ -151,7 +169,16 @@ export default {
|
||||
permissionShare: false,
|
||||
permissionManage: false,
|
||||
}
|
||||
this.$store.dispatch('addAclToCurrentBoard', this.addAclForAPI)
|
||||
this.isLoading = true
|
||||
try {
|
||||
await this.$store.dispatch('addAclToCurrentBoard', this.addAclForAPI)
|
||||
} catch (e) {
|
||||
const errorMessage = t('deck', 'Failed to create share with {displayName}', { displayName: this.addAcl.displayName })
|
||||
console.error(errorMessage, e)
|
||||
showError(errorMessage)
|
||||
}
|
||||
this.addAcl = null
|
||||
this.isLoading = false
|
||||
},
|
||||
clickEditAcl(acl) {
|
||||
this.addAclForAPI = Object.assign({}, acl)
|
||||
|
||||
@@ -179,7 +179,7 @@
|
||||
<CardSidebarTabAttachments :card="currentCard" />
|
||||
</AppSidebarTab>
|
||||
|
||||
<AppSidebarTab v-if="hasComments"
|
||||
<AppSidebarTab
|
||||
id="comments"
|
||||
:order="2"
|
||||
:name="t('deck', 'Comments')"
|
||||
@@ -283,7 +283,6 @@ export default {
|
||||
descriptionSaveTimeout: null,
|
||||
descriptionSaving: false,
|
||||
hasActivity: capabilities && capabilities.activity,
|
||||
hasComments: !!OC.appswebroots['comments'],
|
||||
modalShow: false,
|
||||
lang: {
|
||||
days: getDayNamesMin(),
|
||||
|
||||
@@ -118,7 +118,7 @@ export default {
|
||||
return this.$store.getters.canEdit
|
||||
}
|
||||
const board = this.$store.getters.boards.find((item) => item.id === this.card.boardId)
|
||||
return board.permissions.PERMISSION_EDIT
|
||||
return board ? board.permissions.PERMISSION_EDIT : false
|
||||
},
|
||||
card() {
|
||||
return this.item ? this.item : this.$store.getters.cardById(this.id)
|
||||
|
||||
10
src/main.js
10
src/main.js
@@ -27,6 +27,7 @@ import { sync } from 'vuex-router-sync'
|
||||
import { translate, translatePlural } from '@nextcloud/l10n'
|
||||
import { generateFilePath } from '@nextcloud/router'
|
||||
import { showError } from '@nextcloud/dialogs'
|
||||
import { subscribe } from '@nextcloud/event-bus'
|
||||
import { Tooltip } from '@nextcloud/vue'
|
||||
import ClickOutside from 'vue-click-outside'
|
||||
import './models'
|
||||
@@ -74,8 +75,17 @@ new Vue({
|
||||
}
|
||||
},
|
||||
created() {
|
||||
subscribe('nextcloud:unified-search.search', ({ query }) => {
|
||||
this.$store.commit('setSearchQuery', query)
|
||||
})
|
||||
subscribe('nextcloud:unified-search.reset', () => {
|
||||
this.$store.commit('setSearchQuery', '')
|
||||
})
|
||||
|
||||
// FIXME remove this once Nextcloud 20 is minimum required version
|
||||
// eslint-disable-next-line
|
||||
new OCA.Search(this.filter, this.cleanSearch)
|
||||
|
||||
this.interval = setInterval(() => {
|
||||
this.time = Date.now()
|
||||
}, 1000)
|
||||
|
||||
@@ -34,7 +34,6 @@ import comment from './comment'
|
||||
import trashbin from './trashbin'
|
||||
import attachment from './attachment'
|
||||
import overview from './overview'
|
||||
import debounce from 'lodash/debounce'
|
||||
Vue.use(Vuex)
|
||||
|
||||
const apiClient = new BoardApi()
|
||||
@@ -392,7 +391,7 @@ export default new Vuex.Store({
|
||||
const boards = await apiClient.loadBoards()
|
||||
commit('setBoards', boards)
|
||||
},
|
||||
loadSharees: debounce(function({ commit }, query) {
|
||||
async loadSharees({ commit }, query) {
|
||||
const params = new URLSearchParams()
|
||||
if (typeof query === 'undefined') {
|
||||
return
|
||||
@@ -402,10 +401,9 @@ export default new Vuex.Store({
|
||||
params.append('perPage', 20)
|
||||
params.append('itemType', [0, 1, 7])
|
||||
|
||||
axios.get(generateOcsUrl('apps/files_sharing/api/v1') + 'sharees', { params }).then((response) => {
|
||||
commit('setSharees', response.data.ocs.data)
|
||||
})
|
||||
}, 250),
|
||||
const response = await axios.get(generateOcsUrl('apps/files_sharing/api/v1') + 'sharees', { params })
|
||||
commit('setSharees', response.data.ocs.data)
|
||||
},
|
||||
|
||||
setBoardFilter({ commmit }, filter) {
|
||||
commmit('setBoardFilter', filter)
|
||||
@@ -454,13 +452,11 @@ export default new Vuex.Store({
|
||||
},
|
||||
|
||||
// acl actions
|
||||
addAclToCurrentBoard({ dispatch, commit }, newAcl) {
|
||||
async addAclToCurrentBoard({ dispatch, commit }, newAcl) {
|
||||
newAcl.boardId = this.state.currentBoard.id
|
||||
apiClient.addAcl(newAcl)
|
||||
.then((returnAcl) => {
|
||||
commit('addAclToCurrentBoard', returnAcl)
|
||||
dispatch('refreshBoard', newAcl.boardId)
|
||||
})
|
||||
const result = await apiClient.addAcl(newAcl)
|
||||
commit('addAclToCurrentBoard', result)
|
||||
dispatch('refreshBoard', newAcl.boardId)
|
||||
},
|
||||
updateAclFromCurrentBoard({ commit }, acl) {
|
||||
acl.boardId = this.state.currentBoard.id
|
||||
|
||||
@@ -287,7 +287,7 @@ class DeckProviderTest extends TestCase {
|
||||
$this->assertEquals('test string Card', $event->getParsedSubject());
|
||||
$this->assertEquals('test string {card}', $event->getRichSubject());
|
||||
$this->assertEquals('BCD', $event->getMessage());
|
||||
$this->assertEquals('<pre class="visualdiff"><del>A</del>BC<ins>D</ins></pre>', $event->getParsedMessage());
|
||||
$this->assertEquals('BCD', $event->getParsedMessage());
|
||||
}
|
||||
|
||||
public function testParseParamForBoard() {
|
||||
|
||||
Reference in New Issue
Block a user