aboutsummaryrefslogtreecommitdiff
path: root/resources
diff options
context:
space:
mode:
authorMurtaza Sultani <sultani@data-quest.de>2026-01-27 13:38:51 +0100
committerMurtaza Sultani <sultani@data-quest.de>2026-03-19 17:36:05 +0100
commit8eae6da6ebe7a2f201b956235854bfcaec361037 (patch)
treed66a80530db40a158768f261de532d1e4994ca60 /resources
parent097a4f4244f6e491118dafdc2f24af4ad4410fda (diff)
Account provisioning modes
Diffstat (limited to 'resources')
-rw-r--r--resources/assets/stylesheets/scss/lti.scss76
-rw-r--r--resources/assets/stylesheets/scss/responsive.scss2
-rw-r--r--resources/vue/apps/lti/publications/Index.vue72
-rw-r--r--resources/vue/apps/lti/publications/Show.vue4
-rw-r--r--resources/vue/apps/lti/registrations/Index.vue12
-rw-r--r--resources/vue/apps/lti/resources/Index.vue1
-rw-r--r--resources/vue/components/lti/helpers/urls.js4
7 files changed, 140 insertions, 31 deletions
diff --git a/resources/assets/stylesheets/scss/lti.scss b/resources/assets/stylesheets/scss/lti.scss
index 27efc0b..b2c7b38 100644
--- a/resources/assets/stylesheets/scss/lti.scss
+++ b/resources/assets/stylesheets/scss/lti.scss
@@ -232,5 +232,81 @@
.mb-10 {
margin-bottom: 10px;
}
+ .w-full {
+ width: 100%;
+ }
+ }
+
+ .messages-container {
+ padding: 0;
+ list-style-type: none;
+ }
+}
+
+#lti {
+ #current-page-structure {
+ display: none;
+ }
+
+ #content-wrapper #content {
+ width: 100%;
+ max-width: 1152px;
+ margin: 0 auto;
+ }
+
+ .provisioning-modes {
+ margin-top: 30px;
+
+ .studip-card-container {
+ padding: 0;
+ display: grid;
+ gap: 20px;
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
+ }
+
+ .studip-card {
+ &__title {
+ font-size: 20px;
+ }
+
+ &__subtitle {
+ font-size: 18px;
+ }
+
+ &__body {
+ margin-top: 20px;
+ align-items: center;
+
+ .studip-icon {
+ width: 50px !important;
+ height: 50px !important;
+ }
+ }
+
+ &__footer {
+ form {
+ width: 100%;
+ }
+
+ .button {
+ margin: 0;
+ width: 100%;
+ }
+ }
+ }
+ }
+
+ @media only screen and (max-width: 768px) {
+ #responsive-contentbar {
+ display: none;
+ }
+ #content-wrapper {
+ margin-top: 0;
+ }
+
+ .provisioning-modes {
+ margin-top: 10px;
+ margin-bottom: 10px;
+ }
}
}
diff --git a/resources/assets/stylesheets/scss/responsive.scss b/resources/assets/stylesheets/scss/responsive.scss
index e72ce27..8776a4c 100644
--- a/resources/assets/stylesheets/scss/responsive.scss
+++ b/resources/assets/stylesheets/scss/responsive.scss
@@ -66,7 +66,7 @@ $sidebarOut: -330px;
#responsive-navigation-button:not(.slide-enter-active):not(.slide-leave-active) {
cursor: pointer;
- margin-left: -3px;
+ margin-left: 5px;
}
#responsive-navigation-items {
diff --git a/resources/vue/apps/lti/publications/Index.vue b/resources/vue/apps/lti/publications/Index.vue
index c7d810d..5955a26 100644
--- a/resources/vue/apps/lti/publications/Index.vue
+++ b/resources/vue/apps/lti/publications/Index.vue
@@ -94,101 +94,122 @@ const deletePublication = id => {
<thead>
<tr class="sortable">
<th
+ scope="col"
:class="getSortClass('name')"
:aria-sort="getAriaSortString('name')"
:aria-label="getAriaSortLabel('name', $gettext('Name'))"
>
<button
type="button"
- class="button__table-sort button-base"
+ class="as-link"
@click="sortBy('name')"
- :title="$gettext('Nach Name sortieren')">
+ :title="$gettext('Nach Name sortieren')"
+ :aria-label="$gettext('Nach Name sortieren')"
+ >
{{ $gettext('Name') }}
</button>
</th>
<th
+ scope="col"
:class="getSortClass('version')"
:aria-sort="getAriaSortString('version')"
:aria-label="getAriaSortLabel('version', $gettext('Version'))"
>
<button
type="button"
- class="button__table-sort button-base"
+ class="as-link"
@click="sortBy('version')"
- :title="$gettext('Nach Version sortieren')">
+ :title="$gettext('Nach Version sortieren')"
+ :aria-label="$gettext('Nach Version sortieren')"
+ >
{{ $gettext('Version') }}
</button>
</th>
<th
v-if="!RANGE_ID"
+ scope="col"
:class="getSortClass('range_name')"
:aria-sort="getAriaSortString('range_name')"
:aria-label="getAriaSortLabel('range_name', $gettext('Bereich'))"
>
<button
type="button"
- class="button__table-sort button-base"
+ class="as-link"
@click="sortBy('range_name')"
- :title="$gettext('Nach Bereich sortieren')">
+ :title="$gettext('Nach Bereich sortieren')"
+ :aria-label="$gettext('Nach Bereich sortieren')"
+ >
{{ $gettext('Bereich') }}
</button>
</th>
<th
+ scope="col"
:class="getSortClass('status.value')"
:aria-sort="getAriaSortString('status.value')"
:aria-label="getAriaSortLabel('status.value', $gettext('Status'))"
>
<button
type="button"
- class="button__table-sort button-base"
+ class="as-link"
@click="sortBy('status.value')"
- :title="$gettext('Nach Status sortieren')">
+ :title="$gettext('Nach Status sortieren')"
+ :aria-label="$gettext('Nach Status sortieren')"
+ >
{{ $gettext('Status') }}
</button>
</th>
<th
+ scope="col"
:class="getSortClass('members')"
:aria-sort="getAriaSortString('members')"
:aria-label="getAriaSortLabel('members', $gettext('Anzahl der Teilnehmenden'))"
>
<button
type="button"
- class="button__table-sort button-base"
+ class="as-link"
@click="sortBy('members')"
- :title="$gettext('Nach Anzahl der Teilnehmenden sortieren')">
+ :title="$gettext('Nach Anzahl der Teilnehmenden sortieren')"
+ :aria-label="$gettext('Nach Anzahl der Teilnehmenden sortieren')"
+ >
{{ $gettext('Anzahl der Teilnehmenden') }}
</button>
</th>
- <th>
+ <th scope="col">
{{ $gettext('Custom-Parameter') }}
</th>
<th
+ scope="col"
:class="getSortClass('user.name')"
:aria-sort="getAriaSortString('user.name')"
:aria-label="getAriaSortLabel('user.name', $gettext('Erstellt von'))"
>
<button
type="button"
- class="button__table-sort button-base"
+ class="as-link"
@click="sortBy('user.name')"
- :title="$gettext('Nach Autor sortieren')">
+ :title="$gettext('Nach Autor/in sortieren')"
+ :aria-label="$gettext('Nach Autor/in sortieren')"
+ >
{{ $gettext('Erstellt von') }}
</button>
</th>
<th
+ scope="col"
:class="getSortClass('mkdate')"
:aria-sort="getAriaSortString('mkdate')"
:aria-label="getAriaSortLabel('mkdate', $gettext('Erstellt am'))"
>
<button
type="button"
- class="button__table-sort button-base"
+ class="as-link"
@click="sortBy('mkdate')"
- :title="$gettext('Nach Erstellt Datum sortieren')">
+ :title="$gettext('Nach Erstellt Datum sortieren')"
+ :aria-label="$gettext('Nach Erstellt Datum sortieren')"
+ >
{{ $gettext('Erstellt am') }}
</button>
</th>
- <th class="actions" style="width: 20px">{{ $gettext('Aktionen') }}</th>
+ <th scope="col" class="actions" style="width: 20px">{{ $gettext('Aktionen') }}</th>
</tr>
</thead>
<tbody>
@@ -196,15 +217,21 @@ const deletePublication = id => {
<td>
<button
type="button"
- class="styleless button-base"
+ class="as-link"
@click="showPublication(publication.id)"
- :title="$gettext('Konfiguration anzeigen')">
+ :title="$gettext('Konfiguration anzeigen')"
+ :aria-label="$gettext('Konfiguration anzeigen')"
+ >
{{ publication.name }}
</button>
</td>
<td>{{ publication.version }}</td>
<td v-if="!RANGE_ID">
- <a :href="showRangeURL(publication.range_id)" :title="$gettext('Zur Veranstaltung')">
+ <a
+ :href="showRangeURL(publication.range_id)"
+ :title="$gettext('Zur Veranstaltung')"
+ :aria-label="$gettext('Zur Veranstaltung')"
+ >
{{ publication.range_name }}
</a>
</td>
@@ -223,6 +250,7 @@ const deletePublication = id => {
type="button"
class="styleless button-base"
:title="$gettext('Teilnehmenden anschauen')"
+ :aria-label="$gettext('Teilnehmenden anschauen')"
@click="showMembers(publication)"
>
{{ publication.members.length }}
@@ -236,7 +264,11 @@ const deletePublication = id => {
<td>
<div class="user-avatar-container">
<UserAvatarDropdown :user="publication.user" />
- <a :href="userProfileURL(publication.user.username)" :title="$gettext('Zum Benutzerprofil')">
+ <a
+ :href="userProfileURL(publication.user.username)"
+ :title="$gettext('Zum Benutzerprofil')"
+ :aria-label="$gettext('Zum Benutzerprofil')"
+ >
{{ publication.user.name }}
</a>
</div>
diff --git a/resources/vue/apps/lti/publications/Show.vue b/resources/vue/apps/lti/publications/Show.vue
index 784472e..757ed5f 100644
--- a/resources/vue/apps/lti/publications/Show.vue
+++ b/resources/vue/apps/lti/publications/Show.vue
@@ -118,12 +118,12 @@ defineProps({
<dt>{{ $gettext('Bereitstellungsmodus beim ersten Start durch die Lehrende') }}</dt>
<dd>
- {{ publication.provisioning_mode_instructor.label }}
+ {{ publication.provisioning_mode_instructor?.label }}
</dd>
<dt>{{ $gettext('Bereitstellungsmodus beim ersten Start durch die Studierende') }}</dt>
<dd>
- {{ publication.provisioning_mode_student.label }}
+ {{ publication.provisioning_mode_student?.label }}
</dd>
</dl>
</article>
diff --git a/resources/vue/apps/lti/registrations/Index.vue b/resources/vue/apps/lti/registrations/Index.vue
index fec1c8f..222a1fa 100644
--- a/resources/vue/apps/lti/registrations/Index.vue
+++ b/resources/vue/apps/lti/registrations/Index.vue
@@ -116,7 +116,7 @@ const deleteRegistration = id => {
>
<button
type="button"
- class="button__table-sort button-base"
+ class="as-link"
@click="sortBy('name')"
:title="$gettext('Nach Name sortieren')">
{{ $gettext('Name') }}
@@ -130,7 +130,7 @@ const deleteRegistration = id => {
>
<button
type="button"
- class="button__table-sort button-base"
+ class="as-link"
@click="sortBy('version')"
:title="$gettext('Nach Version sortieren')">
{{ $gettext('Version') }}
@@ -144,7 +144,7 @@ const deleteRegistration = id => {
>
<button
type="button"
- class="button__table-sort button-base"
+ class="as-link"
@click="sortBy('deployments')"
:title="$gettext('Nach Anzahl der Deployments sortieren')">
{{ $gettext('Deployments') }}
@@ -158,7 +158,7 @@ const deleteRegistration = id => {
>
<button
type="button"
- class="button__table-sort button-base"
+ class="as-link"
@click="sortBy('range_name')"
:title="$gettext('Nach Bereich sortieren')">
{{ $gettext('Bereich') }}
@@ -172,7 +172,7 @@ const deleteRegistration = id => {
>
<button
type="button"
- class="button__table-sort button-base"
+ class="as-link"
@click="sortBy('status.value')"
:title="$gettext('Nach Status sortieren')">
{{ $gettext('Status') }}
@@ -185,7 +185,7 @@ const deleteRegistration = id => {
>
<button
type="button"
- class="button__table-sort button-base"
+ class="as-link"
@click="sortBy('mkdate')"
:title="$gettext('Nach Erstellt Datum sortieren')">
{{ $gettext('Erstellt am') }}
diff --git a/resources/vue/apps/lti/resources/Index.vue b/resources/vue/apps/lti/resources/Index.vue
index 24580ab..19899cc 100644
--- a/resources/vue/apps/lti/resources/Index.vue
+++ b/resources/vue/apps/lti/resources/Index.vue
@@ -11,6 +11,7 @@ import {debounce} from 'lodash';
import {deserializeJSONAPIResponse} from "../../../../assets/javascripts/lib/jsonapiUtils";
import StudipPagination from "../../../components/StudipPagination.vue";
import ResourceDetail from "../../../components/lti/resources/ResourceDetail.vue";
+import StudipDialog from "../../../components/StudipDialog.vue";
const ltiConfig = useLtiConfig();
diff --git a/resources/vue/components/lti/helpers/urls.js b/resources/vue/components/lti/helpers/urls.js
index 49af655..f1f05a2 100644
--- a/resources/vue/components/lti/helpers/urls.js
+++ b/resources/vue/components/lti/helpers/urls.js
@@ -19,9 +19,9 @@ export const deleteDeploymentURL = id => STUDIP.URLHelper.getURL(`dispatch.php/a
// Resource Links URLS:
export const createResourceURL = () => STUDIP.URLHelper.getURL(`dispatch.php/admin/lti/resources/create`);
-export const editResourceURL = (id) => STUDIP.URLHelper.getURL(`dispatch.php/admin/lti/resources/edit/${id}`);
+export const editResourceURL = id => STUDIP.URLHelper.getURL(`dispatch.php/admin/lti/resources/edit/${id}`);
-export const editResourceConsentURL = (id) => STUDIP.URLHelper.getURL(`dispatch.php/course/lti/consent/${id}`);
+export const editResourceConsentURL = registrationId => STUDIP.URLHelper.getURL(`dispatch.php/course/lti/consent/${registrationId}`);
export const storeResourceURL = () => STUDIP.URLHelper.getURL(`dispatch.php/admin/lti/resources/store`);
export const updateResourceURL = id => STUDIP.URLHelper.getURL(`dispatch.php/admin/lti/resources/update/${id}`);