aboutsummaryrefslogtreecommitdiff
path: root/lib/classes
diff options
context:
space:
mode:
Diffstat (limited to 'lib/classes')
-rw-r--r--lib/classes/JsonApi/Routes/Courseware/CoursesUnitsIndex.php10
-rw-r--r--lib/classes/JsonApi/Routes/Courseware/StructuralElementsCreate.php14
-rw-r--r--lib/classes/JsonApi/Routes/Courseware/StructuralElementsReleasedIndex.php2
-rw-r--r--lib/classes/JsonApi/Routes/Courseware/StructuralElementsSharedIndex.php10
-rw-r--r--lib/classes/JsonApi/Routes/Courseware/StructuralElementsUpdate.php59
-rw-r--r--lib/classes/JsonApi/Routes/Courseware/UnitsCopy.php3
-rw-r--r--lib/classes/JsonApi/Routes/Courseware/UnitsCreate.php12
-rw-r--r--lib/classes/JsonApi/Routes/Courseware/UnitsUpdate.php95
-rw-r--r--lib/classes/JsonApi/Routes/SemestersIndex.php23
-rw-r--r--lib/classes/JsonApi/Schemas/Courseware/StructuralElement.php16
-rw-r--r--lib/classes/JsonApi/Schemas/Courseware/Unit.php23
11 files changed, 208 insertions, 59 deletions
diff --git a/lib/classes/JsonApi/Routes/Courseware/CoursesUnitsIndex.php b/lib/classes/JsonApi/Routes/Courseware/CoursesUnitsIndex.php
index b09d0c8..9a3425f 100644
--- a/lib/classes/JsonApi/Routes/Courseware/CoursesUnitsIndex.php
+++ b/lib/classes/JsonApi/Routes/Courseware/CoursesUnitsIndex.php
@@ -39,9 +39,15 @@ class CoursesUnitsIndex extends JsonApiController
}
$resources = Unit::findCoursesUnits($course);
- $total = count($resources);
+ $readable_resources = [];
+ foreach ($resources as $resource) {
+ if ($resource->canRead($user)) {
+ $readable_resources[] = $resource;
+ }
+ }
+ $total = count($readable_resources);
[$offset, $limit] = $this->getOffsetAndLimit();
- return $this->getPaginatedContentResponse(array_slice($resources, $offset, $limit), $total);
+ return $this->getPaginatedContentResponse(array_slice($readable_resources, $offset, $limit), $total);
}
}
diff --git a/lib/classes/JsonApi/Routes/Courseware/StructuralElementsCreate.php b/lib/classes/JsonApi/Routes/Courseware/StructuralElementsCreate.php
index c038c45..99481f5 100644
--- a/lib/classes/JsonApi/Routes/Courseware/StructuralElementsCreate.php
+++ b/lib/classes/JsonApi/Routes/Courseware/StructuralElementsCreate.php
@@ -81,8 +81,18 @@ class StructuralElementsCreate extends JsonApiController
'title' => self::arrayGet($json, 'data.attributes.title', ''),
'purpose' => self::arrayGet($json, 'data.attributes.purpose', $parent->purpose),
'payload' => self::arrayGet($json, 'data.attributes.payload', ''),
- 'read_approval' => $parent->read_approval,
- 'write_approval' => $parent->write_approval,
+ 'permission_type'=> $parent->permission_type,
+ 'visible' => $parent->visible,
+ 'visible_all' => $parent->visible_all,
+ 'visible_start_date' => $parent->visible_start_date,
+ 'visible_end_date' => $parent->visible_end_date,
+ 'writable' => $parent->writable,
+ 'writable_all' => $parent->writable_all,
+ 'writable_start_date' => $parent->writable_start_date,
+ 'writable_end_date' => $parent->writable_end_date,
+ 'visible_approval' => $parent->visible_approval,
+ 'writable_approval' => $parent->writable_approval,
+ 'content_approval' => $parent->content_approval,
'position' => $parent->countChildren(),
'commentable' => 0
]);
diff --git a/lib/classes/JsonApi/Routes/Courseware/StructuralElementsReleasedIndex.php b/lib/classes/JsonApi/Routes/Courseware/StructuralElementsReleasedIndex.php
index b4a8e1c..699623b 100644
--- a/lib/classes/JsonApi/Routes/Courseware/StructuralElementsReleasedIndex.php
+++ b/lib/classes/JsonApi/Routes/Courseware/StructuralElementsReleasedIndex.php
@@ -49,7 +49,7 @@ class StructuralElementsReleasedIndex extends JsonApiController
);
foreach ($contents as $content) {
- if ((count($content->read_approval) && count($content->read_approval['users']) > 0) || (count($content->write_approval) && count($content->write_approval['users']) > 0)) {
+ if (count($content->content_approval) && count($content->content_approval['users']) > 0) {
$resources[] = $content;
}
}
diff --git a/lib/classes/JsonApi/Routes/Courseware/StructuralElementsSharedIndex.php b/lib/classes/JsonApi/Routes/Courseware/StructuralElementsSharedIndex.php
index 1582fbf..9ebf923 100644
--- a/lib/classes/JsonApi/Routes/Courseware/StructuralElementsSharedIndex.php
+++ b/lib/classes/JsonApi/Routes/Courseware/StructuralElementsSharedIndex.php
@@ -49,19 +49,13 @@ class StructuralElementsSharedIndex extends JsonApiController
);
foreach ($contents as $content) {
- if (!count($content->read_approval) || !count($content->write_approval)) {
+ if (count($content->content_approval) === 0) {
continue;
}
$add_content = false;
- foreach ($content->read_approval['users'] as $listedUserPerm) {
- if ($listedUserPerm['id'] == $user->id && $listedUserPerm['read']) {
- $add_content = true;
- }
- }
-
- foreach ($content->write_approval['users'] as $listedUserPerm) {
+ foreach ($content->content_approval['users'] as $listedUserPerm) {
if ($listedUserPerm['id'] == $user->id && $listedUserPerm['read']) {
$add_content = true;
}
diff --git a/lib/classes/JsonApi/Routes/Courseware/StructuralElementsUpdate.php b/lib/classes/JsonApi/Routes/Courseware/StructuralElementsUpdate.php
index 455aacc..3b3deb0 100644
--- a/lib/classes/JsonApi/Routes/Courseware/StructuralElementsUpdate.php
+++ b/lib/classes/JsonApi/Routes/Courseware/StructuralElementsUpdate.php
@@ -6,6 +6,7 @@ use Courseware\StructuralElement;
use JsonApi\Errors\AuthorizationFailedException;
use JsonApi\Errors\RecordNotFoundException;
use JsonApi\JsonApiController;
+use JsonApi\Routes\TimestampTrait;
use JsonApi\Routes\ValidationTrait;
use JsonApi\Schemas\Courseware\StructuralElement as StructuralElementSchema;
use JsonApi\Schemas\FileRef as FileRefSchema;
@@ -19,6 +20,7 @@ use Psr\Http\Message\ServerRequestInterface as Request;
class StructuralElementsUpdate extends JsonApiController
{
use EditBlockAwareTrait;
+ use TimestampTrait;
use ValidationTrait;
/**
@@ -26,7 +28,8 @@ class StructuralElementsUpdate extends JsonApiController
*/
public function __invoke(Request $request, Response $response, $args)
{
- if (!($resource = StructuralElement::find($args['id']))) {
+ $resource = StructuralElement::find($args['id']);
+ if (!$resource) {
throw new RecordNotFoundException();
}
$json = $this->validate($request, $resource);
@@ -105,7 +108,7 @@ class StructuralElementsUpdate extends JsonApiController
}
$parentId = self::arrayGet($json, 'data.relationships.parent.data.id');
- return \Courseware\StructuralElement::find($parentId);
+ return StructuralElement::find($parentId);
}
private function updateStructuralElement(\User $user, StructuralElement $resource, array $json): StructuralElement
@@ -118,11 +121,13 @@ class StructuralElementsUpdate extends JsonApiController
'position',
'public',
'purpose',
- 'read-approval',
- 'release-date',
'title',
- 'withdraw-date',
- 'write-approval',
+ 'permission-type',
+ 'visible',
+ 'writable',
+ 'visible-approval',
+ 'writable-approval',
+ 'content-approval',
];
foreach ($attributes as $jsonKey) {
@@ -131,13 +136,43 @@ class StructuralElementsUpdate extends JsonApiController
$resource->$sormKey = $val;
}
}
-
- if (isset($json['data']['attributes']['release-date'])) {
- $resource->release_date = $json['data']['attributes']['release-date'];
+ if (self::arrayHas($json, 'data.attributes.visible-all')) {
+ $resource->visible_all = self::arrayGet($json, 'data.attributes.visible-all');
}
-
- if (isset($json['data']['attributes']['withdraw-date'])) {
- $resource->withdraw_date = $json['data']['attributes']['withdraw-date'];
+ if (self::arrayHas($json, 'data.attributes.writable-all')) {
+ $resource->writable_all = self::arrayGet($json, 'data.attributes.writable-all');
+ }
+ if (self::arrayHas($json, 'data.attributes.visible-start-date')) {
+ $visibleStartDate = self::arrayGet($json, 'data.attributes.visible-start-date');
+ if ($visibleStartDate) {
+ $visibleStartDate = self::fromISO8601($visibleStartDate);
+ $visibleStartDate = $visibleStartDate->getTimestamp();
+ }
+ $resource->visible_start_date = $visibleStartDate;
+ }
+ if (self::arrayHas($json, 'data.attributes.visible-end-date')) {
+ $visibleEndDate = self::arrayGet($json, 'data.attributes.visible-end-date');
+ if ($visibleEndDate) {
+ $visibleEndDate = self::fromISO8601($visibleEndDate);
+ $visibleEndDate = $visibleEndDate->getTimestamp();
+ }
+ $resource->visible_end_date = $visibleEndDate;
+ }
+ if (self::arrayHas($json, 'data.attributes.writable-start-date')) {
+ $writableStartDate = self::arrayGet($json, 'data.attributes.writable-start-date');
+ if ($writableStartDate) {
+ $writableStartDate = self::fromISO8601($writableStartDate);
+ $writableStartDate = $writableStartDate->getTimestamp();
+ }
+ $resource->writable_start_date = $writableStartDate;
+ }
+ if (self::arrayHas($json, 'data.attributes.writable-end-date')) {
+ $writableEndDate = self::arrayGet($json, 'data.attributes.writable-end-date');
+ if ($writableEndDate) {
+ $writableEndDate = self::fromISO8601($writableEndDate);
+ $writableEndDate = $writableEndDate->getTimestamp();
+ }
+ $resource->writable_end_date = $writableEndDate;
}
if (isset($json['data']['attributes']['commentable'])) {
diff --git a/lib/classes/JsonApi/Routes/Courseware/UnitsCopy.php b/lib/classes/JsonApi/Routes/Courseware/UnitsCopy.php
index 61ffa95..62a1d0a 100644
--- a/lib/classes/JsonApi/Routes/Courseware/UnitsCopy.php
+++ b/lib/classes/JsonApi/Routes/Courseware/UnitsCopy.php
@@ -31,6 +31,7 @@ class UnitsCopy extends NonJsonApiController
$rangeId = $data['rangeId'];
$rangeType = $data['rangeType'];
$modified = $data['modified'];
+ $duplicate = $data['duplicate'];
try {
$range = \RangeFactory::createRange($rangeType, $rangeId);
@@ -42,7 +43,7 @@ class UnitsCopy extends NonJsonApiController
throw new AuthorizationFailedException();
}
- $newUnit = $sourceUnit->copy($user, $rangeId, $rangeType, $modified);
+ $newUnit = $sourceUnit->copy($user, $rangeId, $rangeType, $modified, $duplicate);
$response = $response->withHeader('Content-Type', 'application/json');
$response->getBody()->write((string) json_encode($newUnit));
diff --git a/lib/classes/JsonApi/Routes/Courseware/UnitsCreate.php b/lib/classes/JsonApi/Routes/Courseware/UnitsCreate.php
index 9dfd2e6..8f3e217 100644
--- a/lib/classes/JsonApi/Routes/Courseware/UnitsCreate.php
+++ b/lib/classes/JsonApi/Routes/Courseware/UnitsCreate.php
@@ -97,7 +97,10 @@ class UnitsCreate extends JsonApiController
'purpose' => self::arrayGet($json, 'data.attributes.purpose', 'content'),
'payload' => self::arrayGet($json, 'data.attributes.payload', ''),
'position' => 0,
- 'commentable' => 0
+ 'commentable' => 0,
+ 'permission_type' => self::arrayGet($json, 'data.attributes.permission-type', 'all'),
+ 'visible' => self::arrayGet($json, 'data.attributes.visible', 'always'),
+ 'writable' => self::arrayGet($json, 'data.attributes.writable', 'never'),
]);
\Courseware\Container::create([
@@ -114,7 +117,7 @@ class UnitsCreate extends JsonApiController
]),
]);
- $unit = \Courseware\Unit::create([
+ $unit = Unit::create([
'range_id' => $range->getRangeId(),
'range_type' => $range->getRangeType(),
'structural_element_id' => $struct->id,
@@ -122,8 +125,9 @@ class UnitsCreate extends JsonApiController
'position' => Unit::getNewPosition($range->getRangeId()),
'creator_id' => $user->id,
'public' => self::arrayGet($json, 'data.attributes.public', '0'),
- 'release_date' => self::arrayGet($json, 'data.attributes.release-date'),
- 'withdraw_date' => self::arrayGet($json, 'data.attributes.withdraw-date'),
+ 'permission_type' => self::arrayGet($json, 'data.attributes.permission-type', 'all'),
+ 'visible' => self::arrayGet($json, 'data.attributes.visible', 'always'),
+ 'writable' => self::arrayGet($json, 'data.attributes.writable', 'never'),
]);
$instance = new \Courseware\Instance($struct);
diff --git a/lib/classes/JsonApi/Routes/Courseware/UnitsUpdate.php b/lib/classes/JsonApi/Routes/Courseware/UnitsUpdate.php
index 446d61e..4c48086 100644
--- a/lib/classes/JsonApi/Routes/Courseware/UnitsUpdate.php
+++ b/lib/classes/JsonApi/Routes/Courseware/UnitsUpdate.php
@@ -57,37 +57,92 @@ class UnitsUpdate extends JsonApiController
return 'Document must have an `id`.';
}
- if (self::arrayHas($json, 'data.attributes.release-date')) {
- $releaseDate = self::arrayGet($json, 'data.attributes.release-date');
- if (!self::isValidTimestamp($releaseDate)) {
- return '`release-date` is not an ISO 8601 timestamp.';
+ if (self::arrayHas($json, 'data.attributes.visible-start-date')) {
+ $visibleStartDate = self::arrayGet($json, 'data.attributes.visible-start-date');
+ if ($visibleStartDate && !self::isValidTimestamp($visibleStartDate)) {
+ return '`visible-start-date` is not an ISO 8601 timestamp.';
}
}
- if (self::arrayHas($json, 'data.attributes.withdraw-date')) {
- $withdrawDate = self::arrayGet($json, 'data.attributes.withdraw-date');
- if (!self::isValidTimestamp($withdrawDate)) {
- return '`withdraw-date` is not an ISO 8601 timestamp.';
+ if (self::arrayHas($json, 'data.attributes.visible-end-date')) {
+ $visibleEndDate = self::arrayGet($json, 'data.attributes.visible-end-date');
+ if ($visibleEndDate && !self::isValidTimestamp($visibleEndDate)) {
+ return '`visible-start-date` is not an ISO 8601 timestamp.';
+ }
+ }
+
+ if (self::arrayHas($json, 'data.attributes.writable-start-date')) {
+ $writableStartDate = self::arrayGet($json, 'data.attributes.writable-start-date');
+ if ($writableStartDate && !self::isValidTimestamp($writableStartDate)) {
+ return '`writable-start-date` is not an ISO 8601 timestamp.';
+ }
+ }
+
+ if (self::arrayHas($json, 'data.attributes.writable-end-date')) {
+ $writableEndDate = self::arrayGet($json, 'data.attributes.writable-end-date');
+ if ($writableEndDate && !self::isValidTimestamp($writableEndDate)) {
+ return '`writable-end-date` is not an ISO 8601 timestamp.';
}
}
}
private function updateUnit(\User $user, Unit $resource, array $json): Unit
{
- if (self::arrayHas($json, 'data.attributes.public')) {
- $resource->public = self::arrayGet($json, 'data.attributes.public');
- }
+ $attributes = [
+ 'position',
+ 'public',
+ 'permission-scope',
+ 'permission-type',
+ 'visible',
+ 'visible-approval',
+ 'writable',
+ 'writable-approval',
+ ];
- if (self::arrayHas($json, 'data.attributes.release-date')) {
- $releaseDate = self::arrayGet($json, 'data.attributes.release-date', '');
- $releaseDate = self::fromISO8601($releaseDate);
- $resource->release_date = $releaseDate->getTimestamp();
+ foreach ($attributes as $jsonKey) {
+ $sormKey = strtr($jsonKey, '-', '_');
+ $val = self::arrayGet($json, 'data.attributes.' . $jsonKey, '');
+ if ($val) {
+ $resource->$sormKey = $val;
+ }
}
-
- if (self::arrayHas($json, 'data.attributes.withdraw-date')) {
- $withdrawDate = self::arrayGet($json, 'data.attributes.withdraw-date', '');
- $withdrawDate = self::fromISO8601($withdrawDate);
- $resource->withdraw_date = $withdrawDate->getTimestamp();
+ if (self::arrayHas($json, 'data.attributes.visible-all')) {
+ $resource->visible_all = self::arrayGet($json, 'data.attributes.visible-all');
+ }
+ if (self::arrayHas($json, 'data.attributes.writable-all')) {
+ $resource->writable_all = self::arrayGet($json, 'data.attributes.writable-all');
+ }
+ if (self::arrayHas($json, 'data.attributes.visible-start-date')) {
+ $visibleStartDate = self::arrayGet($json, 'data.attributes.visible-start-date');
+ if ($visibleStartDate) {
+ $visibleStartDate = self::fromISO8601($visibleStartDate);
+ $visibleStartDate = $visibleStartDate->getTimestamp();
+ }
+ $resource->visible_start_date = $visibleStartDate;
+ }
+ if (self::arrayHas($json, 'data.attributes.visible-end-date')) {
+ $visibleEndDate = self::arrayGet($json, 'data.attributes.visible-end-date');
+ if ($visibleEndDate) {
+ $visibleEndDate = self::fromISO8601($visibleEndDate);
+ $visibleEndDate = $visibleEndDate->getTimestamp();
+ }
+ $resource->visible_end_date = $visibleEndDate;
+ }
+ if (self::arrayHas($json, 'data.attributes.writable-start-date')) {
+ $writableStartDate = self::arrayGet($json, 'data.attributes.writable-start-date');
+ if ($writableStartDate) {
+ $writableStartDate = self::fromISO8601($writableStartDate);
+ $writableStartDate = $writableStartDate->getTimestamp();
+ }
+ $resource->writable_start_date = $writableStartDate;
+ }
+ if (self::arrayHas($json, 'data.attributes.writable-end-date')) {
+ $writableEndDate = self::arrayGet($json, 'data.attributes.writable-end-date');
+ if ($writableEndDate) {
+ $writableEndDate = self::fromISO8601($writableEndDate);
+ $writableEndDate = $writableEndDate->getTimestamp();
+ }
+ $resource->writable_end_date = $writableEndDate;
}
$resource->store();
diff --git a/lib/classes/JsonApi/Routes/SemestersIndex.php b/lib/classes/JsonApi/Routes/SemestersIndex.php
index ffa1d4c..24883c1 100644
--- a/lib/classes/JsonApi/Routes/SemestersIndex.php
+++ b/lib/classes/JsonApi/Routes/SemestersIndex.php
@@ -4,6 +4,7 @@ namespace JsonApi\Routes;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
+use JsonApi\Errors\RecordNotFoundException;
use JsonApi\JsonApiController;
/**
@@ -13,10 +14,30 @@ class SemestersIndex extends JsonApiController
{
protected $allowedPagingParameters = ['offset', 'limit'];
+ protected $allowedFilteringParameters = ['current', 'timestamp'];
+
public function __invoke(Request $request, Response $response, $args)
{
list($offset, $limit) = $this->getOffsetAndLimit();
- $semesters = \Semester::getAll();
+
+ $filtering = $this->getQueryParameters()->getFilteringParameters();
+
+ if (empty($filtering)) {
+ $semesters = \Semester::getAll();
+ } else {
+ if (array_key_exists('current', $filtering)) {
+ $semester = \Semester::findCurrent();
+ }
+ if (isset($filtering['timestamp'])) {
+ $semester = \Semester::findByTimestamp($filtering['timestamp']);
+ }
+
+ if (!$semester) {
+ throw new RecordNotFoundException('Could not find semester.');
+ } else {
+ $semesters = [$semester];
+ }
+ }
return $this->getPaginatedContentResponse(
array_slice($semesters, $offset, $limit),
diff --git a/lib/classes/JsonApi/Schemas/Courseware/StructuralElement.php b/lib/classes/JsonApi/Schemas/Courseware/StructuralElement.php
index e6ccafa..f1a5841 100644
--- a/lib/classes/JsonApi/Schemas/Courseware/StructuralElement.php
+++ b/lib/classes/JsonApi/Schemas/Courseware/StructuralElement.php
@@ -47,10 +47,18 @@ class StructuralElement extends SchemaProvider
'purpose' => (string) $resource['purpose'],
'payload' => $resource['payload']->getIterator(),
'public' => (int) $resource['public'],
- 'release-date' => $resource['release_date'] ? date('Y-m-d', (int) $resource['release_date']) : null,
- 'withdraw-date' => $resource['withdraw_date'] ? date('Y-m-d', (int) $resource['withdraw_date']) : null,
- 'read-approval' => $resource['read_approval']->getIterator(),
- 'write-approval' => $resource['write_approval']->getIterator(),
+ 'permission-type' => (string) $resource['permission_type'],
+ 'visible' => (string) $resource['visible'],
+ 'visible-all' => (bool) $resource['visible_all'],
+ 'visible-start-date' => $resource['visible_start_date'] ? date('c', $resource['visible_start_date']) : null,
+ 'visible-end-date' => $resource['visible_end_date'] ? date('c', $resource['visible_end_date']) : null,
+ 'writable' => (string) $resource['writable'],
+ 'writable-all' => (bool) $resource['writable_all'],
+ 'writable-start-date' => $resource['writable_start_date'] ? date('c', $resource['writable_start_date']) : null,
+ 'writable-end-date' => $resource['writable_end_date'] ? date('c', $resource['writable_end_date']) : null,
+ 'visible-approval' => json_decode($resource['visible_approval']),
+ 'writable-approval' => json_decode($resource['writable_approval']),
+ 'content-approval' => $resource['content_approval']->getIterator(),
'copy-approval' => $resource['copy_approval']->getIterator(),
'can-edit' => $resource->canEdit($user),
'can-visit' => $resource->canVisit($user),
diff --git a/lib/classes/JsonApi/Schemas/Courseware/Unit.php b/lib/classes/JsonApi/Schemas/Courseware/Unit.php
index 6152e94..a311ac8 100644
--- a/lib/classes/JsonApi/Schemas/Courseware/Unit.php
+++ b/lib/classes/JsonApi/Schemas/Courseware/Unit.php
@@ -28,15 +28,30 @@ class Unit extends SchemaProvider
*/
public function getAttributes($resource, ContextInterface $context): iterable
{
+ $user = $this->currentUser;
+
return [
'content-type' => (string) $resource['content_type'],
'position' => (int) $resource['position'],
'public' => (int) $resource['public'],
- 'release-date' => $resource['release_date'] ? date('c', $resource['release_date']) : null,
- 'withdraw-date' => $resource['withdraw_date'] ? date('c', $resource['withdraw_date']) : null,
+ 'permission-scope' => (string) $resource['permission_scope'],
+ 'permission-type' => (string) $resource['permission_type'],
+ 'visible' => (string) $resource['visible'],
+ 'visible-all' => (bool) $resource['visible_all'],
+ 'visible-start-date' => $resource['visible_start_date'] ? date('c', $resource['visible_start_date']) : null,
+ 'visible-end-date' => $resource['visible_end_date'] ? date('c', $resource['visible_end_date']) : null,
+ 'writable' => (string) $resource['writable'],
+ 'writable-all' => (bool) $resource['writable_all'],
+ 'writable-start-date' => $resource['writable_start_date'] ? date('c', $resource['writable_start_date']) : null,
+ 'writable-end-date' => $resource['writable_end_date'] ? date('c', $resource['writable_end_date']) : null,
+ 'visible-approval' => json_decode($resource['visible_approval']),
+ 'writable-approval' => json_decode($resource['writable_approval']),
'config' => json_decode($resource['config']),
- 'mkdate' => date('c', $resource['mkdate']),
- 'chdate' => date('c', $resource['chdate']),
+ 'can-read' => $resource->canRead($user),
+ 'can-edit' => $resource->canEdit($user),
+ 'can-edit-content' => $resource->canEditContent($user),
+ 'mkdate' => date('c', $resource['mkdate']),
+ 'chdate' => date('c', $resource['chdate']),
];
}