Compare commits
55 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fb3d8e4f7d | ||
|
|
0c6029cbe8 | ||
|
|
a643e9ae83 | ||
|
|
08ac3948c3 | ||
|
|
78d289b9c0 | ||
|
|
3473bdb527 | ||
|
|
a7f8835222 | ||
|
|
d6441955fc | ||
|
|
67d265e864 | ||
|
|
17031f1df0 | ||
|
|
234a24baa2 | ||
|
|
9a58f4688b | ||
|
|
87c1c928ba | ||
|
|
493b8297ea | ||
|
|
4d16602190 | ||
|
|
89222b23c3 | ||
|
|
89a181c7d5 | ||
|
|
c0aecf30c1 | ||
|
|
fc8ef21802 | ||
|
|
c45da4313e | ||
|
|
3a1a843747 | ||
|
|
c51e7b0037 | ||
|
|
000d9dbcef | ||
|
|
0dcfd7e482 | ||
|
|
e933012a34 | ||
|
|
71db3ae6da | ||
|
|
c5f091fae8 | ||
|
|
4e61d569ac | ||
|
|
2d5c76e106 | ||
|
|
2e0abad61c | ||
|
|
3ea52a4e41 | ||
|
|
c05e253b8d | ||
|
|
08b2063e45 | ||
|
|
4a8c8185c2 | ||
|
|
74ed7b3160 | ||
|
|
38e6e4345f | ||
|
|
8004982e2e | ||
|
|
e6a532a870 | ||
|
|
f90465210e | ||
|
|
619262aa97 | ||
|
|
693d2942aa | ||
|
|
b4cf62920c | ||
|
|
03636d6930 | ||
|
|
7c1e1c86c7 | ||
|
|
8a5eceaf05 | ||
|
|
720425d1fb | ||
|
|
1f105b9ae5 | ||
|
|
d43442be5c | ||
|
|
3360b114b4 | ||
|
|
94835b4117 | ||
|
|
e6ed0b21e5 | ||
|
|
37db021682 | ||
|
|
6014a5ccce | ||
|
|
c07207b564 | ||
|
|
da71fb2c23 |
@@ -2,6 +2,7 @@
|
||||
<div class="space-y-1.5">
|
||||
<label class="block" :class="labelClasses" v-if="attrs.label">
|
||||
{{ attrs.label }}
|
||||
<span class="text-red-500" v-if="attrs.required">*</span>
|
||||
</label>
|
||||
<Autocomplete
|
||||
ref="autocomplete"
|
||||
|
||||
@@ -10,13 +10,13 @@
|
||||
:style="{ backgroundImage: 'url(\'' + encodeURI(course.image) + '\')' }"
|
||||
>
|
||||
<div
|
||||
class="flex items-center flex-wrap space-y-1 space-x-1 relative top-4 px-2 w-fit"
|
||||
class="flex items-center flex-wrap space-x-1 relative top-4 px-2 w-fit"
|
||||
>
|
||||
<Badge v-if="course.featured" variant="subtle" theme="green" size="md">
|
||||
{{ __('Featured') }}
|
||||
</Badge>
|
||||
<Badge
|
||||
variant="outline"
|
||||
variant="subtle"
|
||||
theme="gray"
|
||||
size="md"
|
||||
v-for="tag in course.tags"
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
{{ __('Start') }}
|
||||
</a>
|
||||
<a
|
||||
v-if="cls.date <= dayjs().format('YYYY-MM-DD')"
|
||||
:href="cls.join_url"
|
||||
target="_blank"
|
||||
class="w-full cursor-pointer inline-flex items-center justify-center gap-2 transition-colors focus:outline-none text-gray-800 bg-gray-100 hover:bg-gray-200 active:bg-gray-300 focus-visible:ring focus-visible:ring-gray-400 h-7 text-base px-2 rounded"
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
<div class="">
|
||||
<div class="mb-1.5 text-sm text-gray-600">
|
||||
{{ __('Subject') }}
|
||||
<span class="text-red-500">*</span>
|
||||
</div>
|
||||
<Input type="text" v-model="announcement.subject" />
|
||||
</div>
|
||||
|
||||
@@ -14,7 +14,12 @@
|
||||
}"
|
||||
>
|
||||
<template #body-content>
|
||||
<Link doctype="LMS Course" v-model="course" :label="__('Course')" />
|
||||
<Link
|
||||
doctype="LMS Course"
|
||||
v-model="course"
|
||||
:label="__('Course')"
|
||||
:required="true"
|
||||
/>
|
||||
<Link
|
||||
doctype="Course Evaluator"
|
||||
v-model="evaluator"
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
label="Title"
|
||||
v-model="chapter.title"
|
||||
class="mb-4"
|
||||
:required="true"
|
||||
/>
|
||||
</template>
|
||||
</Dialog>
|
||||
|
||||
@@ -69,7 +69,18 @@
|
||||
:label="__('Headline')"
|
||||
class="mb-4"
|
||||
/>
|
||||
<FormControl type="textarea" v-model="profile.bio" :label="__('Bio')" />
|
||||
|
||||
<div class="mb-4">
|
||||
<div class="mb-1.5 text-sm text-gray-600">
|
||||
{{ __('Bio') }}
|
||||
</div>
|
||||
<TextEditor
|
||||
:fixedMenu="true"
|
||||
@change="(val) => (profile.bio = val)"
|
||||
:content="profile.bio"
|
||||
editorClass="prose-sm py-2 px-2 min-h-[200px] border-gray-300 hover:border-gray-400 rounded-md bg-gray-200"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</Dialog>
|
||||
@@ -81,6 +92,7 @@ import {
|
||||
FileUploader,
|
||||
Button,
|
||||
createResource,
|
||||
TextEditor,
|
||||
} from 'frappe-ui'
|
||||
import { reactive, watch, defineModel } from 'vue'
|
||||
import { FileText, X } from 'lucide-vue-next'
|
||||
|
||||
@@ -154,10 +154,12 @@ function submitEvaluation(close) {
|
||||
const getCourses = () => {
|
||||
let courses = []
|
||||
for (const course of props.courses) {
|
||||
courses.push({
|
||||
label: course.title,
|
||||
value: course.course,
|
||||
})
|
||||
if (course.evaluator) {
|
||||
courses.push({
|
||||
label: course.title,
|
||||
value: course.course,
|
||||
})
|
||||
}
|
||||
}
|
||||
return courses
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
v-model="liveClass.title"
|
||||
:label="__('Title')"
|
||||
class="mb-4"
|
||||
:required="true"
|
||||
/>
|
||||
<Tooltip
|
||||
:text="
|
||||
@@ -35,6 +36,7 @@
|
||||
type="time"
|
||||
:label="__('Time')"
|
||||
class="mb-4"
|
||||
:required="true"
|
||||
/>
|
||||
</Tooltip>
|
||||
<FormControl
|
||||
@@ -42,6 +44,7 @@
|
||||
type="select"
|
||||
:options="getTimezoneOptions()"
|
||||
:label="__('Timezone')"
|
||||
:required="true"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
@@ -50,6 +53,7 @@
|
||||
type="date"
|
||||
class="mb-4"
|
||||
:label="__('Date')"
|
||||
:required="true"
|
||||
/>
|
||||
<Tooltip :text="__('Duration of the live class in minutes')">
|
||||
<FormControl
|
||||
@@ -57,6 +61,7 @@
|
||||
v-model="liveClass.duration"
|
||||
:label="__('Duration')"
|
||||
class="mb-4"
|
||||
:required="true"
|
||||
/>
|
||||
</Tooltip>
|
||||
<FormControl
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
@timeupdate="updateTime"
|
||||
@ended="videoEnded"
|
||||
@click="togglePlay"
|
||||
oncontextmenu="return false"
|
||||
class="rounded-lg border border-gray-100 group cursor-pointer"
|
||||
ref="videoRef"
|
||||
>
|
||||
|
||||
@@ -15,7 +15,11 @@
|
||||
</header>
|
||||
<div v-if="batch.data" class="grid grid-cols-[70%,30%] h-screen">
|
||||
<div class="border-r-2">
|
||||
<Tabs v-model="tabIndex" :tabs="tabs" tablistClass="overflow-y-hidden">
|
||||
<Tabs
|
||||
v-model="tabIndex"
|
||||
:tabs="tabs"
|
||||
tablistClass="overflow-y-hidden sticky top-11 bg-white z-10"
|
||||
>
|
||||
<template #tab="{ tab, selected }" class="overflow-x-hidden">
|
||||
<div>
|
||||
<button
|
||||
|
||||
@@ -15,7 +15,11 @@
|
||||
</div>
|
||||
<div class="grid grid-cols-2 gap-10 mb-4 space-y-2">
|
||||
<div>
|
||||
<FormControl v-model="batch.title" :label="__('Title')" />
|
||||
<FormControl
|
||||
v-model="batch.title"
|
||||
:label="__('Title')"
|
||||
:required="true"
|
||||
/>
|
||||
</div>
|
||||
<div class="flex flex-col space-y-2">
|
||||
<FormControl
|
||||
@@ -83,6 +87,8 @@
|
||||
v-model="instructors"
|
||||
doctype="User"
|
||||
:label="__('Instructors')"
|
||||
:required="true"
|
||||
:filters="{ ignore_user_type: 1 }"
|
||||
/>
|
||||
<div class="mb-4">
|
||||
<FormControl
|
||||
@@ -91,10 +97,12 @@
|
||||
type="textarea"
|
||||
class="my-4"
|
||||
:placeholder="__('Short description of the batch')"
|
||||
:required="true"
|
||||
/>
|
||||
<div>
|
||||
<label class="block text-sm text-gray-600 mb-1">
|
||||
{{ __('Batch Details') }}
|
||||
<span class="text-red-500">*</span>
|
||||
</label>
|
||||
<TextEditor
|
||||
:content="batch.batch_details"
|
||||
@@ -116,12 +124,14 @@
|
||||
:label="__('Start Date')"
|
||||
type="date"
|
||||
class="mb-4"
|
||||
:required="true"
|
||||
/>
|
||||
<FormControl
|
||||
v-model="batch.end_date"
|
||||
:label="__('End Date')"
|
||||
type="date"
|
||||
class="mb-4"
|
||||
:required="true"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
@@ -130,12 +140,14 @@
|
||||
:label="__('Start Time')"
|
||||
type="time"
|
||||
class="mb-4"
|
||||
:required="true"
|
||||
/>
|
||||
<FormControl
|
||||
v-model="batch.end_time"
|
||||
:label="__('End Time')"
|
||||
type="time"
|
||||
class="mb-4"
|
||||
:required="true"
|
||||
/>
|
||||
<FormControl
|
||||
v-model="batch.timezone"
|
||||
@@ -143,6 +155,7 @@
|
||||
type="text"
|
||||
:placeholder="__('Example: IST (+5:30)')"
|
||||
class="mb-4"
|
||||
:required="true"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
<CourseCardOverlay :course="course" class="md:hidden mb-4" />
|
||||
<div
|
||||
v-html="course.data.description"
|
||||
class="course-description"
|
||||
class="ProseMirror prose prose-table:table-fixed prose-td:p-2 prose-th:p-2 prose-td:border prose-th:border prose-td:border-gray-300 prose-th:border-gray-300 prose-td:relative prose-th:relative prose-th:bg-gray-100 prose-sm max-w-none !whitespace-normal"
|
||||
></div>
|
||||
<div class="mt-10">
|
||||
<CourseOutline :courseName="course.data.name" :showOutline="true" />
|
||||
@@ -131,26 +131,6 @@ const pageMeta = computed(() => {
|
||||
updateDocumentTitle(pageMeta)
|
||||
</script>
|
||||
<style>
|
||||
.course-description p {
|
||||
margin-bottom: 1rem;
|
||||
line-height: 1.7;
|
||||
}
|
||||
.course-description li {
|
||||
line-height: 1.7;
|
||||
}
|
||||
|
||||
.course-description ol {
|
||||
list-style: auto;
|
||||
margin: revert;
|
||||
padding: revert;
|
||||
}
|
||||
|
||||
.course-description ul {
|
||||
list-style: disc;
|
||||
margin: revert;
|
||||
padding: revert;
|
||||
}
|
||||
|
||||
.avatar-group {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
|
||||
@@ -7,6 +7,14 @@
|
||||
>
|
||||
<Breadcrumbs class="h-7" :items="breadcrumbs" />
|
||||
<div class="flex items-center mt-3 md:mt-0">
|
||||
<Button v-if="courseResource.data?.name" @click="trashCourse()">
|
||||
<template #prefix>
|
||||
<Trash2 class="w-4 h-4 stroke-1.5" />
|
||||
</template>
|
||||
<span>
|
||||
{{ __('Delete') }}
|
||||
</span>
|
||||
</Button>
|
||||
<Button variant="solid" @click="submitCourse()" class="ml-2">
|
||||
<span>
|
||||
{{ __('Save') }}
|
||||
@@ -144,6 +152,7 @@
|
||||
v-model="instructors"
|
||||
doctype="User"
|
||||
:label="__('Instructors')"
|
||||
:filters="{ ignore_user_type: 1 }"
|
||||
:required="true"
|
||||
/>
|
||||
</div>
|
||||
@@ -247,10 +256,11 @@ import {
|
||||
ref,
|
||||
reactive,
|
||||
watch,
|
||||
getCurrentInstance,
|
||||
} from 'vue'
|
||||
import { convertToTitleCase, showToast, updateDocumentTitle } from '@/utils'
|
||||
import { showToast, updateDocumentTitle } from '@/utils'
|
||||
import Link from '@/components/Controls/Link.vue'
|
||||
import { FileText, Image, X } from 'lucide-vue-next'
|
||||
import { Image, Trash2, X } from 'lucide-vue-next'
|
||||
import { useRouter } from 'vue-router'
|
||||
import CourseOutline from '@/components/CourseOutline.vue'
|
||||
import MultiSelect from '@/components/Controls/MultiSelect.vue'
|
||||
@@ -262,6 +272,8 @@ const newTag = ref('')
|
||||
const router = useRouter()
|
||||
const instructors = ref([])
|
||||
const settingsStore = useSettings()
|
||||
const app = getCurrentInstance()
|
||||
const { $dialog } = app.appContext.config.globalProperties
|
||||
|
||||
const props = defineProps({
|
||||
courseName: {
|
||||
@@ -434,23 +446,37 @@ const submitCourse = () => {
|
||||
}
|
||||
}
|
||||
|
||||
const validateMandatoryFields = () => {
|
||||
const mandatory_fields = [
|
||||
'title',
|
||||
'short_introduction',
|
||||
'description',
|
||||
'video_link',
|
||||
'course_image',
|
||||
]
|
||||
for (const field of mandatory_fields) {
|
||||
if (!course[field]) {
|
||||
let fieldLabel = convertToTitleCase(field.split('_').join(' '))
|
||||
return `${fieldLabel} is mandatory`
|
||||
const deleteCourse = createResource({
|
||||
url: 'lms.lms.api.delete_course',
|
||||
makeParams(values) {
|
||||
return {
|
||||
course: props.courseName,
|
||||
}
|
||||
}
|
||||
if (course.paid_course && (!course.course_price || !course.currency)) {
|
||||
return __('Course price and currency are mandatory for paid courses')
|
||||
}
|
||||
},
|
||||
onSuccess() {
|
||||
showToast(__('Success'), __('Course deleted successfully'), 'check')
|
||||
router.push({ name: 'Courses' })
|
||||
},
|
||||
})
|
||||
|
||||
const trashCourse = () => {
|
||||
$dialog({
|
||||
title: __('Delete Course'),
|
||||
message: __(
|
||||
'Deleting the course will also delete all its chapters and lessons. Are you sure you want to delete this course?'
|
||||
),
|
||||
actions: [
|
||||
{
|
||||
label: __('Delete'),
|
||||
theme: 'red',
|
||||
variant: 'solid',
|
||||
onClick(close) {
|
||||
deleteCourse.submit()
|
||||
close()
|
||||
},
|
||||
},
|
||||
],
|
||||
})
|
||||
}
|
||||
|
||||
watch(
|
||||
|
||||
@@ -145,7 +145,7 @@
|
||||
<div class="text-xl font-medium">
|
||||
{{ __('No courses found') }}
|
||||
</div>
|
||||
<div>
|
||||
<div class="leading-5">
|
||||
{{
|
||||
__(
|
||||
'There are no courses available at the moment. Keep an eye out, fresh learning experiences are on the way soon!'
|
||||
|
||||
@@ -239,6 +239,10 @@ const lesson = createResource({
|
||||
},
|
||||
auto: true,
|
||||
onSuccess(data) {
|
||||
if (Object.keys(data).length === 0) {
|
||||
router.push({ name: 'Courses' })
|
||||
return
|
||||
}
|
||||
lessonProgress.value = data.membership?.progress
|
||||
if (data.content) editor.value = renderEditor('editor', data.content)
|
||||
if (
|
||||
|
||||
@@ -12,7 +12,12 @@
|
||||
</header>
|
||||
<div class="py-5">
|
||||
<div class="w-5/6 mx-auto">
|
||||
<FormControl v-model="lesson.title" label="Title" class="mb-4" />
|
||||
<FormControl
|
||||
v-model="lesson.title"
|
||||
label="Title"
|
||||
class="mb-4"
|
||||
:required="true"
|
||||
/>
|
||||
<FormControl
|
||||
v-model="lesson.include_in_preview"
|
||||
type="checkbox"
|
||||
|
||||
@@ -47,6 +47,22 @@
|
||||
</ListRows>
|
||||
</ListView>
|
||||
</div>
|
||||
<div
|
||||
v-else
|
||||
class="text-center p-5 text-gray-600 mt-52 w-3/4 md:w-1/2 mx-auto space-y-2"
|
||||
>
|
||||
<BookOpen class="size-10 mx-auto stroke-1 text-gray-500" />
|
||||
<div class="text-xl font-medium">
|
||||
{{ __('No quizzes found') }}
|
||||
</div>
|
||||
<div class="leading-5">
|
||||
{{
|
||||
__(
|
||||
'You have not created any quizzes yet. To create a new quiz, click on the "New Quiz" button above.'
|
||||
)
|
||||
}}
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import {
|
||||
@@ -61,7 +77,7 @@ import {
|
||||
} from 'frappe-ui'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { computed, inject, onMounted } from 'vue'
|
||||
import { Plus } from 'lucide-vue-next'
|
||||
import { BookOpen, Plus } from 'lucide-vue-next'
|
||||
import { updateDocumentTitle } from '@/utils'
|
||||
|
||||
const user = inject('$user')
|
||||
|
||||
@@ -1 +1 @@
|
||||
__version__ = "2.10.0"
|
||||
__version__ = "2.11.0"
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
import frappe
|
||||
from frappe.desk.page.setup_wizard.setup_wizard import add_all_roles_to
|
||||
from lms.lms.api import give_dicussions_permission
|
||||
|
||||
|
||||
def after_install():
|
||||
add_pages_to_nav()
|
||||
create_batch_source()
|
||||
give_dicussions_permission()
|
||||
|
||||
|
||||
def after_sync():
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
"""API methods for the LMS.
|
||||
"""
|
||||
|
||||
import json
|
||||
import frappe
|
||||
from frappe.translate import get_all_translations
|
||||
from frappe import _
|
||||
@@ -295,7 +296,8 @@ def get_branding():
|
||||
|
||||
for field in image_fields:
|
||||
if website_settings.get(field):
|
||||
website_settings.update({field: get_file_info(website_settings.get(field))})
|
||||
file_info = get_file_info(website_settings.get(field))
|
||||
website_settings.update({field: json.loads(json.dumps(file_info))})
|
||||
else:
|
||||
website_settings.update({field: None})
|
||||
|
||||
@@ -490,7 +492,15 @@ def delete_sidebar_item(webpage):
|
||||
|
||||
@frappe.whitelist()
|
||||
def delete_lesson(lesson, chapter):
|
||||
frappe.db.delete("Lesson Reference", {"parent": chapter, "lesson": lesson})
|
||||
# Delete Reference
|
||||
chapter = frappe.get_doc("Course Chapter", chapter)
|
||||
chapter.lessons = [row for row in chapter.lessons if row.lesson != lesson]
|
||||
chapter.save()
|
||||
|
||||
# Delete progress
|
||||
frappe.db.delete("LMS Course Progress", {"lesson": lesson})
|
||||
|
||||
# Delete Lesson
|
||||
frappe.db.delete("Course Lesson", lesson)
|
||||
|
||||
|
||||
@@ -802,3 +812,67 @@ def get_announcements(batch):
|
||||
],
|
||||
order_by="communication_date desc",
|
||||
)
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def delete_course(course):
|
||||
|
||||
chapters = frappe.get_all("Course Chapter", {"course": course}, pluck="name")
|
||||
|
||||
chapter_references = frappe.get_all(
|
||||
"Chapter Reference", {"parent": course}, pluck="name"
|
||||
)
|
||||
|
||||
for chapter in chapters:
|
||||
lessons = frappe.get_all("Course Lesson", {"chapter": chapter}, pluck="name")
|
||||
|
||||
lesson_references = frappe.get_all(
|
||||
"Lesson Reference", {"parent": chapter}, pluck="name"
|
||||
)
|
||||
|
||||
for lesson in lesson_references:
|
||||
frappe.delete_doc("Lesson Reference", lesson)
|
||||
|
||||
for lesson in lessons:
|
||||
frappe.db.delete("LMS Course Progress", {"lesson": lesson})
|
||||
|
||||
topics = frappe.get_all(
|
||||
"Discussion Topic",
|
||||
{"reference_doctype": "Course Lesson", "reference_docname": lesson},
|
||||
pluck="name",
|
||||
)
|
||||
|
||||
for topic in topics:
|
||||
frappe.db.delete("Discussion Reply", {"topic": topic})
|
||||
|
||||
frappe.db.delete("Discussion Topic", topic)
|
||||
|
||||
frappe.delete_doc("Course Lesson", lesson)
|
||||
|
||||
for chapter in chapter_references:
|
||||
frappe.delete_doc("Chapter Reference", chapter)
|
||||
|
||||
for chapter in chapters:
|
||||
frappe.delete_doc("Course Chapter", chapter)
|
||||
|
||||
frappe.db.delete("LMS Enrollment", {"course": course})
|
||||
frappe.delete_doc("LMS Course", course)
|
||||
|
||||
|
||||
def give_dicussions_permission():
|
||||
doctypes = ["Discussion Topic", "Discussion Reply"]
|
||||
roles = ["LMS Student", "Course Creator", "Moderator", "Batch Evaluator"]
|
||||
for doctype in doctypes:
|
||||
for role in roles:
|
||||
if not frappe.db.exists("Custom DocPerm", {"parent": doctype, "role": role}):
|
||||
frappe.get_doc(
|
||||
{
|
||||
"doctype": "Custom DocPerm",
|
||||
"parent": doctype,
|
||||
"role": role,
|
||||
"read": 1,
|
||||
"write": 1,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
}
|
||||
).save(ignore_permissions=True)
|
||||
|
||||
@@ -1,10 +1,27 @@
|
||||
# Copyright (c) 2021, FOSS United and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
# import frappe
|
||||
import frappe
|
||||
from frappe.model.document import Document
|
||||
from frappe.utils.telemetry import capture
|
||||
from lms.lms.utils import get_course_progress
|
||||
from lms.lms.api import update_course_statistics
|
||||
|
||||
|
||||
class CourseChapter(Document):
|
||||
pass
|
||||
def on_update(self):
|
||||
self.recalculate_course_progress()
|
||||
update_course_statistics()
|
||||
|
||||
def recalculate_course_progress(self):
|
||||
previous_lessons = (
|
||||
self.get_doc_before_save() and self.get_doc_before_save().as_dict().lessons
|
||||
)
|
||||
current_lessons = self.lessons
|
||||
|
||||
if previous_lessons and previous_lessons != current_lessons:
|
||||
enrolled_members = frappe.get_all(
|
||||
"LMS Enrollment", {"course": self.course}, ["member", "name"]
|
||||
)
|
||||
for enrollment in enrolled_members:
|
||||
new_progress = get_course_progress(self.course, enrollment.member)
|
||||
frappe.db.set_value("LMS Enrollment", enrollment.name, "progress", new_progress)
|
||||
|
||||
@@ -132,9 +132,10 @@
|
||||
"read_only": 1
|
||||
}
|
||||
],
|
||||
"in_create": 1,
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2024-10-31 15:41:35.540856",
|
||||
"modified": "2024-11-11 18:59:26.396111",
|
||||
"modified_by": "Administrator",
|
||||
"module": "LMS",
|
||||
"name": "LMS Live Class",
|
||||
|
||||
@@ -57,14 +57,15 @@ class LMSQuiz(Document):
|
||||
types = [question.type for question in self.questions]
|
||||
types = set(types)
|
||||
|
||||
if "Open Ended" in types and len(types) > 1:
|
||||
frappe.throw(
|
||||
_(
|
||||
"If you want open ended questions then make sure each question in the quiz is of open ended type."
|
||||
if "Open Ended" in types:
|
||||
if len(types) > 1:
|
||||
frappe.throw(
|
||||
_(
|
||||
"If you want open ended questions then make sure each question in the quiz is of open ended type."
|
||||
)
|
||||
)
|
||||
)
|
||||
else:
|
||||
self.show_answers = 0
|
||||
else:
|
||||
self.show_answers = 0
|
||||
|
||||
def autoname(self):
|
||||
if not self.name:
|
||||
|
||||
@@ -503,11 +503,6 @@ def first_lesson_exists(course):
|
||||
return True
|
||||
|
||||
|
||||
def redirect_to_courses_list():
|
||||
frappe.local.flags.redirect_location = "/lms/courses"
|
||||
raise frappe.Redirect
|
||||
|
||||
|
||||
def has_course_instructor_role(member=None):
|
||||
return frappe.db.get_value(
|
||||
"Has Role",
|
||||
@@ -1108,7 +1103,7 @@ def get_categorized_courses(courses):
|
||||
|
||||
categories = [live, enrolled, created]
|
||||
for category in categories:
|
||||
category.sort(key=lambda x: x.enrollments, reverse=True)
|
||||
category.sort(key=lambda x: cint(x.enrollments), reverse=True)
|
||||
|
||||
live.sort(key=lambda x: x.featured, reverse=True)
|
||||
|
||||
@@ -1153,6 +1148,9 @@ def get_lesson(course, chapter, lesson):
|
||||
lesson_details = frappe.db.get_value(
|
||||
"Course Lesson", lesson_name, ["include_in_preview", "title"], as_dict=1
|
||||
)
|
||||
if not lesson_details:
|
||||
return {}
|
||||
|
||||
membership = get_membership(course)
|
||||
course_title = frappe.db.get_value("LMS Course", course, "title")
|
||||
if (
|
||||
@@ -1267,7 +1265,7 @@ def get_batch_details(batch):
|
||||
batch_details.instructors = get_instructors(batch)
|
||||
|
||||
batch_details.courses = frappe.get_all(
|
||||
"Batch Course", filters={"parent": batch}, fields=["course", "title"]
|
||||
"Batch Course", filters={"parent": batch}, fields=["course", "title", "evaluator"]
|
||||
)
|
||||
batch_details.students = frappe.get_all(
|
||||
"Batch Student", {"parent": batch}, pluck="student"
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
frappe.ready(function () {
|
||||
frappe.web_form.after_save = () => {
|
||||
let data = frappe.web_form.get_values();
|
||||
let slug = new URLSearchParams(window.location.search).get("slug");
|
||||
frappe.msgprint({
|
||||
message: __("Batch {0} has been successfully created!", [
|
||||
data.title,
|
||||
]),
|
||||
clear: true,
|
||||
});
|
||||
setTimeout(function () {
|
||||
window.location.href = `courses/${slug}`;
|
||||
}, 2000);
|
||||
};
|
||||
|
||||
frappe.web_form.validate = () => {
|
||||
let sysdefaults = frappe.boot.sysdefaults;
|
||||
let time_format =
|
||||
sysdefaults && sysdefaults.time_format
|
||||
? sysdefaults.time_format
|
||||
: "HH:mm:ss";
|
||||
let data = frappe.web_form.get_values();
|
||||
|
||||
data.start_time = moment(data.start_time, time_format).format(
|
||||
time_format
|
||||
);
|
||||
data.end_time = moment(data.end_time, time_format).format(time_format);
|
||||
|
||||
if (data.start_date < frappe.datetime.nowdate()) {
|
||||
frappe.msgprint(__("Start date cannot be a past date."));
|
||||
return false;
|
||||
}
|
||||
|
||||
if (
|
||||
!frappe.datetime.validate(data.start_time) ||
|
||||
!frappe.datetime.validate(data.end_time)
|
||||
) {
|
||||
frappe.msgprint(__("Invalid Start or End Time."));
|
||||
return false;
|
||||
}
|
||||
|
||||
if (data.start_time > data.end_time) {
|
||||
frappe.msgprint(__("Start Time should be less than End Time."));
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
});
|
||||
@@ -1,114 +0,0 @@
|
||||
{
|
||||
"accept_payment": 0,
|
||||
"allow_comments": 0,
|
||||
"allow_delete": 0,
|
||||
"allow_edit": 0,
|
||||
"allow_incomplete": 0,
|
||||
"allow_multiple": 0,
|
||||
"allow_print": 0,
|
||||
"amount": 0.0,
|
||||
"amount_based_on_field": 0,
|
||||
"apply_document_permissions": 0,
|
||||
"button_label": "Save",
|
||||
"creation": "2021-04-20 11:37:49.135114",
|
||||
"custom_css": ".datepicker.active {\n background-color: white;\n}\n\n[data-doctype=\"Web Form\"] {\n max-width: 720px;\n margin: 6rem auto;\n}",
|
||||
"doc_type": "LMS Batch Old",
|
||||
"docstatus": 0,
|
||||
"doctype": "Web Form",
|
||||
"idx": 0,
|
||||
"is_standard": 1,
|
||||
"login_required": 1,
|
||||
"max_attachment_size": 0,
|
||||
"modified": "2021-06-15 18:49:50.530002",
|
||||
"modified_by": "Administrator",
|
||||
"module": "LMS",
|
||||
"name": "add-a-new-batch",
|
||||
"owner": "Administrator",
|
||||
"payment_button_label": "Buy Now",
|
||||
"published": 1,
|
||||
"route": "add-a-new-batch",
|
||||
"route_to_success_link": 0,
|
||||
"show_attachments": 0,
|
||||
"show_in_grid": 0,
|
||||
"show_sidebar": 0,
|
||||
"sidebar_items": [],
|
||||
"success_url": "/add-a-new-batch",
|
||||
"title": "Add a new batch",
|
||||
"web_form_fields": [
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "course",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 1,
|
||||
"label": "Course",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"options": "LMS Course",
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "title",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"label": "Title",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"read_only": 0,
|
||||
"reqd": 1,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "start_date",
|
||||
"fieldtype": "Date",
|
||||
"hidden": 0,
|
||||
"label": "Start Date",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"read_only": 0,
|
||||
"reqd": 1,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"description": "",
|
||||
"fieldname": "sessions_on",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"label": "Sessions On Days",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"options": "",
|
||||
"read_only": 0,
|
||||
"reqd": 1,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "start_time",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"label": "Start Time",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"read_only": 0,
|
||||
"reqd": 1,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "end_time",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"label": "End Time",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"read_only": 0,
|
||||
"reqd": 1,
|
||||
"show_in_filter": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
import frappe
|
||||
|
||||
|
||||
def get_context(context):
|
||||
# do your magic here
|
||||
pass
|
||||
@@ -1,10 +0,0 @@
|
||||
frappe.ready(function () {
|
||||
frappe.web_form.after_save = () => {
|
||||
let data = frappe.web_form.get_values();
|
||||
if (data.class) {
|
||||
setTimeout(() => {
|
||||
window.location.href = `/batches/${data.class}`;
|
||||
}, 2000);
|
||||
}
|
||||
};
|
||||
});
|
||||
@@ -1,189 +0,0 @@
|
||||
{
|
||||
"accept_payment": 0,
|
||||
"allow_comments": 0,
|
||||
"allow_delete": 0,
|
||||
"allow_edit": 0,
|
||||
"allow_incomplete": 0,
|
||||
"allow_multiple": 1,
|
||||
"allow_print": 0,
|
||||
"amount": 0.0,
|
||||
"amount_based_on_field": 0,
|
||||
"anonymous": 0,
|
||||
"apply_document_permissions": 0,
|
||||
"button_label": "Save",
|
||||
"creation": "2022-11-23 11:59:33.533053",
|
||||
"doc_type": "LMS Certificate Evaluation",
|
||||
"docstatus": 0,
|
||||
"doctype": "Web Form",
|
||||
"idx": 1,
|
||||
"introduction_text": "",
|
||||
"is_standard": 1,
|
||||
"list_columns": [],
|
||||
"login_required": 1,
|
||||
"max_attachment_size": 0,
|
||||
"modified": "2023-08-23 14:37:03.086305",
|
||||
"modified_by": "Administrator",
|
||||
"module": "LMS",
|
||||
"name": "evaluation",
|
||||
"owner": "Administrator",
|
||||
"payment_button_label": "Buy Now",
|
||||
"published": 1,
|
||||
"route": "evaluation",
|
||||
"show_attachments": 0,
|
||||
"show_list": 1,
|
||||
"show_sidebar": 0,
|
||||
"title": "Evaluation",
|
||||
"web_form_fields": [
|
||||
{
|
||||
"allow_read_on_all_link_options": 1,
|
||||
"fieldname": "member",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
"label": "Member",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"options": "User",
|
||||
"read_only": 0,
|
||||
"reqd": 1,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 1,
|
||||
"fieldname": "course",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
"label": "Course",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"options": "LMS Course",
|
||||
"read_only": 0,
|
||||
"reqd": 1,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "batch_name",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
"label": "Batch Name",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"options": "LMS Batch",
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "",
|
||||
"fieldtype": "Column Break",
|
||||
"hidden": 0,
|
||||
"label": "",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"options": "",
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "date",
|
||||
"fieldtype": "Date",
|
||||
"hidden": 0,
|
||||
"label": "Date",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"read_only": 0,
|
||||
"reqd": 1,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "start_time",
|
||||
"fieldtype": "Time",
|
||||
"hidden": 0,
|
||||
"label": "Start Time",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"read_only": 0,
|
||||
"reqd": 1,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "end_time",
|
||||
"fieldtype": "Time",
|
||||
"hidden": 0,
|
||||
"label": "End Time",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
"label": "Evaluation Details",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"options": "",
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "rating",
|
||||
"fieldtype": "Rating",
|
||||
"hidden": 0,
|
||||
"label": "Rating",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"read_only": 0,
|
||||
"reqd": 1,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "status",
|
||||
"fieldtype": "Select",
|
||||
"hidden": 0,
|
||||
"label": "Status",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"options": "Pass\nFail",
|
||||
"read_only": 0,
|
||||
"reqd": 1,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "",
|
||||
"fieldtype": "Column Break",
|
||||
"hidden": 0,
|
||||
"label": "",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"options": "",
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "summary",
|
||||
"fieldtype": "Small Text",
|
||||
"hidden": 0,
|
||||
"label": "Summary",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
import frappe
|
||||
from frappe import _
|
||||
|
||||
|
||||
def get_context(context):
|
||||
pass
|
||||
@@ -1,98 +0,0 @@
|
||||
frappe.ready(function () {
|
||||
frappe.web_form.after_load = () => {
|
||||
redirect_to_user_profile_form();
|
||||
add_listener_for_current_company();
|
||||
add_listener_for_certificate_expiry();
|
||||
add_listener_for_skill_add_rows();
|
||||
add_listener_for_functions_add_rows();
|
||||
add_listener_for_industries_add_rows();
|
||||
};
|
||||
|
||||
frappe.web_form.validate = () => {
|
||||
let information_missing;
|
||||
const data = frappe.web_form.get_values();
|
||||
if (data && data.work_experience && data.work_experience.length) {
|
||||
data.work_experience.forEach((exp) => {
|
||||
if (!exp.current && !exp.to_date) {
|
||||
information_missing = true;
|
||||
frappe.msgprint(
|
||||
__("To Date is mandatory in Work Experience.")
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (information_missing) return false;
|
||||
return true;
|
||||
};
|
||||
|
||||
frappe.web_form.after_save = () => {
|
||||
setTimeout(() => {
|
||||
window.location.href = `/profile_/${frappe.web_form.get_value([
|
||||
"username",
|
||||
])}`;
|
||||
});
|
||||
};
|
||||
});
|
||||
|
||||
const redirect_to_user_profile_form = () => {
|
||||
if (!frappe.utils.get_url_arg("name")) {
|
||||
window.location.href = `/edit-profile?name=${frappe.session.user}`;
|
||||
}
|
||||
};
|
||||
|
||||
const add_listener_for_current_company = () => {
|
||||
$(document).on("click", "input[data-fieldname='current']", (e) => {
|
||||
if ($(e.currentTarget).prop("checked"))
|
||||
$("div[data-fieldname='to_date']").addClass("hide");
|
||||
else $("div[data-fieldname='to_date']").removeClass("hide");
|
||||
});
|
||||
};
|
||||
|
||||
const add_listener_for_certificate_expiry = () => {
|
||||
$(document).on("click", "input[data-fieldname='expire']", (e) => {
|
||||
if ($(e.currentTarget).prop("checked"))
|
||||
$("div[data-fieldname='expiration_date']").addClass("hide");
|
||||
else $("div[data-fieldname='expiration_date']").removeClass("hide");
|
||||
});
|
||||
};
|
||||
|
||||
const add_listener_for_skill_add_rows = () => {
|
||||
$('[data-fieldname="skill"]')
|
||||
.find(".grid-add-row")
|
||||
.click((e) => {
|
||||
if ($('[data-fieldname="skill"]').find(".grid-row").length > 5) {
|
||||
$('[data-fieldname="skill"]').find(".grid-add-row").hide();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
const add_listener_for_functions_add_rows = () => {
|
||||
$('[data-fieldname="preferred_functions"]')
|
||||
.find(".grid-add-row")
|
||||
.click((e) => {
|
||||
if (
|
||||
$('[data-fieldname="preferred_functions"]').find(".grid-row")
|
||||
.length > 3
|
||||
) {
|
||||
$('[data-fieldname="preferred_functions"]')
|
||||
.find(".grid-add-row")
|
||||
.hide();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
const add_listener_for_industries_add_rows = () => {
|
||||
$('[data-fieldname="preferred_industries"]')
|
||||
.find(".grid-add-row")
|
||||
.click((e) => {
|
||||
if (
|
||||
$('[data-fieldname="preferred_industries"]').find(".grid-row")
|
||||
.length > 3
|
||||
) {
|
||||
$('[data-fieldname="preferred_industries"]')
|
||||
.find(".grid-add-row")
|
||||
.hide();
|
||||
}
|
||||
});
|
||||
};
|
||||
@@ -1,341 +0,0 @@
|
||||
{
|
||||
"accept_payment": 0,
|
||||
"allow_comments": 0,
|
||||
"allow_delete": 0,
|
||||
"allow_edit": 1,
|
||||
"allow_incomplete": 0,
|
||||
"allow_multiple": 0,
|
||||
"allow_print": 0,
|
||||
"amount": 0.0,
|
||||
"amount_based_on_field": 0,
|
||||
"apply_document_permissions": 0,
|
||||
"breadcrumbs": "",
|
||||
"button_label": "Save",
|
||||
"client_script": "",
|
||||
"creation": "2021-06-30 13:48:13.682851",
|
||||
"custom_css": "",
|
||||
"doc_type": "User",
|
||||
"docstatus": 0,
|
||||
"doctype": "Web Form",
|
||||
"idx": 0,
|
||||
"is_standard": 1,
|
||||
"list_columns": [],
|
||||
"login_required": 1,
|
||||
"max_attachment_size": 0,
|
||||
"modified": "2023-01-09 15:45:11.411692",
|
||||
"modified_by": "Administrator",
|
||||
"module": "LMS",
|
||||
"name": "profile",
|
||||
"owner": "Administrator",
|
||||
"payment_button_label": "Buy Now",
|
||||
"published": 1,
|
||||
"route": "edit-profile",
|
||||
"show_attachments": 0,
|
||||
"show_list": 0,
|
||||
"show_sidebar": 0,
|
||||
"success_url": "/profile",
|
||||
"title": "Profile",
|
||||
"web_form_fields": [
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "first_name",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"label": "First Name",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"read_only": 0,
|
||||
"reqd": 1,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "last_name",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"label": "Last Name",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "username",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"label": "Username",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"read_only": 0,
|
||||
"reqd": 1,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"description": "Get your globally recognized avatar from Gravatar.com",
|
||||
"fieldname": "user_image",
|
||||
"fieldtype": "Attach Image",
|
||||
"hidden": 0,
|
||||
"label": "User Image",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"description": "",
|
||||
"fieldname": "cover_image",
|
||||
"fieldtype": "Attach Image",
|
||||
"hidden": 0,
|
||||
"label": "Cover Image",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "city",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"label": "City",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "mobile_no",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"label": "Mobile No",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"options": "Phone",
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "",
|
||||
"fieldtype": "Column Break",
|
||||
"hidden": 0,
|
||||
"label": "",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"options": "",
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "headline",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"label": "Headline",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "linkedin",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"label": "LinkedIn ID",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "github",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"label": "Github ID",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "medium",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"label": "Medium ID",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "looking_for_job",
|
||||
"fieldtype": "Check",
|
||||
"hidden": 0,
|
||||
"label": "I am looking for a job",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "bio",
|
||||
"fieldtype": "Small Text",
|
||||
"hidden": 0,
|
||||
"label": "Bio",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "",
|
||||
"fieldtype": "Page Break",
|
||||
"hidden": 0,
|
||||
"label": "",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"options": "",
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
"label": "",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"options": "",
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "education",
|
||||
"fieldtype": "Table",
|
||||
"hidden": 0,
|
||||
"label": "Education",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"options": "Education Detail",
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "work_experience_details",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
"label": "Work Experience",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "work_experience",
|
||||
"fieldtype": "Table",
|
||||
"hidden": 0,
|
||||
"label": "Work Experience",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"options": "Work Experience",
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "internship",
|
||||
"fieldtype": "Table",
|
||||
"hidden": 0,
|
||||
"label": "Volunteering or Internship",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"options": "Work Experience",
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "certification_details",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
"label": "Certification Details",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"options": "",
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "certification",
|
||||
"fieldtype": "Table",
|
||||
"hidden": 0,
|
||||
"label": "Certification",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"options": "Certification",
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "skill_details",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
"label": "Skill Details",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"options": "",
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
},
|
||||
{
|
||||
"allow_read_on_all_link_options": 0,
|
||||
"fieldname": "skill",
|
||||
"fieldtype": "Table",
|
||||
"hidden": 0,
|
||||
"label": "Skill",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"options": "Skills",
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
import frappe
|
||||
|
||||
|
||||
def get_context(context):
|
||||
# do your magic here
|
||||
pass
|
||||
329
lms/locale/ar.po
329
lms/locale/ar.po
File diff suppressed because it is too large
Load Diff
329
lms/locale/bs.po
329
lms/locale/bs.po
File diff suppressed because it is too large
Load Diff
373
lms/locale/de.po
373
lms/locale/de.po
File diff suppressed because it is too large
Load Diff
335
lms/locale/eo.po
335
lms/locale/eo.po
File diff suppressed because it is too large
Load Diff
667
lms/locale/es.po
667
lms/locale/es.po
File diff suppressed because it is too large
Load Diff
331
lms/locale/fa.po
331
lms/locale/fa.po
File diff suppressed because it is too large
Load Diff
329
lms/locale/fr.po
329
lms/locale/fr.po
File diff suppressed because it is too large
Load Diff
329
lms/locale/hu.po
329
lms/locale/hu.po
File diff suppressed because it is too large
Load Diff
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Frappe LMS VERSION\n"
|
||||
"Report-Msgid-Bugs-To: jannat@frappe.io\n"
|
||||
"POT-Creation-Date: 2024-11-01 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-11-01 16:04+0000\n"
|
||||
"POT-Creation-Date: 2024-11-08 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-11-08 16:04+0000\n"
|
||||
"Last-Translator: jannat@frappe.io\n"
|
||||
"Language-Team: jannat@frappe.io\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -60,7 +60,7 @@ msgstr ""
|
||||
msgid "<span style=\"font-size: 18px;\"><b>Statistics</b></span>"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:32
|
||||
#: frontend/src/pages/CourseForm.vue:40
|
||||
msgid "A one line introduction to the course that appears on the course card"
|
||||
msgstr ""
|
||||
|
||||
@@ -226,7 +226,7 @@ msgstr ""
|
||||
#. Label of the amount (Currency) field in DocType 'Web Form'
|
||||
#. Label of the amount (Currency) field in DocType 'LMS Batch'
|
||||
#. Label of the amount (Currency) field in DocType 'LMS Payment'
|
||||
#: frontend/src/pages/BatchForm.vue:208 lms/fixtures/custom_field.json
|
||||
#: frontend/src/pages/BatchForm.vue:209 lms/fixtures/custom_field.json
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/lms/doctype/lms_payment/lms_payment.json
|
||||
#: lms/public/js/common_functions.js:379
|
||||
@@ -260,6 +260,10 @@ msgstr ""
|
||||
msgid "Announcement"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Modals/AnnouncementModal.vue:99
|
||||
msgid "Announcement has been sent successfully"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the answer (Text Editor) field in DocType 'LMS Assignment'
|
||||
#. Label of the answer (Text Editor) field in DocType 'LMS Assignment
|
||||
#. Submission'
|
||||
@@ -270,7 +274,7 @@ msgstr ""
|
||||
msgid "Answer"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:76 frontend/src/pages/CourseForm.vue:94
|
||||
#: frontend/src/pages/CourseForm.vue:84 frontend/src/pages/CourseForm.vue:102
|
||||
msgid "Appears on the course card in the course list"
|
||||
msgstr ""
|
||||
|
||||
@@ -344,7 +348,7 @@ msgstr ""
|
||||
msgid "Assessment added successfully"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:74
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:75
|
||||
msgid "Assessment {0} has already been added to this batch."
|
||||
msgstr ""
|
||||
|
||||
@@ -424,7 +428,7 @@ msgstr ""
|
||||
msgid "Average Rating"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Lesson.vue:101
|
||||
#: frontend/src/pages/Lesson.vue:96
|
||||
msgid "Back to Course"
|
||||
msgstr ""
|
||||
|
||||
@@ -476,7 +480,7 @@ msgid "Batch Description"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the batch_details (Text Editor) field in DocType 'LMS Batch'
|
||||
#: frontend/src/pages/BatchForm.vue:97 lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: frontend/src/pages/BatchForm.vue:98 lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/public/js/common_functions.js:349
|
||||
#: lms/templates/emails/batch_confirmation.html:30
|
||||
msgid "Batch Details"
|
||||
@@ -537,7 +541,7 @@ msgstr ""
|
||||
msgid "Batch Updated"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:39
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:40
|
||||
msgid "Batch end date cannot be before the batch start date"
|
||||
msgstr ""
|
||||
|
||||
@@ -643,8 +647,8 @@ msgstr ""
|
||||
#. Label of the category (Link) field in DocType 'LMS Batch'
|
||||
#. Label of the category (Data) field in DocType 'LMS Category'
|
||||
#. Label of the category (Link) field in DocType 'LMS Course'
|
||||
#: frontend/src/pages/BatchForm.vue:189 frontend/src/pages/Batches.vue:16
|
||||
#: frontend/src/pages/CourseForm.vue:139 frontend/src/pages/Courses.vue:17
|
||||
#: frontend/src/pages/BatchForm.vue:190 frontend/src/pages/Batches.vue:16
|
||||
#: frontend/src/pages/CourseForm.vue:147 frontend/src/pages/Courses.vue:17
|
||||
#: frontend/src/pages/JobDetail.vue:102
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/lms/doctype/lms_category/lms_category.json
|
||||
@@ -945,7 +949,7 @@ msgstr ""
|
||||
msgid "Completed"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:192
|
||||
#: frontend/src/pages/CourseForm.vue:201
|
||||
msgid "Completion Certificate"
|
||||
msgstr ""
|
||||
|
||||
@@ -1116,7 +1120,7 @@ msgstr ""
|
||||
msgid "Course Data"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:41
|
||||
#: frontend/src/pages/CourseForm.vue:49
|
||||
msgid "Course Description"
|
||||
msgstr ""
|
||||
|
||||
@@ -1125,7 +1129,7 @@ msgstr ""
|
||||
msgid "Course Evaluator"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:54
|
||||
#: frontend/src/pages/CourseForm.vue:62
|
||||
msgid "Course Image"
|
||||
msgstr ""
|
||||
|
||||
@@ -1148,7 +1152,7 @@ msgid "Course Name"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the course_price (Currency) field in DocType 'LMS Course'
|
||||
#: frontend/src/pages/CourseForm.vue:210
|
||||
#: frontend/src/pages/CourseForm.vue:219
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
msgid "Course Price"
|
||||
msgstr ""
|
||||
@@ -1177,15 +1181,15 @@ msgstr ""
|
||||
msgid "Course Title"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:318
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:340
|
||||
msgid "Course already added to the batch."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:457
|
||||
msgid "Course price and currency are mandatory for paid courses"
|
||||
msgid "Course deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:57
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:58
|
||||
msgid "Course {0} has already been added to this batch."
|
||||
msgstr ""
|
||||
|
||||
@@ -1251,7 +1255,7 @@ msgstr ""
|
||||
#. Label of the currency (Link) field in DocType 'LMS Batch'
|
||||
#. Label of the currency (Link) field in DocType 'LMS Course'
|
||||
#. Label of the currency (Link) field in DocType 'LMS Payment'
|
||||
#: frontend/src/pages/BatchForm.vue:216 frontend/src/pages/CourseForm.vue:217
|
||||
#: frontend/src/pages/BatchForm.vue:217 frontend/src/pages/CourseForm.vue:226
|
||||
#: lms/fixtures/custom_field.json lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
#: lms/lms/doctype/lms_payment/lms_payment.json
|
||||
@@ -1309,7 +1313,7 @@ msgstr ""
|
||||
|
||||
#. Label of the section_break_glxh (Section Break) field in DocType 'LMS Live
|
||||
#. Class'
|
||||
#: frontend/src/pages/BatchForm.vue:110
|
||||
#: frontend/src/pages/BatchForm.vue:111
|
||||
#: lms/lms/doctype/lms_live_class/lms_live_class.json
|
||||
msgid "Date and Time"
|
||||
msgstr ""
|
||||
@@ -1345,13 +1349,22 @@ msgid "Degree Type"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/CourseOutline.vue:212
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:470
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:464
|
||||
msgid "Delete Course"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/CourseOutline.vue:208
|
||||
msgid "Delete Lesson"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:465
|
||||
msgid "Deleting the course will also delete all its chapters and lessons. Are you sure you want to delete this course?"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the description (Text Editor) field in DocType 'Job Opportunity'
|
||||
#. Label of the description (Small Text) field in DocType 'Certification'
|
||||
#. Label of the description (Markdown Editor) field in DocType 'Cohort'
|
||||
@@ -1365,7 +1378,7 @@ msgstr ""
|
||||
#. Label of the description (Text) field in DocType 'LMS Live Class'
|
||||
#. Label of the description (Small Text) field in DocType 'Work Experience'
|
||||
#: frontend/src/components/Modals/LiveClassModal.vue:73
|
||||
#: frontend/src/pages/BatchForm.vue:90 frontend/src/pages/JobCreation.vue:43
|
||||
#: frontend/src/pages/BatchForm.vue:91 frontend/src/pages/JobCreation.vue:43
|
||||
#: lms/job/doctype/job_opportunity/job_opportunity.json
|
||||
#: lms/lms/doctype/certification/certification.json
|
||||
#: lms/lms/doctype/cohort/cohort.json
|
||||
@@ -1386,12 +1399,12 @@ msgid "Desk"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Modals/DiscussionModal.vue:22
|
||||
#: frontend/src/pages/BatchForm.vue:14 frontend/src/pages/CourseForm.vue:20
|
||||
#: frontend/src/pages/BatchForm.vue:14 frontend/src/pages/CourseForm.vue:28
|
||||
#: frontend/src/pages/QuizForm.vue:42
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:187
|
||||
#: frontend/src/pages/CourseForm.vue:196
|
||||
msgid "Disable Self Enrollment"
|
||||
msgstr ""
|
||||
|
||||
@@ -1467,7 +1480,7 @@ msgstr ""
|
||||
#: frontend/src/components/BatchOverlay.vue:93
|
||||
#: frontend/src/components/CourseCardOverlay.vue:86
|
||||
#: frontend/src/components/Modals/ChapterModal.vue:9
|
||||
#: frontend/src/pages/JobDetail.vue:31 frontend/src/pages/Lesson.vue:70
|
||||
#: frontend/src/pages/JobDetail.vue:31 frontend/src/pages/Lesson.vue:65
|
||||
#: frontend/src/pages/Profile.vue:32
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
@@ -1549,7 +1562,7 @@ msgstr ""
|
||||
|
||||
#. Label of the end_date (Date) field in DocType 'Cohort'
|
||||
#. Label of the end_date (Date) field in DocType 'LMS Batch'
|
||||
#: frontend/src/pages/BatchForm.vue:122 lms/lms/doctype/cohort/cohort.json
|
||||
#: frontend/src/pages/BatchForm.vue:123 lms/lms/doctype/cohort/cohort.json
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/public/js/common_functions.js:282
|
||||
msgid "End Date"
|
||||
@@ -1567,7 +1580,7 @@ msgstr ""
|
||||
#. Label of the end_time (Time) field in DocType 'LMS Certificate Evaluation'
|
||||
#. Label of the end_time (Time) field in DocType 'LMS Certificate Request'
|
||||
#. Label of the end_time (Time) field in DocType 'Scheduled Flow'
|
||||
#: frontend/src/pages/BatchForm.vue:136
|
||||
#: frontend/src/pages/BatchForm.vue:137
|
||||
#: frontend/src/pages/ProfileEvaluator.vue:18
|
||||
#: lms/lms/doctype/evaluator_schedule/evaluator_schedule.json
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
@@ -1594,7 +1607,7 @@ msgstr ""
|
||||
msgid "Enrolled successfully"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:97
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:98
|
||||
msgid "Enrollment Confirmation for the Next Training Batch"
|
||||
msgstr ""
|
||||
|
||||
@@ -1603,7 +1616,7 @@ msgstr ""
|
||||
msgid "Enrollment Count"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1692
|
||||
#: lms/lms/utils.py:1690
|
||||
msgid "Enrollment Failed"
|
||||
msgstr ""
|
||||
|
||||
@@ -1631,6 +1644,7 @@ msgstr ""
|
||||
msgid "Enter the correct answer"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Modals/AnnouncementModal.vue:104
|
||||
#: frontend/src/components/Modals/Question.vue:246
|
||||
#: frontend/src/components/Modals/Question.vue:266
|
||||
#: frontend/src/components/Modals/Question.vue:323
|
||||
@@ -1653,7 +1667,7 @@ msgid "Evaluation Details"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the evaluation_end_date (Date) field in DocType 'LMS Batch'
|
||||
#: frontend/src/pages/BatchForm.vue:165
|
||||
#: frontend/src/pages/BatchForm.vue:166
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/public/js/common_functions.js:333
|
||||
msgid "Evaluation End Date"
|
||||
@@ -1664,7 +1678,7 @@ msgstr ""
|
||||
msgid "Evaluation Request"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:81
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:82
|
||||
msgid "Evaluation end date cannot be less than the batch end date."
|
||||
msgstr ""
|
||||
|
||||
@@ -1711,11 +1725,13 @@ msgid "Evaluator is Unavailable"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the event (Select) field in DocType 'LMS Badge'
|
||||
#. Label of the event (Link) field in DocType 'LMS Live Class'
|
||||
#: lms/lms/doctype/lms_badge/lms_badge.json
|
||||
#: lms/lms/doctype/lms_live_class/lms_live_class.json
|
||||
msgid "Event"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/BatchForm.vue:144
|
||||
#: frontend/src/pages/BatchForm.vue:145
|
||||
msgid "Example: IST (+5:30)"
|
||||
msgstr ""
|
||||
|
||||
@@ -1789,7 +1805,7 @@ msgstr ""
|
||||
|
||||
#. Label of the featured (Check) field in DocType 'LMS Course'
|
||||
#: frontend/src/components/CourseCard.vue:16
|
||||
#: frontend/src/pages/CourseForm.vue:180
|
||||
#: frontend/src/pages/CourseForm.vue:189
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
msgid "Featured"
|
||||
msgstr ""
|
||||
@@ -2076,7 +2092,7 @@ msgstr ""
|
||||
msgid "If you set an amount here, then the USD equivalent setting will not get applied."
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.py:62
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.py:63
|
||||
msgid "If you want open ended questions then make sure each question in the quiz is of open ended type."
|
||||
msgstr ""
|
||||
|
||||
@@ -2102,7 +2118,7 @@ msgstr ""
|
||||
msgid "Image search powered by"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.py:221
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.py:222
|
||||
msgid "Image: Corrupted Data Stream"
|
||||
msgstr ""
|
||||
|
||||
@@ -2185,14 +2201,14 @@ msgstr ""
|
||||
|
||||
#. Label of the instructor_notes (Markdown Editor) field in DocType 'Course
|
||||
#. Lesson'
|
||||
#: frontend/src/pages/Lesson.vue:130 frontend/src/pages/LessonForm.vue:33
|
||||
#: frontend/src/pages/Lesson.vue:125 frontend/src/pages/LessonForm.vue:33
|
||||
#: lms/lms/doctype/course_lesson/course_lesson.json
|
||||
msgid "Instructor Notes"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the instructors (Table MultiSelect) field in DocType 'LMS Batch'
|
||||
#. Label of the instructors (Table MultiSelect) field in DocType 'LMS Course'
|
||||
#: frontend/src/pages/BatchForm.vue:85 frontend/src/pages/CourseForm.vue:146
|
||||
#: frontend/src/pages/BatchForm.vue:85 frontend/src/pages/CourseForm.vue:154
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
msgid "Instructors"
|
||||
@@ -2351,7 +2367,7 @@ msgstr ""
|
||||
msgid "Join URL"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:128
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Keywords for the course"
|
||||
msgstr ""
|
||||
|
||||
@@ -2655,7 +2671,7 @@ msgstr ""
|
||||
msgid "Links"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:131
|
||||
#: frontend/src/pages/Quizzes.vue:147
|
||||
msgid "List of quizzes"
|
||||
msgstr ""
|
||||
|
||||
@@ -2705,7 +2721,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/NoPermission.vue:28
|
||||
#: frontend/src/components/QuizBlock.vue:9 frontend/src/pages/Batch.vue:163
|
||||
#: frontend/src/pages/Lesson.vue:29
|
||||
#: frontend/src/pages/Lesson.vue:24
|
||||
msgid "Login"
|
||||
msgstr ""
|
||||
|
||||
@@ -2785,7 +2801,7 @@ msgid "Maximun Attempts"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the medium (Select) field in DocType 'LMS Batch'
|
||||
#: frontend/src/pages/BatchForm.vue:184
|
||||
#: frontend/src/pages/BatchForm.vue:185
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/public/js/common_functions.js:309
|
||||
msgid "Medium"
|
||||
@@ -3040,11 +3056,11 @@ msgstr ""
|
||||
msgid "New Sign Up"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:632
|
||||
#: lms/lms/utils.py:627
|
||||
msgid "New comment in batch {0}"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:625
|
||||
#: lms/lms/utils.py:620
|
||||
msgid "New reply on the topic {0} in course {1}"
|
||||
msgstr ""
|
||||
|
||||
@@ -3053,7 +3069,7 @@ msgstr ""
|
||||
msgid "New {0}"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Quiz.vue:209 frontend/src/pages/Lesson.vue:89
|
||||
#: frontend/src/components/Quiz.vue:209 frontend/src/pages/Lesson.vue:84
|
||||
msgid "Next"
|
||||
msgstr ""
|
||||
|
||||
@@ -3114,6 +3130,10 @@ msgstr ""
|
||||
msgid "No live classes scheduled"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:56
|
||||
msgid "No quizzes found"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Modals/EvaluationModal.vue:53
|
||||
msgid "No slots available for this date."
|
||||
msgstr ""
|
||||
@@ -3186,7 +3206,7 @@ msgstr ""
|
||||
msgid "Notify me when available"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/BatchForm.vue:161
|
||||
#: frontend/src/pages/BatchForm.vue:162
|
||||
msgid "Number of seats available"
|
||||
msgstr ""
|
||||
|
||||
@@ -3222,7 +3242,7 @@ msgstr ""
|
||||
msgid "Only files of type {0} will be accepted."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:473 frontend/src/utils/index.js:518
|
||||
#: frontend/src/pages/CourseForm.vue:494 frontend/src/utils/index.js:518
|
||||
msgid "Only image file is allowed."
|
||||
msgstr ""
|
||||
|
||||
@@ -3330,14 +3350,14 @@ msgid "Pages"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the paid_batch (Check) field in DocType 'LMS Batch'
|
||||
#: frontend/src/pages/BatchForm.vue:204
|
||||
#: frontend/src/pages/BatchForm.vue:205
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/public/js/common_functions.js:373
|
||||
msgid "Paid Batch"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the paid_course (Check) field in DocType 'LMS Course'
|
||||
#: frontend/src/pages/CourseForm.vue:205
|
||||
#: frontend/src/pages/CourseForm.vue:214
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
msgid "Paid Course"
|
||||
msgstr ""
|
||||
@@ -3368,7 +3388,7 @@ msgstr ""
|
||||
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz'
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizForm.vue:71 frontend/src/pages/Quizzes.vue:109
|
||||
#: frontend/src/pages/QuizForm.vue:71 frontend/src/pages/Quizzes.vue:125
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Passing Percentage"
|
||||
@@ -3379,13 +3399,13 @@ msgstr ""
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:104
|
||||
#: frontend/src/pages/CourseForm.vue:112
|
||||
msgid "Paste the youtube link of a short video introducing the course"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the payment (Link) field in DocType 'Batch Student'
|
||||
#. Label of the payment (Link) field in DocType 'LMS Enrollment'
|
||||
#: frontend/src/pages/BatchForm.vue:198
|
||||
#: frontend/src/pages/BatchForm.vue:199
|
||||
#: lms/lms/doctype/batch_student/batch_student.json
|
||||
#: lms/lms/doctype/lms_enrollment/lms_enrollment.json
|
||||
msgid "Payment"
|
||||
@@ -3497,7 +3517,7 @@ msgstr ""
|
||||
msgid "Please click on the following button to set your new password"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:229
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:251
|
||||
msgid "Please enable Zoom Settings to use this feature."
|
||||
msgstr ""
|
||||
|
||||
@@ -3518,7 +3538,7 @@ msgstr ""
|
||||
msgid "Please enter your answer"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:64
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:65
|
||||
msgid "Please install the Payments app to create a paid batches."
|
||||
msgstr ""
|
||||
|
||||
@@ -3628,17 +3648,17 @@ msgstr ""
|
||||
msgid "Preview Image"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:102
|
||||
#: frontend/src/pages/CourseForm.vue:110
|
||||
msgid "Preview Video"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Lesson.vue:54
|
||||
#: frontend/src/pages/Lesson.vue:49
|
||||
msgid "Previous"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the pricing_tab (Tab Break) field in DocType 'LMS Batch'
|
||||
#. Label of the pricing_tab (Tab Break) field in DocType 'LMS Course'
|
||||
#: frontend/src/pages/CourseForm.vue:199
|
||||
#: frontend/src/pages/CourseForm.vue:208
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
#: lms/public/js/common_functions.js:368
|
||||
@@ -3708,7 +3728,7 @@ msgstr ""
|
||||
#. Label of the published (Check) field in DocType 'LMS Batch'
|
||||
#. Label of the published (Check) field in DocType 'LMS Course'
|
||||
#: frontend/src/components/Modals/Event.vue:108
|
||||
#: frontend/src/pages/BatchForm.vue:24 frontend/src/pages/CourseForm.vue:162
|
||||
#: frontend/src/pages/BatchForm.vue:24 frontend/src/pages/CourseForm.vue:171
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
#: lms/public/js/common_functions.js:266
|
||||
@@ -3721,7 +3741,7 @@ msgid "Published Courses"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the published_on (Date) field in DocType 'LMS Course'
|
||||
#: frontend/src/pages/CourseForm.vue:166
|
||||
#: frontend/src/pages/CourseForm.vue:175
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
msgid "Published On"
|
||||
msgstr ""
|
||||
@@ -3836,8 +3856,8 @@ msgstr ""
|
||||
msgid "Quiz will appear at the bottom of the lesson."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/QuizForm.vue:441 frontend/src/pages/Quizzes.vue:120
|
||||
#: frontend/src/pages/Quizzes.vue:130
|
||||
#: frontend/src/pages/QuizForm.vue:441 frontend/src/pages/Quizzes.vue:136
|
||||
#: frontend/src/pages/Quizzes.vue:146
|
||||
msgid "Quizzes"
|
||||
msgstr ""
|
||||
|
||||
@@ -3919,7 +3939,7 @@ msgstr ""
|
||||
msgid "Related Courses"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/BatchForm.vue:69 frontend/src/pages/CourseForm.vue:91
|
||||
#: frontend/src/pages/BatchForm.vue:69 frontend/src/pages/CourseForm.vue:99
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
@@ -3993,19 +4013,19 @@ msgstr ""
|
||||
msgid "Route"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:172
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:194
|
||||
msgid "Row #{0} Date cannot be outside the batch duration."
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:167
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:189
|
||||
msgid "Row #{0} End time cannot be outside the batch duration."
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:149
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:171
|
||||
msgid "Row #{0} Start time cannot be greater than or equal to end time."
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:158
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:180
|
||||
msgid "Row #{0} Start time cannot be outside the batch duration."
|
||||
msgstr ""
|
||||
|
||||
@@ -4029,7 +4049,7 @@ msgstr ""
|
||||
#: frontend/src/components/Modals/Event.vue:129
|
||||
#: frontend/src/components/QuizPlugin.vue:23
|
||||
#: frontend/src/pages/AssignmentSubmission.vue:7
|
||||
#: frontend/src/pages/BatchForm.vue:8 frontend/src/pages/CourseForm.vue:12
|
||||
#: frontend/src/pages/BatchForm.vue:8 frontend/src/pages/CourseForm.vue:20
|
||||
#: frontend/src/pages/JobCreation.vue:8 frontend/src/pages/LessonForm.vue:10
|
||||
#: frontend/src/pages/QuizForm.vue:34 frontend/src/pages/QuizSubmission.vue:14
|
||||
#: lms/public/js/common_functions.js:405
|
||||
@@ -4078,7 +4098,7 @@ msgid "Search for an icon"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the seat_count (Int) field in DocType 'LMS Batch'
|
||||
#: frontend/src/pages/BatchForm.vue:158
|
||||
#: frontend/src/pages/BatchForm.vue:159
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/public/js/common_functions.js:327
|
||||
msgid "Seat Count"
|
||||
@@ -4122,7 +4142,7 @@ msgid "Set your Password"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Modals/Settings.vue:7
|
||||
#: frontend/src/pages/BatchForm.vue:152 frontend/src/pages/CourseForm.vue:152
|
||||
#: frontend/src/pages/BatchForm.vue:153 frontend/src/pages/CourseForm.vue:161
|
||||
#: frontend/src/pages/ProfileRoles.vue:4 frontend/src/pages/QuizForm.vue:78
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
@@ -4132,12 +4152,12 @@ msgid "Share on"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the short_introduction (Small Text) field in DocType 'LMS Course'
|
||||
#: frontend/src/pages/CourseForm.vue:30
|
||||
#: frontend/src/pages/CourseForm.vue:38
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
msgid "Short Introduction"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/BatchForm.vue:93
|
||||
#: frontend/src/pages/BatchForm.vue:94
|
||||
msgid "Short description of the batch"
|
||||
msgstr ""
|
||||
|
||||
@@ -4301,7 +4321,7 @@ msgstr ""
|
||||
#. Label of the start_date (Date) field in DocType 'Education Detail'
|
||||
#. Label of the start_date (Date) field in DocType 'LMS Batch'
|
||||
#. Label of the start_date (Date) field in DocType 'LMS Batch Old'
|
||||
#: frontend/src/pages/BatchForm.vue:116
|
||||
#: frontend/src/pages/BatchForm.vue:117
|
||||
#: lms/lms/doctype/education_detail/education_detail.json
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/lms/doctype/lms_batch_old/lms_batch_old.json
|
||||
@@ -4310,7 +4330,7 @@ msgid "Start Date"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/CourseCardOverlay.vue:63
|
||||
#: frontend/src/pages/Lesson.vue:25
|
||||
#: frontend/src/pages/Lesson.vue:21
|
||||
#: lms/templates/emails/lms_course_interest.html:9
|
||||
msgid "Start Learning"
|
||||
msgstr ""
|
||||
@@ -4322,7 +4342,7 @@ msgstr ""
|
||||
#. Label of the start_time (Time) field in DocType 'LMS Certificate Evaluation'
|
||||
#. Label of the start_time (Time) field in DocType 'LMS Certificate Request'
|
||||
#. Label of the start_time (Time) field in DocType 'Scheduled Flow'
|
||||
#: frontend/src/pages/BatchForm.vue:130
|
||||
#: frontend/src/pages/BatchForm.vue:131
|
||||
#: frontend/src/pages/ProfileEvaluator.vue:15
|
||||
#: lms/lms/doctype/evaluator_schedule/evaluator_schedule.json
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
@@ -4428,7 +4448,7 @@ msgstr ""
|
||||
msgid "Student Reviews"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:46
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:47
|
||||
msgid "Student {0} has already been added to this batch."
|
||||
msgstr ""
|
||||
|
||||
@@ -4494,13 +4514,14 @@ msgstr ""
|
||||
#: frontend/src/components/BatchOverlay.vue:135
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/CourseCardOverlay.vue:161
|
||||
#: frontend/src/components/Modals/AnnouncementModal.vue:98
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:73
|
||||
#: frontend/src/components/Modals/Event.vue:255
|
||||
#: frontend/src/components/Modals/Event.vue:310
|
||||
#: frontend/src/components/Modals/Question.vue:261
|
||||
#: frontend/src/components/Modals/Question.vue:312
|
||||
#: frontend/src/pages/QuizForm.vue:342 frontend/src/pages/QuizForm.vue:361
|
||||
#: frontend/src/pages/QuizForm.vue:430
|
||||
#: frontend/src/pages/CourseForm.vue:457 frontend/src/pages/QuizForm.vue:342
|
||||
#: frontend/src/pages/QuizForm.vue:361 frontend/src/pages/QuizForm.vue:430
|
||||
msgid "Success"
|
||||
msgstr ""
|
||||
|
||||
@@ -4567,7 +4588,7 @@ msgid "System Manager"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the tags (Data) field in DocType 'LMS Course'
|
||||
#: frontend/src/pages/CourseForm.vue:112
|
||||
#: frontend/src/pages/CourseForm.vue:120
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
@@ -4659,7 +4680,7 @@ msgstr ""
|
||||
msgid "There are no courses available at the moment. Keep an eye out, fresh learning experiences are on the way soon!"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:140
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:141
|
||||
msgid "There are no seats available in this batch."
|
||||
msgstr ""
|
||||
|
||||
@@ -4690,7 +4711,7 @@ msgstr ""
|
||||
msgid "This course has:"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1572
|
||||
#: lms/lms/utils.py:1570
|
||||
msgid "This course is free."
|
||||
msgstr ""
|
||||
|
||||
@@ -4759,7 +4780,7 @@ msgstr ""
|
||||
#. Label of the timezone (Data) field in DocType 'LMS Certificate Request'
|
||||
#. Label of the timezone (Data) field in DocType 'LMS Live Class'
|
||||
#: frontend/src/components/Modals/LiveClassModal.vue:44
|
||||
#: frontend/src/pages/BatchForm.vue:142
|
||||
#: frontend/src/pages/BatchForm.vue:143
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/lms/doctype/lms_certificate_request/lms_certificate_request.json
|
||||
#: lms/lms/doctype/lms_live_class/lms_live_class.json
|
||||
@@ -4788,9 +4809,9 @@ msgstr ""
|
||||
#. Label of the title (Data) field in DocType 'Work Experience'
|
||||
#: frontend/src/components/Modals/DiscussionModal.vue:18
|
||||
#: frontend/src/components/Modals/LiveClassModal.vue:23
|
||||
#: frontend/src/pages/BatchForm.vue:18 frontend/src/pages/CourseForm.vue:24
|
||||
#: frontend/src/pages/BatchForm.vue:18 frontend/src/pages/CourseForm.vue:32
|
||||
#: frontend/src/pages/JobCreation.vue:20 frontend/src/pages/QuizForm.vue:48
|
||||
#: frontend/src/pages/Quizzes.vue:98 lms/lms/doctype/cohort/cohort.json
|
||||
#: frontend/src/pages/Quizzes.vue:114 lms/lms/doctype/cohort/cohort.json
|
||||
#: lms/lms/doctype/cohort_subgroup/cohort_subgroup.json
|
||||
#: lms/lms/doctype/cohort_web_page/cohort_web_page.json
|
||||
#: lms/lms/doctype/course_chapter/course_chapter.json
|
||||
@@ -4825,7 +4846,7 @@ msgstr ""
|
||||
msgid "To Date is mandatory in Work Experience."
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1583
|
||||
#: lms/lms/utils.py:1581
|
||||
msgid "To join this batch, please contact the Administrator."
|
||||
msgstr ""
|
||||
|
||||
@@ -4842,7 +4863,7 @@ msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the total_marks (Int) field in DocType 'LMS Quiz'
|
||||
#: frontend/src/pages/QuizForm.vue:66 frontend/src/pages/Quizzes.vue:103
|
||||
#: frontend/src/pages/QuizForm.vue:66 frontend/src/pages/Quizzes.vue:119
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
msgid "Total Marks"
|
||||
msgstr ""
|
||||
@@ -4942,7 +4963,7 @@ msgstr ""
|
||||
|
||||
#. Option for the 'Status' (Select) field in DocType 'Cohort'
|
||||
#. Label of the upcoming (Check) field in DocType 'LMS Course'
|
||||
#: frontend/src/pages/CourseForm.vue:175 lms/lms/doctype/cohort/cohort.json
|
||||
#: frontend/src/pages/CourseForm.vue:184 lms/lms/doctype/cohort/cohort.json
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
msgid "Upcoming"
|
||||
msgstr ""
|
||||
@@ -4966,7 +4987,7 @@ msgstr ""
|
||||
msgid "Update Password"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/BatchForm.vue:51 frontend/src/pages/CourseForm.vue:72
|
||||
#: frontend/src/pages/BatchForm.vue:51 frontend/src/pages/CourseForm.vue:80
|
||||
msgid "Upload"
|
||||
msgstr ""
|
||||
|
||||
@@ -5235,6 +5256,10 @@ msgstr ""
|
||||
msgid "You have been enrolled in this course"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:60
|
||||
msgid "You have not created any quizzes yet. To create a new quiz, click on the \"New Quiz\" button above."
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/widgets/NoPreviewModal.html:12 lms/public/js/common_functions.js:126
|
||||
msgid "You have opted to be notified for this course. You will receive an email when the course becomes available."
|
||||
msgstr ""
|
||||
@@ -5313,7 +5338,7 @@ msgstr ""
|
||||
msgid "cancel your application"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Lesson.vue:175
|
||||
#: frontend/src/pages/Lesson.vue:170
|
||||
msgid "completed"
|
||||
msgstr ""
|
||||
|
||||
@@ -5361,7 +5386,7 @@ msgstr ""
|
||||
msgid "you can"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/api.py:732 lms/lms/api.py:740
|
||||
#: lms/lms/api.py:740 lms/lms/api.py:748
|
||||
msgid "{0} Settings not found"
|
||||
msgstr ""
|
||||
|
||||
@@ -5397,7 +5422,7 @@ msgstr ""
|
||||
msgid "{0} is your evaluator"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:709
|
||||
#: lms/lms/utils.py:704
|
||||
msgid "{0} mentioned you in a comment"
|
||||
msgstr ""
|
||||
|
||||
@@ -5405,7 +5430,7 @@ msgstr ""
|
||||
msgid "{0} mentioned you in a comment in your batch."
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:662 lms/lms/utils.py:668
|
||||
#: lms/lms/utils.py:657 lms/lms/utils.py:663
|
||||
msgid "{0} mentioned you in a comment in {1}"
|
||||
msgstr ""
|
||||
|
||||
|
||||
329
lms/locale/pl.po
329
lms/locale/pl.po
File diff suppressed because it is too large
Load Diff
329
lms/locale/ru.po
329
lms/locale/ru.po
File diff suppressed because it is too large
Load Diff
341
lms/locale/sv.po
341
lms/locale/sv.po
File diff suppressed because it is too large
Load Diff
357
lms/locale/tr.po
357
lms/locale/tr.po
File diff suppressed because it is too large
Load Diff
329
lms/locale/zh.po
329
lms/locale/zh.po
File diff suppressed because it is too large
Load Diff
@@ -91,4 +91,6 @@ lms.patches.v2_0.fix_progress_percentage
|
||||
lms.patches.v2_0.add_discussion_topic_titles
|
||||
lms.patches.v2_0.sidebar_settings
|
||||
lms.patches.v2_0.delete_certificate_request_notification #18-09-2024
|
||||
lms.patches.v2_0.add_course_statistics #21-10-2024
|
||||
lms.patches.v2_0.add_course_statistics #21-10-2024
|
||||
lms.patches.v2_0.give_discussions_permissions
|
||||
lms.patches.v2_0.delete_web_forms
|
||||
5
lms/patches/v2_0/delete_web_forms.py
Normal file
5
lms/patches/v2_0/delete_web_forms.py
Normal file
@@ -0,0 +1,5 @@
|
||||
import frappe
|
||||
|
||||
|
||||
def execute():
|
||||
frappe.db.delete("Web Form", {"module": "LMS"})
|
||||
6
lms/patches/v2_0/give_discussions_permissions.py
Normal file
6
lms/patches/v2_0/give_discussions_permissions.py
Normal file
@@ -0,0 +1,6 @@
|
||||
import frappe
|
||||
from lms.lms.api import give_dicussions_permission
|
||||
|
||||
|
||||
def execute():
|
||||
give_dicussions_permission()
|
||||
Reference in New Issue
Block a user