Skip to content
Snippets Groups Projects
Commit 8a86838e authored by Farbod Zamani's avatar Farbod Zamani Committed by Ron Lucke
Browse files

Introduces "CoursewareExportWidget"

parent 439c3776
No related branches found
No related tags found
No related merge requests found
......@@ -71,12 +71,10 @@ class Contents_CoursewareController extends AuthenticatedController
*/
public function courseware_action($action = false, $widgetId = null)
{
global $perm;
global $perm, $user;
Navigation::activateItem('/contents/courseware/courseware');
$this->user_id = $GLOBALS['user']->id;
$this->setCoursewareSidebar();
$this->user_id = $user->id;
$last = UserConfig::get($this->user_id)->getValue('COURSEWARE_LAST_ELEMENT');
......@@ -89,12 +87,11 @@ class Contents_CoursewareController extends AuthenticatedController
}
// load courseware for current user
if (!$this->entry_element_id || !$struct || !$struct->canRead($GLOBALS['user'])) {
$user = User::find($this->user_id);
if (!$this->entry_element_id || !$struct || !$struct->canRead($user)) {
if (!$user->courseware) {
// create initial courseware dataset
StructuralElement::createEmptyCourseware($this->user_id, 'user');
$struct = StructuralElement::createEmptyCourseware($this->user_id, 'user');
}
$this->entry_element_id = $user->courseware->id;
......@@ -106,9 +103,19 @@ class Contents_CoursewareController extends AuthenticatedController
$this->licenses = $this->getLicences();
$this->oer_enabled = Config::get()->OERCAMPUS_ENABLED && $perm->have_perm(Config::get()->OER_PUBLIC_STATUS);
// Make sure struct has value., to evaluate the export (edit) capability.
if (!isset($struct)) {
$struct = \Courseware\StructuralElement::findOneBySQL(
"id = ? AND range_id = ? AND range_type = 'user'",
[$this->entry_element_id, $this->user_id]
);
}
$canExport = !empty($struct) ? $struct->canEdit($user) : false;
$this->setCoursewareSidebar($canExport);
}
private function setCoursewareSidebar()
private function setCoursewareSidebar(bool $canExport)
{
$sidebar = \Sidebar::Get();
$actions = new TemplateWidget(
......@@ -122,6 +129,14 @@ class Contents_CoursewareController extends AuthenticatedController
$this->get_template_factory()->open('course/courseware/view_widget')
);
$sidebar->addWidget($views)->addLayoutCSSClass('courseware-view-widget');
if ($canExport) {
$exports = new TemplateWidget(
_('Export '),
$this->get_template_factory()->open('course/courseware/export_widget')
);
$sidebar->addWidget($exports)->addLayoutCSSClass('courseware-export-widget');
}
}
private function getLicences()
......
......@@ -50,7 +50,7 @@ class Course_CoursewareController extends AuthenticatedController
if (!$course->courseware) {
// create initial courseware dataset
StructuralElement::createEmptyCourseware(Context::getId(), 'course');
$struct = StructuralElement::createEmptyCourseware(Context::getId(), 'course');
}
$this->entry_element_id = $course->courseware->id;
......@@ -60,13 +60,22 @@ class Course_CoursewareController extends AuthenticatedController
UserConfig::get($GLOBALS['user']->id)->store('COURSEWARE_LAST_ELEMENT', $last);
Navigation::activateItem('course/courseware/content');
$this->setIndexSidebar();
$this->licenses = [];
$sorm_licenses = License::findBySQL('1 ORDER BY name ASC');
foreach ($sorm_licenses as $license) {
array_push($this->licenses, $license->toArray());
}
$this->licenses = json_encode($this->licenses);
// Make sure struct has value., to evaluate the export (edit) capability.
if (!isset($struct)) {
$struct = StructuralElement::findOneBySQL("id = ? AND range_id = ? AND range_type = 'course'", [
$this->entry_element_id,
Context::getId(),
]);
}
$canExport = !empty($struct) ? $struct->canEdit($GLOBALS['user']) : false;
$this->setIndexSidebar($canExport);
}
public function dashboard_action(): void
......@@ -98,7 +107,7 @@ class Course_CoursewareController extends AuthenticatedController
$this->render_pdf($element->pdfExport($this->user), trim($element->title).'.pdf');
}
private function setIndexSidebar(): void
private function setIndexSidebar(bool $canExport): void
{
$sidebar = Sidebar::Get();
$actions = new TemplateWidget(
......@@ -112,6 +121,14 @@ class Course_CoursewareController extends AuthenticatedController
$this->get_template_factory()->open('course/courseware/view_widget')
);
$sidebar->addWidget($views)->addLayoutCSSClass('courseware-view-widget');
if ($canExport) {
$exports = new TemplateWidget(
_('Export '),
$this->get_template_factory()->open('course/courseware/export_widget')
);
$sidebar->addWidget($exports)->addLayoutCSSClass('courseware-export-widget');
}
}
......
<aside id="courseware-export-widget" class="widget-sidebar"></aside>
......@@ -1913,13 +1913,15 @@ v i e w w i d g e t
.cw-action-widget-trash{
@include background-icon(trash, clickable);
}
.cw-action-widget-export{
}
.cw-export-widget {
.cw-export-widget-export{
@include background-icon(export, clickable);
}
.cw-action-widget-export-pdf{
.cw-export-widget-export-pdf{
@include background-icon(file-pdf, clickable);
}
.cw-action-widget-oer{
.cw-export-widget-oer{
@include background-icon(oer-campus, clickable);
}
}
......
......@@ -35,21 +35,6 @@
<translate>Lesezeichen setzen</translate>
</a>
</li>
<li v-if="canEdit" class="cw-action-widget-export">
<a href="#" @click="exportElement">
<translate>Seite exportieren</translate>
</a>
</li>
<li v-if="(canEdit || userIsTeacher) && canVisit" class="cw-action-widget-export-pdf">
<a :href="pdfExportURL">
<translate>Seite als pdf-Dokument exportieren</translate>
</a>
</li>
<li v-if="canEdit && oerEnabled" class="cw-action-widget-oer">
<a href="#" @click="oerElement">
<translate>Seite auf %{oerTitle} veröffentlichen</translate>
</a>
</li>
<li v-if="!isRoot && canEdit" class="cw-action-widget-trash">
<a href="#" @click="deleteElement">
<translate>Seite löschen</translate>
......@@ -72,13 +57,9 @@ export default {
mixins: [CoursewareExport],
computed: {
...mapGetters({
context: 'context',
oerEnabled: 'oerEnabled',
oerTitle: 'oerTitle',
userId: 'userId',
consumeMode: 'consumeMode',
showToolbar: 'showToolbar',
userIsTeacher: 'userIsTeacher',
}),
isRoot() {
if (!this.structuralElement) {
......@@ -111,48 +92,8 @@ export default {
tocText() {
return this.showToolbar ? this.$gettext('Inhaltsverzeichnis ausblenden') : this.$gettext('Inhaltsverzeichnis anzeigen');
},
pdfExportURL() {
if (this.context.type === 'users') {
return STUDIP.URLHelper.getURL('dispatch.php/contents/courseware/pdf_export/' + this.structuralElement.id);
}
if (this.context.type === 'courses') {
return STUDIP.URLHelper.getURL('dispatch.php/course/courseware/pdf_export/' + this.structuralElement.id);
}
return '';
},
isTask() {
return this.structuralElement?.relationships.task.data !== null;
},
canExport() {
if (this.context.type === 'users') {
return true;
}
return this.canEdit && this.userIsTeacher;
},
tocText() {
return this.showToolbar ? this.$gettext('Inhaltsverzeichnis ausblenden') : this.$gettext('Inhaltsverzeichnis anzeigen');
},
pdfExportURL() {
if (this.context.type === 'users') {
return STUDIP.URLHelper.getURL('dispatch.php/contents/courseware/pdf_export/' + this.structuralElement.id);
}
if (this.context.type === 'courses') {
return STUDIP.URLHelper.getURL('dispatch.php/course/courseware/pdf_export/' + this.structuralElement.id);
}
return '';
},
isTask() {
return this.structuralElement?.relationships.task.data !== null;
},
canExport() {
if (this.context.type === 'users') {
return true;
}
return this.canEdit && this.userIsTeacher;
}
},
methods: {
......@@ -161,8 +102,6 @@ export default {
showElementAddDialog: 'showElementAddDialog',
showElementDeleteDialog: 'showElementDeleteDialog',
showElementInfoDialog: 'showElementInfoDialog',
showElementExportDialog: 'showElementExportDialog',
showElementOerDialog: 'showElementOerDialog',
setStructuralElementSortMode: 'setStructuralElementSortMode',
companionInfo: 'companionInfo',
addBookmark: 'addBookmark',
......@@ -201,9 +140,6 @@ export default {
addElement() {
this.showElementAddDialog(true);
},
exportElement() {
this.showElementExportDialog(true);
},
showElementInfo() {
this.showElementInfoDialog(true);
},
......@@ -211,9 +147,6 @@ export default {
this.addBookmark(this.structuralElement);
this.companionInfo({ info: this.$gettext('Das Lesezeichen wurde gesetzt.') });
},
oerElement() {
this.showElementOerDialog(true);
},
toggleTOC() {
this.setShowToolbar(!this.showToolbar);
},
......
<template>
<ul class="widget-list widget-links cw-export-widget" v-if="structuralElement">
<li class="cw-export-widget-export">
<a href="#" @click="exportElement">
<translate>Seite exportieren</translate>
</a>
</li>
<li v-if="canVisit" class="cw-export-widget-export-pdf">
<a :href="pdfExportURL">
<translate>Seite als pdf-Dokument exportieren</translate>
</a>
</li>
<li v-if="oerEnabled" class="cw-export-widget-oer">
<a href="#" @click="oerElement">
<translate>Seite auf %{oerTitle} veröffentlichen</translate>
</a>
</li>
</ul>
</template>
<script>
import CoursewareExport from '@/vue/mixins/courseware/export.js';
import { mapActions, mapGetters } from 'vuex';
export default {
name: 'courseware-export-widget',
props: ['structuralElement', 'canVisit'],
mixins: [CoursewareExport],
computed: {
...mapGetters({
context: 'context',
oerEnabled: 'oerEnabled',
oerTitle: 'oerTitle',
}),
pdfExportURL() {
if (this.context.type === 'users') {
return STUDIP.URLHelper.getURL('dispatch.php/contents/courseware/pdf_export/' + this.structuralElement.id);
}
if (this.context.type === 'courses') {
return STUDIP.URLHelper.getURL('dispatch.php/course/courseware/pdf_export/' + this.structuralElement.id);
}
return '';
},
},
methods: {
...mapActions({
showElementExportDialog: 'showElementExportDialog',
showElementOerDialog: 'showElementOerDialog',
}),
exportElement() {
this.showElementExportDialog(true);
},
oerElement() {
this.showElementOerDialog(true);
}
},
};
</script>
......@@ -790,26 +790,6 @@ export default {
menu.push({ id: 3, label: this.$gettext('Seite hinzufügen'), icon: 'add', emit: 'addElement' });
}
if ((this.userIsTeacher && this.canEdit) || this.context.type === 'users') {
menu.push({
id: 6,
label: this.$gettext('Seite exportieren'),
icon: 'export',
emit: 'showExportOptions',
});
}
if ((this.userIsTeacher || this.canEdit) && this.canVisit) {
menu.push({
id: 7,
type: 'link',
label: this.$gettext('Seite als pdf-Dokument exportieren'),
icon: 'file-pdf',
url: this.pdfExportURL,
});
}
if (this.canEdit && this.oerEnabled && this.userIsTeacher) {
menu.push({ id: 8, label: this.textOer.title, icon: 'oer-campus', emit: 'oerCurrentElement' });
}
if (!this.isRoot && this.canEdit && !this.isTask) {
menu.push({
id: 9,
......
......@@ -10,6 +10,9 @@
<MountingPortal mountTo="#courseware-action-widget" name="sidebar-actions">
<courseware-action-widget :structural-element="selected" :canVisit="canVisit"></courseware-action-widget>
</MountingPortal>
<MountingPortal mountTo="#courseware-export-widget" name="sidebar-actions" v-if="canExport">
<courseware-export-widget :structural-element="selected" :canVisit="canVisit"></courseware-export-widget>
</MountingPortal>
<MountingPortal mountTo="#courseware-view-widget" name="sidebar-views">
<courseware-view-widget :structural-element="selected" :canVisit="canVisit"></courseware-view-widget>
</MountingPortal>
......@@ -31,6 +34,7 @@
import CoursewareStructuralElement from './CoursewareStructuralElement.vue';
import CoursewareViewWidget from './CoursewareViewWidget.vue';
import CoursewareActionWidget from './CoursewareActionWidget.vue';
import CoursewareExportWidget from './CoursewareExportWidget.vue';
import CoursewareCompanionBox from './CoursewareCompanionBox.vue';
import StudipProgressIndicator from '../StudipProgressIndicator.vue';
import { mapActions, mapGetters } from 'vuex';
......@@ -42,6 +46,7 @@ export default {
CoursewareActionWidget,
CoursewareCompanionBox,
StudipProgressIndicator,
CoursewareExportWidget
},
data: () => ({
canVisit: null,
......@@ -51,6 +56,7 @@ export default {
}),
computed: {
...mapGetters({
context: 'context',
courseware: 'courseware',
orderedStructuralElements: 'courseware-structure/ordered',
relatedStructuralElement: 'courseware-structural-elements/related',
......@@ -58,6 +64,7 @@ export default {
structuralElements: 'courseware-structural-elements/all',
structuralElementById: 'courseware-structural-elements/byId',
userId: 'userId',
userIsTeacher: 'userIsTeacher'
}),
loadingErrorMessage() {
switch (this.loadingErrorStatus) {
......@@ -68,7 +75,18 @@ export default {
default:
return this.$gettext('Beim Laden der Seite ist ein Fehler aufgetreten.');
}
},
canExport() {
if (!this.selected) {
return false;
}
if (this.context.type === 'users') {
return true;
}
return this.selected.attributes['can-edit'] && this.userIsTeacher;
},
},
methods: {
...mapActions({
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment