Skip to content

Commit 7893a13

Browse files
committed
Session: Add session title in Breadcrumb.vue + course home
1 parent 61df5a0 commit 7893a13

File tree

8 files changed

+77
-4
lines changed

8 files changed

+77
-4
lines changed

assets/vue/components/Breadcrumb.vue

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ export default {
3737
...mapGetters('course', {
3838
course: 'getCourse',
3939
}),
40+
...mapGetters('session', {
41+
session: 'getSession',
42+
}),
4043
items() {
4144
console.log('Breadcrumb.vue');
4245
console.log(this.$route.name);
@@ -119,8 +122,14 @@ export default {
119122
120123
// course is set in documents/List.vue
121124
if (this.course) {
125+
126+
let sessionTitle = '';
127+
if (this.session) {
128+
sessionTitle = ' (' + this.session.name + ') ';
129+
}
130+
122131
items.push({
123-
text: this.course.title,
132+
text: this.course.title + sessionTitle,
124133
href: '/course/' + this.course.id + '/home?'+queryParams
125134
});
126135
}

assets/vue/main.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import calendarEventService from './services/ccalendarevent';
2323
import toolIntroService from './services/ctoolintro';
2424
import pageService from './services/page';
2525
import pageCategoryService from './services/pagecategory';
26+
import sessionService from './services/session';
2627

2728
import makeCrudModule from './store/modules/crud';
2829
//import vuetify from './plugins/vuetify' // path to vuetify export
@@ -92,6 +93,12 @@ store.registerModule(
9293
})
9394
);
9495

96+
store.registerModule(
97+
'session',
98+
makeCrudModule({
99+
service: sessionService
100+
})
101+
);
95102

96103
store.registerModule(
97104
'personalfile',

assets/vue/services/session.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import makeService from './api';
2+
3+
export default makeService('sessions');

assets/vue/store/modules/crud.js

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ const initialState = () => ({
1919
violations: null,
2020
resourceNode: null,
2121
course: null,
22+
session: null,
2223
});
2324

2425
const handleError = (commit, e) => {
@@ -59,7 +60,8 @@ export const ACTIONS = {
5960
SET_VIOLATIONS: 'SET_VIOLATIONS',
6061
TOGGLE_LOADING: 'TOGGLE_LOADING',
6162
ADD_RESOURCE_NODE: 'ADD_RESOURCE_NODE',
62-
ADD_COURSE: 'ADD_COURSE'
63+
ADD_COURSE: 'ADD_COURSE',
64+
ADD_SESSION: 'ADD_SESSION'
6365
};
6466

6567
export default function makeCrudModule({
@@ -272,6 +274,28 @@ export default function makeCrudModule({
272274
})
273275
.catch(e => handleError(commit, e));
274276
},
277+
findSession: ({ commit }, params) => {
278+
const id = params['id'];
279+
delete params['id'];
280+
if (!service) throw new Error('No service specified!');
281+
commit(ACTIONS.TOGGLE_LOADING);
282+
283+
return service
284+
.find(id, params)
285+
.then(response => {
286+
if (200 === response.status) {
287+
return response.json();
288+
}
289+
})
290+
291+
.then(item => {
292+
commit(ACTIONS.TOGGLE_LOADING);
293+
commit(ACTIONS.ADD_SESSION, item);
294+
295+
return item;
296+
})
297+
.catch(e => handleError(commit, e));
298+
},
275299
findResourceNode: ({ commit }, params) => {
276300
const id = params['id'];
277301
delete params['id'];
@@ -352,6 +376,9 @@ export default function makeCrudModule({
352376
getCourse: (state) => {
353377
return state.course;
354378
},
379+
getSession: (state) => {
380+
return state.session;
381+
},
355382
},
356383
mutations: {
357384
updateField,
@@ -361,6 +388,12 @@ export default function makeCrudModule({
361388
//this.$set(state, 'resourceNode', item);
362389
//this.$set(state, 'isLoading', false);
363390
},
391+
[ACTIONS.ADD_SESSION]: (state, item) => {
392+
state.session = item;
393+
state.isLoading = false;
394+
//this.$set(state, 'resourceNode', item);
395+
//this.$set(state, 'isLoading', false);
396+
},
364397
[ACTIONS.ADD_RESOURCE_NODE]: (state, item) => {
365398
state.resourceNode = item;
366399
state.isLoading = false;

assets/vue/views/course/Home.vue

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
<div class="flex flex-row justify-between border-b-2 border-gray-200 ">
44
<div class="line-clamp-1 text-2xl font-bold">
55
{{ course.title }}
6+
<span v-if="session">
7+
({{ session.name }})
8+
</span>
69
</div>
710

811
<div>
@@ -190,6 +193,7 @@ export default {
190193
setup() {
191194
const state = reactive({
192195
course: [],
196+
session: [],
193197
tools: [],
194198
shortcuts: [],
195199
dropdownOpen: false,
@@ -212,6 +216,7 @@ export default {
212216
213217
axios.get(ENTRYPOINT + '../course/' + courseId + '/home.json?sid=' + sessionId).then(response => {
214218
state.course = response.data.course;
219+
state.session = response.data.session;
215220
state.tools = response.data.tools;
216221
state.shortcuts = response.data.shortcuts;
217222
getIntro();

assets/vue/views/documents/List.vue

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,12 @@ export default {
358358
let courseIri = '/api/courses/' + cid;
359359
store.dispatch('course/findCourse', { id: courseIri });
360360
store.dispatch('resourcenode/findResourceNode', { id: '/api/resource_nodes/' + nodeId});
361+
362+
let sid = toInteger(route.query.sid);
363+
if (sid) {
364+
let sessionIri = '/api/sessions/' + sid;
365+
store.dispatch('session/findSession', { id: sessionIri });
366+
}
361367
},
362368
data() {
363369
return {

src/CoreBundle/Controller/CourseController.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ public function indexJson(Request $request, CToolRepository $toolRepository, CSh
8686
}
8787
}
8888

89+
$courseSession = $this->getCourseSession();
90+
8991
$isSpecialCourse = CourseManager::isSpecialCourse($courseId);
9092

9193
if ($user && $isSpecialCourse && (isset($_GET['autoreg']) && 1 === (int) $_GET['autoreg']) &&
@@ -189,6 +191,7 @@ public function indexJson(Request $request, CToolRepository $toolRepository, CSh
189191
}
190192
$responseData = [
191193
'course' => $course,
194+
'session' => $courseSession,
192195
'shortcuts' => $shortcuts,
193196
'diagram' => $diagram,
194197
'tools' => $tools,

src/CoreBundle/Entity/Session.php

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ class Session implements ResourceWithAccessUrlInterface
8080
* @ORM\Id
8181
* @ORM\GeneratedValue()
8282
*/
83-
#[Groups(['session:read', 'session_rel_user:read', 'session_rel_course_rel_user:read'])]
83+
#[Groups(['session:read', 'session_rel_user:read', 'session_rel_course_rel_user:read', 'course:read'])]
8484
protected ?int $id = null;
8585

8686
/**
@@ -152,7 +152,14 @@ class Session implements ResourceWithAccessUrlInterface
152152
* @ORM\Column(name="name", type="string", length=150)
153153
*/
154154
#[Assert\NotBlank]
155-
#[Groups(['session:read', 'session:write', 'session_rel_course_rel_user:read', 'document:read', 'session_rel_user:read'])]
155+
#[Groups([
156+
'session:read',
157+
'session:write',
158+
'session_rel_course_rel_user:read',
159+
'document:read',
160+
'session_rel_user:read',
161+
'course:read',
162+
])]
156163
protected string $name;
157164

158165
/**

0 commit comments

Comments
 (0)