Index: lams_build/build.xml =================================================================== diff -u -r8bc318f44b193b1d926fcc62211ca1b4b18d9b30 -rcf258bae4dd72eab7a6f5bc895b96966caafaf06 --- lams_build/build.xml (.../build.xml) (revision 8bc318f44b193b1d926fcc62211ca1b4b18d9b30) +++ lams_build/build.xml (.../build.xml) (revision cf258bae4dd72eab7a6f5bc895b96966caafaf06) @@ -274,6 +274,7 @@ + @@ -821,7 +821,6 @@ - @@ -958,4 +957,4 @@ - \ No newline at end of file + Index: lams_central/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== diff -u -re376b240aecf9b255b8b26fe22c3d33c70f67ddb -rcf258bae4dd72eab7a6f5bc895b96966caafaf06 --- lams_central/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision e376b240aecf9b255b8b26fe22c3d33c70f67ddb) +++ lams_central/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision cf258bae4dd72eab7a6f5bc895b96966caafaf06) @@ -1,1069 +1,1079 @@ -appName = lams_central -#language code: en -#locale code: AU +label.username = Username +label.password = Password +error.authorisation = You are not authorised to do this. +heading.general.error = Error +error.general.1 = Sorry, there has been an error. +error.general.2 = There is a problem processing this request. Close the browser window and try again. +error.general.3 = If the problem persists please contact your system administrator. +error.newpassword.mismatch = Your new passwords do not match each other. +error.oldpassword.mismatch = Your old password is not correct. +heading.password.change.screen = Change password +label.password.old.password = Old password +label.password.new.password = New password +label.password.confirm.new.password = Confirm new password +heading.password.changed.screen = Password changed +msg.password.changed = Your password has been changed. +error.login = Sorry, that username or password is not known. Please try again. +button.login = Login +label.user.guide = [HELP] +msg.loading = Loading... +msg.LAMS.version = Version +msg.LAMS.copyright.short = 2002 onwards LAMS Foundation. +button.save = Save +button.cancel = Cancel +no.such.learningdesign.exist = No Learning Design with learning_design_id of:{0} exists. +no.such.user.exist = No such User with a user_id of: {0} exists. +no.such.workspace.exist = No such WorkspaceFolder with workspace_folder_id of:{0} exists. +delete.resource.error = Cannot delete the resource: {0} +delete.lesson.error = LAMS does not support deleting a lesson via the workspace interface. +delete.folder.error = Cannot delete this folder as it is the Root folder. +delete.learningdesign.error = Cannot delete design with learning_design_id of : {0} as it is READ ONLY. +folder.delete = Folder deleted:{0} +copy.resource.error = Cannot copy the resource:{0} +copy.no.support = LAMS does not support copying a file via the workspace interface. +unable.copy = Unable to copy learning design due to an error{0}. +no.such.user = No such user with a userID of {0} exists. +no.such.workspace = No such workspaceFolder with a workspace_folder_id of {0} exists. +learningdesign.delete = Learning design deleted:{0} +learningdesign.readonly = Cannot delete design with learning_design_id of:{0} as it is READ ONLY. +move.resource.error = Cannot move the resource:{0} +unsupport.move = LAMS does not support moving a file via the workspace interface. +creating.workspace.folder.error = Exception occured while creating workspaceFolderContent:{0}. +resource.already.exist = The resource {0} already exists in the repository: {1}. +no.such.content = No such content with versionID of {0} found in repository {1}. +content.delete.success = Content successfully deleted. +rename.resource.error = Cannot rename the resource: {0} +rename.resource.unspport = LAMS does not support renaming a file via the workspace interface. +folder.already.exist = A folder with given name ''{0}'' already exists. +organisations = Courses +folders = Folders +title.lams = LAMS +title.login.window = Login - LAMS :: Learning Activity Management System +title.system.admin.window = System Admin:: LAMS +msg.loading.system.admin.window = Loading +title.admin.window = Admin:: LAMS +msg.loading.admin.window = Loading Administration Environment. +msg.loading.add.lesson.window = Loading Add Lesson Wizard. +title.monitor.lesson.window = Monitor Lesson:: LAMS +msg.loading.monitor.lesson.window = Loading Lesson Monitoring Environment. +title.learner.window = Learner:: LAMS +msg.loading.learner.window = Loading Learner Environment. +title.error.window = LAMS :: Error +authoring.msg.save.success = Congratulations, your content saved successfully! +label.authoring.close = Close +label.authoring.re.edit = Re-edit +index.welcome = Welcome +index.logout = Logout +index.refresh = Refresh +index.myprofile = Profile +index.sysadmin = Sys Admin +index.courseman = Course Mgt +index.author = Author +index.classman = Manage Subcourses +index.addlesson = Add Lesson +index.monitor = Monitor +index.dummymonitor = Dummy Monitor +title.import.result = Import tool content result +title.import = Import tool content +title.import.instruction = Please choose LAMS sequence to import. +title.export.loading = Export tool content loading +label.ld.zip.file = Learning design import file +msg.import.success = Learning design and activities imported successfully. +msg.import.ld.success = Learning design imported successfully. +msg.import.tool.error.prefix = But there are some tool(s) imports that failed +msg.import.failed = Learning design import failed +msg.export.loading = Learning design download will start automatically in seconds, please wait... +msg.export.success = Learning design and activities export successfully. +msg.export.ld.success = Learning design export successfully. +msg.export.tool.error.prefix = But there are some tool(s) exported failed +msg.export.failed = Learning design export failed +msg.reason.is = The reason is +button.close = Close +button.import = Import +msg.LAMS.copyright.statement.1 = LAMS™ © 2002 onwards LAMS Foundation +msg.LAMS.copyright.statement.2 = LAMS is a trademark of LAMS Foundation (http://lamsfoundation.org). +msg.LAMS.copyright.statement.3 = This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. +title.export = Export tool content +error.system.error = An error has occurred. Please start again. Reason for error: {0} +msg.hide.detail = Hide detail +msg.show.detail = Show detail +msg.no.more.detail = No more detail +404.title = Page not found +404.message = The page you requested was not found. +403.title = Your current role does not allow you to view this page. Please contact your system administrator if you believe you should have access to this page. +msg.import.failed.unknown.reason = No error message available. +msg.import.file.not.found = Selected file has not been uploaded by your browser. Please try again. +title.profile.edit.screen = Edit profile +label.name = Name +label.title = Title +label.first_name = First name +label.last_name = Last name +label.address_line_1 = Address 1 +label.address_line_2 = Address 2 +label.address_line_3 = Address 3 +label.city = City +label.state = State +label.country = Country +label.day_phone = Work phone +label.evening_phone = Home phone +label.mobile_phone = Mobile +label.fax = Fax +label.email = Email +label.language = Language +title.password.change.screen = Change password +msg.groups.empty = No groups +label.postcode = Postcode +label.portrait.current = Current Portrait +label.portrait.upload = Upload +msg.portrait.none = No portrait uploaded +title.portrait.change.screen = Portrait +title.change.portrait.window = LAMS :: Change portrait +error.portrait.not.image = The file is not an image (PNG, GIF, JPG, WBMP and BMP formats allowed). +msg.portrait.resized = The image formats allowed are: PNG, GIF, JPG, WBMP and BMP. +label.workspace.root_folder = My workspace +msg.design.not.saved = Your design is not saved, any changes you have made since you last saved will be lost. +error.firstname.required = First name is required. +error.lastname.required = Last name is required. +error.email.required = Email address is required. +error.valid.email.required = Valid email address is required. +message.lesson.not.started.cannot.participate = This lesson has not been started. You cannot participate in the lesson until it is started. +index.mycourses = Courses +title.export.choose.format = Choose export content format +msg.export.choose.format.instruction = Please choose format which you want to export +msg.export.choose.format.lams = LAMS format +button.export = Export +label.open.lesson = Open Lesson +label.msg.status = Status: {0} +msg.status.not.stated = This lesson has not been started so you cannot access it. +msg.status.disabled = This lesson is disabled so you cannot access it. +msg.status.finished = This lesson has been finished or archived. +msg.status.removed = This lesson has been removed. +msg.browser.compat = Your browser does not support features required by LAMS. Please upgrade your browser. +label.disabled = Disabled +label.archived = Archived +audit.user.password.change = Password changed for: {0} +title.author.window = LAMS :: Author +title.all.my.lessons = All lessons +msg.no.lessons = No lessons +label.return.to.myprofile = Return to profile +label.help = Help? +label.completed = Completed! +label.enable.lesson.sorting = Enable lesson sorting +label.lesson.sorting.enabled = lesson sorting enabled +label.show.groups = Show Groups +label.forgot.password = Forgot your password? +button.select.importfile = Select file to import +label.yes = Yes +label.no = No +label.ok = OK +title.forgot.password = LAMS :: Forgot password +forgot.password.email.subject = LAMS server - Forgot password response +forgot.password.email.body = Click the link below and it will take you to a page where you can change your password. +error.support.email.not.set = Email could not be sent. The LAMS server has not been configured to handle emails. Please contact your system administrator. +error.password.request.expired = This request for a new password has expired. Please click the "Forgot your Password" link again to make a new request. +label.forgot.password.instructions.1 = Please enter your user name or email below. An email will be sent to you shortly with a link that will allow you to change your password. You only need to enter one value. +label.forgot.password.instructions.2 = If you do not know your email address in LAMS, please contact your system administrator. +label.forgot.password.email = By email +label.forgot.password.username = By username +error.forgot.password.fields = Both fields are required. Please try again. +error.email.not.sent = Server failed to send email to recipient. Please contact your system administrator. +error.forgot.password.email = Please enter an email address. +error.forgot.password.username = Please enter a username. +button.select.another.importfile = Select another file to import +error.forgot.password.incorrect.key = The request key is incorrect or has already been used. Please click the "Forgot your Password" link again to make a new request. +lessonsearch.title = Search learners in lesson +lessonsearch.instuctions = Please enter the login, first or last name of the learner. +lessonsearch.results = Lessons in which ''''{0}'''' has been found +index.searchlesson = Learner Search +index.searchlesson.tooltip = Search learners across lessons +lessonsearch.noresults = No Lessons found +error.multiple.emails = There are multiple users in LAMS with the given email. Email could not be sent. Please try again using your username, or contact your system administrator. +public.folder = Public Folder +index.coursegradebook = Course Gradebook +index.coursegradebook.tooltip = Open course-wide Gradebook monitoring page +index.coursegradebook.learner = Gradebook +index.coursegradebookmonitor = Mark +index.moreActions = More Options +label.required = Required +label.timezone.title = Time zone +email.to = To +email.subject = Subject +email.send = Send +email.compose.mail = Compose email +index.coursegradebook.subgroup = Subcourse Gradebook +error.finish.date.passed = The time allocated for this lesson has expired. You cannot access it anymore. Contact the instructor for assistance. +index.emailnotifications = Notifications +index.emailnotifications.tooltip = Email notifications +label.portrait.please.wait = Please wait +label.portrait.take.snapshot.from.webcamera = Webcam +label.portrait.configure = Configure +label.portrait.take.snapshot = Take pic +label.portrait.do.you.like.results = Is this good? +label.portrait.yes.set.it.as.portrait = Set as portrait +label.portrait.no.take.another.one = Take another one +error.edit.disabled = Profile editing is disabled. +message.profile.partially.edited = Profile has only been partially updated due to server configuration. +message.partial.edit.only = Only contact fields are editable due to server configuration. +error.password.empty = New password cannot be empty. +label.portrait.create.new.portrait = Select an image to upload or use your computer's webcam to create your portrait. +message.preceding.lessons.not.finished.cannot.participate = Preceding lessons have not been finished. You cannot participate in the lesson until this condition is met. +index.conditions = Conditions +index.conditions.tooltip = Conditions to participate in this lesson +index.conditions.flag.tooltip = Participation in the lesson is conditional +label.conditions.box.title = Lesson "{0}" will only be available after these lesson(s) are completed: +label.conditions.box.no.dependency = There are no dependencies for this lesson. +label.conditions.box.add.dependency = Select lesson that will need to be completed first: +label.conditions.box.remove.dependency = Remove lesson dependency +label.conditions.box.finish.global.date = Lesson finishes for everyone after {0} days from its start {1} +label.conditions.box.finish.individual.date = Lesson finishes after {0} days after user started participating +label.conditions.box.finish.no.date = Lesson does not have a fixed number days to finish +label.set = Set +error.conditions.box.finish.date = Error while setting lesson finish date: {0} +advanced.tab.form.time.limits.label = Time limits +advanced.tab.form.enter.number.days.label = Enter number days +advanced.tab.form.individual.not.entire.group.label = Individual and not for the entire group +label.start.lesson = Start lesson +success.msg.1 = You have successfully registered an account with LAMS. +success.login = Login now +success.errors = Had trouble sending email. Error was +login.username = Username +login.password = Password +login.course.key = Course key +login.submit = Submit +signup.username = Username +signup.password = Password +signup.confirm.password = Confirm password +signup.first.name = First name +signup.last.name = Last name +signup.email = Email +signup.confirm.email = Confirm email +signup.course.key = Course key +signup.submit = Submit +title.lams.signup = LAMS Signup +error.username.blank = Username cannot be blank +error.username.exists = Username is taken +error.first.name.blank = First name cannot be blank +error.last.name.blank = Last name cannot be blank +error.password.blank = Password cannot be blank +error.passwords.unequal = Passwords did not match +error.email.blank = Email cannot be blank +error.emails.unequal = Email addresses did not match +error.email.invalid.format = Email format is invalid +error.course.key.invalid = This course key is incorrect. Please try again or contact your course administrator for the correct key +error.login.or.password.incorrect = Login or password is incorrect. If you have not previously signed up for LAMS, please sign up {0}here{1}. +register.if.you.want.to.signup = If you want to sign up to LAMS as a new user, please select "Sign up" tab. If you already have an account, please select "Login" one. +register.signup.to.lams = Sign up +register.login = Login +index.remove.lesson = Remove +index.remove.lesson.tooltip = Permanently remove this lesson +label.edit = Edit +label.lesson.name = Lesson name +label.instructions = Lesson instructions +label.cancel = Cancel +label.display.lesson.design = Display learning design image? +index.remove.lesson.confirm1 = You are about to remove this lesson. Are you sure? +index.remove.lesson.confirm2 = Once you remove this lesson you CANNOT bring it back. Are you positive that you want to remove this lesson? +label.questions.choice.type.mc = Multiple Choice +label.questions.choice.type.tf = True-False +label.questions.choice.type.mt = Matching +label.questions.choice.type.mr = Multiple response +label.questions.choice.type.fb = Fill-in-Blank +label.questions.choice.type.es = Essay +label.questions.choice.type.unknown = Unknown +error.lesson.not.accessible.for.learners = Sorry, this lesson is now disabled/archived. Contact your instructor for further details. +button.add.now = Add now +label.tab.lesson = Lesson +label.tab.class = Class +label.tab.advanced = Advanced +label.tab.conditions = Conditions +label.tab.lesson.title = Select the sequence to add a lesson, and click on Add now +label.tab.class.title = Use drag n' drop to select or unselect monitors and learners +label.tab.lesson.name = Lesson name: +label.tab.lesson.size.full = (show full size) +label.tab.lesson.size.fit = (fit to window) +label.tab.lesson.sequence.folder = Run sequences +error.tab.lesson.sequence = A valid sequence must be selected +label.tab.class.monitors.unselected = Monitors unselected +label.tab.class.monitors.selected = Monitors selected +label.tab.class.learners.unselected = Learners unselected +label.tab.class.learners.selected = Learners selected +error.tab.class.learners = There must be at least 1 learner selected +error.tab.class.monitors = There must be at least 1 monitor selected +label.tab.advanced.details = Details +label.tab.advanced.intro.enable = Enable lesson intro +label.tab.advanced.intro.description = Description: +label.tab.advanced.intro.image = Display design image +label.tab.advanced.section.advanced = Advanced options +label.tab.advanced.field.monitor = Start in Monitor +label.tab.advanced.field.liveedit = Enable Live Edit +label.tab.advanced.field.notification = Enable lesson notifications +label.tab.advanced.field.presence = Allow learners to see who is online +label.tab.advanced.field.im = Enable Instant Messaging +label.tab.advanced.field.split = Split learners into separate copies of this lesson +label.tab.advanced.field.split.number = No. learners per lesson +label.tab.advanced.field.scheduling = Enable scheduling +label.tab.advanced.split.desc = [0] instances of this lesson will be created and approximately [1] will be allocated to each lesson +label.tab.conditions.dependencies = Dependencies +label.tab.conditions.dependencies.desc = Select a lesson that learners will need to complete before they can see the lesson you are about to create. +label.tab.conditions.timelimit = Time limitations +label.tab.conditions.timelimit.desc = Set the number of days the lesson will be available to learners. After this period the lesson will no longer be shown. If the time should count from the moment the learner starts the lesson, select the option for individual time limit. If you are scheduling the lesson end on the Advanced tab then you can only set an individual time limit. +label.tab.conditions.timelimit.days = Number days: +label.tab.conditions.timelimit.individual = Is this time limit for each individual? +label.tab.conditions.enable = Enable +label.questions.file.title = Choose IMS QTI file +label.questions.file.missing = Please select a ZIP or XML file with questions in IMS QTIformat. +label.questions.choice.title = Choose questions +label.questions.choice.select.all = Select all +label.questions.choice.missing = Please check at least one question. +index.single.activity.lesson.title = Add single activity lesson +index.single.activity.lesson.desc = or one-click activity: +label.disable.lesson.sorting = Disable lesson sorting +index.gradebook.course.title = Gradebook Course Monitor +index.gradebook.lesson.title = Gradebook Lesson Monitor +index.gradebook.learner.title = Course Gradebook Learner +index.conditions.title = Conditions to participate in this lesson +index.search.lesson.title = Search learners across lessons +index.orggroup = Course groupings +index.course.groups.title = Course groupings +label.course.groups.grouping.title = Groupings +label.course.groups.grouping.create = Create new +label.course.groups.grouping.remove.confirm = Are you sure you want to delete this grouping? +label.course.groups.name = Grouping name: +label.course.groups.name.blank = Grouping name can not be blank. +label.course.groups.edit.title = Please use drag n' drop to move learners between groups. +label.course.groups.viewonly.title = Course group view +label.course.groups.prefix = Group +label.course.groups.remove.confirm = Are you sure you want to delete this group? +label.course.groups.remove.empty.confirm = Some groups are new and empty. They will not be saved. Click OK to continue. +label.course.groups.add = Add a new group +label.course.groups.unassigned = Unassigned learners +label.course.groups.sort.tooltip = Sort learners +label.course.groups.remove.tooltip = Remove +label.course.groups.back = Groupings +label.course.groups.grouping.count.tooltip = Number of groups in this grouping +label.course.groups.grouping.use.confirm = Are you sure you want to use grouping "[0]"? Groups will be created for this lesson and learners assigned to them. +label.course.groups.locked = Some users in this group already used the grouping. The group is now locked: you can not remove it or move users to another group. +label.course.groups.locked.transfer = Are you sure you want to move these users to a locked group? You will not be allowed to move them to another group later. +label.tab.advanced.field.restart = Learners always start from the first activity +error.firstname.invalid.characters = First name contains invalid characters +error.lastname.invalid.characters = Last name contains invalid characters +error.username.invalid.characters = Username can only contain alphanumeric characters and no spaces. +error.lessonname.invalid.characters = Lesson name contains invalid characters +audit.admin.loginas = Sysadmin {0} has logged in as {1} +index.monitoring.title = Monitoring +heading.comments = Comments +label.hidden = Comment hidden +label.reply = Reply +label.hide = Hide +label.show = Show +label.post = Post +label.refresh = Refresh comments +error.cannot.redisplay.please.refresh = Your changes have been saved but cannot be redisplayed. Please select refresh to reload the comments. +error.please.refresh = An error has occurred. Your post may not have been saved. Please select refresh to start again +label.showhide.prompt = Show/Hide replies +message.complete.or.cancel.reply = Please complete or cancel the current reply before starting a new reply. +message.complete.or.cancel.edit = Please complete or cancel the current edit before starting a new reply. +label.show.more.messages = More comments +label.likes = Likes +label.comment.body.validation = The comment must be between 1 and 5000 character +label.edited = Edited +label.like = Like +label.dislike = Dislike +label.no.comments = No comments +label.newest.first = Newest first +label.top.comments = Top comments +label.add.sticky = Stick to top +label.remove.sticky = Remove sticky +label.private.notifications.title = Notifications +label.private.notifications.messages = Messages +label.private.notifications.read = Read +label.private.notifications.read.hint = Mark notification as read +label.private.notifications.read.all.hint = Mark all notifications as read +label.select.groups = Select groups +authoring.fla.course.groups.to.branches.match.dialog.title = Match Course Groups to Branching Groups +authoring.fla.branch.mapping.course.groups.header = Course groups +authoring.fla.branch.mapping.branching.groups.header = Branching groups +label.tab.advanced.field.force.restart = Learners always start from the first activity +label.tab.advanced.field.allow.restart = Learners can restart the lesson +label.verification.code = Verification code +error.verification.code = Sorry, entered verification code is incorrect. Please try again. +label.your.new.shared.secret = Your new shared secret: {0} +label.2FA.shared.secret = Two-factor authentication shared secret +label.2FA.login.panel = Two-factor authentication required +label.remove.org.favorite = Remove course from favourite list +label.mark.org.favorite = Mark course as favourite +label.email.send.me.a.copy = Send me a copy +label.password.max.length = must be less than 25 characters +label.password.min.length = must be at least {0} characters long +label.password.old.must.entered = Old password must be entered +label.password.symbols.allowed = Only these symbols are allowed +label.password.restrictions = Password must follow the restrictions shown above +label.password.must.contain = Password must contain +label.password.must.ucase = at least 1 upper case letter +label.password.must.number = at least 1 number +label.password.must.symbol = at least 1 symbol +label.create.lesson = Create new lesson +label.organisations = Select course with the lessons that needs to be export +label.lesson.id = Lesson ID +label.display.design.image = Display sequence image? +label.select.sequence = You must select a sequence before proceeding +label.choose.sequence = Choose sequence +label.author.sequence = Author new LAMS sequence +label.open.monitor = Open Monitor +label.your.progress = Your lesson progress +label.you.completed.this.lesson = You have completed this lesson. +label.total.activities.depend.on.path = Total activities depend on your learning path. +label.lesson.not.completed = Lesson is not yet completed. +label.you.completed.activities = You have completed {0} activities +error.cannot.load.thumbnail = Unable to load sequence thumbnail. +label.lesson.introduction.updated = Introduction updated +no.such.signup.page.exist = No such signup page exists +error.lockedout = Due to consecutive failed attempts, the account has been locked out temporarily. +error.email.internal = An internal error occured. Try again using your username or contact your system administrator. More information is provided in application logs. +label.theme = Theme +authoring.fla.default.group.title = Grouping +authoring.fla.default.group.prefix = Group +authoring.fla.default.branching.title = Branching +authoring.fla.default.branch.prefix = Branch +authoring.fla.default.optional.activity.title = Optional Activity +authoring.fla.support.activity.title = Support Activity +authoring.fla.gate.activity.label = STOP +authoring.fla.branching.start.suffix = start +authoring.fla.branching.end.suffix = end +authoring.fla.activity.dialog.title.suffix = Authoring +authoring.fla.remove.activity.confirm = Are you sure you want to remove the whole branching activity? +authoring.fla.branching.create.confirm = Transition from this activity already exists.\\nDo you want to create branching here? +authoring.fla.transition.to.exists.error = Transition to this activity already exists. +authoring.fla.circular.sequence.error = You are not allowed to have a circular sequence. +authoring.fla.activity.in.container.error = You can not add this type of activity to an optional/support activity. +authoring.fla.default.annotation.label.title = Label +authoring.fla.region.fit.button.tooltip = Fit +authoring.fla.new.folder.button = New +authoring.fla.copy.button = Copy +authoring.fla.paste.button = Paste +authoring.fla.delete.button = Delete +authoring.fla.rename.button = Rename +authoring.fla.open.button = Open +authoring.fla.save.button = Save +authoring.fla.import.button = Import +authoring.fla.folder = folder +authoring.fla.sequence = sequence +authoring.fla.sequence.not.valid = The sequence is not valid.
It needs to be corrected before it can be used in lessons. +authoring.fla.sequence.validation.issues = While saving the sequence there were following validation issues: +authoring.fla.save.successful = The design is valid and has been saved. +authoring.fla.liveedit.save.successful = Changes were successfully applied. +authoring.fla.navigate.away.confirm = Your design is not saved.\\nAny changes you made since you last saved will be lost. +authoring.fla.delete.node.confirm = Are you sure you want to delete this +authoring.fla.sequence.overwrite.confirm = Are you sure you want to overwrite the existing sequence? +authoring.fla.new.folder.title.prompt = Please enter the name for a new folder +authoring.fla.rename.title.prompt = Please enter the new name for +authoring.fla.save.sequence.title.prompt = Please enter a title for the sequence +authoring.fla.import.part.choose.prompt = Click on activities to choose them for import +authoring.fla.folder.not.selected.error = Please choose a folder +authoring.fla.title.validation.error = The title must not be blank and must not contain any of these characters < > ^ * @ % $ +authoring.fla.folder.exists.error = A folder with this name already exists. +authoring.fla.sequence.exists.error = A sequence with this name already exists. +authoring.fla.sequence.save.error = Error while saving sequence +authoring.fla.svg.save.error = Error while saving sequence thumbnail +authoring.fla.sequence.not.selected.error = Please choose a sequence +authoring.fla.sequence.load.error = Error while loading the sequence +authoring.fla.transition.from.exists.error = Transition from this activity already exists +authoring.fla.export.sequence.dialog.title = Sequence export +authoring.fla.activity.copy.title.prefix = Copy [0]of +authoring.fla.preview.lesson.default.title = Preview +authoring.fla.save.dialog.title = Save sequence +authoring.fla.open.dialog.title = Open sequence +authoring.fla.import.dialog.title = Import Learning Design +authoring.fla.import.part.dialog.title = Import activities +authoring.fla.run.sequences.folder = Run sequences +authoring.fla.arrange.confirm = There are annotations on the canvas.\\n\ They will be not arranged automatically, you will have to adjust them manually later.\\n\ Do you want to continue? +authoring.fla.clear.canvas.confirm = You have got unsaved changes. They will be lost. Do you want to continue? +authoring.fla.branching.start.place.prompt = Place the branching point +authoring.fla.branching.end.place.prompt = Place the converge point +authoring.fla.annotation.region.place.prompt = Click and hold to start drawing an annotation region +authoring.fla.annotation.label.place.prompt = Click to add an annotation label +authoring.fla.optional.activity.place.prompt = Click to add an optional activity container. +authoring.fla.support.activity.place.prompt = Click to add a support activity container. +authoring.fla.transition.place.prompt = Click on an activity +authoring.fla.paste.error = Sorry, you can not paste this type of activity +authoring.fla.preview.error = Error while initialising lesson for preview +authoring.fla.cross.branching.error = Cross-branching transitions are not allowed +authoring.fla.support.transition.error = Support activities can not be connected to any other activity +authoring.fla.end.match.error = : a branch that ends in this branching does not start in it +authoring.fla.ok.button = OK +authoring.fla.cancel.button = Cancel +authoring.fla.clear.all.button = Clear all +authoring.fla.refresh.button = Refresh +authoring.fla.remove.condition.button = Remove +authoring.fla.properties.dialog.title = Properties +authoring.fla.group.naming.dialog.title = Group Naming +authoring.fla.groups.to.branches.match.dialog_title = Match Groups to Branches +authoring.fla.branch.mapping.groups.header = Groups +authoring.fla.branch.mapping.group.header = Group +authoring.fla.conditions.dialog.title = Select Output Conditions for Input +authoring.fla.branch.mapping.conditions.header = Conditions +authoring.fla.branch.mapping.condition.header = Condition +authoring.fla.branch.mapping.gate.header = Gate +authoring.fla.branch.mapping.branches.header = Branches +authoring.fla.branch.mapping.branch.header = Branch +authoring.fla.gate.state.mapping.dialog.title = Map gate conditions +authoring.fla.branch.mapping.dialog.title = Match conditions to branches +authoring.fla.gate.state.open = open +authoring.fla.gate.state.closed = closed +authoring.fla.branch.mapping.default.branch.suffix = (default) +authoring.fla.complex.output.suffix = (user defined) +authoring.fla.range.output.suffix = (range) +authoring.fla.range.condition.description = Range [0] to [1] +authoring.fla.exact.condition.description = Exact value of +authoring.fla.less.condition.description = Less than or eq +authoring.fla.greater.condition.description = Greater than or eq +authoring.fla.default.range.condition.title.prefix = Untitled +authoring.fla.clear.all.confirm = There are conditions linked to an existing branch.\\nDo you wish to remove them? +authoring.fla.remove.condition.confirm = This condition is linked to an existing branch.\\nDo you wish to remove it? +authoring.fla.refresh.conditions.confirm = You are about to update your conditions for the selected output definition.\\n\ This will clear all links to existing branches.\\nDo you wish to continue? +authoring.fla.conditions.to.default.gate.state.confirm = All remaining conditions will be mapped to the selected gate\\'s closed state +authoring.fla.conditions.to.default.branch.confirm = All remaining conditions will be mapped to the default branch +authoring.fla.groups.to.default.branch.confirm = All remaining groups will be mapped to the default branch +authoring.fla.range.condition.add.start.error = The start value can not be within the range of an existing condition +authoring.fla.range.condition.add.end.error = The end value can not be within the range of an existing condition +authoring.fla.group.title.validation.erorr = Group name must not be blank and must not contain any of these characters < > ^ * @ % $ +authoring.fla.page.title = Authoring +authoring.fla.page.menu.new = New +authoring.fla.page.menu.open = Open +authoring.fla.page.menu.import = Import +authoring.fla.page.menu.import.part = Import part +authoring.fla.page.menu.save = Save +authoring.fla.page.menu.saveas = Save as +authoring.fla.page.menu.export.lams = Export +authoring.fla.page.menu.copy = Copy +authoring.fla.page.menu.paste = Paste +authoring.fla.page.menu.transition = Transition +authoring.fla.page.menu.optional = Optional +authoring.fla.page.menu.optional.activity = Activity +authoring.fla.page.menu.optional.support = Support +authoring.fla.page.menu.flow = Flow +authoring.fla.page.menu.flow.gate = Gate +authoring.fla.page.menu.flow.branch = Branch +authoring.fla.page.menu.group = Group +authoring.fla.page.menu.annotate = Annotate +authoring.fla.page.menu.annotate.label = Label +authoring.fla.page.menu.annotate.region = Region +authoring.fla.page.menu.arrange = Arrange +authoring.fla.page.menu.preview = Preview +authoring.fla.page.ld.title = Untitled +authoring.fla.page.ld.description = Description: +authoring.fla.page.ld.license = License: +authoring.fla.page.ld.license.none = No license currently selected. Please select one. +authoring.fla.page.ld.license.info = Additional license information: +authoring.fla.page.dialog.access = Recently used sequences +authoring.fla.page.dialog.ld.title = Title: +authoring.fla.page.dialog.mappings = Mappings +authoring.fla.page.prop.title = Title: +authoring.fla.page.prop.default = Default? +authoring.fla.page.prop.grouping.type = Grouping type: +authoring.fla.page.prop.grouping.type.random = Random +authoring.fla.page.prop.grouping.type.monitor = Choose in Monitor +authoring.fla.page.prop.grouping.type.learner = Learner's choice +authoring.fla.page.prop.groups.number = Number of groups: +authoring.fla.page.prop.groups.learners = Or learners per group: +authoring.fla.page.prop.groups.equal = Equal group sizes? +authoring.fla.page.prop.groups.view.learners = View learners before selection? +authoring.fla.page.prop.groups.name = Name Groups +authoring.fla.page.prop.gradebook = Gradebook output: +authoring.fla.page.prop.description = Description: +authoring.fla.page.prop.gate.type = Type: +authoring.fla.page.prop.gate.type.condition = Condition +authoring.fla.page.prop.gate.type.sync = Synchronise +authoring.fla.page.prop.gate.type.schedule = Schedule +authoring.fla.page.prop.gate.type.permission = Permission +authoring.fla.page.prop.input = Input (Tool): +authoring.fla.page.prop.gate.delay = Delay: +authoring.fla.page.prop.days = days +authoring.fla.page.prop.hours = hours +authoring.fla.page.prop.minutes = minutes +authoring.fla.page.prop.gate.activity.finish.based = Since learner finished previous activity? +authoring.fla.page.prop.conditions.create = Create conditions +authoring.fla.page.prop.gate.conditions.map = Map gate conditions +authoring.fla.page.prop.branching.type = Branching type: +authoring.fla.page.prop.branching.type.chose = Instructor's choice +authoring.fla.page.prop.branching.type.group = Group-based +authoring.fla.page.prop.branching.type.tool = Learner's output +authoring.fla.page.prop.branching.type.optional = Learner's choice +authoring.fla.page.prop.grouping = Grouping: +authoring.fla.page.prop.branching.conditions.match = Match conditions to branches +authoring.fla.page.prop.branching.groups.match = Match Groups to Branches +authoring.fla.page.prop.branching.sequences.min = Min sequences: +authoring.fla.page.prop.branching.sequences.max = Max sequences: +authoring.fla.page.prop.optional.activities.min = Min activities: +authoring.fla.page.prop.optional.activities.max = Max activities: +authoring.fla.page.prop.color = Color: +authoring.fla.page.dialog.cond.output.choose = [ Choose Output ] +authoring.fla.page.dialog.cond.options.choose = [ Options ] +authoring.fla.page.dialog.cond.greater = Greater than or equal to +authoring.fla.page.dialog.cond.less = Less than or equal to +authoring.fla.page.dialog.cond.range = Range +authoring.fla.page.dialog.cond.range.from = From: +authoring.fla.page.dialog.cond.range.to = To: +authoring.fla.page.dialog.cond.add = Add +authoring.fla.page.dialog.cond.name = Name: +authoring.fla.page.dialog.cond.list.name = Name +authoring.fla.page.dialog.cond.list.condition = Condition +authoring.fla.page.download.image = Click here to download the image. +authoring.fla.page.download.wait = Please wait for the download. +authoring.fla.page.download.close = Close the dialog when the download is finished. +authoring.fla.page.svg.generator.title = SVG Generator +authoring.fla.tool.groups.all = All +authoring.fla.liveedit.cancel.confirm = Do you want to cancel changes made in Live Edit? +authoring.fla.liveedit.readonly.activity.error = The activity can not be modified. It is read-only. +authoring.fla.liveedit.readonly.move.parent.error = The activity can not be moved outside its parent. It is read-only. +authoring.fla.liveedit.readonly.remove.activity.error = The activity can not be removed. It is read-only. +authoring.fla.liveedit.readonly.remove.parent.error = The activity can not be removed. Its parent activity is read-only. +authoring.fla.liveedit.readonly.remove.child.error = The activity can not be removed. It has read-only child activities. +authoring.fla.liveedit.readonly.remove.transition.error = The transition can not be removed. It is read-only. +ckeditor.math.math = Math +ckeditor.math.functions = Functions +ckeditor.math.greek = Greek +ckeditor.math.matrix = Matrix +ckeditor.math.symbols = Symbols +ckeditor.math.arrows = Arrows +ckeditor.math.accents = Accents +ckeditor.math.formatting = Formatting +authoring.fla.cut.button = Cut +authoring.fla.modify.error = You cannot modify this resource +authoring.fla.folder.move.to.child.error = Cannot move a folder into its child +label.password.must.lcase = at least 1 lower case letter +label.timezone.warning = The timezone set in your profile does not match timezone on your computer. The times shown will be for the timezone set in your profile. +authoring.fla.folder.can.not.save.error = You cannot save in this folder +authoring.fla.boolean.output.suffix = (boolean: 1 or 0) +lessons = Lessons +label.tour = Tour +tour.intro.title = LAMS Tour +tour.intro.content = This short tour will show you the features of the main LAMS screen. You can stop the tour at any time by clicking End Tour, and restart it again by clicking on the Tour button. +tour.course.reveal.content = Click here to reveal or hide your courses. +tour.courses.content = Click on a course to make it the current course. +tour.favorites.content = Your favourite courses will appear at the top of the list. +tour.lessons.content = Lessons will appear here for the current course. +tour.notification.content = Review the notifications that you have received about your lessons. +tour.authoring.content = Create or modify the learning designs used for lessons. +tour.user.profile.content = Update your personal settings. +tour.course.name.title = Course Name +tour.course.name.content = Current course name. Click on the star to add this course to your favourites in the course list. +tour.add.lesson.content = Create a new lesson for this course using this button, or a lesson to a course subgroup using the Add Lesson button next to the subgroup name. +tour.add.single.activity.lesson.content = Use the down arrow to select an activity and then create a lesson with just this single activity. +tour.course.gradebook.content = View your marks for this course. +tour.more.actions.content = General options for managing this course such as notifications, subgroups, gradebook. The contents of this menu will vary depending on your responsibilities. +tour.lesson.monitoring.title = Lesson Monitoring +tour.lesson.monitoring.content = The Monitoring screen shows you where the learners are in the lesson their contributions. +tour.lesson.notifications.title = Lesson Notifications +tour.lesson.notifications.content = Send email notifications to learners. +tour.lesson.gradebook.title = Lesson Gradebook +tour.lesson.gradebook.content = Review learners\' marks and the length of time taken in the lesson. +tour.lesson.conditions.title = Lesson Conditions +tour.lesson.conditions.content = Set up conditions for starting or ending the lesson. +tour.lesson.remove.title = Remove Lesson +tour.lesson.remove.content = Remove the lesson completely. This is permanent - it cannot be undone. +tour.end.title = End +tour.end.content = Thank you for taking the tour. To restart the tour, click the Tour button again. +errors.maxfilesize = Uploaded file exceeded maximum size: {0} +error.attachment.executable = Uploaded file is executable +label.upload.info = Uploaded file must not be executable and not exceed size of {0} +label.file = File +authoring.fla.page.prop.size = Size: +authoring.fla.conditions.mapping.broken = Conditions in the activity were changed. Please review following activities as they referred the modified conditions: +authoring.fla.activity.unnamed.description = unnamed +authoring.fla.activity.gate.description = gate +authoring.fla.activity.branching.description = branching +tour.prev = Prev +tour.next = Next +tour.end.tour = End +label.search.for.courses = Search for courses +label.save.as.course.grouping = Save as a Course Grouping +label.enter.course.grouping.name = Please enter name for the new course grouping +label.course.groups.name.not.unique = Course grouping with such name already exists. Please enter another one. +label.save.as.course.grouping.hint = You can save the groups as "Course groupings" so it can be used in other lessons as well. If the groups are just specifically for this lesson, you might not want to do this. Otherwise, click the button to give them a name and reuse them later. +label.advanced.settings = Advanced settings +audit.delete.portrait = Portrait for user {0} {1}({2}) deleted. Portrait Id was {3}. +authoring.fla.weights.menu = Weights +authoring.fla.weights.title = Weights on activity outputs +authoring.fla.weights.activity = Activity +authoring.fla.weights.output = Output +authoring.fla.weights.weight = Weight +authoring.fla.weights.sum = Sum +authoring.fla.weights.sum.error = Output weights do not sum up to 100%. Adjust them in Weights dialog. +label.tab.advanced.field.gradebook.complete = Display activity scores on completion +index.kumalive = Kumalive +index.kumalive.tooltip = Enter a live lesson +index.kumalive.enter.learner = Enter as a learner +index.kumalive.report = Reports +index.kumalive.rubric = Rubrics management +label.import.groups.from.template = Import groups from template +label.import.groups.from.template.description = Download the template spreadsheet to create your groups using all the present learners in this lesson/course. Once you upload the file, the groups will be automatically created according to the spreadsheet. +label.download.template = Download Template +label.upload.group.spreadsheet = Upload Finished Spreadsheet +error.file.required = Grouped Spreadsheet Required +error.file.wrong.format = Grouped Spreadsheet in the wrong format. Please upload a file based on the given template. +label.import.successful = Group Import successful. {0} learners allocated to groups, {1} learners skipped. +label.import.warning.replace.groups = Importing this file will replace the existing groups. Do you want to import this file? +filename.create.grouping.template = create-grouping-template +spreadsheet.column.login = Login +spreadsheet.column.firstname = First Name +spreadsheet.column.lastname = Last Name +spreadsheet.column.groupname = Group Name +error.groups.upload.locked = Cannot update groups as the groups are now in use. +error.branching.upload.must.use.existing.groups = Cannot update branching. Must use the existing names: {0}. +label.print = Print +authoring.tbl.desc.peer.review = These are the criteria for which the learners will rate each other using a 5 star rating. These fields are optional and no Peer Review will be created if they are left blank. +authoring.section.peerreview = Peer Review +authoring.label.peerrevice.criteria.num = Rating Criteria {0} +authoring.label.peerrevice.allow.comments = Allow learners to comment on other learners +authoring.label.peerrevice.min.words.in.comments = Minimum number of words in a comment +authoring.create.criteria = Create Criteria +audit.design.created = Learning design "{0}" ({1}) created by {2} ({3}) +authoring.fla.save.successful.check.grouping = Your design is valid and has been saved.\\nIf this is a TBL sequence, you may want to make following activities grouped: +authoring.fla.weights.none = No activities with weightable gradebook output +audit.live.edit.start = Live Edit of Learning Design "{0}" ({1}) for Lesson ({2}) started by {3} ({4}) +audit.live.edit.end = Live Edit of Learning Design "{0}" ({1}) for Lesson ({2}) completed by {3} ({4}) +label.post.anonomously = Post anonymously +label.anonymous = Anonymous +label.anonymous.tooltip = Turn on "Post anonymously" to hide your name from other learners. Teachers will still be able to see your name. +authoring.fla.page.ld.title.desc = Click to display sequence details +label.start = Start: +label.end = End: +error.lesson.with.scheduled.end.only.have.individual.limits = Lessons with a scheduled end date can only have individual time limits, not a lesson time limit. +error.lesson.end.date.must.be.after.start.date = Scheduled end date must be after the start date. +label.policies.title = Policies +label.agree.to.policies.before.proceeding = Please agree to all the policies before proceeding +label.consent.required = Consent is required +label.agree.to.policy = I agree to the policy +label.policy.name = Policy name +label.policy.type = Policy type +label.policy.type.site = Site policy +label.policy.type.privacy = Privacy policy +label.policy.type.third.party = Third party policy +label.policy.type.other = Other policy +label.summary = Summary +label.full.policy = Full policy +label.consent = Consent +label.policies.consents = Policies and consents +label.version = Version +label.consented = Consented? +label.consented.on = Consented on +label.policy.details = Policy details +authoring.fla.page.prop.gradebook.none = No score +label.select.country = Select a country +error.country.required = Country is required +error.cannot.login.as.with.not.allow.direct.access = You cannot login as this user as they are an Integration Learner and 'Allow direct access to main LAMS page for Integration Learners' is turned off in the system configuration. +signup.email.verify.body.1 = Hi there, +signup.email.verify.body.2 = Please confirm your email address by clicking on the link below +signup.email.verify.body.3 = Regards, +signup.email.verify.body.4 = LAMS Signup System +signup.email.welcome.body.1 = Hi there, +signup.email.welcome.body.2 = You''ve successfully registered an account with username {0} on the LAMS server at {1}. +signup.email.welcome.body.3 = If you ever forget your password, you can reset it via this URL +signup.email.welcome.body.4 = Regards, +signup.email.welcome.body.5 = LAMS Signup System +authoring.fla.readonly.checkbox = read-only +authoring.fla.readonly.forbidden = This sequence is read-only. If you want to modify it, you can create its copy. +register.email.verify = A confirmation email will be sent before you are able to log in. +signup.email.verify.sent = A confirmation email has been sent to {0}
Check your email and follow the instructions. +authoring.enable.confidence.levels = Enable confidence levels +authoring.fla.page.menu.apply.changes = Apply changes +forgot.password.request.processed = If the email/username that you have provided exists, an email would be sent to the registered email address. +label.view = View +index.outcome.manage = Outcomes +index.outcome.manage.tooltip = Manage learning outcomes and scales +outcome.manage.title = Course outcomes +outcome.manage.remove = Remove outcome +outcome.manage.remove.confirm = Are you sure you want to remove this outcome? +outcome.manage.add = Add outcome +outcome.manage.edit = Edit outcome +outcome.manage.view = View outcome +outcome.manage.add.name = Name +outcome.manage.add.code = Code +outcome.manage.add.description = Description +outcome.manage.add.global = Global +outcome.manage.add.scale = Scale +outcome.manage.add.save = Save +outcome.manage.scope = Scope +outcome.manage.scope.global = global +outcome.manage.scope.course = course +outcome.manage.add.error = Error while saving an outcome +outcome.manage.add.error.name.blank = Name can not be blank +outcome.manage.add.error.code.blank = Code can not be blank +outcome.manage.add.error.scale.choose = You have to choose a scale +scale.title = Scales +scale.manage = Manage scales +scale.manage.add = Add scale +scale.manage.edit = Edit scale +scale.manage.view = View scale +scale.manage.title = Course scales +scale.manage.remove = Remove scale +scale.manage.remove.scale = Error while removing a scale. +scale.manage.remove.confirm = Are you sure you want to remove this scale? +scale.manage.add.value = Values +scale.manage.add.value.info = Enter comma separated values in increasing order of value. For example, an A,B,C,D scale must be entered as D,C,B,A. +scale.manage.add.value.error.blank = A value must not be blank +scale.manage.add.error = Error while saving an outcome scale +outcome.authoring.title = Learning outcomes +outcome.authoring.input = Search and select by outcome name or code +outcome.authoring.existing = Added outcomes +outcome.authoring.existing.none = none +outcome.export.date = Exported on: +outcome.export = Export +outcome.import = Import +outcome.import.error = Error while importing outcomes or scales. Check logs. +authoring.msg.close.cancel.save = Do you want to close this window without saving? +authoring.msg.list.cancel.save = Do you want to return to the template list without saving? +authoring.fla.page.menu.new.template = Use Template +authoring.template.list.introduction = Select a template from the list to see more details about the design that will be created. You can the proceed to create the design or return back to this list. +authoring.learning.design.templates = Learning Design Templates +authoring.template.successful = Your design has been saved as {0}. +authoring.label.sequence.title = Name +authoring.error.question.num = RAT Questions: Question {0} may not be blank +authoring.error.question.correct.num = RAT Questions: One of the answers for Question {0} needs to be correct. +authoring.description.application.exercise = Application Exercise (These question(s) will be shown during the analysis phase in the sequence.) +authoring.label.grouping = Teams +authoring.label.grouping.learners.choice = Learner's Choice +authoring.label.grouping.teachers.choice = Teacher's Choice +authoring.label.grouping.random.allocation = Random Allocation +authoring.label.numgroups = Number of teams: +authoring.error.numgroups = Number of teams must be 1 to 99. +authoring.label.numlearners = Number of learners: +authoring.error.numlearners = Number of learners must be 1 to 99. +authoring.error.group.data = Team settings are not correct. +authoring.section.lessondetails = Lesson Details +authoring.section.questions = RAT Questions +authoring.section.applicationexercise = Application Exercises +authoring.section.introduction = Introduction +authoring.create.question = Add Question +authoring.create.essay.question = Add Essay Question +authoring.create.mc.question = Add Multiple Choice Question +authoring.label.application.exercise.num = Application Exercise {0} +authoring.error.application.exercise.num = Application Exercises: Application Exercise {0} may not be blank. +authoring.label.question.num = Question {0} +authoring.label.option.num = Option {0} +authoring.error.option = Option may not be blank +authoring.label.correct.question = Correct? +authoring.create.option = Add Option +button.next = Next +button.previous = Previous +button.return.to.template.list = Back to Templates +authoring.error.content.id = Content ID is missing +authoring.error.question.must.have.answer.num = RAT Questions: Question {0} must have at least one answer. +authoring.error.application.exercise.must.have.answer.num = Application Exercises: {0} Question {1} must have at least one answer. +authoring.error.application.exercise.must.have.100.percent = Application Exercises: {0} Question {1} must have at least one answer worth 100%. +authoring.error.application.exercise.not.blank.and.grade = Application Exercises: {0} Question {1} may not be blank and must have a grade. +authoring.label.grade = Grade +authoring.label.none = None +authoring.tbl.template.title = Team Based Learning +authoring.tbl.template.description = Individual and Team Readiness Assurance Tests followed by Application Exercises. +authoring.tbl.desc.question = Adding RAT questions. +authoring.tbl.desc.ae = Adding Application Exercises (AEs). You can create multiple AEs if needed. +outcome.manage.remove.error.in.use = The outcome is mapped to some items. It can not be removed. +scale.manage.remove.error.in.use = The scale is used in some outcomes. It can not be removed. +outcome.authoring.remove.confirm = Are you sure you want to remove this learning outcome? +signup.email.welcome.subject = LAMS: account details +authoring.error.application.exercise.question.must.not.be.blank.num = Application Exercise {0} Question {1} may not be blank. +authoring.error.application.exercise.needs.noticeboard.text = Application Exercises: {0} is missing the text for the noticeboard. +authoring.error.rat.not.blank = RAT Questions: There must be at least one question. +authoring.template.basic.import.qti = Import IMS QTI +authoring.tbl.use.noticeboard = Add Noticeboard after AE +authoring.create.application.exercise = Add new Application Exercise +authoring.tbl.enable.confidence.tooltip = Asks students in the iRAT how confident they are with their chosen answer. Then the confidence level for each student is displayed in the tRAT to all members of their team. +authoring.tbl.use.noticeboard.tooltip = After the AE, displays content to students as additional information or as a reflection on the AE topic. +authoring.tbl.delete.appex.prompt = Do you want to delete the Application Exercise {0}? +authoring.tbl.delete.mcq.prompt = Do you want to delete the RAT Question {0}? +authoring.application.exercise.allow.multiple.responses = Allow multiple responses +authoring.application.exercise.allow.multiple.responses.tooltip = When learners are allowed to select multiple answers the grade is the sum of the grade for all correct responses selected. +message.teacher.role.not.recognized = Please wait for a teacher to start the lesson. (You were logged in as a learner, as your current role does not conform LTI specification). +label.multiple.lessons = Multiple lessons +label.add.lessons.to.subgroups = Add lesson to all selected subcourses +label.marks = Marks +authoring.fla.grouping.detached.error = Activity "{0}" was grouped with a grouping activity that is missing or is not one of previous activities. Grouping was cleared. +authoring.fla.input.detached.error = Activity "{0}" had an input activity that is missing or is not one of previous activities. Input was cleared. +label.question.not.added = This question has already been added +label.questions.choice.collection = Choose a collection: +authoring.fla.branch.mapping.ordered.asc = Start with branches mapped to highest ordered answers +title.import.instruction.antivirus = An antivirus scan will be performed. It can take a while. +outcome.authoring.create.new = [create new] +index.qb.collections = Question Bank +label.answer.queue = Answer queue +label.drag.and.drop = drag and drop answer to tick or cross +label.correct = Correct +label.incorrect = Incorrect +label.answer.alternatives = Answer alternatives +label.close = Close +label.create.question = Create question +label.question.type.multiple.choice = Multiple choice +label.question.type.matching.pairs = Matching pairs +label.question.type.short.answer = Short answer +label.question.type.numerical = Numerical +label.question.type.true.false = True/False +label.question.type.essay = Essay +label.question.type.ordering = Ordering +label.question.type.mark.hedging = Mark hedging +label.search.question.bank = Search question bank +label.question.type = Type: +label.question.successfully.imported = Question successfully imported +label.import.qti = Import questions in IMS QTI format +label.export.qti = Export questions in IMS QTI format +label.import.xml = Import questions in XML format +label.export.xml = Export questions in XML format +msg.import.file.format = The import file must be .xml file exported from assessment tool and not exceed size of {0} +error.import.file.format = The import file is not an .xml file. +label.qb.stats.title = Question statistics +error.qb.permanent.remove = The question is in one collection only, so it would be permanently removed.\\nIt is not possible as the question is used in sequences. +label.qb.permanent.remove.confirm = The question is in one collection only. Are you sure that you want to remove it permanently? +label.qb.stats.question = Question +label.qb.stats.question.version = Version +label.qb.stats.question.title = Title +label.qb.stats.question.description = Description +label.qb.stats.question.feedback = Feedback +label.qb.stats.question.mark = Mark +label.qb.stats.option.title = Title +label.qb.stats.option.correct = Correct? +label.qb.stats.option.average = Average selection
(as first choice) +label.qb.stats.chart = Average selection chart +label.qb.stats.burning.questions = Burning questions +label.qb.stats.burning.questions.none = This question does not have any burning questions +label.qb.stats.burning.questions.likes = Likes +label.qb.stats.usage = Usage in active lessons +label.qb.stats.usage.none = This question is not used in any lesson +label.qb.stats.usage.course = Course +label.qb.stats.usage.lesson = Lesson +label.qb.stats.usage.activity = Activity +label.qb.stats.usage.type = Tool type +label.qb.stats.usage.participant.count = Test participant count +label.qb.stats.usage.difficulty = Difficulty index +label.qb.stats.usage.discrimination = Discrimination index +label.qb.stats.usage.biserial = Point biserial +label.qb.stats.versions = Previous versions +label.qb.stats.versions.none = This question does not have any previous versions +label.qb.stats.versions.created = Created date +label.qb.stats.versions.created.ago = Created ago +label.qb.stats.collections = Collections +label.qb.stats.collections.transfer = Transfer questions to +label.qb.stats.collections.transfer.add = Add +label.qb.stats.collections.transfer.copy = Copy +label.qb.stats.collections.existing = Existing collections +label.qb.stats.collections.remove = Remove +label.qb.stats.outcomes = Learning outcomes +label.qb.stats.outcomes.none = This question does not have any learning outcomes +label.qb.stats.outcomes.existing = Existing outcomes +label.qb.collection = Collection +label.qb.collection.grid.title = Questions +label.qb.collection.grid.id = ID +label.qb.collection.grid.name = Name +label.qb.collection.grid.outcomes = Learning Outcomes +label.qb.collection.grid.usage = Used in
lessons +label.qb.collection.grid.actions = Actions +label.qb.collection.grid.stats = Stats +label.qb.collection.grid.error = Error while loading grid with question collections +label.qb.collection.name.blank.error = Name must not be blank +label.qb.collection.name.duplicate.error = Collection with such name already exists +label.qb.collection.action.stats = Show stats +label.qb.collection.remove.confirm = Are you sure you want to remove "{0}" collection? +label.qb.collection.management = Collection management +label.qb.collection.private = Private collection +label.qb.collection.remove = Remove collection +label.qb.collection.xml = XML +label.qb.collection.qti = QTI +label.qb.collection.questions.none = There are no questions in this collection +label.qb.collection.share.title = Share collection with courses +label.qb.collection.shared = Shared +label.qb.collection.unshare = Unshare +label.qb.collection.share = Share +label.qb.collection.edit = Edit +error.form.validation.error = You have 1 error in a form. It has been highlighted +error.form.validation.errors = You have {0} errors in a form. They have been highlighted +label.authoring.choice.add.multiple.choice = Add multiple choice +label.authoring.choice.field.required = This field is required. +label.authoring.choice.enter.integer = Please enter an integer. +label.authoring.choice.enter.float = Please enter a floating point number. +label.authoring.choice.one.multiple.answers = One or multiple answers? +label.authoring.choice.one.answer = One answer only +label.authoring.choice.multiple.answers = Multiple answers allowed +label.authoring.choice.overall.feedback = Overall feedback +label.authoring.choice.feedback.on.correct = Feedback shown on any correct response +label.authoring.choice.feedback.on.partially.correct = Feedback shown on any partially correct response +label.authoring.choice.feedback.on.incorrect = Feedback shown on any incorrect response +label.authoring.choice.add.option = Add another answer +label.authoring.matching.pairs.matching.pairs = Matching pairs +label.authoring.matching.pairs.error.one.matching.pair = You should provide at least 1 matching pair. +label.authoring.matching.pairs.add.matching.pair = Add another +label.authoring.short.answer.no.case.unimportant = No, case is unimportant +label.authoring.short.answer.yes.case.must.match = Yes, case must match +label.authoring.short.answer.case.sensitivity = Case sensitivity +label.authoring.short.answer.add.answer = Add another answer +label.authoring.true.false.question = True/False question +label.authoring.true.false.correct.answer = Correct answer +label.authoring.true.false.feedback.on.true = Feedback for the response 'True'. +label.authoring.true.false.feedback.on.false = Feedback for the response 'False'. +label.authoring.numerical.question = Numerical question +label.authoring.numerical.units = Units +label.authoring.numerical.error.answer = You should provide at least one possible answer. +label.authoring.numerical.add.answer = Add another answer +label.authoring.numerical.add.unit = Add another unit +label.settings = Settings +label.enter.question.title = Question's title +label.enter.question.description = Question's description +label.authoring.answer.required = Answer required? +label.authoring.basic.default.question.grade = Default question grade +label.required.field = Required field +label.authoring.basic.allow.learners.rich.editor = Allow learners to use rich text editor +label.maximum.number.words = Maximum number of words +label.minimum.number.words = Minimum number of words +label.authoring.basic.general.feedback = General feedback +label.authoring.basic.shuffle.the.choices = Shuffle answers? +label.ask.for.hedging.justification = Ask for hedging justification? +label.autocomplete.as.student = Autocomplete (as student types answer autocomplete with stemming from answers) +label.authoring.basic.penalty.factor = Penalty factor +error.form.validation.hundred.score = One of the answers should have a grade of 100% so it is possible to get full marks for this question. +error.form.validation.positive.accepted.errors = All the accepted errors should be positive. +label.prefix.sequential.letters.for.each.answer = Prefix sequential letters for each answer +label.authoring.basic.option.question = Question +label.authoring.basic.option.grade = Grade +label.authoring.basic.option.feedback = Feedback +label.authoring.basic.option.accepted.error = Accepted error +label.authoring.basic.unit.unit = Unit +label.authoring.basic.unit.multiplier = Multiplier +label.authoring.true.false.false = False +label.authoring.true.false.true = True +label.authoring.basic.type.multiple.choice = Multiple choice +label.authoring.basic.type.matching.pairs = Matching pairs +label.authoring.basic.type.short.answer = Very short answers +label.authoring.basic.type.numerical = Numerical +label.authoring.basic.type.true.false = True/False +label.authoring.basic.type.essay = Essay +label.authoring.basic.type.ordering = Ordering +label.authoring.basic.type.mark.hedging = Mark hedging +label.incorrect.answer.nullifies.mark = Assigns full mark only when the correct answers are selected. +label.authoring.basic.option.answer = Answer +label.authoring.basic.delete = Delete +label.authoring.basic.none = None +error.positive.grade.required = One of the answers should have a positive grade +label.do.you.want.to.delete.answer = Do you want to delete this answer? +label.choose.word.document = Choose Word file +label.import.word = Import questions from Word document +label.qb.collection.word = Word +authoring.fla.page.prop.gate.type.password = Password +authoring.fla.page.prop.password = Password +label.question.bank = Question Bank +authoring.create.question.qb = From question bank... +label.qb.stats.options.title = Options +label.qb.stats.merge.title = Merge this question with... +label.qb.stats.merge.description = This will merge this question with the question UID you entered above. Before you do this, make sure you know what are you doing as once merging is performed this cannot be undone. +label.qb.stats.merge.question.uid = Question UID +label.qb.stats.merge.now = Merge now +label.qb.collection.name.prompt = New collection name +label.qb.collection.add = Add collection +label.qb.collection.public.name = Public questions +label.qb.collection.questions = questions +label.authoring.feeback.general = General Feedback +label.authoring.feeback.correct = Feedback on any correct response +label.authoring.feeback.partially.correct = Feedback on any partially correct response +label.authoring.feeback.incorrect = Feedback on any incorrect response - # Exported from the LAMS Community by Ernie Ghiglione on Fri Dec 28 00:41:13 CST 2018 - -#=================== labels for LAMS Central =================# - -label.username =Username -label.password =Password -error.authorisation =You are not authorised to do this. -heading.general.error =Error -error.general.1 =Sorry, there has been an error. -error.general.2 =There is a problem processing this request. Close the browser window and try again. -error.general.3 =If the problem persists please contact your system administrator. -error.newpassword.mismatch =Your new passwords do not match each other. -error.oldpassword.mismatch =Your old password is not correct. -heading.password.change.screen =Change password -label.password.old.password =Old password -label.password.new.password =New password -label.password.confirm.new.password =Confirm new password -heading.password.changed.screen =Password changed -msg.password.changed =Your password has been changed. -error.login =Sorry, that username or password is not known. Please try again. -button.login =Login -label.user.guide =[HELP] -msg.loading =Loading... -msg.LAMS.version =Version -msg.LAMS.copyright.short =2002 onwards LAMS Foundation. -button.save =Save -button.cancel =Cancel -no.such.learningdesign.exist =No Learning Design with learning_design_id of:{0} exists. -no.such.user.exist =No such User with a user_id of: {0} exists. -no.such.workspace.exist =No such WorkspaceFolder with workspace_folder_id of:{0} exists. -delete.resource.error =Cannot delete the resource: {0} -delete.lesson.error =LAMS does not support deleting a lesson via the workspace interface. -delete.folder.error =Cannot delete this folder as it is the Root folder. -delete.learningdesign.error =Cannot delete design with learning_design_id of : {0} as it is READ ONLY. -folder.delete =Folder deleted:{0} -copy.resource.error =Cannot copy the resource:{0} -copy.resource.error.value.miss =copyResource(Long resourceID,Integer targetFolderID, String resourceType, Integer userID) requires a value for resourceID, targetFolderID, resourceType and userID -copy.no.support =LAMS does not support copying a file via the workspace interface. -unable.copy =Unable to copy learning design due to an error{0}. -no.such.user =No such user with a userID of {0} exists. -no.such.workspace =No such workspaceFolder with a workspace_folder_id of {0} exists. -learningdesign.delete =Learning design deleted:{0} -learningdesign.readonly =Cannot delete design with learning_design_id of:{0} as it is READ ONLY. -move.resource.error =Cannot move the resource:{0} -unsupport.move =LAMS does not support moving a file via the workspace interface. -creating.workspace.folder.error =Exception occured while creating workspaceFolderContent:{0}. -resource.already.exist =The resource {0} already exists in the repository: {1}. -no.such.content =No such content with versionID of {0} found in repository {1}. -content.delete.success =Content successfully deleted. -rename.resource.error =Cannot rename the resource: {0} -rename.resource.unspport =LAMS does not support renaming a file via the workspace interface. -folder.already.exist =A folder with given name ''{0}'' already exists. -organisations =Courses -folders =Folders -title.lams =LAMS -title.login.window =Login - LAMS :: Learning Activity Management System -title.system.admin.window =System Admin:: LAMS -msg.loading.system.admin.window =Loading -title.admin.window =Admin:: LAMS -msg.loading.admin.window =Loading Administration Environment. -msg.loading.add.lesson.window =Loading Add Lesson Wizard. -title.monitor.lesson.window =Monitor Lesson:: LAMS -msg.loading.monitor.lesson.window =Loading Lesson Monitoring Environment. -title.learner.window =Learner:: LAMS -msg.loading.learner.window =Loading Learner Environment. -title.error.window =LAMS :: Error -authoring.msg.save.success =Congratulations, your content saved successfully! -label.authoring.close =Close -label.authoring.re.edit =Re-edit -index.welcome =Welcome -index.logout =Logout -index.refresh =Refresh -index.myprofile =Profile -index.sysadmin =Sys Admin -index.courseman =Course Mgt -index.author =Author -index.classman =Manage Subcourses -index.addlesson =Add Lesson -index.monitor =Monitor -index.dummymonitor =Dummy Monitor -title.import.result =Import tool content result -title.import =Import tool content -title.import.instruction =Please choose LAMS sequence to import. -title.export.loading =Export tool content loading -label.ld.zip.file =Learning design import file -msg.import.success =Learning design and activities imported successfully. -msg.import.ld.success =Learning design imported successfully. -msg.import.tool.error.prefix =But there are some tool(s) imports that failed -msg.import.failed =Learning design import failed -msg.export.loading =Learning design download will start automatically in seconds, please wait... -msg.export.success =Learning design and activities export successfully. -msg.export.ld.success =Learning design export successfully. -msg.export.tool.error.prefix =But there are some tool(s) exported failed -msg.export.failed =Learning design export failed -msg.reason.is =The reason is -button.close =Close -button.import =Import -msg.LAMS.copyright.statement.1 =LAMS\u2122 \u00a9 2002 onwards LAMS Foundation -msg.LAMS.copyright.statement.2 =LAMS is a trademark of LAMS Foundation (http://lamsfoundation.org). -msg.LAMS.copyright.statement.3 =This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. -title.export =Export tool content -error.system.error =An error has occurred. Please start again. Reason for error: {0} -msg.hide.detail =Hide detail -msg.show.detail =Show detail -msg.no.more.detail =No more detail -404.title =Page not found -404.message =The page you requested was not found. -403.title =Your current role does not allow you to view this page. Please contact your system administrator if you believe you should have access to this page. -msg.import.failed.unknown.reason =No error message available. -msg.import.file.not.found =Selected file has not been uploaded by your browser. Please try again. -title.profile.edit.screen =Edit profile -label.name =Name -label.title =Title -label.first_name =First name -label.last_name =Last name -label.address_line_1 =Address 1 -label.address_line_2 =Address 2 -label.address_line_3 =Address 3 -label.city =City -label.state =State -label.country =Country -label.day_phone =Work phone -label.evening_phone =Home phone -label.mobile_phone =Mobile -label.fax =Fax -label.email =Email -label.language =Language -title.password.change.screen =Change password -msg.groups.empty =No groups -label.postcode =Postcode -label.portrait.current =Current Portrait -label.portrait.upload =Upload -msg.portrait.none =No portrait uploaded -title.portrait.change.screen =Portrait -title.change.portrait.window =LAMS :: Change portrait -error.portrait.not.image =The file is not an image (PNG, GIF, JPG, WBMP and BMP formats allowed). -msg.portrait.resized =The image formats allowed are: PNG, GIF, JPG, WBMP and BMP. -label.workspace.root_folder =My workspace -msg.design.not.saved =Your design is not saved, any changes you have made since you last saved will be lost. -error.firstname.required =First name is required. -error.lastname.required =Last name is required. -error.email.required =Email address is required. -error.valid.email.required =Valid email address is required. -message.lesson.not.started.cannot.participate =This lesson has not been started. You cannot participate in the lesson until it is started. -index.mycourses =Courses -title.export.choose.format =Choose export content format -msg.export.choose.format.instruction =Please choose format which you want to export -msg.export.choose.format.lams =LAMS format -button.export =Export -label.open.lesson =Open Lesson -label.msg.status =Status: {0} -msg.status.not.stated =This lesson has not been started so you cannot access it. -msg.status.disabled =This lesson is disabled so you cannot access it. -msg.status.finished =This lesson has been finished or archived. -msg.status.removed =This lesson has been removed. -msg.browser.compat =Your browser does not support features required by LAMS. Please upgrade your browser. -label.disabled =Disabled -label.archived =Archived -audit.user.password.change =Password changed for: {0} -title.author.window =LAMS :: Author -title.all.my.lessons =All lessons -msg.no.lessons =No lessons -label.return.to.myprofile =Return to profile -label.help =Help? -label.completed =Completed! -label.enable.lesson.sorting =Enable lesson sorting -label.lesson.sorting.enabled =lesson sorting enabled -label.show.groups =Show Groups -label.forgot.password =Forgot your password? -button.select.importfile =Select file to import -label.yes =Yes -label.no =No -label.ok =OK -title.forgot.password =LAMS :: Forgot password -forgot.password.email.subject =LAMS server - Forgot password response -forgot.password.email.body =Click the link below and it will take you to a page where you can change your password. -error.support.email.not.set =Email could not be sent. The LAMS server has not been configured to handle emails. Please contact your system administrator. -error.password.request.expired =This request for a new password has expired. Please click the "Forgot your Password" link again to make a new request. -label.forgot.password.instructions.1 =Please enter your user name or email below. An email will be sent to you shortly with a link that will allow you to change your password. You only need to enter one value. -label.forgot.password.instructions.2 =If you do not know your email address in LAMS, please contact your system administrator. -label.forgot.password.email =By email -label.forgot.password.username =By username -error.forgot.password.fields =Both fields are required. Please try again. -error.email.not.sent =Server failed to send email to recipient. Please contact your system administrator. -error.forgot.password.email =Please enter an email address. -error.forgot.password.username =Please enter a username. -button.select.another.importfile =Select another file to import -error.forgot.password.incorrect.key =The request key is incorrect or has already been used. Please click the "Forgot your Password" link again to make a new request. -lessonsearch.title =Search learners in lesson -lessonsearch.instuctions =Please enter the login, first or last name of the learner. -lessonsearch.results =Lessons in which ''''{0}'''' has been found -index.searchlesson =Learner Search -index.searchlesson.tooltip =Search learners across lessons -lessonsearch.noresults =No Lessons found -error.multiple.emails =There are multiple users in LAMS with the given email. Email could not be sent. Please try again using your username, or contact your system administrator. -public.folder =Public Folder -index.coursegradebook =Course Gradebook -index.coursegradebook.tooltip =Open course-wide Gradebook monitoring page -index.coursegradebook.learner =Gradebook -index.coursegradebookmonitor =Mark -index.moreActions =More Options -label.required =Required -label.timezone.title =Time zone -email.to =To -email.subject =Subject -email.send =Send -email.compose.mail =Compose email -index.coursegradebook.subgroup =Subcourse Gradebook -error.finish.date.passed =The time allocated for this lesson has expired. You cannot access it anymore. Contact the instructor for assistance. -index.emailnotifications =Notifications -index.emailnotifications.tooltip =Email notifications -label.portrait.please.wait =Please wait -label.portrait.take.snapshot.from.webcamera =Webcam -label.portrait.configure =Configure -label.portrait.take.snapshot =Take pic -label.portrait.do.you.like.results =Is this good? -label.portrait.yes.set.it.as.portrait =Set as portrait -label.portrait.no.take.another.one =Take another one -error.edit.disabled =Profile editing is disabled. -message.profile.partially.edited =Profile has only been partially updated due to server configuration. -message.partial.edit.only =Only contact fields are editable due to server configuration. -error.password.empty =New password cannot be empty. -label.portrait.create.new.portrait =Select an image to upload or use your computer's webcam to create your portrait. -message.preceding.lessons.not.finished.cannot.participate =Preceding lessons have not been finished. You cannot participate in the lesson until this condition is met. -index.conditions =Conditions -index.conditions.tooltip =Conditions to participate in this lesson -index.conditions.flag.tooltip =Participation in the lesson is conditional -label.conditions.box.title =Lesson "{0}" will only be available after these lesson(s) are completed: -label.conditions.box.no.dependency =There are no dependencies for this lesson. -label.conditions.box.add.dependency =Select lesson that will need to be completed first: -label.conditions.box.remove.dependency =Remove lesson dependency -label.conditions.box.finish.global.date =Lesson finishes for everyone after {0} days from its start {1} -label.conditions.box.finish.individual.date =Lesson finishes after {0} days after user started participating -label.conditions.box.finish.no.date =Lesson does not have a fixed number days to finish -label.set =Set -error.conditions.box.finish.date =Error while setting lesson finish date: {0} -advanced.tab.form.time.limits.label =Time limits -advanced.tab.form.enter.number.days.label =Enter number days -advanced.tab.form.individual.not.entire.group.label =Individual and not for the entire group -label.start.lesson =Start lesson -success.msg.1 =You have successfully registered an account with LAMS. -success.login =Login now -success.errors =Had trouble sending email. Error was -login.username =Username -login.password =Password -login.course.key =Course key -login.submit =Submit -signup.username =Username -signup.password =Password -signup.confirm.password =Confirm password -signup.first.name =First name -signup.last.name =Last name -signup.email =Email -signup.confirm.email =Confirm email -signup.course.key =Course key -signup.submit =Submit -title.lams.signup =LAMS Signup -error.username.blank =Username cannot be blank -error.username.exists =Username is taken -error.first.name.blank =First name cannot be blank -error.last.name.blank =Last name cannot be blank -error.password.blank =Password cannot be blank -error.passwords.unequal =Passwords did not match -error.email.blank =Email cannot be blank -error.emails.unequal =Email addresses did not match -error.email.invalid.format =Email format is invalid -error.course.key.invalid =This course key is incorrect. Please try again or contact your course administrator for the correct key -error.login.or.password.incorrect =Login or password is incorrect. If you have not previously signed up for LAMS, please sign up {0}here{1}. -register.if.you.want.to.signup =If you want to sign up to LAMS as a new user, please select "Sign up" tab. If you already have an account, please select "Login" one. -register.signup.to.lams =Sign up -register.login =Login -index.remove.lesson =Remove -index.remove.lesson.tooltip =Permanently remove this lesson -label.edit =Edit -label.lesson.name =Lesson name -label.instructions =Lesson instructions -label.cancel =Cancel -label.display.lesson.design =Display learning design image? -index.remove.lesson.confirm1 =You are about to remove this lesson. Are you sure? -index.remove.lesson.confirm2 =Once you remove this lesson you CANNOT bring it back. Are you positive that you want to remove this lesson? -label.questions.choice.type.mc =Multiple Choice -label.questions.choice.type.tf =True-False -label.questions.choice.type.mt =Matching -label.questions.choice.type.mr =Multiple response -label.questions.choice.type.fb =Fill-in-Blank -label.questions.choice.type.es =Essay -label.questions.choice.type.unknown =Unknown -error.lesson.not.accessible.for.learners =Sorry, this lesson is now disabled/archived. Contact your instructor for further details. -button.add.now =Add now -label.tab.lesson =Lesson -label.tab.class =Class -label.tab.advanced =Advanced -label.tab.conditions =Conditions -label.tab.lesson.title =Select the sequence to add a lesson, and click on Add now -label.tab.class.title =Use drag n' drop to select or unselect monitors and learners -label.tab.lesson.name =Lesson name: -label.tab.lesson.size.full =(show full size) -label.tab.lesson.size.fit =(fit to window) -label.tab.lesson.sequence.folder =Run sequences -error.tab.lesson.sequence =A valid sequence must be selected -label.tab.class.monitors.unselected =Monitors unselected -label.tab.class.monitors.selected =Monitors selected -label.tab.class.learners.unselected =Learners unselected -label.tab.class.learners.selected =Learners selected -error.tab.class.learners =There must be at least 1 learner selected -error.tab.class.monitors =There must be at least 1 monitor selected -label.tab.advanced.details =Details -label.tab.advanced.intro.enable =Enable lesson intro -label.tab.advanced.intro.description =Description: -label.tab.advanced.intro.image =Display design image -label.tab.advanced.section.advanced =Advanced options -label.tab.advanced.field.monitor =Start in Monitor -label.tab.advanced.field.liveedit =Enable Live Edit -label.tab.advanced.field.notification =Enable lesson notifications -label.tab.advanced.field.presence =Allow learners to see who is online -label.tab.advanced.field.im =Enable Instant Messaging -label.tab.advanced.field.split =Split learners into separate copies of this lesson -label.tab.advanced.field.split.number =No. learners per lesson -label.tab.advanced.field.scheduling =Enable scheduling -label.tab.advanced.split.desc =[0] instances of this lesson will be created and approximately [1] will be allocated to each lesson -label.tab.conditions.dependencies =Dependencies -label.tab.conditions.dependencies.desc =Select a lesson that learners will need to complete before they can see the lesson you are about to create. -label.tab.conditions.timelimit =Time limitations -label.tab.conditions.timelimit.desc =Set the number of days the lesson will be available to learners. After this period the lesson will no longer be shown. If the time should count from the moment the learner starts the lesson, select the option for individual time limit. If you are scheduling the lesson end on the Advanced tab then you can only set an individual time limit. -label.tab.conditions.timelimit.days =Number days: -label.tab.conditions.timelimit.individual =Is this time limit for each individual? -label.tab.conditions.enable =Enable -label.questions.file.title =Choose IMS QTI file label.choose.word.document =Choose Word file -label.questions.file.missing =Please select a ZIP or XML file with questions in IMS QTIformat. -label.questions.choice.title =Choose questions -label.questions.choice.select.all =Select all -label.questions.choice.missing =Please check at least one question. -index.single.activity.lesson.title =Add single activity lesson -index.single.activity.lesson.desc =or one-click activity: -label.disable.lesson.sorting =Disable lesson sorting -index.gradebook.course.title =Gradebook Course Monitor -index.gradebook.lesson.title =Gradebook Lesson Monitor -index.gradebook.learner.title =Course Gradebook Learner -index.conditions.title =Conditions to participate in this lesson -index.search.lesson.title =Search learners across lessons -index.orggroup =Course groupings -index.course.groups.title =Course groupings -label.course.groups.grouping.title =Groupings -label.course.groups.grouping.create =Create new -label.course.groups.grouping.remove.confirm =Are you sure you want to delete this grouping? -label.course.groups.name =Grouping name: -label.course.groups.name.blank =Grouping name can not be blank. -label.course.groups.edit.title =Please use drag n' drop to move learners between groups. -label.course.groups.viewonly.title =Course group view -label.course.groups.prefix =Group -label.course.groups.remove.confirm =Are you sure you want to delete this group? -label.course.groups.remove.empty.confirm =Some groups are new and empty. They will not be saved. Click OK to continue. -label.course.groups.add =Add a new group -label.course.groups.unassigned =Unassigned learners -label.course.groups.sort.tooltip =Sort learners -label.course.groups.remove.tooltip =Remove -label.course.groups.back =Groupings -label.course.groups.grouping.count.tooltip =Number of groups in this grouping -label.course.groups.grouping.use.confirm =Are you sure you want to use grouping "[0]"? Groups will be created for this lesson and learners assigned to them. -label.course.groups.locked =Some users in this group already used the grouping. The group is now locked: you can not remove it or move users to another group. -label.course.groups.locked.transfer =Are you sure you want to move these users to a locked group? You will not be allowed to move them to another group later. -label.tab.advanced.field.restart =Learners always start from the first activity -error.firstname.invalid.characters =First name contains invalid characters -error.lastname.invalid.characters =Last name contains invalid characters -error.username.invalid.characters =Username can only contain alphanumeric characters and no spaces. -error.lessonname.invalid.characters =Lesson name contains invalid characters -audit.admin.loginas =Sysadmin {0} has logged in as {1} -index.monitoring.title =Monitoring -heading.comments =Comments -label.hidden =Comment hidden -label.reply =Reply -label.hide =Hide -label.show =Show -label.post =Post -label.refresh =Refresh comments -error.cannot.redisplay.please.refresh =Your changes have been saved but cannot be redisplayed. Please select refresh to reload the comments. -error.please.refresh =An error has occurred. Your post may not have been saved. Please select refresh to start again -label.showhide.prompt =Show/Hide replies -message.complete.or.cancel.reply =Please complete or cancel the current reply before starting a new reply. -message.complete.or.cancel.edit =Please complete or cancel the current edit before starting a new reply. -label.show.more.messages =More comments -label.likes =Likes -label.comment.body.validation =The comment must be between 1 and 5000 character -label.edited =Edited -label.like =Like -label.dislike =Dislike -label.no.comments =No comments -label.newest.first =Newest first -label.top.comments =Top comments -label.add.sticky =Stick to top -label.remove.sticky =Remove sticky -label.private.notifications.title =Notifications -label.private.notifications.messages =Messages -label.private.notifications.read =Read -label.private.notifications.read.hint =Mark notification as read -label.private.notifications.read.all.hint =Mark all notifications as read -label.select.groups =Select groups -authoring.fla.course.groups.to.branches.match.dialog.title =Match Course Groups to Branching Groups -authoring.fla.branch.mapping.course.groups.header =Course groups -authoring.fla.branch.mapping.branching.groups.header =Branching groups -label.tab.advanced.field.force.restart =Learners always start from the first activity -label.tab.advanced.field.allow.restart =Learners can restart the lesson -label.verification.code =Verification code -error.verification.code =Sorry, entered verification code is incorrect. Please try again. -label.your.new.shared.secret =Your new shared secret: {0} -label.2FA.shared.secret =Two-factor authentication shared secret -label.2FA.login.panel =Two-factor authentication required -label.remove.org.favorite =Remove course from favourite list -label.mark.org.favorite =Mark course as favourite -label.email.send.me.a.copy =Send me a copy -label.password.max.length =must be less than 25 characters -label.password.min.length =must be at least {0} characters long -label.password.old.must.entered =Old password must be entered -label.password.symbols.allowed =Only these symbols are allowed -label.password.restrictions =Password must follow the restrictions shown above -label.password.must.contain =Password must contain -label.password.must.ucase =at least 1 upper case letter -label.password.must.number =at least 1 number -label.password.must.symbol =at least 1 symbol -label.create.lesson =Create new lesson -label.organisations =Select course with the lessons that needs to be export -label.lesson.id =Lesson ID -label.display.design.image =Display sequence image? -label.select.sequence =You must select a sequence before proceeding -label.choose.sequence =Choose sequence -label.author.sequence =Author new LAMS sequence -label.open.monitor =Open Monitor -label.your.progress =Your lesson progress -label.you.completed.this.lesson =You have completed this lesson. -label.total.activities.depend.on.path =Total activities depend on your learning path. -label.lesson.not.completed =Lesson is not yet completed. -label.you.completed.activities =You have completed {0} activities -error.cannot.load.thumbnail =Unable to load sequence thumbnail. -label.lesson.introduction.updated =Introduction updated -no.such.signup.page.exist =No such signup page exists -error.lockedout =Due to consecutive failed attempts, the account has been locked out temporarily. -error.email.internal =An internal error occured. Try again using your username or contact your system administrator. More information is provided in application logs. -label.theme =Theme -authoring.fla.default.group.title =Grouping -authoring.fla.default.group.prefix =Group -authoring.fla.default.branching.title =Branching -authoring.fla.default.branch.prefix =Branch -authoring.fla.default.optional.activity.title =Optional Activity -authoring.fla.support.activity.title =Support Activity -authoring.fla.gate.activity.label =STOP -authoring.fla.branching.start.suffix =start -authoring.fla.branching.end.suffix =end -authoring.fla.activity.dialog.title.suffix =Authoring -authoring.fla.remove.activity.confirm =Are you sure you want to remove the whole branching activity? -authoring.fla.branching.create.confirm =Transition from this activity already exists.\\nDo you want to create branching here? -authoring.fla.transition.to.exists.error =Transition to this activity already exists. -authoring.fla.circular.sequence.error =You are not allowed to have a circular sequence. -authoring.fla.activity.in.container.error =You can not add this type of activity to an optional/support activity. -authoring.fla.default.annotation.label.title =Label -authoring.fla.region.fit.button.tooltip =Fit -authoring.fla.new.folder.button =New -authoring.fla.copy.button =Copy -authoring.fla.paste.button =Paste -authoring.fla.delete.button =Delete -authoring.fla.rename.button =Rename -authoring.fla.open.button =Open -authoring.fla.save.button =Save -authoring.fla.import.button =Import -authoring.fla.folder =folder -authoring.fla.sequence =sequence -authoring.fla.sequence.not.valid =The sequence is not valid.
It needs to be corrected before it can be used in lessons. -authoring.fla.sequence.validation.issues =While saving the sequence there were following validation issues: -authoring.fla.save.successful =The design is valid and has been saved. -authoring.fla.liveedit.save.successful =Changes were successfully applied. -authoring.fla.navigate.away.confirm =Your design is not saved.\\nAny changes you made since you last saved will be lost. -authoring.fla.delete.node.confirm =Are you sure you want to delete this -authoring.fla.sequence.overwrite.confirm =Are you sure you want to overwrite the existing sequence? -authoring.fla.new.folder.title.prompt =Please enter the name for a new folder -authoring.fla.rename.title.prompt =Please enter the new name for -authoring.fla.save.sequence.title.prompt =Please enter a title for the sequence -authoring.fla.import.part.choose.prompt =Click on activities to choose them for import -authoring.fla.folder.not.selected.error =Please choose a folder -authoring.fla.title.validation.error =The title must not be blank and must not contain any of these characters < > ^ * @ % $ -authoring.fla.folder.exists.error =A folder with this name already exists. -authoring.fla.sequence.exists.error =A sequence with this name already exists. -authoring.fla.sequence.save.error =Error while saving sequence -authoring.fla.svg.save.error =Error while saving sequence thumbnail -authoring.fla.sequence.not.selected.error =Please choose a sequence -authoring.fla.sequence.load.error =Error while loading the sequence -authoring.fla.transition.from.exists.error =Transition from this activity already exists -authoring.fla.export.sequence.dialog.title =Sequence export -authoring.fla.activity.copy.title.prefix =Copy [0]of -authoring.fla.preview.lesson.default.title =Preview -authoring.fla.save.dialog.title =Save sequence -authoring.fla.open.dialog.title =Open sequence -authoring.fla.import.dialog.title =Import Learning Design -authoring.fla.import.part.dialog.title =Import activities -authoring.fla.run.sequences.folder =Run sequences -authoring.fla.arrange.confirm =There are annotations on the canvas.\\n\ They will be not arranged automatically, you will have to adjust them manually later.\\n\ Do you want to continue? -authoring.fla.clear.canvas.confirm =You have got unsaved changes. They will be lost. Do you want to continue? -authoring.fla.branching.start.place.prompt =Place the branching point -authoring.fla.branching.end.place.prompt =Place the converge point -authoring.fla.annotation.region.place.prompt =Click and hold to start drawing an annotation region -authoring.fla.annotation.label.place.prompt =Click to add an annotation label -authoring.fla.optional.activity.place.prompt =Click to add an optional activity container. -authoring.fla.support.activity.place.prompt =Click to add a support activity container. -authoring.fla.transition.place.prompt =Click on an activity -authoring.fla.paste.error =Sorry, you can not paste this type of activity -authoring.fla.preview.error =Error while initialising lesson for preview -authoring.fla.cross.branching.error =Cross-branching transitions are not allowed -authoring.fla.support.transition.error =Support activities can not be connected to any other activity -authoring.fla.end.match.error =: a branch that ends in this branching does not start in it -authoring.fla.ok.button =OK -authoring.fla.cancel.button =Cancel -authoring.fla.clear.all.button =Clear all -authoring.fla.refresh.button =Refresh -authoring.fla.remove.condition.button =Remove -authoring.fla.properties.dialog.title =Properties -authoring.fla.group.naming.dialog.title =Group Naming -authoring.fla.groups.to.branches.match.dialog_title =Match Groups to Branches -authoring.fla.branch.mapping.groups.header =Groups -authoring.fla.branch.mapping.group.header =Group -authoring.fla.conditions.dialog.title =Select Output Conditions for Input -authoring.fla.branch.mapping.conditions.header =Conditions -authoring.fla.branch.mapping.condition.header =Condition -authoring.fla.branch.mapping.gate.header =Gate -authoring.fla.branch.mapping.branches.header =Branches -authoring.fla.branch.mapping.branch.header =Branch -authoring.fla.gate.state.mapping.dialog.title =Map gate conditions -authoring.fla.branch.mapping.dialog.title =Match conditions to branches -authoring.fla.gate.state.open =open -authoring.fla.gate.state.closed =closed -authoring.fla.branch.mapping.default.branch.suffix =(default) -authoring.fla.complex.output.suffix =(user defined) -authoring.fla.range.output.suffix =(range) -authoring.fla.range.condition.description =Range [0] to [1] -authoring.fla.exact.condition.description =Exact value of -authoring.fla.less.condition.description =Less than or eq -authoring.fla.greater.condition.description =Greater than or eq -authoring.fla.default.range.condition.title.prefix =Untitled -authoring.fla.clear.all.confirm =There are conditions linked to an existing branch.\\nDo you wish to remove them? -authoring.fla.remove.condition.confirm =This condition is linked to an existing branch.\\nDo you wish to remove it? -authoring.fla.refresh.conditions.confirm =You are about to update your conditions for the selected output definition.\\n\ This will clear all links to existing branches.\\nDo you wish to continue? -authoring.fla.conditions.to.default.gate.state.confirm =All remaining conditions will be mapped to the selected gate\\'s closed state -authoring.fla.conditions.to.default.branch.confirm =All remaining conditions will be mapped to the default branch -authoring.fla.groups.to.default.branch.confirm =All remaining groups will be mapped to the default branch -authoring.fla.range.condition.add.start.error =The start value can not be within the range of an existing condition -authoring.fla.range.condition.add.end.error =The end value can not be within the range of an existing condition -authoring.fla.group.title.validation.erorr =Group name must not be blank and must not contain any of these characters < > ^ * @ % $ -authoring.fla.page.title =Authoring -authoring.fla.page.menu.new =New -authoring.fla.page.menu.open =Open -authoring.fla.page.menu.import =Import -authoring.fla.page.menu.import.part =Import part -authoring.fla.page.menu.save =Save -authoring.fla.page.menu.saveas =Save as -authoring.fla.page.menu.export.lams =Export -authoring.fla.page.menu.copy =Copy -authoring.fla.page.menu.paste =Paste -authoring.fla.page.menu.transition =Transition -authoring.fla.page.menu.optional =Optional -authoring.fla.page.menu.optional.activity =Activity -authoring.fla.page.menu.optional.support =Support -authoring.fla.page.menu.flow =Flow -authoring.fla.page.menu.flow.gate =Gate -authoring.fla.page.menu.flow.branch =Branch -authoring.fla.page.menu.group =Group -authoring.fla.page.menu.annotate =Annotate -authoring.fla.page.menu.annotate.label =Label -authoring.fla.page.menu.annotate.region =Region -authoring.fla.page.menu.arrange =Arrange -authoring.fla.page.menu.preview =Preview -authoring.fla.page.ld.title =Untitled -authoring.fla.page.ld.description =Description: -authoring.fla.page.ld.license =License: -authoring.fla.page.ld.license.none =No license currently selected. Please select one. -authoring.fla.page.ld.license.info =Additional license information: -authoring.fla.page.dialog.access =Recently used sequences -authoring.fla.page.dialog.ld.title =Title: -authoring.fla.page.dialog.mappings =Mappings -authoring.fla.page.prop.title =Title: -authoring.fla.page.prop.default =Default? -authoring.fla.page.prop.grouping.type =Grouping type: -authoring.fla.page.prop.grouping.type.random =Random -authoring.fla.page.prop.grouping.type.monitor =Choose in Monitor -authoring.fla.page.prop.grouping.type.learner =Learner's choice -authoring.fla.page.prop.groups.number =Number of groups: -authoring.fla.page.prop.groups.learners =Or learners per group: -authoring.fla.page.prop.groups.equal =Equal group sizes? -authoring.fla.page.prop.groups.view.learners =View learners before selection? -authoring.fla.page.prop.groups.name =Name Groups -authoring.fla.page.prop.gradebook =Gradebook output: -authoring.fla.page.prop.description =Description: -authoring.fla.page.prop.gate.type =Type: -authoring.fla.page.prop.gate.type.condition =Condition -authoring.fla.page.prop.gate.type.sync =Synchronise -authoring.fla.page.prop.gate.type.schedule =Schedule -authoring.fla.page.prop.gate.type.permission =Permission -authoring.fla.page.prop.input =Input (Tool): -authoring.fla.page.prop.gate.delay =Delay: -authoring.fla.page.prop.days =days -authoring.fla.page.prop.hours =hours -authoring.fla.page.prop.minutes =minutes -authoring.fla.page.prop.gate.activity.finish.based =Since learner finished previous activity? -authoring.fla.page.prop.conditions.create =Create conditions -authoring.fla.page.prop.gate.conditions.map =Map gate conditions -authoring.fla.page.prop.branching.type =Branching type: -authoring.fla.page.prop.branching.type.chose =Instructor's choice -authoring.fla.page.prop.branching.type.group =Group-based -authoring.fla.page.prop.branching.type.tool =Learner's output -authoring.fla.page.prop.branching.type.optional =Learner's choice -authoring.fla.page.prop.grouping =Grouping: -authoring.fla.page.prop.branching.conditions.match =Match conditions to branches -authoring.fla.page.prop.branching.groups.match =Match Groups to Branches -authoring.fla.page.prop.branching.sequences.min =Min sequences: -authoring.fla.page.prop.branching.sequences.max =Max sequences: -authoring.fla.page.prop.optional.activities.min =Min activities: -authoring.fla.page.prop.optional.activities.max =Max activities: -authoring.fla.page.prop.color =Color: -authoring.fla.page.dialog.cond.output.choose =[ Choose Output ] -authoring.fla.page.dialog.cond.options.choose =[ Options ] -authoring.fla.page.dialog.cond.greater =Greater than or equal to -authoring.fla.page.dialog.cond.less =Less than or equal to -authoring.fla.page.dialog.cond.range =Range -authoring.fla.page.dialog.cond.range.from =From: -authoring.fla.page.dialog.cond.range.to =To: -authoring.fla.page.dialog.cond.add =Add -authoring.fla.page.dialog.cond.name =Name: -authoring.fla.page.dialog.cond.list.name =Name -authoring.fla.page.dialog.cond.list.condition =Condition -authoring.fla.page.download.image =Click here to download the image. -authoring.fla.page.download.wait =Please wait for the download. -authoring.fla.page.download.close =Close the dialog when the download is finished. -authoring.fla.page.svg.generator.title =SVG Generator -authoring.fla.tool.groups.all =All -authoring.fla.liveedit.cancel.confirm =Do you want to cancel changes made in Live Edit? -authoring.fla.liveedit.readonly.activity.error =The activity can not be modified. It is read-only. -authoring.fla.liveedit.readonly.move.parent.error =The activity can not be moved outside its parent. It is read-only. -authoring.fla.liveedit.readonly.remove.activity.error =The activity can not be removed. It is read-only. -authoring.fla.liveedit.readonly.remove.parent.error =The activity can not be removed. Its parent activity is read-only. -authoring.fla.liveedit.readonly.remove.child.error =The activity can not be removed. It has read-only child activities. -authoring.fla.liveedit.readonly.remove.transition.error =The transition can not be removed. It is read-only. -ckeditor.math.math =Math -ckeditor.math.functions =Functions -ckeditor.math.greek =Greek -ckeditor.math.matrix =Matrix -ckeditor.math.symbols =Symbols -ckeditor.math.arrows =Arrows -ckeditor.math.accents =Accents -ckeditor.math.formatting =Formatting -authoring.fla.cut.button =Cut -authoring.fla.modify.error =You cannot modify this resource -authoring.fla.folder.move.to.child.error =Cannot move a folder into its child -label.password.must.lcase =at least 1 lower case letter -label.timezone.warning =The timezone set in your profile does not match timezone on your computer. The times shown will be for the timezone set in your profile. -authoring.fla.folder.can.not.save.error =You cannot save in this folder -authoring.fla.boolean.output.suffix =(boolean: 1 or 0) -lessons =Lessons -label.tour =Tour -tour.intro.title =LAMS Tour -tour.intro.content =This short tour will show you the features of the main LAMS screen. You can stop the tour at any time by clicking End Tour, and restart it again by clicking on the Tour button. -tour.course.reveal.content =Click here to reveal or hide your courses. -tour.courses.content =Click on a course to make it the current course. -tour.favorites.content =Your favourite courses will appear at the top of the list. -tour.lessons.content =Lessons will appear here for the current course. -tour.notification.content =Review the notifications that you have received about your lessons. -tour.authoring.content =Create or modify the learning designs used for lessons. -tour.user.profile.content =Update your personal settings. -tour.course.name.title =Course Name -tour.course.name.content =Current course name. Click on the star to add this course to your favourites in the course list. -tour.add.lesson.content =Create a new lesson for this course using this button, or a lesson to a course subgroup using the Add Lesson button next to the subgroup name. -tour.add.single.activity.lesson.content =Use the down arrow to select an activity and then create a lesson with just this single activity. -tour.course.gradebook.content =View your marks for this course. -tour.more.actions.content =General options for managing this course such as notifications, subgroups, gradebook. The contents of this menu will vary depending on your responsibilities. -tour.lesson.monitoring.title =Lesson Monitoring -tour.lesson.monitoring.content =The Monitoring screen shows you where the learners are in the lesson their contributions. -tour.lesson.notifications.title =Lesson Notifications -tour.lesson.notifications.content =Send email notifications to learners. -tour.lesson.gradebook.title =Lesson Gradebook -tour.lesson.gradebook.content =Review learners\' marks and the length of time taken in the lesson. -tour.lesson.conditions.title =Lesson Conditions -tour.lesson.conditions.content =Set up conditions for starting or ending the lesson. -tour.lesson.remove.title =Remove Lesson -tour.lesson.remove.content =Remove the lesson completely. This is permanent - it cannot be undone. -tour.end.title =End -tour.end.content =Thank you for taking the tour. To restart the tour, click the Tour button again. -errors.maxfilesize =Uploaded file exceeded maximum size: {0} -error.attachment.executable =Uploaded file is executable -label.upload.info =Uploaded file must not be executable and not exceed size of {0} -label.file =File -authoring.fla.page.prop.size =Size: -authoring.fla.conditions.mapping.broken =Conditions in the activity were changed. Please review following activities as they referred the modified conditions: -authoring.fla.activity.unnamed.description =unnamed -authoring.fla.activity.gate.description =gate -authoring.fla.activity.branching.description =branching -tour.prev =Prev -tour.next =Next -tour.end.tour =End -label.search.for.courses =Search for courses -label.save.as.course.grouping =Save as a Course Grouping -label.enter.course.grouping.name =Please enter name for the new course grouping -label.course.groups.name.not.unique =Course grouping with such name already exists. Please enter another one. -label.save.as.course.grouping.hint =You can save the groups as "Course groupings" so it can be used in other lessons as well. If the groups are just specifically for this lesson, you might not want to do this. Otherwise, click the button to give them a name and reuse them later. -label.advanced.settings =Advanced settings -audit.delete.portrait =Portrait for user {0} {1}({2}) deleted. Portrait Id was {3}. -authoring.fla.weights.menu =Weights -authoring.fla.weights.title =Weights on activity outputs -authoring.fla.weights.activity =Activity -authoring.fla.weights.output =Output -authoring.fla.weights.weight =Weight -authoring.fla.weights.sum =Sum -authoring.fla.weights.sum.error =Output weights do not sum up to 100%. Adjust them in Weights dialog. -label.tab.advanced.field.gradebook.complete =Display activity scores on completion -index.kumalive =Kumalive -index.kumalive.tooltip =Enter a live lesson -index.kumalive.enter.learner =Enter as a learner -index.kumalive.report =Reports -index.kumalive.rubric =Rubrics management -label.import.groups.from.template =Import groups from template -label.import.groups.from.template.description =Download the template spreadsheet to create your groups using all the present learners in this lesson/course. Once you upload the file, the groups will be automatically created according to the spreadsheet. -label.download.template =Download Template -label.upload.group.spreadsheet =Upload Finished Spreadsheet -error.file.required =Grouped Spreadsheet Required -error.file.wrong.format =Grouped Spreadsheet in the wrong format. Please upload a file based on the given template. -label.import.successful =Group Import successful. {0} learners allocated to groups, {1} learners skipped. -label.import.warning.replace.groups =Importing this file will replace the existing groups. Do you want to import this file? -filename.create.grouping.template =create-grouping-template -spreadsheet.column.login =Login -spreadsheet.column.firstname =First Name -spreadsheet.column.lastname =Last Name -spreadsheet.column.groupname =Group Name -error.groups.upload.locked =Cannot update groups as the groups are now in use. -error.branching.upload.must.use.existing.groups =Cannot update branching. Must use the existing names: {0}. -label.print =Print -authoring.tbl.desc.peer.review =These are the criteria for which the learners will rate each other using a 5 star rating. These fields are optional and no Peer Review will be created if they are left blank. -authoring.section.peerreview =Peer Review -authoring.label.peerrevice.criteria.num =Rating Criteria {0} -authoring.label.peerrevice.allow.comments =Allow learners to comment on other learners -authoring.label.peerrevice.min.words.in.comments =Minimum number of words in a comment -authoring.create.criteria =Create Criteria -audit.design.created =Learning design "{0}" ({1}) created by {2} ({3}) -authoring.fla.save.successful.check.grouping =Your design is valid and has been saved.\\nIf this is a TBL sequence, you may want to make following activities grouped: -authoring.fla.weights.none =No activities with weightable gradebook output -audit.live.edit.start =Live Edit of Learning Design "{0}" ({1}) for Lesson ({2}) started by {3} ({4}) -audit.live.edit.end =Live Edit of Learning Design "{0}" ({1}) for Lesson ({2}) completed by {3} ({4}) -label.post.anonomously =Post anonymously -label.anonymous =Anonymous -label.anonymous.tooltip =Turn on "Post anonymously" to hide your name from other learners. Teachers will still be able to see your name. -authoring.fla.page.ld.title.desc =Click to display sequence details -label.start =Start: -label.end =End: -error.lesson.with.scheduled.end.only.have.individual.limits =Lessons with a scheduled end date can only have individual time limits, not a lesson time limit. -error.lesson.end.date.must.be.after.start.date =Scheduled end date must be after the start date. -label.policies.title =Policies -label.agree.to.policies.before.proceeding =Please agree to all the policies before proceeding -label.consent.required =Consent is required -label.agree.to.policy =I agree to the policy -label.policy.name =Policy name -label.policy.type =Policy type -label.policy.type.site =Site policy -label.policy.type.privacy =Privacy policy -label.policy.type.third.party =Third party policy -label.policy.type.other =Other policy -label.summary =Summary -label.full.policy =Full policy -label.consent =Consent -label.policies.consents =Policies and consents -label.version =Version -label.consented =Consented? -label.consented.on =Consented on -label.policy.details =Policy details -authoring.fla.page.prop.gradebook.none =No score -label.select.country =Select a country -error.country.required =Country is required -error.cannot.login.as.with.not.allow.direct.access =You cannot login as this user as they are an Integration Learner and 'Allow direct access to main LAMS page for Integration Learners' is turned off in the system configuration. -signup.email.verify.body.1 =Hi there, -signup.email.verify.body.2 =Please confirm your email address by clicking on the link below -signup.email.verify.body.3 =Regards, -signup.email.verify.body.4 =LAMS Signup System -signup.email.welcome.body.1 =Hi there, -signup.email.welcome.body.2 =You''ve successfully registered an account with username {0} on the LAMS server at {1}. -signup.email.welcome.body.3 =If you ever forget your password, you can reset it via this URL -signup.email.welcome.body.4 =Regards, -signup.email.welcome.body.5 =LAMS Signup System -authoring.fla.readonly.checkbox =read-only -authoring.fla.readonly.forbidden =This sequence is read-only. If you want to modify it, you can create its copy. -register.email.verify =A confirmation email will be sent before you are able to log in. -signup.email.verify.sent =A confirmation email has been sent to {0}
Check your email and follow the instructions. -authoring.enable.confidence.levels =Enable confidence levels -authoring.fla.page.menu.apply.changes =Apply changes -forgot.password.request.processed =If the email/username that you have provided exists, an email would be sent to the registered email address. -label.view =View -index.outcome.manage =Outcomes -index.outcome.manage.tooltip =Manage learning outcomes and scales -outcome.manage.title =Course outcomes -outcome.manage.remove =Remove outcome -outcome.manage.remove.confirm =Are you sure you want to remove this outcome? -outcome.manage.add =Add outcome -outcome.manage.edit =Edit outcome -outcome.manage.view =View outcome -outcome.manage.add.name =Name -outcome.manage.add.code =Code -outcome.manage.add.description =Description -outcome.manage.add.global =Global -outcome.manage.add.scale =Scale -outcome.manage.add.save =Save -outcome.manage.scope =Scope -outcome.manage.scope.global =global -outcome.manage.scope.course =course -outcome.manage.add.error =Error while saving an outcome -outcome.manage.add.error.name.blank =Name can not be blank -outcome.manage.add.error.code.blank =Code can not be blank -outcome.manage.add.error.scale.choose =You have to choose a scale -scale.title =Scales -scale.manage =Manage scales -scale.manage.add =Add scale -scale.manage.edit =Edit scale -scale.manage.view =View scale -scale.manage.title =Course scales -scale.manage.remove =Remove scale -scale.manage.remove.scale =Error while removing a scale. -scale.manage.remove.confirm =Are you sure you want to remove this scale? -scale.manage.add.value =Values -scale.manage.add.value.info =Enter comma separated values in increasing order of value. For example, an A,B,C,D scale must be entered as D,C,B,A. -scale.manage.add.value.error.blank =A value must not be blank -scale.manage.add.error =Error while saving an outcome scale -outcome.authoring.title =Learning outcomes -outcome.authoring.input =Search and select by outcome name or code -outcome.authoring.existing =Added outcomes -outcome.authoring.existing.none =none -outcome.export.date =Exported on: -outcome.export =Export -outcome.import =Import -outcome.import.error =Error while importing outcomes or scales. Check logs. -authoring.msg.close.cancel.save =Do you want to close this window without saving? -authoring.msg.list.cancel.save =Do you want to return to the template list without saving? -authoring.fla.page.menu.new.template =Use Template -authoring.template.list.introduction =Select a template from the list to see more details about the design that will be created. You can the proceed to create the design or return back to this list. -authoring.learning.design.templates =Learning Design Templates -authoring.template.successful =Your design has been saved as {0}. -authoring.label.sequence.title =Name -authoring.error.question.num =RAT Questions: Question {0} may not be blank -authoring.error.question.correct.num =RAT Questions: One of the answers for Question {0} needs to be correct. -authoring.description.application.exercise =Application Exercise (These question(s) will be shown during the analysis phase in the sequence.) -authoring.label.grouping =Teams -authoring.label.grouping.learners.choice =Learner's Choice -authoring.label.grouping.teachers.choice =Teacher's Choice -authoring.label.grouping.random.allocation =Random Allocation -authoring.label.numgroups =Number of teams: -authoring.error.numgroups =Number of teams must be 1 to 99. -authoring.label.numlearners =Number of learners: -authoring.error.numlearners =Number of learners must be 1 to 99. -authoring.error.group.data =Team settings are not correct. -authoring.section.lessondetails =Lesson Details -authoring.section.questions =RAT Questions -authoring.section.applicationexercise =Application Exercises -authoring.section.introduction =Introduction -authoring.create.question =Add Question -authoring.create.essay.question =Add Essay Question -authoring.create.mc.question =Add Multiple Choice Question -authoring.label.application.exercise.num =Application Exercise {0} -authoring.error.application.exercise.num =Application Exercises: Application Exercise {0} may not be blank. -authoring.label.question.num =Question {0} -authoring.label.option.num =Option {0} -authoring.error.option =Option may not be blank -authoring.label.correct.question =Correct? -authoring.create.option =Add Option -button.next =Next -button.previous =Previous -button.return.to.template.list =Back to Templates -authoring.error.content.id =Content ID is missing -authoring.error.question.must.have.answer.num =RAT Questions: Question {0} must have at least one answer. -authoring.error.application.exercise.must.have.answer.num =Application Exercises: {0} Question {1} must have at least one answer. -authoring.error.application.exercise.must.have.100.percent =Application Exercises: {0} Question {1} must have at least one answer worth 100%. -authoring.error.application.exercise.not.blank.and.grade =Application Exercises: {0} Question {1} may not be blank and must have a grade. -authoring.label.grade =Grade -authoring.label.none =None -authoring.tbl.template.title =Team Based Learning -authoring.tbl.template.description =Individual and Team Readiness Assessments followed by Application Exercises. -authoring.tbl.desc.question =Adding RAT questions. -authoring.tbl.desc.ae =Adding Application Exercises (AEs). You can create multiple AEs if needed. -outcome.manage.remove.error.in.use =The outcome is mapped to some items. It can not be removed. -scale.manage.remove.error.in.use =The scale is used in some outcomes. It can not be removed. -outcome.authoring.remove.confirm =Are you sure you want to remove this learning outcome? -signup.email.welcome.subject =LAMS: account details -authoring.error.application.exercise.question.must.not.be.blank.num =Application Exercise {0} Question {1} may not be blank. -authoring.error.application.exercise.needs.noticeboard.text =Application Exercises: {0} is missing the text for the noticeboard. -authoring.error.rat.not.blank =RAT Questions: There must be at least one question. -authoring.template.basic.import.qti =Import IMS QTI -authoring.tbl.use.noticeboard =Add Noticeboard after AE -authoring.create.application.exercise =Add new Application Exercise -authoring.tbl.enable.confidence.tooltip =Asks students in the iRAT how confident they are with their chosen answer. Then the confidence level for each student is displayed in the tRAT to all members of their team. -authoring.tbl.use.noticeboard.tooltip =After the AE, displays content to students as additional information or as a reflection on the AE topic. -authoring.tbl.delete.appex.prompt =Do you want to delete the Application Exercise {0}? -authoring.tbl.delete.mcq.prompt =Do you want to delete the RAT Question {0}? -authoring.application.exercise.allow.multiple.responses =Allow multiple responses -authoring.application.exercise.allow.multiple.responses.tooltip =When learners are allowed to select multiple answers the grade is the sum of the grade for all correct responses selected. -message.teacher.role.not.recognized =Please wait for a teacher to start the lesson. (You were logged in as a learner, as your current role does not conform LTI specification). -label.multiple.lessons =Multiple lessons -label.add.lessons.to.subgroups =Add lesson to all selected subcourses -label.marks =Marks -authoring.fla.grouping.detached.error =Activity "{0}" was grouped with a grouping activity that is missing or is not one of previous activities. Grouping was cleared. -authoring.fla.input.detached.error =Activity "{0}" had an input activity that is missing or is not one of previous activities. Input was cleared. -label.question.not.added =This question has already been added -label.questions.choice.collection =Choose a collection: -authoring.fla.branch.mapping.ordered.asc =Start with branches mapped to highest ordered answers -title.import.instruction.antivirus =An antivirus scan will be performed. It can take a while. -outcome.authoring.create.new =[create new] -index.qb.collections =Question collections -label.answer.queue =Answer queue -label.drag.and.drop =drag and drop answer to tick or cross -label.correct =Correct -label.incorrect =Incorrect -label.answer.alternatives =Answer alternatives -label.close =Close -label.create.question =Create question -label.question.type.multiple.choice =Multiple choice -label.question.type.matching.pairs =Matching pairs -label.question.type.short.answer =Short answer -label.question.type.numerical =Numerical -label.question.type.true.false =True/False -label.question.type.essay =Essay -label.question.type.ordering =Ordering -label.question.type.mark.hedging =Mark hedging -label.search.question.bank =Search question bank -label.question.type =Type: -label.question.successfully.imported =Question successfully imported label.import.word =Import questions from Word document -label.import.qti =Import questions in IMS QTI format -label.export.qti =Export questions in IMS QTI format -label.import.xml =Import questions in XML format -label.export.xml =Export questions in XML format -msg.import.file.format =The import file must be .xml file exported from assessment tool and not exceed size of {0} -error.import.file.format =The import file is not an .xml file. -label.qb.stats.title =Question statistics -error.qb.permanent.remove =The question is in one collection only, so it would be permanently removed.\\nIt is not possible as the question is used in sequences. -label.qb.permanent.remove.confirm =The question is in one collection only. Are you sure that you want to remove it permanently? -label.qb.stats.question =Question -label.qb.stats.question.version =Version -label.qb.stats.question.title =Title -label.qb.stats.question.description =Description -label.qb.stats.question.feedback =Feedback -label.qb.stats.question.mark =Mark -label.qb.stats.option.title =Title -label.qb.stats.option.correct =Correct? -label.qb.stats.option.average =Average selection
(as first choice) -label.qb.stats.chart =Average selection chart -label.qb.stats.burning.questions =Burning questions -label.qb.stats.burning.questions.none =This question does not have any burning questions -label.qb.stats.burning.questions.likes =Likes -label.qb.stats.usage =Usage in active lessons -label.qb.stats.usage.none =This question is not used in any lesson -label.qb.stats.usage.course =Course -label.qb.stats.usage.lesson =Lesson -label.qb.stats.usage.activity =Activity -label.qb.stats.usage.type =Tool type -label.qb.stats.usage.participant.count =Test participant count -label.qb.stats.usage.difficulty =Difficulty index -label.qb.stats.usage.discrimination =Discrimination index -label.qb.stats.usage.biserial =Point biserial -label.qb.stats.versions =Previous versions -label.qb.stats.versions.none =This question does not have any previous versions -label.qb.stats.versions.created =Created date -label.qb.stats.versions.created.ago =Created ago -label.qb.stats.collections =Collections -label.qb.stats.collections.transfer =Transfer questions to -label.qb.stats.collections.transfer.add =Add -label.qb.stats.collections.transfer.copy =Copy -label.qb.stats.collections.existing =Existing collections -label.qb.stats.collections.remove =Remove -label.qb.stats.outcomes =Learning outcomes -label.qb.stats.outcomes.none =This question does not have any learning outcomes -label.qb.stats.outcomes.existing =Existing outcomes -label.qb.collection =Collection -label.qb.collection.grid.title =Questions -label.qb.collection.grid.id =ID -label.qb.collection.grid.name =Name -label.qb.collection.grid.outcomes =Learning Outcomes -label.qb.collection.grid.usage =Used in
lessons -label.qb.collection.grid.actions =Actions -label.qb.collection.grid.stats =Stats -label.qb.collection.grid.error =Error while loading grid with question collections -label.qb.collection.name.blank.error =Name must not be blank -label.qb.collection.name.duplicate.error =Collection with such name already exists -label.qb.collection.action.stats =Show stats -label.qb.collection.remove.confirm =Are you sure you want to remove "{0}" collection? -label.qb.collection.management =Collection management -label.qb.collection.private =Private collection -label.qb.collection.remove =Remove collection -label.qb.collection.xml =XML -label.qb.collection.qti =QTI -label.qb.collection.word =Word -label.qb.collection.questions.none =There are no questions in this collection -label.qb.collection.share.title =Share collection with courses -label.qb.collection.shared =Shared -label.qb.collection.unshare =Unshare -label.qb.collection.share =Share -label.qb.collection.edit =Edit -error.form.validation.error =You have 1 error in a form. It has been highlighted -error.form.validation.errors =You have {0} errors in a form. They have been highlighted -label.authoring.choice.add.multiple.choice =Add multiple choice -label.authoring.choice.field.required =This field is required. -label.authoring.choice.enter.integer =Please enter an integer. -label.authoring.choice.enter.float =Please enter a floating point number. -label.authoring.choice.one.multiple.answers =One or multiple answers? -label.authoring.choice.one.answer =One answer only -label.authoring.choice.multiple.answers =Multiple answers allowed -label.authoring.choice.overall.feedback =Overall feedback -label.authoring.choice.feedback.on.correct =Feedback shown on any correct response -label.authoring.choice.feedback.on.partially.correct =Feedback shown on any partially correct response -label.authoring.choice.feedback.on.incorrect =Feedback shown on any incorrect response -label.authoring.choice.add.option =Add another answer -label.authoring.matching.pairs.matching.pairs =Matching pairs -label.authoring.matching.pairs.error.one.matching.pair =You should provide at least 1 matching pair. -label.authoring.matching.pairs.add.matching.pair =Add another -label.authoring.short.answer.no.case.unimportant =No, case is unimportant -label.authoring.short.answer.yes.case.must.match =Yes, case must match -label.authoring.short.answer.case.sensitivity =Case sensitivity -label.authoring.short.answer.add.answer =Add another answer -label.authoring.true.false.question =True/False question -label.authoring.true.false.correct.answer =Correct answer -label.authoring.true.false.feedback.on.true =Feedback for the response 'True'. -label.authoring.true.false.feedback.on.false =Feedback for the response 'False'. -label.authoring.numerical.question =Numerical question -label.authoring.numerical.units =Units -label.authoring.numerical.error.answer =You should provide at least one possible answer. -label.authoring.numerical.add.answer =Add another answer -label.authoring.numerical.add.unit =Add another unit -label.settings =Settings -label.enter.question.title =Question's title -label.enter.question.description =Question's description -label.authoring.answer.required =Answer required? -label.authoring.basic.default.question.grade =Default question grade -label.required.field =Required field -label.authoring.basic.allow.learners.rich.editor =Allow learners to use rich text editor -label.maximum.number.words =Maximum number of words -label.minimum.number.words =Minimum number of words -label.authoring.basic.general.feedback =General feedback -label.authoring.basic.shuffle.the.choices =Shuffle answers? -label.ask.for.hedging.justification =Ask for hedging justification? -label.autocomplete.as.student =Autocomplete (as student types answer autocomplete with stemming from answers) -label.authoring.basic.penalty.factor =Penalty factor -error.form.validation.hundred.score =One of the answers should have a grade of 100% so it is possible to get full marks for this question. -error.form.validation.positive.accepted.errors =All the accepted errors should be positive. -label.prefix.sequential.letters.for.each.answer =Prefix sequential letters for each answer -label.authoring.basic.option.question =Question -label.authoring.basic.option.grade =Grade -label.authoring.basic.option.feedback =Feedback -label.authoring.basic.option.accepted.error =Accepted error -label.authoring.basic.unit.unit =Unit -label.authoring.basic.unit.multiplier =Multiplier -label.authoring.true.false.false =False -label.authoring.true.false.true =True -label.authoring.basic.type.multiple.choice =Multiple choice -label.authoring.basic.type.matching.pairs =Matching pairs -label.authoring.basic.type.short.answer =Very short answers -label.authoring.basic.type.numerical =Numerical -label.authoring.basic.type.true.false =True/False -label.authoring.basic.type.essay =Essay -label.authoring.basic.type.ordering =Ordering -label.authoring.basic.type.mark.hedging =Mark hedging -label.incorrect.answer.nullifies.mark =Assigns full mark only when the correct answers are selected. -label.authoring.basic.option.answer =Answer -label.authoring.basic.delete =Delete -label.authoring.basic.none =None -error.positive.grade.required =One of the answers should have a positive grade - - -#======= End labels: Exported 1055 labels for en AU ===== +label.qb.collection.word =Word \ No newline at end of file Index: lams_central/conf/security/Owasp.CsrfGuard.properties =================================================================== diff -u -r8bc318f44b193b1d926fcc62211ca1b4b18d9b30 -rcf258bae4dd72eab7a6f5bc895b96966caafaf06 --- lams_central/conf/security/Owasp.CsrfGuard.properties (.../Owasp.CsrfGuard.properties) (revision 8bc318f44b193b1d926fcc62211ca1b4b18d9b30) +++ lams_central/conf/security/Owasp.CsrfGuard.properties (.../Owasp.CsrfGuard.properties) (revision cf258bae4dd72eab7a6f5bc895b96966caafaf06) @@ -128,6 +128,8 @@ org.owasp.csrfguard.protected.assessmentMonitoringAllocateUserAnswer=/lams/tool/laasse10/monitoring/allocateUserAnswer.do org.owasp.csrfguard.protected.assessmentMonitoringSetActivityEvaluation=/lams/tool/laasse10/monitoring/setActivityEvaluation.do org.owasp.csrfguard.protected.assessmentSaveUserGrade=/lams/tool/laasse10/monitoring/saveUserGrade.do +org.owasp.csrfguard.protected.assessmentUpdateTimeLimit=/lams/tool/laasse10/monitoring/updateTimeLimit.do +org.owasp.csrfguard.protected.assessmentUpdateIndividualTimeLimit=/lams/tool/laasse10/monitoring/updateIndividualTimeLimit.do org.owasp.csrfguard.protected.chatAuthoringSave=/lams/tool/lachat11/authoring/updateContent.do org.owasp.csrfguard.protected.chatAuthoringDefineLater=/lams/tool/lachat11/authoring/definelater.do @@ -249,10 +251,27 @@ org.owasp.csrfguard.protected.zoomAuthoringDefineLater=/lams/tool/lazoom10/authoring/definelater.do #LKC projects -org.owasp.csrfguard.protected.lkcmonitoringStartPreviewLesson=/lams/monitoring/monitoring/startPreviewLessonJSON.do -org.owasp.csrfguard.protected.lkcmonitoringCopyLearningDesign=/lams/monitoring/monitoring/copyLearningDesign.do +org.owasp.csrfguard.protected.lkcMonitoringStartPreviewLesson=/lams/monitoring/monitoring/startPreviewLessonJSON.do +org.owasp.csrfguard.protected.lkcMonitoringCopyLearningDesign=/lams/monitoring/monitoring/copyLearningDesign.do +org.owasp.csrfguard.protected.lkcWorkflowAutomationEditModule=/lams/wa/blueprint/editModule.do +org.owasp.csrfguard.protected.lkcWorkflowAutomationEditBlueprint=/lams/wa/blueprint/editBlueprint.do +org.owasp.csrfguard.protected.lkcWorkflowAutomationCreateContainer=/lams/wa/container/create.do +org.owasp.csrfguard.protected.lkcWorkflowAutomationChangeContainerName=/lams/wa/container/changeContainerName.do +org.owasp.csrfguard.protected.lkcWorkflowAutomationChangeContainerOrganisation=/lams/wa/container/organisation.do +org.owasp.csrfguard.protected.lkcWorkflowAutomationChangeContainerUsers=/lams/wa/container/users.do +org.owasp.csrfguard.protected.lkcWorkflowAutomationContainerStartLesson=/lams/wa/container/startLesson.do +org.owasp.csrfguard.protected.lkcWorkflowAutomationQuestionChangeAeName=/lams/wa/question/changeAeName.do +org.owasp.csrfguard.protected.lkcWorkflowAutomationQuestionUpdate=/lams/wa/question/updateEditedQuestion.do +org.owasp.csrfguard.protected.lkcWorkflowAutomationQuestionSendForReviewing=/lams/wa/question/sendForReviewing.do +org.owasp.csrfguard.protected.lkcWorkflowAutomationQuestionShift=/lams/wa/question/shiftQuestion.do +org.owasp.csrfguard.protected.lkcWorkflowAutomationQuestionRemove=/lams/wa/question/removeQuestion.do +org.owasp.csrfguard.protected.lkcWorkflowAutomationDirectStartLesson=/lams/wa/lesson/create.do +#DEMO project +org.owasp.csrfguard.protected.demo.googleAuthUrl=/lams/signup/socialMediaSso/getGoogleAuthUrl.do + + # Actions to take when a CSRF attack is attempted org.owasp.csrfguard.action.Log=org.owasp.csrfguard.action.Log org.owasp.csrfguard.Logger=org.owasp.csrfguard.log.JavaLogger Index: lams_central/src/java/org/lamsfoundation/lams/authoring/template/web/LdTemplateController.java =================================================================== diff -u -r8bc318f44b193b1d926fcc62211ca1b4b18d9b30 -rcf258bae4dd72eab7a6f5bc895b96966caafaf06 --- lams_central/src/java/org/lamsfoundation/lams/authoring/template/web/LdTemplateController.java (.../LdTemplateController.java) (revision 8bc318f44b193b1d926fcc62211ca1b4b18d9b30) +++ lams_central/src/java/org/lamsfoundation/lams/authoring/template/web/LdTemplateController.java (.../LdTemplateController.java) (revision cf258bae4dd72eab7a6f5bc895b96966caafaf06) @@ -51,6 +51,9 @@ import org.lamsfoundation.lams.learningdesign.Grouping; import org.lamsfoundation.lams.learningdesign.LearningDesign; import org.lamsfoundation.lams.learningdesign.exception.LearningDesignException; +import org.lamsfoundation.lams.qb.model.QbOption; +import org.lamsfoundation.lams.qb.model.QbQuestion; +import org.lamsfoundation.lams.qb.service.IQbService; import org.lamsfoundation.lams.questions.Answer; import org.lamsfoundation.lams.questions.Question; import org.lamsfoundation.lams.questions.QuestionParser; @@ -65,10 +68,13 @@ import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.JsonUtil; import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.web.util.AttributeNames; import org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.context.WebApplicationContext; @@ -116,6 +122,8 @@ @Autowired protected IAuthoringFullService authoringService; @Autowired + protected IQbService qbService; + @Autowired protected IToolDAO toolDAO; protected static final String CONTENT_TYPE_JSON = "application/json;charset=utf-8"; @@ -411,7 +419,6 @@ if (activityDescription != null) { activityJSON.put(AuthoringJsonTags.DESCRIPTION, activityDescription); } - activityJSON.put(AuthoringJsonTags.ACTIVITY_CATEGORY_ID, Activity.CATEGORY_SYSTEM); activityJSON.put(AuthoringJsonTags.ACTIVITY_TYPE_ID, Activity.PERMISSION_GATE_ACTIVITY_TYPE); activityJSON.put(AuthoringJsonTags.GATE_ACTIVITY_LEVEL_ID, GateActivity.LEARNER_GATE_LEVEL); @@ -482,7 +489,6 @@ activityJSON.put(AuthoringJsonTags.XCOORD, pos[0]); activityJSON.put(AuthoringJsonTags.YCOORD, pos[1]); activityJSON.put(AuthoringJsonTags.ACTIVITY_TITLE, title != null ? title : "Grouping"); - activityJSON.put(AuthoringJsonTags.ACTIVITY_CATEGORY_ID, Activity.CATEGORY_SYSTEM); activityJSON.put(AuthoringJsonTags.ACTIVITY_TYPE_ID, Activity.GROUPING_ACTIVITY_TYPE); activityJSON.put(AuthoringJsonTags.CREATE_GROUPING_UIID, groupingUIID); @@ -516,7 +522,6 @@ activityJSON.put(AuthoringJsonTags.XCOORD, pos[0]); activityJSON.put(AuthoringJsonTags.YCOORD, pos[1]); activityJSON.put(AuthoringJsonTags.ACTIVITY_TITLE, activityTitle != null ? activityTitle : "Parallel Activity"); - activityJSON.put(AuthoringJsonTags.ACTIVITY_CATEGORY_ID, Activity.CATEGORY_SPLIT); activityJSON.put(AuthoringJsonTags.ACTIVITY_TYPE_ID, Activity.PARALLEL_ACTIVITY_TYPE); activityJSON.put(AuthoringJsonTags.DESCRIPTION, description); if (groupingUIID != null) { @@ -547,7 +552,6 @@ activityJSON.put(AuthoringJsonTags.XCOORD, pos[0]); activityJSON.put(AuthoringJsonTags.YCOORD, pos[1]); activityJSON.put(AuthoringJsonTags.ACTIVITY_TITLE, "Support Activity"); - activityJSON.put(AuthoringJsonTags.ACTIVITY_CATEGORY_ID, Activity.CATEGORY_SYSTEM); activityJSON.put(AuthoringJsonTags.ACTIVITY_TYPE_ID, Activity.FLOATING_ACTIVITY_TYPE); activityJSON.put(AuthoringJsonTags.MAX_ACTIVITIES, MAX_FLOATING_ACTIVITY_OPTIONS); return activityJSON; @@ -570,7 +574,6 @@ activityJSON.put(AuthoringJsonTags.GROUPING_SUPPORT_TYPE, Activity.GROUPING_SUPPORT_OPTIONAL); activityJSON.put(AuthoringJsonTags.APPLY_GROUPING, false); activityJSON.put(AuthoringJsonTags.ACTIVITY_TITLE, branchName != null ? branchName : "Branch " + orderId); - activityJSON.put(AuthoringJsonTags.ACTIVITY_CATEGORY_ID, Activity.CATEGORY_SYSTEM); activityJSON.put(AuthoringJsonTags.ACTIVITY_TYPE_ID, Activity.SEQUENCE_ACTIVITY_TYPE); activityJSON.put(AuthoringJsonTags.ORDER_ID, orderId); activityJSON.put(AuthoringJsonTags.PARENT_UIID, parentUIID); @@ -638,7 +641,6 @@ activityJSON.put(AuthoringJsonTags.ACTIVITY_UIID, reservedUiid); activityJSON.put(AuthoringJsonTags.GROUPING_SUPPORT_TYPE, Activity.GROUPING_SUPPORT_OPTIONAL); activityJSON.put(AuthoringJsonTags.ACTIVITY_TITLE, activityTitle != null ? activityTitle : "Branching"); - activityJSON.put(AuthoringJsonTags.ACTIVITY_CATEGORY_ID, Activity.CATEGORY_SYSTEM); activityJSON.put(AuthoringJsonTags.ACTIVITY_TYPE_ID, activityType); activityJSON.put(AuthoringJsonTags.MAX_ACTIVITIES, MAX_FLOATING_ACTIVITY_OPTIONS); activityJSON.put(AuthoringJsonTags.XCOORD, layoutCoords[0]); @@ -689,14 +691,14 @@ */ protected ObjectNode createToolActivity(AtomicInteger uiid, int order, Integer[] layoutCoords, String toolSignature, String toolIcon, Long toolContentID, String contentFolderID, Integer groupingUIID, Integer parentUIID, - Integer parentActivityType, String activityTitle, int activityCategory) { + Integer parentActivityType, String activityTitle) { return createToolActivity(uiid, order, layoutCoords, toolSignature, toolIcon, toolContentID, contentFolderID, - groupingUIID, parentUIID, parentActivityType, activityTitle, activityCategory, null); + groupingUIID, parentUIID, parentActivityType, activityTitle, null); } protected ObjectNode createToolActivity(AtomicInteger uiid, int order, Integer[] layoutCoords, String toolSignature, String toolIcon, Long toolContentID, String contentFolderID, Integer groupingUIID, Integer parentUIID, - Integer parentActivityType, String activityTitle, int activityCategory, String toolOutputDefinition) { + Integer parentActivityType, String activityTitle, String toolOutputDefinition) { ObjectNode activityJSON = JsonNodeFactory.instance.objectNode(); Tool tool = getTool(toolSignature); @@ -713,7 +715,6 @@ activityJSON.put(AuthoringJsonTags.XCOORD, pos[0]); activityJSON.put(AuthoringJsonTags.YCOORD, pos[1]); activityJSON.put(AuthoringJsonTags.ACTIVITY_TITLE, activityTitle != null ? activityTitle : "Activity"); - activityJSON.put(AuthoringJsonTags.ACTIVITY_CATEGORY_ID, activityCategory); activityJSON.put(AuthoringJsonTags.ACTIVITY_TYPE_ID, Activity.TOOL_ACTIVITY_TYPE); if (parentUIID != null) { activityJSON.put(AuthoringJsonTags.PARENT_UIID, parentUIID); @@ -782,20 +783,25 @@ */ protected Long createAssessmentToolContent(UserDTO user, String title, String instructions, String reflectionInstructions, boolean selectLeaderToolOutput, boolean enableNumbering, - boolean enableConfidenceLevels, ArrayNode questions) throws IOException { + boolean enableConfidenceLevels, boolean allowDiscloseAnswers, boolean allowAnswerJustification, + ArrayNode questions) throws IOException { ObjectNode toolContentJSON = createStandardToolContent(title, instructions, reflectionInstructions, null, null, user); toolContentJSON.put(RestTags.USE_SELECT_LEADER_TOOL_OUTPUT, selectLeaderToolOutput); toolContentJSON.put(RestTags.ENABLE_CONFIDENCE_LEVELS, enableConfidenceLevels); toolContentJSON.put("numbered", enableNumbering); toolContentJSON.put("displaySummary", Boolean.TRUE); - toolContentJSON.put("allowDiscloseAnswers", Boolean.TRUE); + toolContentJSON.put("allowDiscloseAnswers", allowDiscloseAnswers); + toolContentJSON.put("allowAnswerJustification", allowAnswerJustification); + toolContentJSON.set(RestTags.QUESTIONS, questions); ArrayNode references = JsonNodeFactory.instance.arrayNode(); for (int i = 0; i < questions.size(); i++) { ObjectNode question = (ObjectNode) questions.get(i); + question.put("answerRequired", true); + Integer questionDisplayOrder = question.get(RestTags.DISPLAY_ORDER).asInt(); Integer defaultGrade = JsonUtil.optInt(question, "defaultGrade", 1); references.add(JsonNodeFactory.instance.objectNode().put(RestTags.DISPLAY_ORDER, questionDisplayOrder) @@ -815,7 +821,7 @@ return createToolActivity(uiid, order, layoutCoords, LdTemplateController.ASSESSMENT_TOOL_SIGNATURE, LdTemplateController.ASSESSMENT_ICON, toolContentID, contentFolderID, groupingUIID, parentUIID, - parentActivityType, activityTitle != null ? activityTitle : "Assessment", Activity.CATEGORY_ASSESSMENT, + parentActivityType, activityTitle != null ? activityTitle : "Assessment", LdTemplateController.ASSESSMENT_TOOL_OUTPUT_DEFINITION); } @@ -842,7 +848,7 @@ return createToolActivity(uiid, order, layoutCoords, LdTemplateController.CHAT_TOOL_SIGNATURE, LdTemplateController.CHAT_ICON, toolContentID, contentFolderID, groupingUIID, parentUIID, - parentActivityType, activityTitle != null ? activityTitle : "Chat", Activity.CATEGORY_COLLABORATION); + parentActivityType, activityTitle != null ? activityTitle : "Chat"); } /** @@ -888,7 +894,7 @@ return createToolActivity(uiid, order, layoutCoords, LdTemplateController.FORUM_TOOL_SIGNATURE, LdTemplateController.FORUM_ICON, toolContentID, contentFolderID, groupingUIID, parentUIID, - parentActivityType, activityTitle != null ? activityTitle : "Forum", Activity.CATEGORY_COLLABORATION); + parentActivityType, activityTitle != null ? activityTitle : "Forum"); } /** @@ -910,8 +916,7 @@ return createToolActivity(uiid, order, layoutCoords, LdTemplateController.LEADER_TOOL_SIGNATURE, LdTemplateController.LEADER_ICON, toolContentID, contentFolderID, groupingUIID, parentUIID, - parentActivityType, activityTitle != null ? activityTitle : "Leader Selection", - Activity.CATEGORY_RESPONSE); + parentActivityType, activityTitle != null ? activityTitle : "Leader Selection"); } /** @@ -935,7 +940,7 @@ return createToolActivity(uiid, order, layoutCoords, LdTemplateController.NOTEBOOK_TOOL_SIGNATURE, LdTemplateController.NOTEBOOK_ICON, toolContentID, contentFolderID, groupingUIID, parentUIID, - parentActivityType, activityTitle != null ? activityTitle : "Notebook", Activity.CATEGORY_RESPONSE); + parentActivityType, activityTitle != null ? activityTitle : "Notebook"); } /** @@ -959,7 +964,7 @@ return createToolActivity(uiid, order, layoutCoords, LdTemplateController.NOTICEBOARD_TOOL_SIGNATURE, LdTemplateController.NOTICEBOARD_ICON, toolContentID, contentFolderID, groupingUIID, parentUIID, - parentActivityType, activityTitle != null ? activityTitle : "Noticeboard", Activity.CATEGORY_CONTENT); + parentActivityType, activityTitle != null ? activityTitle : "Noticeboard"); } /** @@ -988,7 +993,7 @@ return createToolActivity(uiid, order, layoutCoords, LdTemplateController.QA_TOOL_SIGNATURE, LdTemplateController.QA_ICON, toolContentID, contentFolderID, groupingUIID, parentUIID, - parentActivityType, activityTitle != null ? activityTitle : "Q&A", Activity.CATEGORY_RESPONSE); + parentActivityType, activityTitle != null ? activityTitle : "Q&A"); } /** @@ -1011,7 +1016,7 @@ return createToolActivity(uiid, order, layoutCoords, LdTemplateController.MINDMAP_TOOL_SIGNATURE, LdTemplateController.MINDMAP_ICON, toolContentID, contentFolderID, groupingUIID, parentUIID, - parentActivityType, activityTitle != null ? activityTitle : "MindMap", Activity.CATEGORY_RESPONSE); + parentActivityType, activityTitle != null ? activityTitle : "MindMap"); } /** @@ -1109,8 +1114,7 @@ return createToolActivity(uiid, order, layoutCoords, LdTemplateController.SHARE_RESOURCES_TOOL_SIGNATURE, LdTemplateController.SHARE_RESOURCES_ICON, toolContentID, contentFolderID, groupingUIID, parentUIID, - parentActivityType, activityTitle != null ? activityTitle : "Share Resources", - Activity.CATEGORY_CONTENT); + parentActivityType, activityTitle != null ? activityTitle : "Share Resources"); } /** @@ -1126,6 +1130,12 @@ if (confidenceLevelsActivityUiid != null) { toolContentJSON.put(RestTags.CONFIDENCE_LEVELS_ACTIVITY_UIID, confidenceLevelsActivityUiid); } + + for (int i = 0; i < questions.size(); i++) { + ObjectNode question = (ObjectNode) questions.get(i); + question.put("answerRequired", true); + } + return createToolContent(user, LdTemplateController.SCRATCHIE_TOOL_SIGNATURE, toolContentJSON); } @@ -1138,7 +1148,7 @@ return createToolActivity(uiid, order, layoutCoords, LdTemplateController.SCRATCHIE_TOOL_SIGNATURE, LdTemplateController.SCRATCHIE_ICON, toolContentID, contentFolderID, groupingUIID, parentUIID, - parentActivityType, activityTitle != null ? activityTitle : "Scratchie", Activity.CATEGORY_CONTENT, + parentActivityType, activityTitle != null ? activityTitle : "Scratchie", LdTemplateController.SCRATCHIE_TOOL_OUTPUT_DEFINITION); } @@ -1167,7 +1177,7 @@ return createToolActivity(uiid, order, layoutCoords, LdTemplateController.SCRIBE_TOOL_SIGNATURE, LdTemplateController.SCRIBE_ICON, toolContentID, contentFolderID, groupingUIID, parentUIID, - parentActivityType, activityTitle != null ? activityTitle : "Scribe", Activity.CATEGORY_COLLABORATION); + parentActivityType, activityTitle != null ? activityTitle : "Scribe"); } /** @@ -1196,8 +1206,7 @@ return createToolActivity(uiid, order, layoutCoords, LdTemplateController.SUBMIT_TOOL_SIGNATURE, LdTemplateController.SUBMIT_ICON, toolContentID, contentFolderID, groupingUIID, parentUIID, - parentActivityType, activityTitle != null ? activityTitle : "Submit File", - Activity.CATEGORY_ASSESSMENT); + parentActivityType, activityTitle != null ? activityTitle : "Submit File"); } /** @@ -1221,7 +1230,7 @@ return createToolActivity(uiid, order, layoutCoords, LdTemplateController.SURVEY_TOOL_SIGNATURE, LdTemplateController.SURVEY_ICON, toolContentID, contentFolderID, groupingUIID, parentUIID, - parentActivityType, activityTitle != null ? activityTitle : "Survey", Activity.CATEGORY_RESPONSE); + parentActivityType, activityTitle != null ? activityTitle : "Survey"); } /** @@ -1246,7 +1255,7 @@ return createToolActivity(uiid, order, layoutCoords, LdTemplateController.VOTE_TOOL_SIGNATURE, LdTemplateController.VOTE_ICON, toolContentID, contentFolderID, groupingUIID, parentUIID, - parentActivityType, activityTitle != null ? activityTitle : "Voting", Activity.CATEGORY_RESPONSE); + parentActivityType, activityTitle != null ? activityTitle : "Voting"); } /** @@ -1269,7 +1278,7 @@ return createToolActivity(uiid, order, layoutCoords, LdTemplateController.WIKI_TOOL_SIGNATURE, LdTemplateController.WIKI_ICON, toolContentID, contentFolderID, groupingUIID, parentUIID, - parentActivityType, activityTitle != null ? activityTitle : "Wiki", Activity.CATEGORY_COLLABORATION); + parentActivityType, activityTitle != null ? activityTitle : "Wiki"); } /** @@ -1297,7 +1306,7 @@ return createToolActivity(uiid, order, layoutCoords, LdTemplateController.PEER_REVIEW_TOOL_SIGNATURE, LdTemplateController.PEER_REVIEW_ICON, toolContentID, contentFolderID, groupingUIID, parentUIID, - parentActivityType, activityTitle != null ? activityTitle : "Peer Review", Activity.CATEGORY_CONTENT); + parentActivityType, activityTitle != null ? activityTitle : "Peer Review"); } /** @@ -1335,11 +1344,16 @@ request.setAttribute("containingDivName", WebUtil.readStrParam(request, "containingDivName", true)); String questionType = WebUtil.readStrParam(request, "questionType"); - if (questionType == null || !questionType.equalsIgnoreCase("mcq")) { - return "/authoring/template/tool/assessment"; - } else { - return "authoring/template/tool/assessmcq"; + if (questionType != null) { + if (questionType.equalsIgnoreCase("essay")) { + return "authoring/template/tool/assessment"; + } + // if it is a import from Question Bank, we need to do further processing + if (questionType.equalsIgnoreCase("importQbAe")) { + return "forward:importQbAe.do"; + } } + return "/authoring/template/tool/assessmcq"; } @@ -1356,6 +1370,64 @@ return "/authoring/template/tool/" + templatePage; } + /** + * Gets a QB question based on its UID and creates a structure for template wizard JSP. + */ + @RequestMapping("/importQbAe") + private String importAeQuestionFromQb(@RequestParam long qbQuestionUid, Model model) + throws UnsupportedEncodingException { + QbQuestion qbQuestion = qbService.getQuestionByUid(qbQuestionUid); + + Assessment question = new Assessment(); + question.setType(qbQuestion.getType().shortValue()); + question.setTitle(qbQuestion.getName()); + question.setText(qbQuestion.getDescription()); + question.setMultipleAnswersAllowed(qbQuestion.isMultipleAnswersAllowed()); + question.setDefaultGrade(qbQuestion.getMaxMark()); + question.setUuid(qbQuestion.getUuid().toString()); + + model.addAttribute(AttributeNames.PARAM_CONTENT_FOLDER_ID, qbQuestion.getContentFolderId()); + model.addAttribute("question", question); + + if (question.getType() == Assessment.ASSESSMENT_QUESTION_TYPE_MULTIPLE_CHOICE) { + Set answers = question.getAnswers(); + for (QbOption qbOption : qbQuestion.getQbOptions()) { + AssessMCAnswer answer = new AssessMCAnswer(qbOption.getDisplayOrder(), qbOption.getName(), + qbOption.getMaxMark()); + answers.add(answer); + } + return "/authoring/template/tool/assessmcq"; + } + return "/authoring/template/tool/assessment"; + } + + /** + * Gets a QB question based on its UID and creates a structure for template wizard JSP. + */ + @RequestMapping("/importQbIra") + private String importIraQuestionFromQb(@RequestParam long qbQuestionUid, @RequestParam int questionNumber, + Model model) throws UnsupportedEncodingException { + QbQuestion qbQuestion = qbService.getQuestionByUid(qbQuestionUid); + + Assessment question = new Assessment(); + question.setType(Assessment.ASSESSMENT_QUESTION_TYPE_MULTIPLE_CHOICE); + question.setTitle(qbQuestion.getName()); + question.setText(qbQuestion.getDescription()); + question.setUuid(qbQuestion.getUuid().toString()); + + Set answers = question.getAnswers(); + for (QbOption qbOption : qbQuestion.getQbOptions()) { + AssessMCAnswer answer = new AssessMCAnswer(qbOption.getDisplayOrder(), qbOption.getName(), + qbOption.getMaxMark()); + answers.add(answer); + } + + model.addAttribute(AttributeNames.PARAM_CONTENT_FOLDER_ID, qbQuestion.getContentFolderId()); + model.addAttribute("question", question); + model.addAttribute("questionNumber", questionNumber); + return "/authoring/template/tool/mcquestion"; + } + private List preprocessQuestions(Question[] questions, String contentFolderID) { List assessments = new ArrayList<>(questions.length); @@ -1499,6 +1571,10 @@ case ("peerreviewstar"): path = "authoring/template/tool/peerreviewstar"; break; + case ("importQbIra"): + // further processing in another action method + path = "forward:importQbIra.do"; + break; default: path = null; break; Index: lams_central/src/java/org/lamsfoundation/lams/authoring/template/web/TBLTemplateController.java =================================================================== diff -u -r8bc318f44b193b1d926fcc62211ca1b4b18d9b30 -rcf258bae4dd72eab7a6f5bc895b96966caafaf06 --- lams_central/src/java/org/lamsfoundation/lams/authoring/template/web/TBLTemplateController.java (.../TBLTemplateController.java) (revision 8bc318f44b193b1d926fcc62211ca1b4b18d9b30) +++ lams_central/src/java/org/lamsfoundation/lams/authoring/template/web/TBLTemplateController.java (.../TBLTemplateController.java) (revision cf258bae4dd72eab7a6f5bc895b96966caafaf06) @@ -153,12 +153,12 @@ activityTitle = data.getText("boilerplate.ira.title"); ArrayNode testQuestionsArray = JsonUtil.readArray(data.testQuestions.values()); Long iRAToolContentId = createAssessmentToolContent(userDTO, activityTitle, - data.getText("boilerplate.ira.instructions"), null, false, false, data.confidenceLevelEnable, - testQuestionsArray); + data.getText("boilerplate.ira.instructions"), null, false, true, data.confidenceLevelEnable, false, + false, testQuestionsArray); ObjectNode iraActivityJSON = createAssessmentActivity(maxUIID, order++, currentActivityPosition, iRAToolContentId, data.contentFolderID, groupingUIID, null, null, activityTitle); activities.add(iraActivityJSON); - + // Leader Selection firstActivityInRowPosition = calcPositionBelow(firstActivityInRowPosition); currentActivityPosition = firstActivityInRowPosition; @@ -227,7 +227,8 @@ assessmentNumber++; } Long aetoolContentId = createAssessmentToolContent(userDTO, applicationExerciseTitle, - data.getText("boilerplate.ae.instructions"), null, true, false, false, questionsJSONArray); + data.getText("boilerplate.ae.instructions"), null, true, false, false, true, true, + questionsJSONArray); activities.add(createAssessmentActivity(maxUIID, order++, currentActivityPosition, aetoolContentId, data.contentFolderID, groupingUIID, null, null, applicationExerciseTitle)); Index: lams_central/src/java/org/lamsfoundation/lams/web/QuestionsController.java =================================================================== diff -u -re376b240aecf9b255b8b26fe22c3d33c70f67ddb -rcf258bae4dd72eab7a6f5bc895b96966caafaf06 --- lams_central/src/java/org/lamsfoundation/lams/web/QuestionsController.java (.../QuestionsController.java) (revision e376b240aecf9b255b8b26fe22c3d33c70f67ddb) +++ lams_central/src/java/org/lamsfoundation/lams/web/QuestionsController.java (.../QuestionsController.java) (revision cf258bae4dd72eab7a6f5bc895b96966caafaf06) @@ -1,6 +1,7 @@ package org.lamsfoundation.lams.web; import java.io.File; +import java.io.FileInputStream; import java.io.InputStream; import java.util.Collections; import java.util.Set; @@ -15,8 +16,7 @@ import org.lamsfoundation.lams.questions.QuestionParser; import org.lamsfoundation.lams.questions.QuestionWordParser; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; -import org.lamsfoundation.lams.util.Configuration; -import org.lamsfoundation.lams.util.ConfigurationKeys; +import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; @@ -27,10 +27,10 @@ import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.multipart.MultipartFile; /** - * Runs extraction of the chosen IMS QTI zip file or .docx file. Prepares form for user to manually choose interesting question. + * Runs extraction of the chosen IMS QTI zip file or .docx file. Prepares form for user to manually choose interesting + * question. */ @Controller public class QuestionsController { @@ -43,24 +43,25 @@ private IQbService qbService; @RequestMapping("/questions") - public String execute(@RequestParam(name = "file", required = false) MultipartFile file, - @RequestParam String returnURL, @RequestParam("limitType") String limitTypeParam, - @RequestParam(required = false) String importType, @RequestParam String callerID, - @RequestParam(required = false) Boolean collectionChoice, HttpServletRequest request) throws Exception { + public String execute(@RequestParam String tmpFileUploadId, @RequestParam String returnURL, + @RequestParam("limitType") String limitTypeParam, @RequestParam(required = false) String importType, + @RequestParam String callerID, @RequestParam(required = false) Boolean collectionChoice, + HttpServletRequest request) throws Exception { - String tempDirName = Configuration.get(ConfigurationKeys.LAMS_TEMP_DIR); - File tempDir = new File(tempDirName); - if (!tempDir.exists()) { - tempDir.mkdirs(); - } - - InputStream uploadedFileStream = null; + MultiValueMap errorMap = new LinkedMultiValueMap<>(); String fileName = null; - if (file != null) { - fileName = file.getOriginalFilename().toLowerCase(); - uploadedFileStream = file.getInputStream(); - } + File file = null; + File uploadDir = FileUtil.getTmpFileUploadDir(tmpFileUploadId); + if (uploadDir.canRead()) { + File[] files = uploadDir.listFiles(); + if (files.length > 1) { + errorMap.add("GLOBAL", "Uploaded more than 1 file"); + } else if (files.length == 1) { + file = files[0]; + fileName = file.getName().toLowerCase(); + } + } // this parameter is not really used at the moment request.setAttribute("returnURL", returnURL); @@ -69,22 +70,19 @@ // show only chosen types of questions request.setAttribute("limitType", limitTypeParam); - - boolean isWordInput = "word".equals(importType); + + boolean isWordInput = "word".equals(importType); request.setAttribute("importType", importType); if (collectionChoice != null && collectionChoice) { // in the view a drop down with collections will be displayed request.setAttribute("collections", qbService.getUserCollections(QuestionsController.getUserId())); } - // user did not choose a file, or uploaded it with a wrong file format - if ((uploadedFileStream == null) || !(fileName.endsWith(".zip") || fileName.endsWith(".xml")) && !isWordInput + // user did not choose a file + if (file == null || !(fileName.endsWith(".zip") || fileName.endsWith(".xml")) && !isWordInput || !fileName.endsWith(".docx") && isWordInput) { - MultiValueMap errorMap = new LinkedMultiValueMap<>(); errorMap.add("GLOBAL", messageService.getMessage("label.questions.file.missing")); - request.setAttribute("errorMap", errorMap); - return "questions/questionFile"; } Set limitType = null; @@ -94,18 +92,22 @@ Collections.addAll(limitType, limitTypeParam.split(",")); } + InputStream uploadedFileStream = new FileInputStream(file); + Question[] questions; if (fileName.endsWith(".xml")) { questions = QuestionParser.parseQTIFile(uploadedFileStream, null, limitType); - + } else if (fileName.endsWith(".docx")) { questions = QuestionWordParser.parseWordFile(uploadedFileStream, fileName); - + } else { questions = QuestionParser.parseQTIPackage(uploadedFileStream, limitType); } request.setAttribute("questions", questions); + FileUtil.deleteTmpFileUploadDir(tmpFileUploadId); + return "questions/questionChoice"; } Index: lams_central/web/qb/collection.jsp =================================================================== diff -u -re376b240aecf9b255b8b26fe22c3d33c70f67ddb -rcf258bae4dd72eab7a6f5bc895b96966caafaf06 --- lams_central/web/qb/collection.jsp (.../collection.jsp) (revision e376b240aecf9b255b8b26fe22c3d33c70f67ddb) +++ lams_central/web/qb/collection.jsp (.../collection.jsp) (revision cf258bae4dd72eab7a6f5bc895b96966caafaf06) @@ -83,6 +83,9 @@ - + + + + + + + + + + + + + + -
- + + + - - -
+
+ +
-
- - + \ No newline at end of file Index: lams_common/db/sql/create_lams_11_tables.sql =================================================================== diff -u -r2b7ffc7c6e661a7f78d74a80a367b87d1f71e2fe -rcf258bae4dd72eab7a6f5bc895b96966caafaf06 --- lams_common/db/sql/create_lams_11_tables.sql (.../create_lams_11_tables.sql) (revision 2b7ffc7c6e661a7f78d74a80a367b87d1f71e2fe) +++ lams_common/db/sql/create_lams_11_tables.sql (.../create_lams_11_tables.sql) (revision cf258bae4dd72eab7a6f5bc895b96966caafaf06) @@ -974,7 +974,7 @@ `options_instructions` mediumtext COLLATE utf8mb4_unicode_ci, `tool_id` bigint(20) DEFAULT NULL, `tool_content_id` bigint(20) DEFAULT NULL, - `activity_category_id` int(3) NOT NULL, + `activity_category_id` int(3), `gate_activity_level_id` int(11) DEFAULT NULL, `gate_open_flag` tinyint(1) DEFAULT NULL, `gate_open_user` bigint(20) DEFAULT NULL, Index: lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20200219_updateTo40.sql =================================================================== diff -u -r2b7ffc7c6e661a7f78d74a80a367b87d1f71e2fe -rcf258bae4dd72eab7a6f5bc895b96966caafaf06 --- lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20200219_updateTo40.sql (.../patch20200219_updateTo40.sql) (revision 2b7ffc7c6e661a7f78d74a80a367b87d1f71e2fe) +++ lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20200219_updateTo40.sql (.../patch20200219_updateTo40.sql) (revision cf258bae4dd72eab7a6f5bc895b96966caafaf06) @@ -63,7 +63,7 @@ `type` TINYINT NOT NULL, `question_id` INT NOT NULL, `version` SMALLINT NOT NULL DEFAULT 1, - `create_date` DATETIME NOT NULL DEFAULT NOW(), + `create_date` DATETIME, `content_folder_id` char(36), `name` TEXT, `description` MEDIUMTEXT, @@ -85,6 +85,7 @@ `min_words_limit` int(11) DEFAULT 0, `hedging_justification_enabled` TINYINT(1) DEFAULT 0, `tmp_question_id` BIGINT, + `owner_id` BIGINT, PRIMARY KEY (uid), INDEX (tmp_question_id), CONSTRAINT UQ_question_version UNIQUE INDEX (question_id, version)); @@ -99,10 +100,11 @@ CREATE TABLE lams_qb_tool_question (`tool_question_uid` BIGINT AUTO_INCREMENT, `qb_question_uid` BIGINT NOT NULL, `tool_content_id` BIGINT NOT NULL, - `display_order` TINYINT NOT NULL DEFAULT 1, + `display_order` TINYINT UNSIGNED NOT NULL DEFAULT 1, PRIMARY KEY (tool_question_uid), INDEX (tool_content_id), CONSTRAINT FK_lams_qb_tool_question_1 FOREIGN KEY (qb_question_uid) REFERENCES lams_qb_question (uid) ON UPDATE CASCADE); + -- create Question Bank option CREATE TABLE lams_qb_option (`uid` BIGINT AUTO_INCREMENT, `qb_question_uid` BIGINT NOT NULL, @@ -206,12 +208,22 @@ ON q.question_uid = mcq.uid JOIN tl_lamc11_content AS c ON mcq.mc_content_id = c.uid; - + -- remove columns from MCQ which are duplicated in Question Bank ALTER TABLE tl_lamc11_que_content DROP COLUMN question, DROP COLUMN mark, DROP COLUMN display_order, DROP COLUMN feedback; + +-- add missing display order in options, if any +UPDATE tl_lamc11_options_content AS c + JOIN (SELECT MIN(uid)-1 AS uid_shift, mc_que_content_id + FROM tl_lamc11_options_content + WHERE displayOrder IS NULL + GROUP BY mc_que_content_id) AS s + USING (mc_que_content_id) + SET c.displayOrder = c.uid - s.uid_shift + WHERE c.displayOrder IS NULL; -- fill table with options matching unique QB questions inserted above INSERT INTO lams_qb_option (qb_question_uid, display_order, name, max_mark) @@ -583,7 +595,7 @@ TRIM(aq.description), IFNULL(aq.max_mark, 1), aq.feedback, aq.penalty_factor, aq.answer_required, aq.multiple_answers_allowed, aq.incorrect_answer_nullifies_mark, aq.feedback_on_correct, aq.feedback_on_partially_correct, aq.feedback_on_incorrect, aq.shuffle, aq.prefix_answers_with_letters, aq.case_sensitive, aq.correct_answer, - aq.allow_rich_editor, aq.max_words_limit, aq.min_words_limit, aq.hedging_justification_enabled, q.target_uid + aq.allow_rich_editor, aq.max_words_limit, aq.min_words_limit, aq.hedging_justification_enabled, q.target_uid, NULL FROM (SELECT uid, title AS question, question AS description, @@ -612,7 +624,7 @@ ON aq.uid = q.target_uid JOIN tl_laasse10_assessment AS assessment ON aq.assessment_uid = assessment.uid; - + -- set up references to QB question UIDs created above INSERT INTO lams_qb_tool_question SELECT q.question_uid, qb.uid, assess.content_id, aq.sequence_id @@ -793,7 +805,7 @@ INSERT INTO lams_qb_question (uid, `type`, question_id, version, create_date, name, description, max_mark, feedback, answer_required, min_words_limit, tmp_question_id) - SELECT NULL, 6, @question_id:=@question_id + 1, 1, IFNULL(c.creation_date, NOW()), + SELECT NULL, 6, @question_id:=@question_id + 1, 1, c.creation_date, SUBSTRING(TRIM(REPLACE(REPLACE(strip_tags(qa.question, false) COLLATE utf8mb4_0900_ai_ci, ' ', ' '), '\t', '')), 1, 200), qa.question, 1, qa.feedback, qa.answer_required, qa.min_words_limit, q.target_uid FROM (SELECT uid, @@ -852,8 +864,8 @@ -- clean up ALTER TABLE tl_laqa11_usr_resp DROP COLUMN qa_que_content_id, DROP COLUMN answer; - + ALTER TABLE lams_qb_question DROP COLUMN tmp_question_id; DROP TABLE tmp_question, tmp_question_match, @@ -867,7 +879,24 @@ INSERT INTO lams_sequence_generator(lams_qb_question_question_id) VALUES ((SELECT MAX(question_id) FROM lams_qb_question)); +-- find earlierst occurence of questions and fill create date and owner +UPDATE lams_qb_question AS qb, + (SELECT qt.qb_question_uid, + d.user_id AS owner_id, + MIN(a.create_date_time) AS create_date + FROM lams_qb_tool_question AS qt JOIN + lams_learning_activity AS a USING (tool_content_id) JOIN + lams_learning_design AS d USING (learning_design_id) + GROUP BY qb_question_uid + ) AS s +SET qb.create_date = s.create_date, + qb.owner_id = s.owner_id +WHERE qb.uid = s.qb_question_uid; +-- fill missing gaps +UPDATE lams_qb_question + SET create_date = NOW() + WHERE create_date IS NULL; -- LDEV-4827 Add configuration settings for Question Bank INSERT INTO lams_configuration VALUES @@ -904,12 +933,26 @@ CONSTRAINT FK_lams_qb_collection_share_2 FOREIGN KEY (organisation_id) REFERENCES lams_organisation (organisation_id) ON DELETE CASCADE ON UPDATE CASCADE ); - + +-- add questions to public collection INSERT INTO lams_qb_collection VALUES (1, 'Public questions', NULL, false); INSERT INTO lams_qb_collection_question - SELECT 1, question_id FROM lams_qb_question; + SELECT 1, question_id FROM lams_qb_question + WHERE owner_id IS NULL; +-- add questions to private collections +INSERT INTO lams_qb_collection + SELECT NULL, 'My questions', owner_id, true + FROM (SELECT DISTINCT owner_id FROM lams_qb_question WHERE owner_id IS NOT NULL) AS qb; + +INSERT INTO lams_qb_collection_question + SELECT c.uid, qb.question_id + FROM lams_qb_question AS qb + JOIN lams_qb_collection AS c ON qb.owner_id = c.user_id + WHERE qb.owner_id IS NOT NULL; +ALTER TABLE lams_qb_question DROP COLUMN owner_id; + INSERT INTO lams_configuration VALUES ('QbCollectionsTransferEnable', 'true', 'config.qb.collections.transfer.enable', 'config.header.qb', 'BOOLEAN', 1); Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java =================================================================== diff -u -r8bc318f44b193b1d926fcc62211ca1b4b18d9b30 -rcf258bae4dd72eab7a6f5bc895b96966caafaf06 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java (.../ExportToolContentService.java) (revision 8bc318f44b193b1d926fcc62211ca1b4b18d9b30) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java (.../ExportToolContentService.java) (revision cf258bae4dd72eab7a6f5bc895b96966caafaf06) @@ -2005,7 +2005,6 @@ act.setGroupingSupportType(actDto.getGroupingSupportType()); act.setActivityUIID(actDto.getActivityUIID()); - act.setActivityCategoryID(actDto.getActivityCategoryID()); act.setActivityId(actDto.getActivityID()); act.setActivityTypeId(actDto.getActivityTypeID()); act.setApplyGrouping(actDto.getApplyGrouping()); Index: lams_common/src/java/org/lamsfoundation/lams/qb/dao/hibernate/QbDAO.java =================================================================== diff -u -r8bc318f44b193b1d926fcc62211ca1b4b18d9b30 -rcf258bae4dd72eab7a6f5bc895b96966caafaf06 --- lams_common/src/java/org/lamsfoundation/lams/qb/dao/hibernate/QbDAO.java (.../QbDAO.java) (revision 8bc318f44b193b1d926fcc62211ca1b4b18d9b30) +++ lams_common/src/java/org/lamsfoundation/lams/qb/dao/hibernate/QbDAO.java (.../QbDAO.java) (revision cf258bae4dd72eab7a6f5bc895b96966caafaf06) @@ -22,8 +22,10 @@ public class QbDAO extends LAMSBaseDAO implements IQbDAO { - private static final String FIND_MAX_QUESTION_ID = "SELECT MAX(lams_qb_question_question_id) FROM lams_sequence_generator"; + private static final String FIND_MAX_QUESTION_ID = "SELECT IFNULL(MAX(question_id), 0) FROM lams_qb_question"; + private static final String FIND_MAX_QUESTION_ID_FROM_GENERATOR = "SELECT IFNULL(MAX(lams_qb_question_question_id), 0) FROM lams_sequence_generator"; + private static final String FIND_MAX_VERSION = "SELECT MAX(version) FROM QbQuestion AS q WHERE q.questionId = :questionId"; private static final String FIND_QUESTION_ACTIVITIES = "SELECT a FROM QbToolQuestion AS q, ToolActivity AS a JOIN a.learningDesign.lessons AS l " @@ -142,13 +144,26 @@ @Override public int generateNextQuestionId() { - Integer max = (Integer) this.getSession().createNativeQuery(FIND_MAX_QUESTION_ID).uniqueResult(); + int max = ((BigInteger) this.getSession().createNativeQuery(FIND_MAX_QUESTION_ID_FROM_GENERATOR).uniqueResult()) + .intValue(); max++; this.getSession().createNativeQuery(GENERATE_QUESTION_ID).setParameter("qbQuestionId", max).executeUpdate(); return max; } @Override + public void updateMaxQuestionId() { + int maxGenerator = ((BigInteger) this.getSession().createNativeQuery(FIND_MAX_QUESTION_ID_FROM_GENERATOR) + .uniqueResult()).intValue(); + int maxTable = ((BigInteger) this.getSession().createNativeQuery(FIND_MAX_QUESTION_ID).uniqueResult()) + .intValue(); + if (maxGenerator < maxTable) { + this.getSession().createNativeQuery(GENERATE_QUESTION_ID).setParameter("qbQuestionId", maxTable) + .executeUpdate(); + } + } + + @Override public int getMaxQuestionVersion(Integer qbQuestionId) { Object result = this.getSession().createQuery(FIND_MAX_VERSION).setParameter("questionId", qbQuestionId) .uniqueResult(); Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java =================================================================== diff -u -r8df2f2fd1327e415d338658a64cb110cfdd21872 -rcf258bae4dd72eab7a6f5bc895b96966caafaf06 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision 8df2f2fd1327e415d338658a64cb110cfdd21872) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision cf258bae4dd72eab7a6f5bc895b96966caafaf06) @@ -770,39 +770,39 @@ /* * TODO Method is not in use. Remove it? - * + * * private void updateUserActivityGradebookMark(Lesson lesson, Activity activity, User learner) { * ToolSession toolSession = toolService.getToolSessionByLearner(learner, activity); - * + * * if ((toolSession == null) || (toolSession == null) || (learner == null) || (lesson == null) * || (activity == null) || !(activity instanceof ToolActivity) * || (((ToolActivity) activity).getEvaluation() == null)) { * return; * } * ToolActivity toolActivity = (ToolActivity) activity; - * + * * // Getting the first activity evaluation * ActivityEvaluation eval = toolActivity.getEvaluation(); - * + * * try { * ToolOutput toolOutput = toolService.getOutputFromTool(eval.getToolOutputDefinition(), toolSession, * learner.getUserId()); - * + * * if (toolOutput != null) { * ToolOutputValue outputVal = toolOutput.getValue(); * if (outputVal != null) { * Double outputDouble = outputVal.getDouble(); - * + * * GradebookUserActivity gradebookUserActivity = getGradebookUserActivity(toolActivity.getActivityId(), * learner.getUserId()); - * + * * // Only set the mark if it hasnt previously been set by a teacher * if ((gradebookUserActivity == null) || !gradebookUserActivity.getMarkedInGradebook()) { * updateGradebookUserActivityMark(lesson, learner, toolActivity, outputDouble, false, false); * } * } * } - * + * * } catch (ToolException e) { * logger.debug( * "Runtime exception when attempted to get outputs for activity: " + toolActivity.getActivityId(), e); @@ -1160,7 +1160,12 @@ GBActivityGridRowDTO activityRow = (GBActivityGridRowDTO) it.next(); // Add the activity average data ExcelRow activityDataRow = summarySheet.initRow(); - activityDataRow.addCell(activityRow.getRowName()); // this is the problem entry + String activityName = activityRow.getRowName(); + if (isWeighted) { + activityName += " " + getMessage("gradebook.export.weight", + new Object[] { activityRow.getWeight() == null ? 0 : activityRow.getWeight() }); + } + activityDataRow.addCell(activityName); activityDataRow.addCell(activityRow.getCompetences()); activityDataRow.addCell(activityRow.getMedianTimeTakenSeconds()); activityDataRow.addCell(activityRow.getAverageMark()); @@ -1223,14 +1228,21 @@ headerRow = summarySheet.initRow(); headerRow.addEmptyCells(3); for (Activity activity : filteredActivityToUserDTOMap.keySet()) { - headerRow.addCell(activity.getTitle(), true); // this one works + String activityName = activity.getTitle(); + if (isWeighted && activity.isToolActivity()) { + ActivityEvaluation eval = ((ToolActivity) activity).getEvaluation(); + activityName += " " + getMessage("gradebook.export.weight", + new Object[] { eval == null || eval.getWeight() == null ? 0 : eval.getWeight() }); + } + + headerRow.addCell(activityName, true); } headerRow = summarySheet.initRow(); headerRow.addCell(getMessage("gradebook.export.last.name"), true); headerRow.addCell(getMessage("gradebook.export.first.name"), true); headerRow.addCell(getMessage("gradebook.export.login"), true); - for (Activity activity : filteredActivityToUserDTOMap.keySet()) { + for (int columnCount = 0; columnCount < filteredActivityToUserDTOMap.keySet().size(); columnCount++) { headerRow.addCell(getMessage("gradebook.columntitle.mark"), true); } headerRow.addCell(getMessage("gradebook.export.total.mark"), true); @@ -1270,8 +1282,16 @@ for (Activity activity : activityToUserDTOMap.keySet()) { ExcelRow activityTitleRow = activitySheet.initRow(); - activityTitleRow.addCell(activity.getTitle(), true); + String activityName = activity.getTitle(); + if (isWeighted && activity.isToolActivity()) { + ActivityEvaluation eval = ((ToolActivity) activity).getEvaluation(); + activityName += " " + getMessage("gradebook.export.weight", + new Object[] { eval == null || eval.getWeight() == null ? 0 : eval.getWeight() }); + } + + activityTitleRow.addCell(activityName, true); + ExcelRow titleRow = activitySheet.initRow(); titleRow.addCell(getMessage("gradebook.export.last.name"), true); titleRow.addCell(getMessage("gradebook.export.first.name"), true); @@ -1353,6 +1373,13 @@ String activityRowName = (groupName != null && groupId != null) ? activity.getTitle() + " (" + groupName + ")" : activity.getTitle(); + + if (isWeighted && activity.isToolActivity()) { + ActivityEvaluation eval = activity.getEvaluation(); + activityRowName += " " + getMessage("gradebook.export.weight", + new Object[] { eval == null || eval.getWeight() == null ? 0 : eval.getWeight() }); + } + activityIdToName.put(activity.getActivityId(), activityRowName); String startDate = (userDto.getStartDate() == null) ? "" @@ -1643,9 +1670,6 @@ activityTouserToGradebookUserActivityMap.put(activity.getActivityId(), userToGradebookUserActivityMap); } - int numberCellsPerRow = simplified ? 3 + selectedLessons.size() + 3 - : (selectedLessons.size() * 9) + (allActivities.size() * 2) + 5; - String weightedMessage = messageService.getMessage("label.activity.marks.weighted"); // Lesson names row---------------------- ExcelRow lessonsNames = sheet.initRow(); @@ -1670,7 +1694,7 @@ lessonsNames.addCell(lessonName, true); lessonsNames.addEmptyCells(9 + (numberActivities * 2)); } -// i -= 2; + lessonsNames.addCell("", ExcelCell.BORDER_STYLE_LEFT_THIN); lessonsNames.addCell(getMessage("label.overall.totals"), true); lessonsNames.addCell("", ExcelCell.BORDER_STYLE_RIGHT_THICK); @@ -1696,6 +1720,8 @@ } else { //create Selected Lessons Header Full for (Lesson lesson : selectedLessons) { + boolean isWeighted = isWeightedLessonMap.get(lesson.getLessonId()); + headerRow.addCell(getMessage("gradebook.export.last.name")); headerRow.addCell(getMessage("gradebook.export.first.name")); headerRow.addCell(getMessage("gradebook.export.login")); @@ -1705,7 +1731,14 @@ List activities = lessonActivitiesMap.get(lesson.getLessonId()); for (Activity activity : activities) { - headerRow.addCell(activity.getTitle(), true); + String activityName = activity.getTitle(); + if (isWeighted && activity.isToolActivity()) { + ActivityEvaluation eval = ((ToolActivity) activity).getEvaluation(); + activityName += " " + getMessage("gradebook.export.weight", + new Object[] { eval == null || eval.getWeight() == null ? 0 : eval.getWeight() }); + } + + headerRow.addCell(activityName, true); headerRow.addCell(getMessage("label.max.possible")); } @@ -1788,9 +1821,12 @@ if (activityToTotalMarkMap.get(activity.getActivityId()) != null) { rawActivityTotalMarks = activityToTotalMarkMap.get(activity.getActivityId()); } - Integer weight = weighted && activity.getEvaluation() != null - && activity.getEvaluation().getWeight() != null ? activity.getEvaluation().getWeight() - : null; + Integer weight = weighted ? 0 : null; + + if (activity.getEvaluation() != null && activity.getEvaluation().getWeight() != null) { + weight = activity.getEvaluation().getWeight(); + } + Long weightedActivityTotalMarks = weight != null ? weight : rawActivityTotalMarks; Double mark = 0d; @@ -1883,15 +1919,15 @@ /* * TODO Method is not in use. Remove it? - * + * * public void updateActivityMark(Double mark, String feedback, Integer userID, Long toolSessionID, * Boolean markedInGradebook) { * ToolSession toolSession = toolService.getToolSessionById(toolSessionID); * User learner = (User) userService.findById(User.class, userID); * if ((learner != null) && (toolSession != null)) { * ToolActivity activity = toolSession.getToolActivity(); * GradebookUserActivity gradebookUserActivity = getGradebookUserActivity(activity.getActivityId(), userID); - * + * * // If gradebook user activity is null or the mark is set by teacher or was set previously by user - save the * // mark and feedback * if ((gradebookUserActivity == null) || markedInGradebook || !gradebookUserActivity.getMarkedInGradebook()) { Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java =================================================================== diff -u -r8bc318f44b193b1d926fcc62211ca1b4b18d9b30 -rcf258bae4dd72eab7a6f5bc895b96966caafaf06 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 8bc318f44b193b1d926fcc62211ca1b4b18d9b30) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision cf258bae4dd72eab7a6f5bc895b96966caafaf06) @@ -628,7 +628,7 @@ new Object[] { progress.getUser().getLogin(), progress.getUser().getUserId(), activity.getTitle(), activity.getActivityId() })); } - + /** * "Complete" an activity from the web layer's perspective. Used for CompleteActivityAction and the Gate and * Grouping actions. Calls the learningService to actually complete the activity and progress. @@ -646,13 +646,13 @@ if (currentActivity == null) { progress = joinLesson(learnerId, lesson.getLessonId()); - + } else if (progress.getCompletedActivities().containsKey(currentActivity)) { // recalculate activity mark and pass it to gradebook updateGradebookMark(currentActivity, progress); return activityMapping.getCloseForward(currentActivity, lesson.getLessonId()); - + } else { completeActivity(learnerId, currentActivity, progress.getLearnerProgressId()); } @@ -1434,14 +1434,11 @@ @Override public void createCommandForLearners(Long toolContentId, Collection userIds, String jsonCommand) { // find lesson for given tool content ID - ToolActivity activity = activityDAO.getToolActivityByToolContentId(toolContentId); - LearningDesign learningDesign = activity.getLearningDesign(); - Lesson lesson = learningDesign.getLessons().iterator().next(); - Long lessonId = lesson.getLessonId(); + Long lessonId = lessonService.getLessonByToolContentId(toolContentId).getLessonId(); // go through each user, find his user name and add a command for him for (Integer userId : userIds) { - User user = (User) activityDAO.find(User.class, userId); + User user = activityDAO.find(User.class, userId); Command command = new Command(lessonId, user.getLogin(), jsonCommand); commandDAO.insert(command); } Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringController.java =================================================================== diff -u -rb5d2a6851ee4797e641081bd5e6a1f28f78c30a6 -rcf258bae4dd72eab7a6f5bc895b96966caafaf06 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringController.java (.../MonitoringController.java) (revision b5d2a6851ee4797e641081bd5e6a1f28f78c30a6) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringController.java (.../MonitoringController.java) (revision cf258bae4dd72eab7a6f5bc895b96966caafaf06) @@ -285,13 +285,12 @@ } @RequestMapping(path = "/addLesson", method = RequestMethod.POST) - public String addLesson(HttpServletRequest request, HttpServletResponse response, - @RequestParam String lessonName, @RequestParam long learningDesignID) - throws IOException, ServletException, ParseException { + public String addLesson(HttpServletRequest request, HttpServletResponse response, @RequestParam String lessonName, + @RequestParam long learningDesignID) throws IOException, ServletException, ParseException { if (!ValidationUtil.isOrgNameValid(lessonName)) { throw new IOException("Lesson name contains invalid characters"); } - + String[] organisationIdsStr = request.getParameterValues(AttributeNames.PARAM_ORGANISATION_ID); boolean introEnable = WebUtil.readBooleanParam(request, "introEnable", false); String introDescription = introEnable ? request.getParameter("introDescription") : null; @@ -461,8 +460,7 @@ * The Struts dispatch method to archive a lesson. */ @RequestMapping(path = "/archiveLesson", method = RequestMethod.POST) - public void archiveLesson(HttpServletRequest request, HttpServletResponse response) - throws IOException { + public void archiveLesson(HttpServletRequest request, HttpServletResponse response) throws IOException { long lessonId = WebUtil.readLongParam(request, AttributeNames.PARAM_LESSON_ID); try { monitoringService.archiveLesson(lessonId, getUserId()); @@ -475,8 +473,7 @@ * The Struts dispatch method to "unarchive" a lesson. Returns it back to its previous state. */ @RequestMapping(path = "/unarchiveLesson", method = RequestMethod.POST) - public void unarchiveLesson(HttpServletRequest request, HttpServletResponse response) - throws IOException { + public void unarchiveLesson(HttpServletRequest request, HttpServletResponse response) throws IOException { long lessonId = WebUtil.readLongParam(request, AttributeNames.PARAM_LESSON_ID); try { monitoringService.unarchiveLesson(lessonId, getUserId()); @@ -628,8 +625,8 @@ } if (log.isDebugEnabled()) { - log.debug("Force complete for learners " + learnerIdNameBuf.toString() + " lesson " - + lessonId + ". " + message); + log.debug("Force complete for learners " + learnerIdNameBuf.toString() + " lesson " + lessonId + ". " + + message); } // audit log force completion attempt @@ -782,7 +779,7 @@ MonitoringController.USER_PAGE_SIZE, (pageNumber - 1) * MonitoringController.USER_PAGE_SIZE, orderAscending); for (User learner : learners) { - learnersJSON.add(WebUtil.userToJSON(learner)); + learnersJSON.add(WebUtil.userToJSON(learner, activity)); } learnerCount = monitoringService.getCountLearnersCurrentActivities(new Long[] { activityId }) .get(activityId); @@ -1133,7 +1130,7 @@ indfm.format(tzFinishDate) + " " + user.getTimeZone().getDisplayName(userLocale)); } - List contributeActivities = getContributeActivities(lessonId, false); + List contributeActivities = getContributeActivities(lessonId, false, false); if (contributeActivities != null) { responseJSON.set("contributeActivities", JsonUtil.readArray(contributeActivities)); } @@ -1203,7 +1200,7 @@ } ObjectNode responseJSON = JsonNodeFactory.instance.objectNode(); - List contributeActivities = getContributeActivities(lessonId, true); + List contributeActivities = getContributeActivities(lessonId, true, true); if (contributeActivities != null) { responseJSON.set("contributeActivities", JsonUtil.readArray(contributeActivities)); } @@ -1301,7 +1298,7 @@ if (!latestLearners.isEmpty()) { ArrayNode learnersJSON = JsonNodeFactory.instance.arrayNode(); for (User learner : latestLearners) { - ObjectNode userJSON = WebUtil.userToJSON(learner); + ObjectNode userJSON = WebUtil.userToJSON(learner, activity); if (leaders.contains(learner.getUserId().longValue())) { userJSON.put("leader", true); } @@ -1630,7 +1627,8 @@ } @SuppressWarnings("unchecked") - private List getContributeActivities(Long lessonId, boolean skipCompletedBranching) { + private List getContributeActivities(Long lessonId, boolean skipCompletedBranching, + boolean skipOpenedGates) { List contributeActivities = monitoringService.getAllContributeActivityDTO(lessonId); Lesson lesson = lessonService.getLesson(lessonId); @@ -1658,7 +1656,7 @@ contributeEntry.setIsComplete(learners.isEmpty()); } - if (!contributeEntry.getIsRequired() || contributeEntry.getIsComplete()) { + if (!contributeEntry.getIsRequired() || (skipOpenedGates && contributeEntry.getIsComplete())) { entryIterator.remove(); } } Index: lams_monitoring/web/tblmonitor/tblmonitor.jsp =================================================================== diff -u -rb5d2a6851ee4797e641081bd5e6a1f28f78c30a6 -rcf258bae4dd72eab7a6f5bc895b96966caafaf06 --- lams_monitoring/web/tblmonitor/tblmonitor.jsp (.../tblmonitor.jsp) (revision b5d2a6851ee4797e641081bd5e6a1f28f78c30a6) +++ lams_monitoring/web/tblmonitor/tblmonitor.jsp (.../tblmonitor.jsp) (revision cf258bae4dd72eab7a6f5bc895b96966caafaf06) @@ -14,7 +14,10 @@
@@ -457,4 +793,6 @@ <%@ include file="parts/advanceoptions.jsp"%> +<%@ include file="parts/timeLimit.jsp"%> + <%@ include file="parts/dateRestriction.jsp"%> Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/AuthoringController.java =================================================================== diff -u -r8bc318f44b193b1d926fcc62211ca1b4b18d9b30 -rcf258bae4dd72eab7a6f5bc895b96966caafaf06 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/AuthoringController.java (.../AuthoringController.java) (revision 8bc318f44b193b1d926fcc62211ca1b4b18d9b30) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/AuthoringController.java (.../AuthoringController.java) (revision cf258bae4dd72eab7a6f5bc895b96966caafaf06) @@ -365,7 +365,6 @@ boolean isMcqQuestionType = qbQuestion.getType() == QbQuestion.TYPE_MULTIPLE_CHOICE; if (!isMcqQuestionType) { form.setFeedback(qbQuestion.getFeedback()); - form.setAnswerRequired(qbQuestion.isAnswerRequired()); form.setCaseSensitive(qbQuestion.isCaseSensitive()); form.setAutocompleteEnabled(qbQuestion.isAutocompleteEnabled()); } @@ -512,7 +511,6 @@ //handle VSA question type if (!isMcqQuestionType) { qbQuestion.setFeedback(form.getFeedback()); - qbQuestion.setAnswerRequired(form.isAnswerRequired()); qbQuestion.setCaseSensitive(form.isCaseSensitive()); qbQuestion.setAutocompleteEnabled(form.isAutocompleteEnabled()); } Index: lams_tool_scratchie/web/pages/authoring/basic.jsp =================================================================== diff -u -r8bc318f44b193b1d926fcc62211ca1b4b18d9b30 -rcf258bae4dd72eab7a6f5bc895b96966caafaf06 --- lams_tool_scratchie/web/pages/authoring/basic.jsp (.../basic.jsp) (revision 8bc318f44b193b1d926fcc62211ca1b4b18d9b30) +++ lams_tool_scratchie/web/pages/authoring/basic.jsp (.../basic.jsp) (revision cf258bae4dd72eab7a6f5bc895b96966caafaf06) @@ -59,7 +59,7 @@ function importQTI(){ window.open('questions/questionFile.jsp?limitType=mc&collectionChoice=true', - 'QuestionFile','width=500,height=240,scrollbars=yes'); + 'QuestionFile','width=500,height=370,scrollbars=yes'); } // this method is called by QTI questionChoice.jsp Index: lams_tool_scratchie/web/pages/authoring/parts/itemlist.jsp =================================================================== diff -u -r2f91c77f2441c84fd78199bd4e51f1028186bf8f -rcf258bae4dd72eab7a6f5bc895b96966caafaf06 --- lams_tool_scratchie/web/pages/authoring/parts/itemlist.jsp (.../itemlist.jsp) (revision 2f91c77f2441c84fd78199bd4e51f1028186bf8f) +++ lams_tool_scratchie/web/pages/authoring/parts/itemlist.jsp (.../itemlist.jsp) (revision cf258bae4dd72eab7a6f5bc895b96966caafaf06) @@ -74,7 +74,7 @@