Skip to content
Snippets Groups Projects
Commit d0c04219 authored by Marcus Eibrink-Lunzenauer's avatar Marcus Eibrink-Lunzenauer Committed by Ron Lucke
Browse files

Courseware: vollständiges paginiertes Nachladen ohne hartes Limit

parent 52c3a703
No related branches found
No related tags found
No related merge requests found
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
"@babel/plugin-transform-runtime": "^7.12.1", "@babel/plugin-transform-runtime": "^7.12.1",
"@babel/preset-env": "^7.12.1", "@babel/preset-env": "^7.12.1",
"@babel/register": "^7.12.1", "@babel/register": "^7.12.1",
"@elan-ev/reststate-vuex": "~1.0.4", "@elan-ev/reststate-vuex": "~1.0.5",
"@fullcalendar/core": "^4.3.1", "@fullcalendar/core": "^4.3.1",
"@fullcalendar/daygrid": "^4.3.0", "@fullcalendar/daygrid": "^4.3.0",
"@fullcalendar/interaction": "^4.3.0", "@fullcalendar/interaction": "^4.3.0",
...@@ -1142,9 +1142,9 @@ ...@@ -1142,9 +1142,9 @@
"dev": true "dev": true
}, },
"node_modules/@elan-ev/reststate-vuex": { "node_modules/@elan-ev/reststate-vuex": {
"version": "1.0.5", "version": "1.0.6",
"resolved": "https://registry.npmjs.org/@elan-ev/reststate-vuex/-/reststate-vuex-1.0.5.tgz", "resolved": "https://registry.npmjs.org/@elan-ev/reststate-vuex/-/reststate-vuex-1.0.6.tgz",
"integrity": "sha512-WDXJOocwxgMPHvW7veGhjcyhDXBtzhQA/TylSNTd7iDNpCItTyT2Y+gFoJBm8o+JpvYRdanH56GRHwiqidgNJQ==", "integrity": "sha512-hj1MCzPx9dF2jhQ2rstTBqg4WGNT+cvfIBBpCgsAE9CSrroZlL0Gdb6+3XVnM9cOKQi7NdAnTy6b/FMC5+rlaw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@elan-ev/reststate-client": "^1.0.0" "@elan-ev/reststate-client": "^1.0.0"
...@@ -15219,9 +15219,9 @@ ...@@ -15219,9 +15219,9 @@
"dev": true "dev": true
}, },
"@elan-ev/reststate-vuex": { "@elan-ev/reststate-vuex": {
"version": "1.0.5", "version": "1.0.6",
"resolved": "https://registry.npmjs.org/@elan-ev/reststate-vuex/-/reststate-vuex-1.0.5.tgz", "resolved": "https://registry.npmjs.org/@elan-ev/reststate-vuex/-/reststate-vuex-1.0.6.tgz",
"integrity": "sha512-WDXJOocwxgMPHvW7veGhjcyhDXBtzhQA/TylSNTd7iDNpCItTyT2Y+gFoJBm8o+JpvYRdanH56GRHwiqidgNJQ==", "integrity": "sha512-hj1MCzPx9dF2jhQ2rstTBqg4WGNT+cvfIBBpCgsAE9CSrroZlL0Gdb6+3XVnM9cOKQi7NdAnTy6b/FMC5+rlaw==",
"dev": true, "dev": true,
"requires": { "requires": {
"@elan-ev/reststate-client": "^1.0.0" "@elan-ev/reststate-client": "^1.0.0"
...@@ -204,11 +204,14 @@ export const actions = { ...@@ -204,11 +204,14 @@ export const actions = {
type: 'courseware-blocks', type: 'courseware-blocks',
id: block_id, id: block_id,
}; };
const relationship = 'file-refs'; const relationship = 'file-refs';
return dispatch('courseware-blocks/loadRelated', { parent, relationship }, { root: true }).then(() => { return dispatch('loadRelatedPaginated', {
const refs = rootGetters['courseware-blocks/related']({ type: 'file-refs',
parent,
relationship,
}).then(() => {
const refs = rootGetters['file-refs/related']({
parent, parent,
relationship, relationship,
}); });
...@@ -804,36 +807,61 @@ export const actions = { ...@@ -804,36 +807,61 @@ export const actions = {
context.commit('cwManagerFilingDataSet', msg); context.commit('cwManagerFilingDataSet', msg);
}, },
loadUsersCourses({ dispatch, rootGetters, state }, userId) { async loadRelatedPaginated({ dispatch, rootGetters }, { type, parent, relationship, options }) {
const limit = 100;
let offset = 0;
do {
const optionsWithPages = {
...options,
'page[offset]': offset++,
'page[limit]': limit,
};
await dispatch(
`${type}/loadRelated`,
{
parent,
relationship,
options: optionsWithPages,
resetRelated: false
},
{ root: true }
);
} while (rootGetters[`${type}/all`].length < rootGetters[`${type}/lastMeta`].page.total);
},
async loadUsersCourses({ dispatch, rootGetters, state }, userId) {
const parent = { const parent = {
type: 'users', type: 'users',
id: userId, id: userId,
}; };
const relationship = 'course-memberships'; const relationship = 'course-memberships';
const options = { const options = {
include: 'course', include: 'course'
'page[limit]': 10000,
}; };
await dispatch('loadRelatedPaginated', {
type: 'course-memberships',
parent,
relationship,
options
});
return dispatch('course-memberships/loadRelated', { parent, relationship, options }, { root: true }).then( const memberships = rootGetters['course-memberships/related']({
() => { parent,
const memberships = rootGetters['course-memberships/related']({ relationship,
parent, });
relationship,
}); let courses = [];
let courses = []; memberships.forEach((membership) => {
memberships.forEach((membership) => { if (
if ( membership.attributes.permission === 'dozent' &&
membership.attributes.permission === 'dozent' && state.context.id !== membership.relationships.course.data.id
state.context.id !== membership.relationships.course.data.id ) {
) { courses.push(rootGetters['courses/related']({ parent: membership, relationship: 'course' }));
courses.push(rootGetters['courses/related']({ parent: membership, relationship: 'course' }));
}
});
return courses;
} }
); });
return courses;
}, },
loadRemoteCoursewareStructure({ dispatch, rootGetters }, { rangeId, rangeType }) { loadRemoteCoursewareStructure({ dispatch, rootGetters }, { rangeId, rangeType }) {
...@@ -859,47 +887,48 @@ export const actions = { ...@@ -859,47 +887,48 @@ export const actions = {
); );
}, },
loadTeacherStatus({ dispatch, rootGetters, state, commit, getters }, userId) { async loadTeacherStatus({ dispatch, rootGetters, state, commit, getters }, userId) {
const parent = { const parent = {
type: 'users', type: 'users',
id: userId, id: userId,
}; };
const relationship = 'course-memberships'; const relationship = 'course-memberships';
const options = { const options = {
include: 'course', include: 'course',
'page[limit]': 10000,
}; };
await dispatch('loadRelatedPaginated', {
type: 'course-memberships',
parent,
relationship,
options
});
return dispatch('course-memberships/loadRelated', { parent, relationship, options }, { root: true }).then( const memberships = rootGetters['course-memberships/related']({
() => { parent,
const memberships = rootGetters['course-memberships/related']({ relationship,
parent, });
relationship, let isTeacher = false;
}); memberships.forEach((membership) => {
let isTeacher = false; if (getters.courseware.attributes['editing-permission-level'] === 'dozent') {
memberships.forEach((membership) => { if (
if (getters.courseware.attributes['editing-permission-level'] === 'dozent') { membership.attributes.permission === 'dozent' &&
if ( state.context.id === membership.relationships.course.data.id
membership.attributes.permission === 'dozent' && ) {
state.context.id === membership.relationships.course.data.id isTeacher = true;
) { }
isTeacher = true;
}
}
if (getters.courseware.attributes['editing-permission-level'] === 'tutor') {
if (
(membership.attributes.permission === 'dozent' ||
membership.attributes.permission === 'tutor') &&
state.context.id === membership.relationships.course.data.id
) {
isTeacher = true;
}
}
});
return commit('setUserIsTeacher', isTeacher);
} }
); if (getters.courseware.attributes['editing-permission-level'] === 'tutor') {
if (
(membership.attributes.permission === 'dozent' ||
membership.attributes.permission === 'tutor') &&
state.context.id === membership.relationships.course.data.id
) {
isTeacher = true;
}
}
});
return commit('setUserIsTeacher', isTeacher);
}, },
loadFeedback({ dispatch }, blockId) { loadFeedback({ dispatch }, blockId) {
...@@ -909,7 +938,12 @@ export const actions = { ...@@ -909,7 +938,12 @@ export const actions = {
include: 'user', include: 'user',
}; };
return dispatch('courseware-block-feedback/loadRelated', { parent, relationship, options }, { root: true }); return dispatch('loadRelatedPaginated', {
type: 'course-block-feedback',
parent,
relationship,
options
});
}, },
async createFeedback({ dispatch }, { blockId, feedback }) { async createFeedback({ dispatch }, { blockId, feedback }) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment