parent
							
								
									08cbbe7605
								
							
						
					
					
						commit
						8252bf6c8f
					
				@ -1,329 +1,287 @@ | 
				
			||||
<template> | 
				
			||||
  <div v-if="course" class="grid gap-4"> | 
				
			||||
    <div class="flex flex-row justify-between border-b-2 border-gray-200 "> | 
				
			||||
      <div class="line-clamp-1 text-h3 font-bold"> | 
				
			||||
  <div | 
				
			||||
    v-if="course" | 
				
			||||
    class="flex flex-col gap-4" | 
				
			||||
  > | 
				
			||||
    <div class="flex gap-4 items-center"> | 
				
			||||
      <h2 class="mr-auto"> | 
				
			||||
        {{ course.title }} | 
				
			||||
        <span v-if="session"> | 
				
			||||
        <small v-if="session"> | 
				
			||||
          ({{ session.name }}) | 
				
			||||
        </span> | 
				
			||||
      </div> | 
				
			||||
        </small> | 
				
			||||
      </h2> | 
				
			||||
 | 
				
			||||
      <Button | 
				
			||||
        v-if="isCurrentTeacher" | 
				
			||||
        :label="t('See as student')" | 
				
			||||
        icon="pi pi-eye" | 
				
			||||
        class="p-button-outlined p-button-plain" | 
				
			||||
        type="button" | 
				
			||||
      /> | 
				
			||||
 | 
				
			||||
      <div> | 
				
			||||
        <div class="flex flex-row" v-if="isCurrentTeacher && course"> | 
				
			||||
          <a class="btn btn--info mr-2"> | 
				
			||||
            <v-icon icon="mdi-eye" class="pr-2" /> | 
				
			||||
            {{ $t('See as student') }} | 
				
			||||
          </a> | 
				
			||||
 | 
				
			||||
          <div class="relative"> | 
				
			||||
            <!--          shadow rounded-full--> | 
				
			||||
            <button | 
				
			||||
                @click="dropdownOpen = !dropdownOpen" | 
				
			||||
                class="relative z-10 block h-8 w-8  overflow-hidden  focus:outline-none" | 
				
			||||
            > | 
				
			||||
              <v-icon>mdi-cog</v-icon> | 
				
			||||
            </button> | 
				
			||||
 | 
				
			||||
            <div | 
				
			||||
                v-show="dropdownOpen" | 
				
			||||
                @click="dropdownOpen = false" | 
				
			||||
                class="fixed inset-0 h-full w-full z-10" | 
				
			||||
            ></div> | 
				
			||||
 | 
				
			||||
            <div | 
				
			||||
                v-show="dropdownOpen" | 
				
			||||
                class="absolute right-0 mt-2 py-2 w-48 bg-white rounded-md shadow-xl z-20" | 
				
			||||
            > | 
				
			||||
              <q-list dense> | 
				
			||||
                <!--            <q-item replace :to="'/main/messages/index.php'" clickable class="">--> | 
				
			||||
                <!--              <q-item-section>Inbox</q-item-section>--> | 
				
			||||
                <!--            </q-item>--> | 
				
			||||
                <q-item | 
				
			||||
                    :href="goToCourseTool(course, tool)" | 
				
			||||
                    tag="a" | 
				
			||||
                    class="" | 
				
			||||
                    v-for="tool in tools.admin" | 
				
			||||
                > | 
				
			||||
                  <q-item-section> | 
				
			||||
                    {{ $t(tool.tool.nameToShow) }} | 
				
			||||
                  </q-item-section> | 
				
			||||
                </q-item> | 
				
			||||
              </q-list> | 
				
			||||
            </div> | 
				
			||||
          </div> | 
				
			||||
        </div> | 
				
			||||
      </div> | 
				
			||||
      <Button | 
				
			||||
        icon="mdi mdi-cog" | 
				
			||||
        class="p-button-text p-button-plain" | 
				
			||||
        type="button" | 
				
			||||
        aria-haspopup="true" | 
				
			||||
        aria-controls="course-tmenu" | 
				
			||||
        @click="toggleCourseTMenu" | 
				
			||||
      /> | 
				
			||||
 | 
				
			||||
      <TieredMenu | 
				
			||||
        id="course-tmenu" | 
				
			||||
        ref="courseTMenu" | 
				
			||||
        :model="courseItems" | 
				
			||||
        :popup="true" | 
				
			||||
      /> | 
				
			||||
    </div> | 
				
			||||
 | 
				
			||||
    <div v-if="isCurrentTeacher" | 
				
			||||
         class="bg-gradient-to-r from-gray-100 to-gray-50 flex flex-col rounded-md text-center p-2" | 
				
			||||
    <div | 
				
			||||
      v-if="isCurrentTeacher" | 
				
			||||
    > | 
				
			||||
      <div v-if="intro" class="p-10 text-center"> | 
				
			||||
        <span v-html="intro.introText" /> | 
				
			||||
 | 
				
			||||
        <div v-if="createInSession"> | 
				
			||||
          <button | 
				
			||||
              v-if="introTool" | 
				
			||||
              class="mt-2 btn btn--info" | 
				
			||||
              @click="addIntro(course, introTool)" | 
				
			||||
          > | 
				
			||||
            <v-icon>mdi-plus</v-icon> | 
				
			||||
            {{ $t('Course introduction') }} | 
				
			||||
          </button> | 
				
			||||
        </div> | 
				
			||||
        <div v-else> | 
				
			||||
          <button | 
				
			||||
              class="mt-2 btn btn--info" | 
				
			||||
              @click="updateIntro(intro)" | 
				
			||||
          > | 
				
			||||
            <v-icon>mdi-pencil</v-icon> | 
				
			||||
            {{ $t('Update') }} | 
				
			||||
          </button> | 
				
			||||
        </div> | 
				
			||||
 | 
				
			||||
      </div> | 
				
			||||
      <div v-else> | 
				
			||||
          <div> | 
				
			||||
            <v-icon | 
				
			||||
                icon="mdi-book-open-page-variant" | 
				
			||||
                size="72px" | 
				
			||||
                class="font-extrabold text-transparent bg-clip-text bg-gradient-to-br from-primary to-primary-gradient" | 
				
			||||
            /> | 
				
			||||
          </div> | 
				
			||||
 | 
				
			||||
          <div class="mt-2 font-bold"> | 
				
			||||
            {{ $t("You don't have any course content yet.") }} | 
				
			||||
          </div> | 
				
			||||
 | 
				
			||||
          <div v-if="introTool"> | 
				
			||||
            {{ $t('Add a course introduction to display to your students.') }} | 
				
			||||
          </div> | 
				
			||||
 | 
				
			||||
          <button | 
				
			||||
              v-if="introTool" | 
				
			||||
              class="mt-2 btn btn--info" | 
				
			||||
              @click="addIntro(course, introTool)" | 
				
			||||
          > | 
				
			||||
            <v-icon>mdi-plus</v-icon> | 
				
			||||
            {{ $t('Course introduction') }} | 
				
			||||
          </button> | 
				
			||||
      </div> | 
				
			||||
    </div> | 
				
			||||
    <div v-else> | 
				
			||||
      <div v-if="intro" class="p-10 text-center"> | 
				
			||||
        <span v-html="intro.introText" /> | 
				
			||||
      <div | 
				
			||||
        v-if="intro" | 
				
			||||
        class="flex flex-col gap-4" | 
				
			||||
      > | 
				
			||||
        <div v-html="intro.introText" /> | 
				
			||||
 | 
				
			||||
        <Button | 
				
			||||
          v-if="createInSession && introTool" | 
				
			||||
          class="p-button-outlined ml-auto" | 
				
			||||
          icon="mdi mdi-plus" | 
				
			||||
          :label="t('Course introduction')" | 
				
			||||
          @click="addIntro(course, introTool)" | 
				
			||||
        /> | 
				
			||||
        <Button | 
				
			||||
          v-else | 
				
			||||
          class="p-button-outlined ml-auto" | 
				
			||||
          icon="mdi mdi-pencil" | 
				
			||||
          :label="t('Update')" | 
				
			||||
          @click="updateIntro(intro)" | 
				
			||||
        /> | 
				
			||||
      </div> | 
				
			||||
      <EmptyState | 
				
			||||
        v-else | 
				
			||||
        :summary="t('You don\'t have any course content yet.')" | 
				
			||||
        :detail="t('Add a course introduction to display to your students.')" | 
				
			||||
        icon="mdi mdi-book-open-page-variant" | 
				
			||||
      > | 
				
			||||
        <Button | 
				
			||||
          v-if="introTool" | 
				
			||||
          class="mt-4 p-button-outlined" | 
				
			||||
          icon="mdi mdi-plus" | 
				
			||||
          :label="t('Course introduction')" | 
				
			||||
          @click="addIntro(course, introTool)" | 
				
			||||
        /> | 
				
			||||
      </EmptyState> | 
				
			||||
    </div> | 
				
			||||
    <div | 
				
			||||
      v-else-if="intro" | 
				
			||||
      v-html="intro.introText" | 
				
			||||
    /> | 
				
			||||
 | 
				
			||||
    <div v-if="isCurrentTeacher && course" class="flex justify-between border-b-2 border-gray-200"> | 
				
			||||
    <div | 
				
			||||
      v-if="isCurrentTeacher && course" | 
				
			||||
      class="flex justify-between border-b-2 border-gray-200" | 
				
			||||
    > | 
				
			||||
      <div class="text-h6 font-bold"> | 
				
			||||
        {{ $t('Tools') }} | 
				
			||||
      </div> | 
				
			||||
      <!--      <div>--> | 
				
			||||
      <!--        <v-icon>--> | 
				
			||||
      <!--          mdi-format-paint--> | 
				
			||||
      <!--        </v-icon>--> | 
				
			||||
      <!--        Customize--> | 
				
			||||
      <!--      </div>--> | 
				
			||||
    </div> | 
				
			||||
 | 
				
			||||
    <div | 
				
			||||
      class="grid gap-y-12 sm:gap-x-5 md:gap-x-16 md:gap-y-12 justify-between grid-cols-course-tools" | 
				
			||||
    > | 
				
			||||
      <CourseToolList | 
				
			||||
          v-for="tool in tools.authoring" | 
				
			||||
          :course="course" | 
				
			||||
          :tool="tool" | 
				
			||||
          :go-to-course-tool="goToCourseTool" | 
				
			||||
          :change-visibility="changeVisibility" | 
				
			||||
          :go-to-setting-course-tool="goToSettingCourseTool" | 
				
			||||
        v-for="tool in tools.authoring" | 
				
			||||
        :change-visibility="changeVisibility" | 
				
			||||
        :course="course" | 
				
			||||
        :go-to-course-tool="goToCourseTool" | 
				
			||||
        :go-to-setting-course-tool="goToSettingCourseTool" | 
				
			||||
        :tool="tool" | 
				
			||||
      /> | 
				
			||||
 | 
				
			||||
      <CourseToolList | 
				
			||||
          v-for="tool in tools.interaction" | 
				
			||||
          :course="course" | 
				
			||||
          :tool="tool" | 
				
			||||
          :go-to-course-tool="goToCourseTool" | 
				
			||||
          :change-visibility="changeVisibility" | 
				
			||||
          :go-to-setting-course-tool="goToSettingCourseTool" | 
				
			||||
        v-for="tool in tools.interaction" | 
				
			||||
        :change-visibility="changeVisibility" | 
				
			||||
        :course="course" | 
				
			||||
        :go-to-course-tool="goToCourseTool" | 
				
			||||
        :go-to-setting-course-tool="goToSettingCourseTool" | 
				
			||||
        :tool="tool" | 
				
			||||
      /> | 
				
			||||
 | 
				
			||||
      <CourseToolList | 
				
			||||
          v-for="tool in tools.plugin" | 
				
			||||
          :course="course" | 
				
			||||
          :tool="tool" | 
				
			||||
          :go-to-course-tool="goToCourseTool" | 
				
			||||
          :change-visibility="changeVisibility" | 
				
			||||
          :go-to-setting-course-tool="goToSettingCourseTool" | 
				
			||||
        v-for="tool in tools.plugin" | 
				
			||||
        :change-visibility="changeVisibility" | 
				
			||||
        :course="course" | 
				
			||||
        :go-to-course-tool="goToCourseTool" | 
				
			||||
        :go-to-setting-course-tool="goToSettingCourseTool" | 
				
			||||
        :tool="tool" | 
				
			||||
      /> | 
				
			||||
 | 
				
			||||
      <ShortCutList | 
				
			||||
          v-for="shortcut in shortcuts" | 
				
			||||
          :shortcut="shortcut" | 
				
			||||
          :go-to-short-cut="goToShortCut" | 
				
			||||
          :change-visibility="changeVisibility" | 
				
			||||
        v-for="shortcut in shortcuts" | 
				
			||||
        :change-visibility="changeVisibility" | 
				
			||||
        :go-to-short-cut="goToShortCut" | 
				
			||||
        :shortcut="shortcut" | 
				
			||||
      /> | 
				
			||||
    </div> | 
				
			||||
  </div> | 
				
			||||
</template> | 
				
			||||
 | 
				
			||||
<script> | 
				
			||||
import Loading from '../../components/Loading.vue'; | 
				
			||||
import Toolbar from '../../components/Toolbar.vue'; | 
				
			||||
<script setup> | 
				
			||||
import { computed, ref } from 'vue'; | 
				
			||||
import { useStore } from 'vuex'; | 
				
			||||
import { useRoute, useRouter } from 'vue-router'; | 
				
			||||
import isEmpty from 'lodash/isEmpty'; | 
				
			||||
import axios from 'axios'; | 
				
			||||
import { ENTRYPOINT } from '../../config/entrypoint'; | 
				
			||||
import Button from 'primevue/button'; | 
				
			||||
import TieredMenu from 'primevue/tieredmenu'; | 
				
			||||
import CourseToolList from '../../components/course/CourseToolList.vue'; | 
				
			||||
import ShortCutList from '../../components/course/ShortCutList.vue'; | 
				
			||||
 | 
				
			||||
import isEmpty from "lodash/isEmpty"; | 
				
			||||
import {useRoute, useRouter} from 'vue-router' | 
				
			||||
import axios from "axios"; | 
				
			||||
import {ENTRYPOINT} from '../../config/entrypoint'; | 
				
			||||
import {computed, onMounted, reactive, toRefs} from 'vue' | 
				
			||||
import {mapGetters, useStore} from "vuex"; | 
				
			||||
import translateHtml from '../../../js/translatehtml.js'; | 
				
			||||
 | 
				
			||||
export default { | 
				
			||||
  name: 'Home', | 
				
			||||
  servicePrefix: 'Courses', | 
				
			||||
  components: { | 
				
			||||
    Loading, | 
				
			||||
    Toolbar, | 
				
			||||
    CourseToolList, | 
				
			||||
    ShortCutList | 
				
			||||
  }, | 
				
			||||
  setup() { | 
				
			||||
    const state = reactive({ | 
				
			||||
      course: [], | 
				
			||||
      session: [], | 
				
			||||
      tools: [], | 
				
			||||
      shortcuts: [], | 
				
			||||
      dropdownOpen: false, | 
				
			||||
      intro: null, | 
				
			||||
      introTool: null, | 
				
			||||
      createInSession: false, | 
				
			||||
      goToCourseTool, | 
				
			||||
      changeVisibility, | 
				
			||||
      goToSettingCourseTool, | 
				
			||||
      goToShortCut, | 
				
			||||
      addIntro, | 
				
			||||
      updateIntro | 
				
			||||
    }); | 
				
			||||
    const route = useRoute() | 
				
			||||
    const store = useStore(); | 
				
			||||
    const router = useRouter(); | 
				
			||||
 | 
				
			||||
    let courseId = route.params.id; | 
				
			||||
    let sessionId = route.query.sid ?? 0; | 
				
			||||
 | 
				
			||||
    // Remove the course session state. | 
				
			||||
    store.dispatch('session/cleanSession'); | 
				
			||||
 | 
				
			||||
    axios.get(ENTRYPOINT + '../course/' + courseId + '/home.json?sid=' + sessionId).then(response => { | 
				
			||||
      state.course = response.data.course; | 
				
			||||
      state.session = response.data.session; | 
				
			||||
      state.tools = response.data.tools; | 
				
			||||
      state.shortcuts = response.data.shortcuts; | 
				
			||||
      getIntro(); | 
				
			||||
    }).catch(function (error) { | 
				
			||||
      console.log(error); | 
				
			||||
    }); | 
				
			||||
 | 
				
			||||
    async function getIntro() { | 
				
			||||
      // Searching for the CTool called 'course_homepage'. | 
				
			||||
      let introTool = state.course.tools.find(element => element.name === 'course_homepage'); | 
				
			||||
 | 
				
			||||
      if (!isEmpty(introTool)) { | 
				
			||||
        state.introTool = introTool; | 
				
			||||
 | 
				
			||||
        // Search CToolIntro for this | 
				
			||||
        const filter = { | 
				
			||||
          courseTool: introTool.iid, | 
				
			||||
          cid: courseId, | 
				
			||||
        }; | 
				
			||||
 | 
				
			||||
        store.dispatch('ctoolintro/findAll', filter).then(response => { | 
				
			||||
          if (!isEmpty(response)) { | 
				
			||||
            // first item | 
				
			||||
            state.intro = response[0]; | 
				
			||||
            translateHtml(); | 
				
			||||
          } | 
				
			||||
        }); | 
				
			||||
 | 
				
			||||
        if (!isEmpty(sessionId)) { | 
				
			||||
          state.createInSession = true; | 
				
			||||
          const filter = { | 
				
			||||
            courseTool: introTool.iid, | 
				
			||||
            cid: courseId, | 
				
			||||
            sid: sessionId, | 
				
			||||
          }; | 
				
			||||
 | 
				
			||||
          store.dispatch('ctoolintro/findAll', filter).then(response => { | 
				
			||||
            if (!isEmpty(response)) { | 
				
			||||
              state.createInSession = false; | 
				
			||||
              state.intro = response[0]; | 
				
			||||
              translateHtml(); | 
				
			||||
            } | 
				
			||||
          }); | 
				
			||||
        } | 
				
			||||
import { useI18n } from 'vue-i18n'; | 
				
			||||
import EmptyState from '../../components/EmptyState'; | 
				
			||||
 | 
				
			||||
const servicePrefix = 'Courses'; | 
				
			||||
 | 
				
			||||
const course = ref([]); | 
				
			||||
const session = ref([]); | 
				
			||||
const tools = ref([]); | 
				
			||||
const shortcuts = ref([]); | 
				
			||||
const intro = ref(null); | 
				
			||||
const introTool = ref(null); | 
				
			||||
const createInSession = ref(false); | 
				
			||||
 | 
				
			||||
const route = useRoute(); | 
				
			||||
const store = useStore(); | 
				
			||||
const router = useRouter(); | 
				
			||||
const { t } = useI18n(); | 
				
			||||
 | 
				
			||||
let courseId = route.params.id; | 
				
			||||
let sessionId = route.query.sid ?? 0; | 
				
			||||
 | 
				
			||||
const isCurrentTeacher = computed(() => store.getters['security/isCurrentTeacher']); | 
				
			||||
 | 
				
			||||
// Remove the course session state. | 
				
			||||
store.dispatch('session/cleanSession'); | 
				
			||||
 | 
				
			||||
axios.get(ENTRYPOINT + '../course/' + courseId + '/home.json?sid=' + sessionId).then(response => { | 
				
			||||
  course.value = response.data.course; | 
				
			||||
  session.value = response.data.session; | 
				
			||||
  tools.value = response.data.tools; | 
				
			||||
  shortcuts.value = response.data.shortcuts; | 
				
			||||
  getIntro(); | 
				
			||||
}).catch(function (error) { | 
				
			||||
  console.log(error); | 
				
			||||
}); | 
				
			||||
 | 
				
			||||
const courseTMenu = ref(null); | 
				
			||||
 | 
				
			||||
const courseItems = computed(() => { | 
				
			||||
  if (tools.value.admin) { | 
				
			||||
    return tools.value.admin.map(tool => ({ | 
				
			||||
      label: tool.tool.nameToShow, | 
				
			||||
      url: goToCourseTool(course, tool) | 
				
			||||
    })); | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  return []; | 
				
			||||
}); | 
				
			||||
 | 
				
			||||
const toggleCourseTMenu = event => { | 
				
			||||
  courseTMenu.value.toggle(event); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
async function getIntro () { | 
				
			||||
  // Searching for the CTool called 'course_homepage'. | 
				
			||||
  let currentIntroTool = course.value.tools.find(element => element.name === 'course_homepage'); | 
				
			||||
 | 
				
			||||
  if (!isEmpty(introTool)) { | 
				
			||||
    introTool.value = currentIntroTool; | 
				
			||||
 | 
				
			||||
    // Search CToolIntro for this | 
				
			||||
    const filter = { | 
				
			||||
      courseTool: currentIntroTool.iid, | 
				
			||||
      cid: courseId, | 
				
			||||
    }; | 
				
			||||
 | 
				
			||||
    store.dispatch('ctoolintro/findAll', filter).then(response => { | 
				
			||||
      if (!isEmpty(response)) { | 
				
			||||
        // first item | 
				
			||||
        intro.value = response[0]; | 
				
			||||
        translateHtml(); | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
    }); | 
				
			||||
 | 
				
			||||
    function addIntro(course, introTool) { | 
				
			||||
      return router.push({ | 
				
			||||
        name: 'ToolIntroCreate', | 
				
			||||
        params: {'courseTool': introTool.iid }, | 
				
			||||
        query: { | 
				
			||||
          'cid': courseId, | 
				
			||||
          'sid': sessionId, | 
				
			||||
          'parentResourceNodeId': course.resourceNode.id | 
				
			||||
    if (!isEmpty(sessionId)) { | 
				
			||||
      createInSession.value = true; | 
				
			||||
      const filter = { | 
				
			||||
        courseTool: currentIntroTool.iid, | 
				
			||||
        cid: courseId, | 
				
			||||
        sid: sessionId, | 
				
			||||
      }; | 
				
			||||
 | 
				
			||||
      store.dispatch('ctoolintro/findAll', filter).then(response => { | 
				
			||||
        if (!isEmpty(response)) { | 
				
			||||
          createInSession.value = false; | 
				
			||||
          intro.value = response[0]; | 
				
			||||
          translateHtml(); | 
				
			||||
        } | 
				
			||||
      }); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    function updateIntro(intro) { | 
				
			||||
      return router.push({ | 
				
			||||
        name: 'ToolIntroUpdate', | 
				
			||||
        params: {'id': intro['@id'] }, | 
				
			||||
        query: { | 
				
			||||
          'cid': courseId, | 
				
			||||
          'sid': sessionId, | 
				
			||||
          'id': intro['@id'] | 
				
			||||
        } | 
				
			||||
      }); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
function addIntro (course, introTool) { | 
				
			||||
  return router.push({ | 
				
			||||
    name: 'ToolIntroCreate', | 
				
			||||
    params: { 'courseTool': introTool.iid }, | 
				
			||||
    query: { | 
				
			||||
      'cid': courseId, | 
				
			||||
      'sid': sessionId, | 
				
			||||
      'parentResourceNodeId': course.resourceNode.id | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    function goToSettingCourseTool(course, tool) { | 
				
			||||
      return '/course/' + courseId + '/settings/' + tool.tool.name + '?sid=' + sessionId; | 
				
			||||
  }); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
function updateIntro (intro) { | 
				
			||||
  return router.push({ | 
				
			||||
    name: 'ToolIntroUpdate', | 
				
			||||
    params: { 'id': intro['@id'] }, | 
				
			||||
    query: { | 
				
			||||
      'cid': courseId, | 
				
			||||
      'sid': sessionId, | 
				
			||||
      'id': intro['@id'] | 
				
			||||
    } | 
				
			||||
  }); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
    function goToCourseTool(course, tool) { | 
				
			||||
      return '/course/' + courseId + '/tool/' + tool.tool.name + '?sid=' + sessionId; | 
				
			||||
    } | 
				
			||||
function goToSettingCourseTool (course, tool) { | 
				
			||||
  return '/course/' + courseId + '/settings/' + tool.tool.name + '?sid=' + sessionId; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
    function goToShortCut(shortcut) { | 
				
			||||
      const url = new URLSearchParams('?') | 
				
			||||
function goToCourseTool (course, tool) { | 
				
			||||
  return '/course/' + courseId + '/tool/' + tool.tool.name + '?sid=' + sessionId; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
      url.append('cid', courseId); | 
				
			||||
      url.append('sid', sessionId); | 
				
			||||
function goToShortCut (shortcut) { | 
				
			||||
  const url = new URLSearchParams('?'); | 
				
			||||
 | 
				
			||||
      return shortcut.url + '?' + url; | 
				
			||||
    } | 
				
			||||
  url.append('cid', courseId); | 
				
			||||
  url.append('sid', sessionId); | 
				
			||||
 | 
				
			||||
    function changeVisibility(course, tool) { | 
				
			||||
      axios.post(ENTRYPOINT + '../r/course_tool/links/' + tool.ctool.resourceNode.id + '/change_visibility').then(response => { | 
				
			||||
        if (response.data.ok) { | 
				
			||||
          tool.ctool.resourceNode.resourceLinks[0].visibility = response.data.visibility; | 
				
			||||
        } | 
				
			||||
      }).catch(function (error) { | 
				
			||||
        console.log(error); | 
				
			||||
      }); | 
				
			||||
    } | 
				
			||||
  return shortcut.url + '?' + url; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
    return toRefs(state); | 
				
			||||
  }, | 
				
			||||
  computed: { | 
				
			||||
    ...mapGetters({ | 
				
			||||
      'isCurrentTeacher': 'security/isCurrentTeacher', | 
				
			||||
    }), | 
				
			||||
  }, | 
				
			||||
}; | 
				
			||||
function changeVisibility (course, tool) { | 
				
			||||
  axios.post(ENTRYPOINT + '../r/course_tool/links/' + tool.ctool.resourceNode.id + '/change_visibility').then(response => { | 
				
			||||
    if (response.data.ok) { | 
				
			||||
      tool.ctool.resourceNode.resourceLinks[0].visibility = response.data.visibility; | 
				
			||||
    } | 
				
			||||
  }).catch(function (error) { | 
				
			||||
    console.log(error); | 
				
			||||
  }); | 
				
			||||
} | 
				
			||||
</script> | 
				
			||||
 | 
				
			||||
					Loading…
					
					
				
		Reference in new issue