From 91ac912a5965b44bb506b89ae65034127a41dfb2 Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Thu, 2 Dec 2021 09:59:22 -0500 Subject: [PATCH 01/79] Add badge_assignation_notification conf setting - refs BT#19402 Allows to send a notification when a user has achieved a skill --- main/inc/lib/skill.lib.php | 28 +++++++++++++++++++++++----- main/install/configuration.dist.php | 3 +++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/main/inc/lib/skill.lib.php b/main/inc/lib/skill.lib.php index 6b5fef5d9f..48414910d2 100755 --- a/main/inc/lib/skill.lib.php +++ b/main/inc/lib/skill.lib.php @@ -257,7 +257,7 @@ class SkillRelSkill extends Model public function getDirectParents($skillId) { $skillId = (int) $skillId; - $sql = 'SELECT parent_id as skill_id + $sql = 'SELECT parent_id as skill_id FROM '.$this->table.' WHERE skill_id = '.$skillId; $result = Database::query($sql); @@ -1820,7 +1820,7 @@ class Skill extends Model public function getUserSkillRanking($user_id) { $user_id = (int) $user_id; - $sql = "SELECT count(skill_id) count + $sql = "SELECT count(skill_id) count FROM {$this->table} s INNER JOIN {$this->table_skill_rel_user} su ON (s.id = su.skill_id) @@ -2566,8 +2566,8 @@ class Skill extends Model success: function(result) { $("#" +skillId+ ".user_skill").html(result); } - }); - }); + }); + }); }); '; @@ -2978,7 +2978,8 @@ class Skill extends Model */ public function addSkillToUserBadge($user, $skill, $levelId, $argumentation, $authorId) { - $showLevels = api_get_configuration_value('hide_skill_levels') === false; + $showLevels = false === api_get_configuration_value('hide_skill_levels'); + $badgeAssignationNotification = api_get_configuration_value('badge_assignation_notification'); $entityManager = Database::getManager(); @@ -3009,6 +3010,23 @@ class Skill extends Model $entityManager->persist($skillUser); $entityManager->flush(); + if ($badgeAssignationNotification) { + $url = SkillRelUser::getIssueUrlAll($skillUser); + + $message = sprintf( + get_lang('YouXHaveAchievedTheSkillYToSeeFollowLinkZ'), + $user->getFirstname(), + $skill->getName(), + Display::url($url, $url, ['target' => '_blank']) + ); + + MessageManager::send_message( + $user->getId(), + get_lang('YouHaveAchievedANewSkill'), + $message + ); + } + return $skillUser; } } diff --git a/main/install/configuration.dist.php b/main/install/configuration.dist.php index 2c97513cd1..0ba0e44f2f 100755 --- a/main/install/configuration.dist.php +++ b/main/install/configuration.dist.php @@ -830,6 +830,9 @@ ALTER TABLE skill_rel_course ADD CONSTRAINT FK_E7CEC7FA613FECDF FOREIGN KEY (ses // 4. Set "allow_skill_rel_items" to true //$_configuration['allow_skill_rel_items'] = false; +// Allows to send a notification when a user has achieved a skill +//$_configuration['badge_assignation_notification'] = false; + // Generate random login when importing users //$_configuration['generate_random_login'] = false; From 77c5ca0695d4b2f59b1e35a1eac502bc03715d6b Mon Sep 17 00:00:00 2001 From: NicoDucou Date: Fri, 3 Dec 2021 13:06:02 +0100 Subject: [PATCH 02/79] Language: Minor partial translation update in ES FR EN - refs BT#19402 --- main/lang/english/trad4all.inc.php | 419 +++++++++++++++++++++- main/lang/french/trad4all.inc.php | 413 +++++++++++++++++++++- main/lang/spanish/trad4all.inc.php | 539 ++++++++++++++++++++++++++++- 3 files changed, 1357 insertions(+), 14 deletions(-) diff --git a/main/lang/english/trad4all.inc.php b/main/lang/english/trad4all.inc.php index 5818c9fe5e..dcd5956647 100644 --- a/main/lang/english/trad4all.inc.php +++ b/main/lang/english/trad4all.inc.php @@ -5831,7 +5831,7 @@ $Item = "Item"; $ConfigureDashboardPlugin = "Configure Dashboard Plugin"; $EditBlocks = "Edit blocks"; $Never = "Never"; -$YourAccountIsActiveYouCanLoginAndCheckYourCourses = "Dear user, +$YourAccountIsActiveYouCanLoginAndCheckYourCourses = "Dear user, Your account has now been activated on the platform. Please login and enjoy your courses."; $SessionFields = "Session fields"; @@ -8005,11 +8005,11 @@ $SpecificDate = "Specific dispatch date"; $BaseDate = "Dispatch based on the session's start/end dates"; $AfterOrBefore = "After or before"; $Before = "Before"; -$ScheduleAnnouncementDescription = "This form allows scheduling announcements to be sent automatically to the students who are taking a course in a session. +$ScheduleAnnouncementDescription = "This form allows scheduling announcements to be sent automatically to the students who are taking a course in a session. -There are two types of announcements that can be sent: +There are two types of announcements that can be sent: -Specific date: In this case a specific day is selected to make the announcement. +Specific date: In this case a specific day is selected to make the announcement. Based on the start / end date of the session: in this case the number of days to pass before sending the announcement must be indicated. And those days can be associated to before or after the start / end date. For example: 3 days after the start date."; $MandatorySurveyNoAnswered = "A mandatory survey is waiting your answer. To enter the course, you must first complete the survey."; @@ -8419,7 +8419,414 @@ $HideTotalScore = "Hide total score"; $HideQuestionScore = "Hide question score"; $SaveAnswers = "Save answers"; $SaveAllAnswers = "Pre-fill with answers from previous attempt"; - $UserXReportedPostXInForumX = 'L\'utilisateur %s a signalé le message %s du forum %s'; - +$SubscribeUsersToAllForumNotifications = "Subscribe automatically all users to all forum notifications"; +$ExerciseDirectPopUp = "Direct feedback as pop-up"; +$MinStartDate = "First connection"; +$MaxEndDate = "Last connection"; +$TotalDuration = "Total time spent"; +$RealisationCertificate = "Certificate of achievement"; +$SurveysReport = "Surveys report"; +$EnterYourNewPassword = "Enter your new password here."; +$RepeatYourNewPassword = "Type your new password once again, to reduce the likeliness of typing errors."; +$ExtractionFromX = "Extraction from %s"; +$Compilatio = "Compilatio"; +$CompilatioDocumentTextNotImage = "Verify that it contains text (and not only images)"; +$CompilatioDocumentNotCorrupt = "and that it is not corrupted"; +$CompilatioAnalysis = "Analyse"; +$CompilatioAnalysisPercentage = "(Pourcentage of file analysis)"; +$CompilatioWaitingAnalysis = "Pending Analysis"; +$CompilatioAwaitingAnalysis = "Waiting for analysis"; +$CompilatioAnalysisEnding = "Ending analysis"; +$CompilatioProtectedPdfVerification = "If the file is in pdf format, check that it is not protected by modification."; +$CompilatioConnectionWithServer = "Connecting with the Compilatio server"; +$CompilatioWithCompilatio = "with Compilatio"; +$CompilatioStartAnalysis = "Start Compilatio analysis"; +$CompilatioSeeReport = "See report"; +$CompilatioNonToAnalyse = "Your selection contains no jobs to analyze. Only jobs managed by Compilatio and not already scanned can be sent."; +$CompilatioComunicationAjaxImpossible = "AJAX communication with the Compilatio server impossible. Please retry later."; +$UserClassExplanation = "Information: The list of classes below contains the list of classes you have already registered in your course. If this list is empty, use the + green above to add classes."; +$InsertTwoNames = "Insert your two names"; +$AddRightLogo = "Add right logo"; +$LearnpathUseScoreAsProgress = "Use score as progress"; +$LearnpathUseScoreAsProgressComment = "Use the score returned, by the only SCO in this learning path, as the progress indicator in the progress bar. This modifies the SCORM behaviour in the strict sense, but improves visual feedback to the learner."; +$Planned = "Planned"; +$InProgress = "In progress"; +$Cancelled = "Cancelled"; +$Finished = "Finished"; +$SessionStatus = "Session status"; +$UpdateSessionStatus = "Update session status"; +$SessionListCustom = "Custom list"; +$NoStatus = "No status"; +$CAS3Text = "CAS 3"; +$GoBackToVideo = "Go back to video"; +$UseLearnpathScoreAsProgress = "Use score as progress"; +$UseLearnpathScoreAsProgressInfo = "Some SCORM learning paths, specifically those with one single SCO, can report their progress as the SCO's score (cmi.core.score.raw). By checking this option (only available for single SCO learning paths), Chamilo will show the progress based on the score received from the SCO item. Beware that, by using this trick, you lose the ability to get any real score from the item."; +$ThereIsASequenceResourceLinkedToThisCourseYouNeedToDeleteItFirst = "There is a sequence resource linked to this course. You must delete this link first."; +$QuizPreventBackwards = "Prevent moving backwards to previous questions"; +$UploadPlugin = "Upload plugin"; +$PluginUploadPleaseRememberUploadingThirdPartyPluginsCanBeDangerous = "Please remember that uploading third party plugins can be harmful to both your portal and your server. Always ensure you install plugins from secure sources or that you can count on professional support from their developers."; +$PluginUploadingTwiceWillReplacePreviousFiles = "Uploading the same plugin more than once will overwrite the previous plugin files. As in the first upload, uploading a third party plugin can have harmful effects."; +$UploadNewPlugin = "Select the new plugin"; +$PluginUploadIsNotEnabled = "The third party plugins upload is not enabled. Make sure the 'plugin_upload_enable' is set to 'true' in the platform configuration file."; +$PluginUploaded = "Plugin uploaded"; +$PluginOfficial = "Official"; +$PluginThirdParty = "Third party"; +$ErrorPluginOfficialCannotBeUploaded = "Your plugin has the same name as an official plugin. Official plugins cannot be overwritten. Please change your plugin's zip file name."; +$AllSessionsShort = "All"; +$ActiveSessionsShort = "Active"; +$ClosedSessionsShort = "Closed"; +$FirstnameLastnameCourses = "Courses of %s %s"; +$CanNotSubscribeToCourseUserSessionExpired = "You cannot subscribe to the course any more because your session has expired."; +$CertificateOfAchievement = "Certificate of achievement"; +$CertificateOfAchievementByDay = "Certificate of achievement by day"; +$ReducedReport = "Reduced report"; +$NotInCourse = "Outside courses"; +$LearnpathCategory = "Learnpaths category"; +$MailTemplates = "Mail templates"; +$AnEmailToResetYourPasswordHasBeenSent = "An email to reset your password has been sent."; +$TotalNumberOfAvailableCourses = "Total number of available courses"; +$NumberOfMatchingCourses = "Number of matching courses"; +$SessionsByDate = "Sessions by date"; +$GeneralStats = "Global statistics"; +$Weeks = "Weeks"; +$SessionCount = "Sessions count"; +$SessionsPerWeek = "Sessions per week"; +$AverageUserPerSession = "Average number of users per session"; +$AverageSessionPerGeneralCoach = "Average number of sessions per general session coach"; +$SessionsPerCategory = "Sessions per category"; +$SessionsPerLanguage = "Sessions per language"; +$CountOfSessions = "Number of sessions"; +$CourseInSession = "Courses in sessions"; +$UserStats = "Users statistics"; +$TotalNumberOfStudents = "Total number of students"; +$UsersCreatedInTheSelectedPeriod = "Users created in the selected period"; +$UsersByLanguage = "Users per language"; +$Count = "Count"; +$SortKeys = "Sort by"; +$SubscriptionCount = "Subscription count"; +$VoteCount = "Vote count"; +$ExportAsCompactCSV = "Export as compact CSV"; +$PromotedMessages = "Promoted messages"; +$SendToGroupTutors = "Publish for group tutors"; +$GroupSurveyX = "Group survey for %s"; +$HelloXGroupX = "Hi %s

As group tutor for the group %s you are invited to participate at the following survey :"; +$SurveyXMultiplicated = "Survey %s multiplicated"; +$SurveyXNotMultiplicated = "Survey %s not multiplicated"; +$ExportSurveyResults = "Export survey results"; +$PointAverage = "Average score"; +$TotalScore = "Score Sum"; +$ExportResults = "Export results"; +$QuizBrowserCheckOK = "Your browser has been verified. You can safely proceed."; +$QuizBrowserCheckKO = "Your browser could not be verified. Please try again, or try another browser or device before starting your test."; +$PartialCorrect = "Partially correct"; +$XAnswersSavedByUsersFromXTotal = "%d / %d answers saved."; +$TestYourBrowser = "Test your browser"; +$DraggableQuestionIntro = "Sort the following options from the list as you see fit by dragging them to the lower areas. You can put them back in this area to modify your answer."; +$AverageTrainingTime = "Average time in the course"; +$UsersActiveInATest = "Users active in a test"; +$SurveyQuestionSelectiveDisplay = "Selective display"; +$SurveyQuestionSelectiveDisplayComment = "This question, when located on a single survey page with a first multiple choice question, will only show if the first *option* of the first question is selected. For example, 'Did you go on holiday?' -> if answering the first option 'Yes', the selective display question will appear with a list of possible holiday locations to select from."; +$SurveyQuestionMultipleChoiceWithOther = "Multiple choice with free text"; +$SurveyQuestionMultipleChoiceWithOtherComment = "Offer some pre-defined options, then let the user answer by text if no option matches."; +$Multiplechoiceother = "Multiple choice with 'other' option"; +$SurveyOtherAnswerSpecify = "Other..."; +$SurveyOtherAnswer = "Please specify:"; +$UserXPostedADocumentInCourseX = "User %s has posted a document in the Assignments tool in the course %s"; +$DownloadDocumentsFirst = "Download documents first"; +$FileXHasNoData = "File %s is empty or only contains empty lines."; +$FileXHasYNonEmptyLines = "File %s has %d non-empty lines."; +$DuplicatesOnlyXUniqueUserNames = "There are duplicates: only %d unique user names were extracted."; +$NoLineMatchedAnyActualUserName = "No line matched any actual user name."; +$OnlyXLinesMatchedActualUsers = "Only %d lines matched actual users."; +$TheFollowingXLinesDoNotMatchAnyActualUser = "The following %d line(s) do not match any actual user:"; +$XUsersAreAboutToBeAnonymized = "%d users are about to be anonymized :"; +$LoadingXUsers = "Loading %d users..."; +$AnonymizingXUsers = "Anonymizing %d users..."; +$AllXUsersWereAnonymized = "All %d users were anonymized."; +$OnlyXUsersWereAnonymized = "Only %d users were anonymized."; +$AttemptedAnonymizationOfTheseXUsersFailed = "Attempted anonymization of the following %d users failed:"; +$PleaseUploadListOfUsers = "Please upload a text file listing the users to be anonymized, one username per line."; +$InternalInconsistencyXUsersFoundForYUserNames = "Internal inconsistency found : %d users found from %d submitted usernames. Please start over."; +$BulkAnonymizeUsers = "Anonymise users list"; +$UsernameList = "Username list"; +$UsersAboutToBeAnonymized = "Users about to be anonymized:"; +$CouldNotReadFile = "Could not read file."; +$CouldNotReadFileLines = "Could not read file lines."; +$CertificatesSessions = "Certificates in sessions"; +$SessionFilterReport = "Filter certificates in sessions"; +$UpdateUserListXMLCSV = "Update user list"; +$DonateToTheProject = "Chamilo is an Open Source project and this portal is provided to our community free of charge by the Chamilo Association, which pursues the goal of improving the availability of a quality education around the globe.

+However, developing Chamilo and providing this service are expensive and having a little bit of help from you would go a long way to ensure these services improve faster over time.

+Creating a course on this portal is one of the most resource-intensive operation. Please consider making a contribution to the Chamilo Association before creating this course to help keep this service free for all!"; +$MyStudentPublications = "My assignments"; +$AddToEditor = "Add to editor"; +$ImageURL = "Image URL"; +$PixelWidth = "px width"; +$AddImageWithZoom = "Add image with zoom"; +$DeleteInAllLanguages = "Delete in all languages"; +$MyStudentsSchedule = "My students schedule"; +$QuizConfirmSavedAnswers = "I accept the number of saved responses in this section."; +$QuizConfirmSavedAnswersHelp = "If you are not satisfied, do not check the acceptance box and consult the course manager or the platform administrator."; +$TCReport = "Student's superior follow up"; +$TIReport = "General Coaches planning"; +$StudentPublicationsSent = "Sent or past assignments"; +$PendingStudentPublications = "Pending assignments"; +$MyStudentPublicationsTitle = "All Assignments"; +$MyStudentPublicationsExplanation = "You will find below all your assignment from all the courses and session in which you are registered."; +$RequiredCourses = "Required courses"; +$SimpleCourseList = "Standard List"; +$AdminCourseList = "Management List"; +$AnonymizeUserSessions = "Anonymize user's sessions"; +$ContinueLastImport = "Continue last import"; +$Notifications = "Notifications"; +$Justification = "Justification"; +$PeriodicExport = "Periodic export"; +$Dates = "Dates"; +$ErrorPluginFilesExtensionsInsideZip = "Error: Some of the files inside the zip package have unauthorized extensions."; +$UsersByStatus = "Users by status"; +$SessionsPerStatus = "Sessions per status"; +$UsersByTargetLanguage = "Users by target language"; +$UsersByCareer = "Users by career"; +$UsersByContract = "Users by contract"; +$UsersByCertificate = "Users by certificate"; +$UsersByAge = "Users by age"; +$ContinueImport = "Continue the import"; +$LDAPConnectFailed = "LDAP connect operation failed."; +$LDAPBindFailed = "ldap_bind() failed."; +$LDAPSearchFailed = "ldap_search() failed."; +$LDAPFirstEntryFailed = "ldap_first_entry() failed."; +$LDAPGetValuesFailed = "ldap_get_values() failed."; +$MoreThanOneAttributeValueFound = "More than one attribute value was found."; +$MoreThanOneUserMatched = "More than one user matched."; +$CourseCodeConfirmation = "Course code confirmation"; +$UnsupportedQtiVersion = "Unsupported IMS/QTI version."; +$ExportAllCertificatesToZIP = "Export all certificates to ZIP"; +$CurrentScore = "Current score"; +$AddAttempt = "Add attempt"; +$SurveysWordInASCII = "survey"; +$PrivateBetweenUsers = "Private between users"; +$Nothing = "Nothing"; +$CompilatioAnalysisInProgress = "Compilatio analysis in progress"; +$AccountExpiration = "Account expiration"; +$JustificationExpiration = "Justification expiration"; +$JustificationType = "Justification type"; +$Persistent = "Persistent"; +$LogoutWithYourAccountFromX = "Logout from your %s account"; +$DaysDifference = "Days difference"; +$Graduated = "Graduated"; +$Absent = "Absent"; +$InternalDatabaseError = "Internal database error"; +$WrongNumberOfDays = "Wrong number of days"; +$SubscriptionNotAllowed = "Subscription not allowed"; +$YouPassedTheLimitOfXMinutesToSeeTheResults = "You have passed the %s minutes limit to see the results."; +$LastUpdated = "Last updated"; +$Age = "Age"; +$ExportToXls = "Export to XLS"; +$CourseLearningPathsGenericStats = "Learning paths generic stats"; +$FailedToCreateExtraFieldCasUser = "Failed to create extra field cas_user."; +$FailedUserCreation = "Failed to create user."; +$NoSuchUserInLDAP = "No such user in LDAP."; +$NoSuchUserInInternalDatabase = "No such user in the internal database."; +$CouldNotUpdateUser = "The user could not be updated."; +$ModelSessionDoesNotExist = "The template session does not exist."; +$SessionNotRegistered = "Session not registered."; +$CoursesNotAddedToSession = "Courses not added to session."; +$SessionNotFound = "Session not found."; +$UserNotFound = "User not found."; +$UserNotSubscribed = "User not subscribed."; +$NoSessionMatched = "No session matched."; +$MoreThanOneSessionMatched = "More than one session matched."; +$CouldNotLoadUser = "Could not load user."; +$LanguageUnavailable = "Language unavailable."; +$CouldNotUpdateExtraFieldValue = "Could not update extra field value."; +$UnsupportedUpdate = "Unsupported update."; +$NoUserMatched = "No user matched."; +$Resume = "Resume"; +$AttendanceFromXToY = "Attendance from %s to %s"; +$AddTime = "Add time"; +$AddUser = "Add user"; +$TimeSpentOnAssignment = "Time spent on assignment"; +$UserXSignedTheAgreementTheDateY = "User %s signed the agreement on %s"; +$Available = "Available"; +$SurveyMultipleChoiceWithOther = "Multiple choice with 'other' option"; +$CompilatioDescription = "Compilatio anti-plagiarism module"; +$CompilatioQuota = "Quotas"; +$CompilatioCreditXOnY = "Credits: %s on %s"; +$CompilatioConnectionTestSoap = "SOAP connection test..."; +$CompilatioServerConnection = "Connection to Compilatio's SOAP server"; +$CompilatioConnectionSuccessful = "Connection successful."; +$CompilatioSendTextToServer = "Sending text to the Compilatio server"; +$CompilatioTextSendingTestKeyX = "This is a text sending test to the Compilatio server via its API.\nCompilatio key used: %s"; +$CompilatioSuccessfulTransfer = "Transfer successful."; +$CompilatioFailedTransfer = "Transfer failed."; +$CompilatioNoConnection = "Could not connect to Compilatio's SOAP server."; +$CompilatioParamVerification = "Check your key, your server ports and possibly your proxy settings."; +$LastVisitedCourse = "Last visited course"; +$YouDidNotVisitACourseHereTheCourseList = "You haven't visited any courses yet, here is the list of your courses."; +$NoEntity = "No organization"; +$UserByEntityReport = "User by organization"; +$LpByAuthor = "Learning path by author"; +$SessionImportAssignments = "Import assignments from base course"; +$RedirectToPortalHome = "Redirect to the platform home page"; +$MyLps = "My learning paths"; +$LastVisitedLp = "Last visited learning path"; +$YouDidNotVisitALpHereTheLpList = "You haven't visited any learning paths yet, here is the list of your learning paths."; +$CourseUsedInOtherURL = "This course is used in at least one other portal"; +$SubscribeUserGroupsToLp = "Add classes to a learning path"; +$ReplaceFile = "Replace file"; +$SubscribeClassesToLpCategory = "Subscribe classes to category"; +$ExportResponseReport = "Export response report"; +$ResponseReport = "Response report"; +$ResultsOnlyAvailableOnline = "Results only available online"; +$QuestionStats = "Question stats"; +$WrongAnswer = "Wrong answer"; +$WrongAttemptXInCourseX = "Failure on attempt %s at %s"; +$ExerciseValidationInCourseX = "Validation of exercise at %s"; +$BlockCategoryExplanation = "You finished the questions related to this question category, it's your last chance to go back and revise those questions. Once you click on follow exercise you will go to the next question category and will not be able to go back to this part of the test."; +$RemainingTimeToFinishExercise = "Remaining time to finish exercise"; +$RemainingTimeToFinishQuestion = "Remaining time to finish question"; +$QuestionStatsDetailedReport = "Detailed questions stats"; +$MyPersonalOpenAreaHelp = "A short presentation of yourself, your professional or personal experiences and beliefs."; +$MyCompetencesHelp = "The skills you have acquired, formally or non-formally, social or technical."; +$MyDiplomasHelp = "The relevant diplomas and certificates you have obtained and you are proud of. You should specify at a minimum the title that appears on the document, the organization and the year."; +$MyTeachingCapabilitiesHelp = "Given your experience and skills, you can usually teach in the fields where your skills are at the highest level. If you feel you could indeed teach someone else in some specific field, mention it here. Otherwise leave empty."; +$UserGuides = "User guides"; +$MyProductionsHelp = "You have written a paper that you can share, or want to attach your CV for download? Add those here."; +$CorrectAttempts = "Correct attempts"; +$WrongAttempts = "Incorrect attempts"; +$StudentsWithCorrectAnswers = "Students with correct answers"; +$StudentsWithWrongAnswers = "Students with incorrect answers"; +$ContentList = "List of contents"; +$Tariff = "Tariff"; +$ToInvoice = "To invoice"; +$LearningPathItemByAuthor = "LP item by author"; +$DeleteExerciseAttempts = "Delete also the exercise attempts. If not check then the exercise results will still be available in the exercise tool."; +$ExerciseCategoriesRadarMode = "Only show a radar of scores by category, instead of a table of categories. Do not show individual scores or feedback."; +$ExerciseBlockBecausePercentageX = "All attempts blocked because you did not reach the minimum score of %s %% at one of your attemps."; +$RegisteredAuthors = "Authors that have been registered :"; +$Price = "Price"; +$PriceUpdated = "Price updated"; +$RemoveSelected = "Remove selected authors"; +$DeletedAuthors = "Authors have been removed"; +$HideCategoryTable = "Hide category table"; +$XQuestionsSelectedWithTotalScoreY = "Only %d questions will be selected based on the test configuration, for a total score of %s."; +$QuestionAlsoUsedInTheFollowingTests = "This question is also used in the following tests"; +$LinkToTestEdition = "Link to test edition"; +$MoveUsersFromCourseToSession = "Move users results from base course to a session"; +$IfYourQuizHaveHotspotQuestionsIncludedYouShouldSelectTheImagesFromTheDocuments = "If your quiz have hotspot questions included, you should select the images related from the documents."; +$BackToAttemptList = "Back to the attempt list"; +$ShowScoreEveryAttemptShowAnswersLastAttemptNoFeedback = "Show the result to the learner: Show the score, the learner's choice and his feedback on each attempt, add the correct answer and his feedback when the chosen limit of attempts is reached."; +$AddGradebookComment = "Comment"; +$LatestLoginInAnyCourse = "Latest login in a course"; +$The = "The"; +$MultiplicateQuestionsByClass = "Multiplicate questions by class"; +$MultiplicateQuestionsByUser = "Multiplicate questions by user"; +$QuestionForNextUser = "Questions about next user"; +$CourseCodeToEnteredCapitalLettersToConfirmDeletionX = "Course code to be entered in capital letters to confirm the deletion: %s"; +$BadgeXTitle = "Badge: %s"; +$PortfolioCommentFromXUser = "Comment by %s"; +$PortfolioItemFromXUser = "Portfolio item by %s"; +$CopyToMyPortfolio = "Copy to my portfolio"; +$CopyToStudentPortfolio = "Copy to student portfolio"; +$OriginallyPublishedAsXTitleByYUser = "Originally published as \"%s\" by %s"; +$OriginallyCommentedByXUserInYItem = "Originally commented by %s in \"%s\""; +$PortfolioItemAddedToStudents = "Item added to students own portfolio"; +$MarkCommentAsImportant = "Mark comment as important"; +$UnmarkCommentAsImportant = "Unmark comment as important"; +$CommentMarkedAsImportant = "Portfolio item marked as important"; +$SelectLearnerPortfolio = "Select a learner portfolio"; +$SeeMyPortfolio = "See my portfolio in this course"; +$PortfolioDetails = "Portfolio details"; +$PortfolioItemTitle = "Item title"; +$CreationDateXDate = "Creation date: %s"; +$UpdateDateXDate = "Update date: %s"; +$CategoryXName = "Category: %s"; +$DateXDate = "Date: %s"; +$PortfolioItemTitleXName = "Item title: %s"; +$NoItemsInYourPortfolio = "No items in your portfolio"; +$YouHaveNotCommented = "You have not commented"; +$PortfolioItems = "Portfolio items"; +$PortfolioComments = "Portfolio comments"; +$PortfolioCommentsMade = "Comments made"; +$QualifyThisPortfolioItem = "Grade this item"; +$PortfolioItemGraded = "Portfolio item was graded"; +$ContextForCommentToBeGrade = "Context for the comment to be grade"; +$QualifyThisPortfolioComment = "Grade this comment"; +$PortfolioCommentGraded = "Portfolio comment was graded"; +$QualifyPortfolioItems = "Grade items"; +$QualifyPortfolioComments = "Grade comments"; +$HideCorrectAnsweredQuestions = "Hide correct answered questions"; +$TheSettingXWillChangeToX = "The setting \"%s\" will change to \"%s\""; +$VerificationOfAnsweredQuestions = "Verification of answered questions"; +$StudentPublicationToCorrect = "Student's assignments to be corrected"; +$StudentPublicationCorrectionWarning = "You will find below all the work that have been submitted by students in one of your course (it could be in the base course or in a course in a session). You can filter the list selecting a specific course or a work status."; +$BackToMainPortfolio = "Back to the main course portfolio"; +$ExportMyPortfolioDataPdf = "Export my portfolio data in a PDF file"; +$ExportMyPortfolioDataZip = "Export my portfolio data in a ZIP file"; +$PortfolioCategoryFieldHelp = "Categories are for organization only in personal portfolio."; +$ExportMytPortfolioDataPdf = "Export my portfolio data to a PDF file"; +$ExportMytPortfolioDataZip = "Export my portfolio data to a ZIP file"; +$NewLearningPathSubject = "New learning path available"; +$NewLearningPathBody = "There is a new learning path called %s that has been added to your %s course. Go to this learning path here : %s"; +$XPercentCompleted = "%s %% Completed"; +$EmailToTeachersWhenNewPost = "E-mail to teachers on new user's post in the portfolio tool"; +$PortfolioAlertNewPostContent = "There is a new post by %s in the portfolio of course %s. To view it go here."; +$PortfolioAlertNewPostSubject = "[Portfolio] New post in course %s"; +$OngoingTraining = "Ongoing training"; +$QuizRemindSubject = "You have a new message from %s"; +$QuizFirstRemindBody = "Dear %s,

A new test/quiz %s has been added to course %s.

Course: %s
Test/Quiz name: %s
"; +$QuizLastRemindBody = "Visit the test/quiz page %s
"; +$QuizDhrRemindBody = "Dear %s,

As his/her parent, you are receiving this e-mail to let you know that %s just got a new test/quiz %s in course %s.

Learner: %s
Course: %s
Test/Quiz name: %s
"; +$QuizRemindDuration = "Test duration: %s
"; +$QuizRemindStartDate = "Test start date: %s
"; +$QuizRemindEndDate = "Test end date: %s
"; +$CareerDiagramLegend = "Career Diagram Legend"; +$CareerDiagramDisclaimer = "Career Diagram Disclaimer"; +$SuccessfulAttempt = "Successful Attempt"; +$FailedAttempt = "Failed attempt"; +$StudentWithSuccessfulAttempt = "Students with successful attempt"; +$StudentWithFailedAttempt = "Students with failed attempt"; +$ExerciseAttemptStatsReport = "Exercise attempt stats report"; +$ComparativeGroupReport = "Comparative group report"; +$CoursesUsage = "Courses usage"; +$HideConnectionTime = "Hide connection time"; +$CourseInWhichTheQuestionWasInitiallyCreated = "Course in which the question was initially created."; +$ApprenticeshipContract = "Apprenticeship contract"; +$ExportCcVersion13 = "Export Common Cartridge v1.3"; +$ImportCcVersion13 = "Import Common Cartridge v1.3"; +$ExportCcVersion13Info = "Export your course content in the IMS Common Cartridge 1.3 format, to share it on other platforms."; +$ImportCcVersion13Info = "Import a course in IMS Common Cartridge 1.3 format, from another platform compatible with this format. The version is important."; +$IMSCCCreated = "IMS CC file created."; +$IMSCCFile = "IMS CC file"; +$IMSCCFileImported = "IMS CC file imported."; +$IMSCCImportInstructions = "Upload any IMS CC (.imscc or .zip) file in the right version and it will be extracted directly into your course."; +$IMSCC13 = "IMS Common Cartridge v1.3"; +$HideQuestionNumber = "Hide question number"; +$PendingAttempts = "Pending attempts"; +$EditInProfile = "Edit in profile"; +$Guidance = "Guidance"; +$RemoveTime = "Remove time"; +$CopyWithSessionContent = "Copy with session content"; +$ExportByClass = "Export by class"; +$UploadAnswer = "Upload answer"; +$TokenExpiredActionAlreadyRealized = "Token expired, action already realized"; +$Corrector = "Corrector"; +$CorrectionDate = "Correction date"; +$HideAttemptsTableOnStartPage = "Hide attempts table on start page"; +$ScormAndLPMaxProgress = "Maximum progress in learning paths"; +$HideSkills = "Hide skills"; +$OptionsToHideInExport = "Options for hiding in export"; +$HideAssignment = "Hide assignments"; +$AddSurveyToCourse = "Add survey to course"; +$MoveTheCurrentSurvey = "Move the current survey"; +$ShareEventsInSessions = "Share events in course sessions"; +$AgendaEventsInBaseCourseWillBeVisibleInCourseSessions = "Agenda events in the course will be visible in sessions"; +$AgendaEventsOnlyVisibleInCurrentCourse = "Agenda events only visible in current course"; +$TestResult = "Test result"; +$FilterByLp = "Filter by Learning Path"; +$ShareForumsInSessions = "Share forums in all sessions"; +$YouHaveAchievedANewSkill = "You have achieved a new skill."; +$YouXHaveAchievedTheSkillYToSeeFollowLinkZ = "Hi, %s. You have achieved the skill \"%s\". To see the details go here: %s."; +$ToAssignNewSkillToUserClickLinkX = "To assign a new skill to this user, click here"; ?> diff --git a/main/lang/french/trad4all.inc.php b/main/lang/french/trad4all.inc.php index cf3a8ccb9f..8cfda50560 100644 --- a/main/lang/french/trad4all.inc.php +++ b/main/lang/french/trad4all.inc.php @@ -342,7 +342,7 @@ ANSWER: D ANSWER_EXPLANATION: C'est un commentaire facultatif de retour qui apparaîtra à côté de la bonne réponse."; $ImportAikenQuizExplanation = "Le format Aiken est un fichier (.txt) avec un texte simple, avec plusieurs blocs de questions, chacune séparée par une ligne blanche. La première ligne est la question, les lignes de réponse sont préfixés par une lettre et un point, et la bonne réponse vient avec le préfixe 'ANSWER'. Voir l'exemple ci-dessous."; -$ExerciseAikenErrorNoAnswerOptionGiven = "Le fichier importé comporte au moins une question sans réponse (ou les réponses ne comprennent pas la lettre de préfixe requis). Assurez-vous que chaque question a au moins une réponse et qu'elle est précédée par une lettre et un point ou une parenthèse, comme ceci: +$ExerciseAikenErrorNoAnswerOptionGiven = "Le fichier importé comporte au moins une question sans réponse (ou les réponses ne comprennent pas la lettre de préfixe requis). Assurez-vous que chaque question a au moins une réponse et qu'elle est précédée par une lettre et un point ou une parenthèse, comme ceci: A. Réponse 1"; $ExerciseAikenErrorNoCorrectAnswerDefined = "Le fichier importé comporte au moins une question sans réponse correcte définie. Assurez-vous que toutes les questions comprennent la réponse: [Lettre] ligne."; $SearchCourseBySession = "Recherche de cours par session"; @@ -2637,7 +2637,7 @@ $MailCronCourseExpirationReminderBody = "Cher/Chère %s, Nous avons remarqué que vous n'avez pas terminé le cours %s alors que sa date de fin a été établie au %s, vous laissant %s jour(s) pour le terminer. Nous vous rappelons que vous ne disposez de la possibilité de suivre ce cours qu'une fois par an. Nous vous invitons donc avec insistance à le compléter dans le délai qu'il vous reste. Vous pouvez retrouver le cours en vous connectant à la plate-forme à cette adresse: %s --- +-- Cordialement, @@ -8351,4 +8351,413 @@ $HideTotalScore = "Cacher le score total"; $HideQuestionScore = "Cacher le score de chaque question"; $SaveAnswers = "Garder les réponses"; $SaveAllAnswers = "Préremplir avec les réponses de la tentative précédente"; +$SubscribeUsersToAllForumNotifications = "Abonner automatiquement tous les utilisateurs"; +$ExerciseDirectPopUp = "Feedback immédiat en pop-up"; +$MinStartDate = "Première connexion"; +$MaxEndDate = "Dernière connexion"; +$TotalDuration = "Temps passé total"; +$RealisationCertificate = "Certificat de réalisation"; +$SurveysReport = "Rapport d'enquêtes"; +$EnterYourNewPassword = "Saisissez votre nouveau mot de passe ici."; +$RepeatYourNewPassword = "Saisissez votre nouveau mot de passe une fois de plus ici, pour éviter les erreurs."; +$ExtractionFromX = "Extraction du: %s"; +$Compilatio = "Compilatio"; +$CompilatioDocumentTextNotImage = "Vérifiez qu'il contient bien du texte (et non que des images)"; +$CompilatioDocumentNotCorrupt = "t qu'il n'est pas endomagé"; +$CompilatioAnalysis = "Analyser"; +$CompilatioAnalysisPercentage = "(%age d'analyse du fichier)"; +$CompilatioWaitingAnalysis = "Analyse en attente"; +$CompilatioAwaitingAnalysis = "En attente d'analyse"; +$CompilatioAnalysisEnding = "Finalisation de l'analyse"; +$CompilatioProtectedPdfVerification = "Si le fichier est au format pdf, vérifiez qu'il ne soit pas protégé en modification."; +$CompilatioConnectionWithServer = "Connexion avec le serveur Compilatio"; +$CompilatioWithCompilatio = "avec Compilatio."; +$CompilatioStartAnalysis = "lancer l'analyse Compilatio"; +$CompilatioSeeReport = "Voir le rapport"; +$CompilatioNonToAnalyse = "Votre sélection ne contient aucun travaux à analyser. Seul les travaux gérés par Compilatio et non déjà analysés peuvent être envoyés."; +$CompilatioComunicationAjaxImpossible = "Communication AJAX avec le serveur Compilatio impossible. Veuillez reessayer ultérieurement."; +$UserClassExplanation = "Information : La liste des classes ci-dessous contient la liste des classes que vous avez déjà inscrits à votre cours. Si cette liste est vide, utilisez le + vert ci-dessus pour ajouter des classes."; +$InsertTwoNames = "Saisir vos deux noms"; +$AddRightLogo = "Intégrer le logo en haut à droite"; +$LearnpathUseScoreAsProgress = "Utiliser le score comme avancement"; +$LearnpathUseScoreAsProgressComment = "Utiliser le score renvoyé, par le seul SCO de ce parcours d'apprentissage, comme indicateur de progression dans la barre de progression. Cela modifie le comportement SCORM au sens strict, mais améliore le retour visuel pour l'apprenant."; +$Planned = "prévue"; +$InProgress = "en cours"; +$Cancelled = "annulée"; +$Finished = "terminée"; +$SessionStatus = "Statut"; +$UpdateSessionStatus = "Actualisation du statut des sessions"; +$SessionListCustom = "Liste personnalisée"; +$NoStatus = "Sans statut"; +$CAS3Text = "CAS 3"; +$GoBackToVideo = "Retour à la vidéo"; +$UseLearnpathScoreAsProgress = "Utiliser le score comme progrès"; +$UseLearnpathScoreAsProgressInfo = "Certains parcours SCORM (en particulier ceux avec un seul SCO) peuvent rapporter leur progrès sous forme du score (cmi.core.score.raw), ce qui permet de visualiser le progrès dans Chamilo. Activer cette option si ce parcours SCORM utilise cette stratégie. Attention, en utilisant le score comme progrès, la possibilité d'obtenir le vrai score via cmi.core.score.raw sera perdue."; +$ThereIsASequenceResourceLinkedToThisCourseYouNeedToDeleteItFirst = "Il y a une ressource de séquence liée à ce cours. Vous devez d'abord éliminer ce lien."; +$QuizPreventBackwards = "Interdire le retour en arrière dans les questions précédentes"; +$UploadPlugin = "Envoyer un plugin"; +$PluginUploadPleaseRememberUploadingThirdPartyPluginsCanBeDangerous = "Merci de prendre vos précautions avant d'envoyer un nouveau plugin sur votre serveur. Les plugins non officiels peuvent avoir des conséquences négatives sur votre portail et sur votre serveur. Assurez-vous toujours d'installer un plugin depuis une source sûre ou de pouvoir compter sur le support professionnel immédiat de ses développeurs."; +$PluginUploadingTwiceWillReplacePreviousFiles = "Envoyer un même plugin plus d'une fois aura pour effet d'écraser les fichiers antérieurs du plugin. Comme pour le premier envoi, envoyer un plugin non-vérifié comporte des risques."; +$UploadNewPlugin = "Sélectionnez le nouveau plugin"; +$PluginUploadIsNotEnabled = "Le dépôt de nouveaux plugins n'est pas activé. Assurez-vous que l'option 'plugin_upload_enable' est mise à 'true' dans le fichier de configuration de la plateforme."; +$PluginUploaded = "Plugin envoyé"; +$PluginOfficial = "Officiel"; +$PluginThirdParty = "Plugin tiers"; +$ErrorPluginOfficialCannotBeUploaded = "Votre plugin a le même nom qu'un plugin officiel. Les plugins officiels ne peuvent pas être remplacés. Merci de renommer le fichier zip et le répertoire de votre plugin."; +$AllSessionsShort = "Toutes"; +$ActiveSessionsShort = "Actives"; +$ClosedSessionsShort = "Fermées"; +$FirstnameLastnameCourses = "Cours de %s %s"; +$CanNotSubscribeToCourseUserSessionExpired = "Vous ne pouvez plus vous inscrire à des cours car votre session a expiré."; +$CertificateOfAchievement = "Certificat de réalisation"; +$CertificateOfAchievementByDay = "Certificat de réalisation par jour"; +$ReducedReport = "Rapport réduit"; +$NotInCourse = "En dehors des cours"; +$LearnpathCategory = "Catégorie de parcours"; +$MailTemplates = "Modèles de courriels"; +$AnEmailToResetYourPasswordHasBeenSent = "Un mail pour réinitialiser votre mot de passe vous a été envoyé."; +$TotalNumberOfAvailableCourses = "Nombre total de cours disponibles"; +$NumberOfMatchingCourses = "Nombre de cours correspondant à la recherche"; +$SessionsByDate = "Sessions par dates"; +$GeneralStats = "Statistiques générales"; +$Weeks = "Semaines"; +$SessionCount = "Nombre de sessions"; +$SessionsPerWeek = "Sessions par semaine"; +$AverageUserPerSession = "Nombre moyen d'utilisateurs par session"; +$AverageSessionPerGeneralCoach = "Nombre de sessions par tuteur général de session"; +$SessionsPerCategory = "Sessions par catégorie"; +$SessionsPerLanguage = "Sessions par langue"; +$CountOfSessions = "Nombre de sessions"; +$CourseInSession = "Cours dans les sessions"; +$UserStats = "Statistiques utilisateurs"; +$TotalNumberOfStudents = "Nombre total d'étudiants"; +$UsersCreatedInTheSelectedPeriod = "Utilisateurs créés durant la période sélectionnée"; +$UsersByLanguage = "Utilisateurs par langue"; +$Count = "Nombre"; +$SortKeys = "Trier par"; +$SubscriptionCount = "Nombre d'inscrits"; +$VoteCount = "Nombre de vote"; +$ExportAsCompactCSV = "Export CSV compact"; +$PromotedMessages = "Messages importants"; +$SendToGroupTutors = "Publier aux tuteurs du groupe"; +$GroupSurveyX = "Enquête du groupe %s"; +$HelloXGroupX = "Bonjour %s

En tant que tuteur du groupe %s vous êtes invité à participer à l'enquête suivante :"; +$SurveyXMultiplicated = "Enquête %s démultipliée"; +$SurveyXNotMultiplicated = "Enquête %s non démultipliée"; +$ExportSurveyResults = "Exporter les résultats des enquêtes"; +$PointAverage = "Moyenne des scores"; +$TotalScore = "Somme des scores"; +$ExportResults = "Exporter les résultats"; +$QuizBrowserCheckOK = "Votre navigateur a été vérifié. Vous pouvez continuer en toute sécurité."; +$QuizBrowserCheckKO = "Votre navigateur n'a pas pu être vérifié. Essayez à nouveau ou essayez un autre navigateur ou dispositif avant de commencer votre test."; +$PartialCorrect = "Partiellement correct"; +$XAnswersSavedByUsersFromXTotal = "%d / %s réponses enregistrées."; +$TestYourBrowser = "Testez votre navigateur"; +$DraggableQuestionIntro = "Ordonnez les options suivantes dans la liste selon ce qui vous semble le plus approprié, en les glissant-déplaçant dans les cadres ci-dessous. Vous pouvez les remettre à leur place originale à tout moment pour modifier votre réponse."; +$AverageTrainingTime = "Temps moyen dans le cours"; +$UsersActiveInATest = "Utilisateurs actifs dans un test"; +$SurveyQuestionSelectiveDisplay = "Affichage sélectif"; +$SurveyQuestionSelectiveDisplayComment = "Cette question, lorsqu'elle est située sur une page isolée avec une première question de type oui/non, ne s'affichera que si la première option de la première question est sélectionnée. Par exemple, 'Êtes-vous parti en vacances?' -> seulement si la réponse est oui, la question sélective apparaîtra avec une liste d'endroits de vacances à sélectionner."; +$SurveyQuestionMultipleChoiceWithOther = "Choix multiple avec texte libre"; +$SurveyQuestionMultipleChoiceWithOtherComment = "Offrez des options pré-définies, mais laissez la possibilité à l'utilisateur/trice de répondre avec un texte libre si aucune option ne lui convient."; +$Multiplechoiceother = "Question à réponse unique avec option 'Autre'"; +$SurveyOtherAnswerSpecify = "Autre..."; +$SurveyOtherAnswer = "Merci de spécifier :"; +$UserXPostedADocumentInCourseX = "%s a publié un document dans l'outil travaux dans le cours %s"; +$DownloadDocumentsFirst = "Télécharger d'abord la pièce jointe"; +$FileXHasNoData = "Le fichier %s est vide ou ne contient que des lignes vides."; +$FileXHasYNonEmptyLines = "Le fichier %s contient %d lignes non vides."; +$DuplicatesOnlyXUniqueUserNames = "Il existe des doublons: seuls %d noms d'utilisateur uniques ont été extraits."; +$NoLineMatchedAnyActualUserName = "Aucune ligne ne correspond à un nom d'utilisateur réel."; +$OnlyXLinesMatchedActualUsers = "Seules %d lignes correspondent aux utilisateurs réels."; +$TheFollowingXLinesDoNotMatchAnyActualUser = "La ou les %d lignes suivantes ne correspondent à aucun utilisateur réel:"; +$XUsersAreAboutToBeAnonymized = "%d utilisateurs sont sur le point d'être anonymisés:"; +$LoadingXUsers = "Chargement de %d utilisateurs ..."; +$AnonymizingXUsers = "Anonymisation de %d utilisateurs ..."; +$AllXUsersWereAnonymized = "Tous les %d utilisateurs ont été anonymisés."; +$OnlyXUsersWereAnonymized = "Seuls %d utilisateurs ont été anonymisés."; +$AttemptedAnonymizationOfTheseXUsersFailed = "La tentative d'anonymisation des %d utilisateurs suivants a échoué :"; +$PleaseUploadListOfUsers = "Veuillez télécharger un fichier texte répertoriant les utilisateurs à anonymiser, un nom d'utilisateur par ligne."; +$InternalInconsistencyXUsersFoundForYUserNames = "Incohérence interne trouvée : %d utilisateurs trouvés à partir de %d noms d'utilisateur soumis. Veuillez recommencer."; +$BulkAnonymizeUsers = "Anonymiser utilisateurs par CSV"; +$UsernameList = "Liste de nom d'utilisateur"; +$UsersAboutToBeAnonymized = "Utilisateurs sur le point d'être anonymiser :"; +$CouldNotReadFile = "Impossible de lire le fichier"; +$CouldNotReadFileLines = "Impossible de lire les lignes du fichier."; +$CertificatesSessions = "Certificats en sessions"; +$SessionFilterReport = "Filtrer les certificats dans les sessions"; +$UpdateUserListXMLCSV = "Mise à jour d'utilisateurs"; +$DonateToTheProject = "Chamilo est un projet Open Source et ce portail est offert gratuitement à la communauté par l'Association Chamilo, dont l'objectif est d'améliorer la disponibilité d'une éducation de qualité partout dans le monde.

+Développer Chamilo et fournir ce service de portail gratuit sont néanmoins des tâches coûteuses, et un peu d'aide de votre part permettrait de soutenir nos efforts et de faire progresser le projet Chamilo plus rapidement sur le long terme.

+Créer un cours sur ce portail est, par ailleurs, l'un des éléments qui consomme le plus de ressources. Merci de considérer le fait de contribuer de manière symbolique au projet et nous aider à maintenir ce service gratuit pour tous en nous faisant don de quelques euros avant de créer ce cours!"; +$MyStudentPublications = "Mes travaux"; +$AddToEditor = "Ajouter à l'éditeur"; +$ImageURL = "URL de l'image"; +$PixelWidth = "largeur en px"; +$AddImageWithZoom = "Ajouter image avec zoom"; +$DeleteInAllLanguages = "Supprimer dans toutes les langues"; +$MyStudentsSchedule = "Horaire de mes élèves"; +$QuizConfirmSavedAnswers = "J'accepte le nombre de réponses enregistrées dans cette section."; +$QuizConfirmSavedAnswersHelp = "Si vous n'êtes pas satisfait, ne cochez pas la case d'acceptation et consultez le responsable du cours ou l'administrateur de la plateforme."; +$TCReport = "Suivi des supérieurs d'apprenants"; +$TIReport = "Calendrier d'occupation des tuteurs généraux"; +$StudentPublicationsSent = "Travaux envoyés ou finis"; +$PendingStudentPublications = "Travaux en cours"; +$MyStudentPublicationsTitle = "Tous les travaux"; +$MyStudentPublicationsExplanation = "Vous trouverez ci-dessous tous vos travaux de tous les cours ou les sessions où vous êtes inscrits."; +$RequiredCourses = "Cours requis"; +$SimpleCourseList = "Liste standard"; +$AdminCourseList = "Gestion administrative"; +$AnonymizeUserSessions = "Anonymiser les sessions de l'utilisateur"; +$ContinueLastImport = "Poursuivre le dernier import"; +$Notifications = "Notifications"; +$Justification = "Justification"; +$PeriodicExport = "Export périodique"; +$Dates = "Dates"; +$ErrorPluginFilesExtensionsInsideZip = "Erreur: Certains fichiers au sein du paquet ZIP portent des extensions non autorisées."; +$UsersByStatus = "Utilisateurs par statut"; +$SessionsPerStatus = "Sessions par statut"; +$UsersByTargetLanguage = "Utilisateurs par langue d'objectif"; +$UsersByCareer = "Utilisateurs par carrière"; +$UsersByContract = "Utilisateurs par contrat"; +$UsersByCertificate = "Utilisateurs par certificat"; +$UsersByAge = "Utilisateurs par âge"; +$ContinueImport = "Poursuivre l'import"; +$LDAPConnectFailed = "L'opération LDAP connect a échoué."; +$LDAPBindFailed = "ldap_bind() a échoué."; +$LDAPSearchFailed = "ldap_search() a échoué."; +$LDAPFirstEntryFailed = "ldap_first_entry() a échoué."; +$LDAPGetValuesFailed = "ldap_get_values() a échoué."; +$MoreThanOneAttributeValueFound = "Plus d'une valeur d'attribut a été trouvée."; +$MoreThanOneUserMatched = "Plus d'un utilisateur correspond."; +$CourseCodeConfirmation = "Confirmation du code de cours"; +$UnsupportedQtiVersion = "Version d'IMS/QTI non supportée."; +$ExportAllCertificatesToZIP = "Exporter tous les certificats en ZIP"; +$CurrentScore = "Score actuel"; +$AddAttempt = "Ajouter tentative"; +$SurveysWordInASCII = "enquete"; +$PrivateBetweenUsers = "Privé entre utilisateurs"; +$Nothing = "Rien"; +$CompilatioAnalysisInProgress = "Analyse Compilatio en cours"; +$AccountExpiration = "Expiration du compte"; +$JustificationExpiration = "Expiration du justificatif"; +$JustificationType = "Type de justificatif"; +$Persistent = "Persistant"; +$LogoutWithYourAccountFromX = "Me déconnecter de mon compte %s"; +$DaysDifference = "Différence de jours"; +$Graduated = "Gradué"; +$Absent = "Absent"; +$InternalDatabaseError = "Erreur interne de base de données"; +$WrongNumberOfDays = "Nombre de jours erroné"; +$SubscriptionNotAllowed = "Souscription non autorisée"; +$YouPassedTheLimitOfXMinutesToSeeTheResults = "Vous avez dépassé la limite de %s minutes pour la visualisation des résultats."; +$LastUpdated = "Dernière mise à jour"; +$Age = "Âge"; +$ExportToXls = "Exporter en XLS"; +$CourseLearningPathsGenericStats = "Statistiques génériques des parcours"; +$FailedToCreateExtraFieldCasUser = "Erreur à la création du champ de profil cas_user."; +$FailedUserCreation = "Erreur à la création de l'utilisateur."; +$NoSuchUserInLDAP = "Aucun utilisateur LDAP ne correspond."; +$NoSuchUserInInternalDatabase = "Aucun utilisateur ne correspond dans la base de données locale."; +$CouldNotUpdateUser = "L'utilisateur n'a pas pu être mis à jour."; +$ModelSessionDoesNotExist = "La session modèle n'existe pas."; +$SessionNotRegistered = "La session n'a pas été enregistrée."; +$CoursesNotAddedToSession = "Cours non ajoutés à la session."; +$SessionNotFound = "Session introuvable."; +$UserNotFound = "Utilisateur introuvable."; +$UserNotSubscribed = "Utilisateur non inscrit."; +$NoSessionMatched = "Aucune session ne correspond."; +$MoreThanOneSessionMatched = "Plus d'une session correspond."; +$CouldNotLoadUser = "Impossible de charger l'utilisateur."; +$LanguageUnavailable = "Langue indisponible."; +$CouldNotUpdateExtraFieldValue = "Impossible de mettre à jour la valeur du champ de profil."; +$UnsupportedUpdate = "Mise à jour non supportée."; +$NoUserMatched = "Aucun utilisateur ne correspond."; +$Resume = "Résumé"; +$AttendanceFromXToY = "Assistance du %s au %s"; +$AddTime = "Ajouter du temps"; +$AddUser = "Ajouter utilisateur"; +$TimeSpentOnAssignment = "Temps passé sur le travail"; +$UserXSignedTheAgreementTheDateY = "L'utilisateur %s a signé l'accord le %s"; +$Available = "Disponible"; +$SurveyMultipleChoiceWithOther = "Choix multiple avec option 'autre'"; +$CompilatioDescription = "Module Anti-plagiat Compilatio"; +$CompilatioQuota = "Quotas"; +$CompilatioCreditXOnY = "Crédits: %s sur %s"; +$CompilatioConnectionTestSoap = "Test de connexion SOAP..."; +$CompilatioServerConnection = "Connection au serveur SOAP Compilatio"; +$CompilatioConnectionSuccessful = "Connection effectuée."; +$CompilatioSendTextToServer = "Envoi d'un texte vers le serveur Compilatio"; +$CompilatioTextSendingTestKeyX = "Ceci est un test d'envoi de texte vers le serveur Compilatio via son API\nClé Compilatio utilisée: %s"; +$CompilatioSuccessfulTransfer = "Transfert réussi."; +$CompilatioFailedTransfer = "Le transfert a échoué."; +$CompilatioNoConnection = "Impossible d'effectuer la connection au serveur SOAP Compilatio"; +$CompilatioParamVerification = "érifiez votre clé, l'ouverture des ports de votre serveur et éventuellement vos paramétres de proxy."; +$LastVisitedCourse = "Dernier cours visité"; +$YouDidNotVisitACourseHereTheCourseList = "Vous n'avez encore visité aucun cours, voici la liste de vos cours."; +$NoEntity = "Aucune organisation"; +$UserByEntityReport = "Utilisateur par organisation"; +$LpByAuthor = "Parcours par auteur"; +$SessionImportAssignments = "Importer les travaux du cours de base"; +$RedirectToPortalHome = "Rediriger vers la page d'accueil de la plateforme"; +$MyLps = "Mes parcours"; +$LastVisitedLp = "Dernier parcours visité"; +$YouDidNotVisitALpHereTheLpList = "Vous n'avez encore visité aucun parcours, voici la liste de vos parcours."; +$CourseUsedInOtherURL = "Ce cours est utilisé sur au moins un autre portail"; +$SubscribeUserGroupsToLp = "Inscription de classes au parcours"; +$ReplaceFile = "Remplacer le fichier"; +$SubscribeClassesToLpCategory = "Inscrire de classes à la catégorie"; +$ExportResponseReport = "Exporter le rapport de réponse"; +$ResponseReport = "Rapport de réponses"; +$ResultsOnlyAvailableOnline = "Résultat disponible uniquement en ligne"; +$QuestionStats = "Statistiques des questions"; +$WrongAnswer = "Mauvaise réponse"; +$WrongAttemptXInCourseX = "Échec à la tentative %s de %s"; +$ExerciseValidationInCourseX = "Validation de l'exercice pour %s"; +$BlockCategoryExplanation = "Vous avez terminé les questions de cette catégorie, c'est votre dernière chance de revenir en arrière et réviser ces questions. Une fois que vous cliquerez sur le bouton pour continuer l'exercice vous passerez à la prochaine catégorie de questions et vous ne pourrez pas revenir sur cette partie de l'exercice."; +$RemainingTimeToFinishExercise = "Temps restant pour terminer l'exercice"; +$RemainingTimeToFinishQuestion = "Temps restant pour terminer la question"; +$QuestionStatsDetailedReport = "Rapport détaillé des questions"; +$MyPersonalOpenAreaHelp = "Une brève présentation de vous-même, de vos expériences professionnelles ou personnelles et de vos convictions."; +$MyCompetencesHelp = "Les compétences que vous avez acquises, formelles ou informelles, sociales ou techniques."; +$MyDiplomasHelp = "Les diplômes et certificats importants que vous avez obtenu et qui vous donnent une certaine fierté. Vous devriez spécifier au minimum le titre qui apparaît sur le document, l'organisation qui vous l'a attribué et l'année."; +$MyTeachingCapabilitiesHelp = "Sur base de votre expérience et de vos compétences, vous pouvez habituellement enseigner dans certains domaines pour lesquels vos compétences sont de haut niveau. Si vous pensez que vous pourriez enseigner à d'autres dans un de ces domaines, mentionnez-le ici. Sinon, laissez ce champ vide."; +$UserGuides = "Guides utilisateur"; +$MyProductionsHelp = "Un de vos articles a été publié, ou vous souhaiteriez mettre votre CV à disposition? Placez-les ici."; +$CorrectAttempts = "Tentatives correctes"; +$WrongAttempts = "Tentatives incorrectes"; +$StudentsWithCorrectAnswers = "Étudiants avec réponses correctes"; +$StudentsWithWrongAnswers = "Étudiants avec réponses incorrectes"; +$ContentList = "Liste de contenus"; +$Tariff = "Tarification"; +$ToInvoice = "À facturer"; +$LearningPathItemByAuthor = "Éléménts de parcours par auteur"; +$DeleteExerciseAttempts = "Supprimer également les tentatives des exercices concernés"; +$ExerciseCategoriesRadarMode = "Afficher uniquement un radar des scores par catégorie, au lieu d'un tableau de catégories. Ne montre pas les scores ou les commentaires individuels."; +$ExerciseBlockBecausePercentageX = "Toutes les tentatives ont été bloquées car vous n’avez pas atteint le score minimum de %s %% à l’une de vos tentatives."; +$RegisteredAuthors = "Auteurs qui ont été enregistrés :"; +$Price = "Prix"; +$PriceUpdated = "Prix mis à jour"; +$RemoveSelected = "Retirer les auteurs sélectionnés"; +$DeletedAuthors = "Les auteurs ont été retirés"; +$HideCategoryTable = "Cacher le tableau de catégories"; +$XQuestionsSelectedWithTotalScoreY = "Seules %d questions seront sélectionnées d'après la configuration de l'exercice, pour un score total de %s."; +$QuestionAlsoUsedInTheFollowingTests = "Question utilisée également dans les exercices suivants"; +$LinkToTestEdition = "Lien vers l'édition de l'exercice"; +$MoveUsersFromCourseToSession = "Déplacer les résultats utilisateurs de tout un cours dans/vers une session"; +$IfYourQuizHaveHotspotQuestionsIncludedYouShouldSelectTheImagesFromTheDocuments = "Si votre quiz contient des questions de type zones sur image, vous devez sélectionner les images associées dans les documents."; +$BackToAttemptList = "Retour à la liste des tentatives"; +$ShowScoreEveryAttemptShowAnswersLastAttemptNoFeedback = "Montrer le score, le choix de l'apprenant et son feedback à chaque tentative, ajouter la réponse correcte et son feedback lorsque la limite choisie de tentatives est atteinte."; +$AddGradebookComment = "Commentaire"; +$LatestLoginInAnyCourse = "Dernier accès à un cours"; +$The = "Le"; +$MultiplicateQuestionsByClass = "Multiplier les questions par classe"; +$MultiplicateQuestionsByUser = "Multiplier les questions par utilisateur"; +$QuestionForNextUser = "Questions concernant l'apprenant suivant"; +$CourseCodeToEnteredCapitalLettersToConfirmDeletionX = "Code du cours à saisir en majuscules pour confirmer la suppression : %s"; +$BadgeXTitle = "Badge : %s"; +$PortfolioCommentFromXUser = "Commenté par %s"; +$PortfolioItemFromXUser = "Item de Portfolio de %s"; +$CopyToMyPortfolio = "Copier dans mon portfolio"; +$CopyToStudentPortfolio = "Copier dans le portfolio de l'étudiant"; +$OriginallyPublishedAsXTitleByYUser = "Publier à l'origine comme %s par %s"; +$OriginallyCommentedByXUserInYItem = "Commenté à l'origine par %s dans %s"; +$PortfolioItemAddedToStudents = "Item rajouter dans le portfolio de l'apprenant"; +$MarkCommentAsImportant = "Marquer le commentaire comme important"; +$UnmarkCommentAsImportant = "Enlever la marque d'importance sur le commentaire"; +$CommentMarkedAsImportant = "Item de portfolio marqué comme important"; +$SelectLearnerPortfolio = "Choisir le portfolio d'un apprenant"; +$SeeMyPortfolio = "Voir mon portfolio dans ce cours"; +$PortfolioDetails = "Détails du portfolio"; +$PortfolioItemTitle = "Titre de l'item"; +$CreationDateXDate = "Date de création : %s"; +$UpdateDateXDate = "Date de mise à jour : %s"; +$CategoryXName = "Catégorie : %s"; +$DateXDate = "Date : %s"; +$PortfolioItemTitleXName = "Titre de l'item : %s"; +$NoItemsInYourPortfolio = "Aucun item dans votre portfolio"; +$YouHaveNotCommented = "Vous n'avez pas commenté"; +$PortfolioItems = "Items de portfolio"; +$PortfolioComments = "Commentaires de portfolio"; +$PortfolioCommentsMade = "Commentaires réalisés"; +$QualifyThisPortfolioItem = "Noter cet item"; +$PortfolioItemGraded = "L'item de portfolio a été noté"; +$ContextForCommentToBeGrade = "Context pour le commentaire à noter"; +$QualifyThisPortfolioComment = "Noter ce commentaire"; +$PortfolioCommentGraded = "Le commentaire du portfolio a été noté"; +$QualifyPortfolioItems = "Noter les items"; +$QualifyPortfolioComments = "Évaluer les commentaires"; +$HideCorrectAnsweredQuestions = "Cacher les questions qui ont eu une réponse correcte"; +$TheSettingXWillChangeToX = "Le paramètre \"%s\" sera modifié avec \"%s\""; +$VerificationOfAnsweredQuestions = "Vérification des réponses aux questions"; +$StudentPublicationToCorrect = "Travaux d'étudiant à corriger"; +$StudentPublicationCorrectionWarning = "Vous trouverez ci-dessous tous les travaux qui ont été soumis par des étudiants dans l'un de vos cours (cela peut être dans le cours de base ou dans un cours en session). Vous pouvez filtrer la liste en sélectionnant un cours spécifique ou un statut de travail."; +$BackToMainPortfolio = "Retour au portfolio principal du cours"; +$ExportMyPortfolioDataPdf = "Exporter mon portfolio au format PDF"; +$ExportMyPortfolioDataZip = "Exporter mon portfolio au format ZIP"; +$PortfolioCategoryFieldHelp = "Les catégories sont pour l'organisation du portfolio personnel uniquement."; +$ExportMytPortfolioDataPdf = "Exporter mon portfolio au format PDF"; +$ExportMytPortfolioDataZip = "Exporter mon portfolio au format ZIP"; +$NewLearningPathSubject = "Nouveau parcours disponible"; +$NewLearningPathBody = "Un nouveau parcours nommé %s a été ajouté à votre cours %s. Consulter ce parcours ici : %s"; +$XPercentCompleted = "%s %% Complété"; +$EmailToTeachersWhenNewPost = "E-mail aux enseignants quand il y a un nouveau post dans l'outil portfolio"; +$PortfolioAlertNewPostContent = "Il y a un nouveau post de %s dans le portfolio du cours %s. Pour le voir cliquer ici."; +$PortfolioAlertNewPostSubject = "[Portfolio] Nouveau post dans le cours %s"; +$OngoingTraining = "Formation(s) en cours"; +$QuizRemindSubject = "Vous avez un nouveau message de %s"; +$QuizFirstRemindBody = "Bonjour %s,

Un nouvel exercice %s a été rajouté au cours %s.

Cours : %s
Exercice : %s
"; +$QuizLastRemindBody = "Voir la page de l'exercice : %s
"; +$QuizDhrRemindBody = "Bonjour %s,

Comme parent, vous recevez ce message pour vous informer que %s a eu un nouvel exercice %s publié dans le cours %s.

Apprenant : %s
Cours : %s
Exercice : %s
"; +$QuizRemindDuration = "Durée de l'exercice : %s
"; +$QuizRemindStartDate = "Date de début de l'exercice : %s
"; +$QuizRemindEndDate = "Date de fin de l'exercice : %s
"; +$CareerDiagramLegend = "Légende du diagramme de carrière"; +$CareerDiagramDisclaimer = "Clause de non-responsabilité concernant le diagramme de carrière"; +$SuccessfulAttempt = "Tentative réussie"; +$FailedAttempt = "Tentative échouée"; +$StudentWithSuccessfulAttempt = "Apprenants avec une tentative réussie"; +$StudentWithFailedAttempt = "Apprenants avec une tentative échouée"; +$ExerciseAttemptStatsReport = "Rapport de tentatives d'exercice"; +$ComparativeGroupReport = "Rapport comparatif par groupe"; +$CoursesUsage = "Utilisation des cours"; +$HideConnectionTime = "Masquer les temps de connection"; +$CourseInWhichTheQuestionWasInitiallyCreated = "Cours dans lequel la question a été créée initialement."; +$ApprenticeshipContract = "Contrat d'apprentissage"; +$ExportCcVersion13 = "Exporter à Common Cartridge v1.3"; +$ImportCcVersion13 = "Importer depuis Common Cartridge v1.3"; +$ExportCcVersion13Info = "Exporter le contenu de votre course au format IMS Common Cartridge v1.3, pour le partager avec d'autres plateformes qui supportent ce format."; +$ImportCcVersion13Info = "Importer un cours au format IMS Common Cartridge v1.3, depuis une autre plateforme qui supporte ce format. La version est importante."; +$IMSCCCreated = "Fichier IMS CC créé."; +$IMSCCFile = "Fichier IMS CC"; +$IMSCCFileImported = "Fichier IMS CC importé."; +$IMSCCImportInstructions = "Envoyer un fichier au format IMS CC (.imscc) dans la version correcte, et il sera extrait directement au sein de votre cours."; +$IMSCC13 = "IMS Common Cartridge v1.3"; +$HideQuestionNumber = "Cacher le numéro des questions"; +$PendingAttempts = "Tentatives en attente"; +$EditInProfile = "Éditer dans le profil"; +$Guidance = "Guidance"; +$RemoveTime = "Supprimer du temps"; +$CopyWithSessionContent = "Copier avec le contenu de session"; +$ExportByClass = "Exporter par classe"; +$UploadAnswer = "Uploader la réponse"; +$TokenExpiredActionAlreadyRealized = "Token expiré, action déjà réalisée"; +$Corrector = "Correcteur"; +$CorrectionDate = "Date de correction"; +$HideAttemptsTableOnStartPage = "Masquer le tableau des tentatives sur la page de démarrage"; +$ScormAndLPMaxProgress = "Progrès maximum dans les parcours"; +$HideSkills = "Masquer les compétences"; +$OptionsToHideInExport = "Options pour masquer dans l'export"; +$HideAssignment = "Masquer les travaux"; +$AddSurveyToCourse = "Ajouter l'enquête au cours"; +$MoveTheCurrentSurvey = "Aller à l'enquête suivante"; +$ShareEventsInSessions = "Partager les événnements dans les sessions"; +$AgendaEventsInBaseCourseWillBeVisibleInCourseSessions = "Les événnements du cours seront visibles dans toutes les sessions"; +$AgendaEventsOnlyVisibleInCurrentCourse = "Les événnements du cours ne sont visibles que dans le cours de base"; +$TestResult = "Résultat du test"; +$FilterByLp = "Filtrer par parcours"; +$ShareForumsInSessions = "Partager les forums avec toutes les sessions"; +$YouHaveAchievedANewSkill = "Vous avez obtenu une nouvelle compétence."; +$YouXHaveAchievedTheSkillYToSeeFollowLinkZ = "Bonjour, %s. Vous avez obtenu la compétence \"%s\". Pour en voir les détails aller sur : %s"; +$ToAssignNewSkillToUserClickLinkX = "Pour assigner une nouvelle compétence à cet utilisateur, cliquer ici"; ?> diff --git a/main/lang/spanish/trad4all.inc.php b/main/lang/spanish/trad4all.inc.php index e105eb1694..be99d07fa5 100644 --- a/main/lang/spanish/trad4all.inc.php +++ b/main/lang/spanish/trad4all.inc.php @@ -431,13 +431,13 @@ $LatestVersionIs = "La última versión es"; $YourVersionNotUpToDate = "Su versión está actualizada"; $Hotpotatoes = "Hotpotatoes"; $ZeroMeansNoQuestionWillBeSelectedMinusOneMeansThatAllQuestionsWillBeSelected = "-1 = Todas las preguntas serán seleccionadas. 0 = Ninguna pregunta será seleccionada."; -$EmailNotificationTemplateDescription = "Puede modificar el correo enviado a los usuarios al terminar el ejercicio. Puede usar los siguientes términos: +$EmailNotificationTemplateDescription = "Puede modificar el correo enviado a los usuarios al terminar el ejercicio. Puede usar los siguientes términos: {{ student.username }} -{{ student.firstname }} +{{ student.firstname }} {{ student.lastname }} -{{ student.official_code }} -{{ exercise.title }} +{{ student.official_code }} +{{ exercise.title }} {{ exercise.start_time }} {{ exercise.end_time }} {{ course.title }} @@ -6155,7 +6155,7 @@ $LastConnexionDate = "Fecha de la última conexión"; $ToolVideoconference = "Videoconferencia"; $BigBlueButtonEnableTitle = "Herramienta de videoconferencia BigBlueButton"; $BigBlueButtonEnableComment = "Seleccione si desea habilitar la herramienta de videoconferencia BigBlueButton. Una vez activada, se mostrará como una herramienta en la página principal todos los curso. Los profesores podrán lanzar una videoconferencia en cualquier momento, pero los estudiantes sólo podrán unirse a una ya lanzada. -Si no dispone de un servidor BigBlueButton, pruebe a +Si no dispone de un servidor BigBlueButton, pruebe a configurar uno o pida ayuda a los proveedores oficiales de Chamilo. BigBlueButton es libre, pero su instalación requiere ciertas habilidades técnicas que no todo el mundo posee. Puede instalarlo por su cuenta o buscar ayuda profesional con el consiguiente costo. En la lógica del software libre, nosotros le ofrecemos las herramientas para hacer más fácil su trabajo y le recomendamos profesionales (los proveedores oficiales de Chamilo) que serán capaces de ayudarle."; $BigBlueButtonHostTitle = "Servidor BigBlueButton"; @@ -6173,7 +6173,7 @@ La carpeta de los usuarios y las carpetas que contiene de cada uno de ellos, se Si se hace visible la carpeta de los usuarios y la carpeta de uno o más alumnos, el resto de los alumnos podrán ver todo su contenido. En este caso, el alumno propietario de la carpeta también podrá desde la herramienta documentos (sólo dentro de su carpeta): crear y editar documentos web, convertir un documento web en una plantilla para uso personal, crear y editar dibujos SVG y PNG, grabar archivos de audio en formato WAV, convertir texto en audio en formato MP3, realizar capturas a través de su webcam, enviar documentos, crear carpetas, mover carpetas y archivos, borrar carpetas y archivos, y descargar copias de seguridad de su carpeta. -Por otra parte, la herramienta documentos se sincroniza con el gestor de archivos del editor web, así que los cambios en la gestión de los documentos realizados en una u otra afectarán a ambas. +Por otra parte, la herramienta documentos se sincroniza con el gestor de archivos del editor web, así que los cambios en la gestión de los documentos realizados en una u otra afectarán a ambas. Así pues, la carpeta de usuario no sólo es un lugar para depositar los archivos, sino que se convierte en un completo gestor de los documentos que los estudiantes utilizan durante el curso. Además, recuerde que cualquier usuario podrá copiar un archivo, que sea visible, de cualquier carpeta de la herramienta documentos (sea o no la suya) a su portafolios o área personal de documentos de la red social, donde estará disponible para que lo pueda usar en otros cursos."; $HelpFolderChat = "INFORMACIÓN SOLO VISIBLE POR EL PROFESORADO:\nEsta carpeta contiene todas las sesiones que se han realizado en el chat. Aunque muchas veces las sesiones en el chat pueden ser triviales, en otras pueden ser dignas de ser tratadas como un documento más de trabajo. Para ello, sin cambiar la visibilidad de esta carpeta, haga visible el archivo y enlácelo donde considere oportuno. No se recomienda hacer visible esta carpeta."; @@ -8326,4 +8326,531 @@ $DifferenceOfDaysAndCalendar = "Diferencia entre días y calendario"; $SkillUserList = "Lista de competencias y usuarios"; $CourseId = "ID de curso"; $CareDetailView = "Vista detallada de vida estudiantil"; +$MoreDataAvailableInTheDatabaseButTrunkedForEfficiencyReasons = "Más datos disponibles en nuestra base de datos pero truncados por razones de eficiencia."; +$SendAnnouncementCopyToMyself = "Enviarme una copia por e-mail."; +$CourseHoursDuration = "Duración del curso (h)"; +$AnnouncementWillBeSentTo = "El anuncio será enviado a"; +$FrmReadOutTextIntro = "Necesita adjuntar un archivo de audio de acuerdo al texto, haciendo click en el ícono %s."; +$CreateReadOutText = "Crear texto leído"; +$OutstandingStudents = "Estudiantes destacados"; +$PercentileScoresDistribution = "Distribución porcentual de notas"; +$ProgressObtainedFromLPProgressAndTestsAverage = "Nota: Este progreso es obtenido a través de una combinación del progreso en las lecciones y de las notas promedias en los ejercicios"; +$CreateNewSurveyDoodle = "Crear una nueva encuesta de tipo Doodle"; +$RemoveMultiplicateQuestions = "Eliminar las preguntas demultiplicadas"; +$MultiplicateQuestions = "Multiplicar las preguntas"; +$QuestionTags = "Puedes usar las etiquetas {{class_name}} y {{student_full_name}} en la pregunta para poder multiplicar las preguntas. +En la página de la lista de encuestas en la columna de acción, hay un botón para multiplicar las preguntas que buscará la etiqueta {{class_name}} y duplicará la pregunta para todas las clases inscritas al curso y le cambiará el nombre con el nombre de la clase. +También agregará un separador de página para hacer una nueva página para cada clase. +Luego buscará la etiqueta {{student_full_name}} y duplicará la pregunta para todos los estudiantes de la clase (para cada clase) y le cambiará el nombre con el nombre completo del estudiante."; +$CreateMeeting = "Crear encuesta de reunión"; +$QuestionForNextClass = "Preguntas para la siguiente clase"; +$NewExerciseAttemptDisabled = "El portal no permite de iniciar ejercicios por le momento, favor de regresar un poquito mas tarde."; +$PersonalDataOfficer = "Responsable de la protección de datos"; +$MaxNumberSubscribedStudentsReached = "Se ha llegado al numero máximo de alumnos inscritos en el curso, no se puede inscribir mas."; +$UserXAddedToCourseX = "El usuario %s ha sido registrado al curso %s"; +$LpMinTime = "Tiempo mínimo (min)"; +$LpMinTimeDescription = "Tiempo mínimo (en minutos) que el estudiante debe permanecer en la lección para poder acceder a la siguiente."; +$LpMinTimeWarning = "No ha alcanzado el tiempo mínimo en la lección."; +$YouHaveSpentXTime = "Has invertido %s"; +$TimeSpentInLp = "Tiempo en la lección"; +$StudentXFinishedLp = "El estudiante %s ha finalizado sus lecciones."; +$IHaveFinishedTheLessonsNotifyTheTeacher = "He finalizado las lecciones del curso. Notificar al profesor."; +$TheStudentXHasFinishedTheCourseYLearningPaths = "El estudiante %s ha finalizado las lecciones del curso %s"; +$ThisQuestionExistsInAnotherExercisesWarning = "Esta pregunta se usa en otros ejercicios. Si continúa con su edición, los cambios afectarán a todos los ejercicios que contienen esta pregunta."; +$TimeSpentTimeRequired = "Tiempo invertido / Tiempo mínimo requerido"; +$ProgressSpentInLp = "Progreso contenidos"; +$InSessionXYouHadTheFollowingResults = "En la sesión %s, usted tiene los siguientes resultados"; +$TimeSpent = "Tiempo empleado"; +$NumberOfVisits = "Número de visitas"; +$FormationUnit = "Unidad de capacitación"; +$GlobalProgress = "Progreso global"; +$AttestationOfAttendance = "Atestación de asistencia"; +$DontShowScoreOnlyWhenUserFinishesAllAttemptsButShowFeedbackEachAttempt = "No mostrar el puntaje (sólo cuando el usuario finaliza todos los intentos) pero mostrar la retroalimentación por cada intento."; +$ExerciseRankingMode = "Modo clasificación: No mostrar los detalles de resultados pregunta por pregunta y mostrar una tabla con la clasificación de todos los demás usuarios."; +$BackToTop = "Regreso al inicio"; +$PersonalDataTreatmentTitleHelp = "¿Qué es lo que consideramos datos personales?"; +$PersonalDataCollectionTitleHelp = "¿Porqué recolectamos estos datos?"; +$PersonalDataRecordingTitleHelp = "¿Dónde registramos los datos? (en qué sistema, alojado dónde, accesible para qué empresa que se encarga de los servidores, etc.)"; +$PersonalDataOrganizationTitleHelp = "¿Cómo están estructurados los datos? ¿En qué medida la organización de los datos protege su seguridad?... ¿Tiene procesos establecidos que aseguran que un hacker no podrá recolectar todos los datos personales en el primer intento? ¿están cifrados?)"; +$PersonalDataStructureTitleHelp = "¿Cómo se estructuran los datos en la aplicación? (una solo ficha para todos los datos, tiene alguna categorización / etiqueta, ...)"; +$PersonalDataConservationTitleHelp = "¿Cuánto tiempo guardamos los datos? ¿Existen datos que expiran a pesar de que la cuenta siga activa? ¿Cuánto tiempo los guardamos después del último uso del sistema?"; +$PersonalDataAdaptationTitleHelp = "¿Qué cambios podemos hacer a los datos? ¿Qué cambios se pueden hacer a los datos sin afectar el servicio?"; +$PersonalDataExtractionTitleHelp = "¿Para qué extraemos datos (hacia otros procesos internos) y cuáles son?"; +$PersonalDataConsultationTitleHelp = "¿Quién puede consultar los datos personales?, ¿Con qué propósito?"; +$PersonalDataUsageTitleHelp = "¿Cómo y para qué podemos usar los datos personales?"; +$PersonalDataCommunicationTitleHelp = "¿Con quién podemos compartirlos?, ¿En qué oportunidades?, ¿A través de qué procesos (seguros o no)?"; +$PersonalDataInterconnectionTitleHelp = "¿Tenemos otro sistema con el cual Chamilo interactúa? ¿Cuál es el proceso de interconexión? ¿Cuáles son los datos intercambiados y de qué manera?"; +$PersonalDataLimitationTitleHelp = "¿Cuáles son los límites que respetaremos siempre al usar datos personales? ¿Hasta qué punto podemos llegar?"; +$PersonalDataDeletionTitleHelp = "¿Después de cuánto tiempo borramos los datos? (evento, último uso, vigencia del contrato, etc.) ¿Cuáles son los procesos de eliminación?"; +$PersonalDataDestructionTitleHelp = "¿Qué pasa si los datos son destruidos como consecuencia de una fallo técnico? (borrado no autorizado o pérdida de material, por ejemplo)"; +$PersonalDataProfilingTitleHelp = "¿Con qué propósito hacemos un tratamiento de datos personales? ¿Filtramos el acceso que los usuarios tienen a ciertas partes de nuestra aplicación? (discriminación negativa o positiva)"; +$SearchUsersByName = "Por nombre"; +$GlobalChat = "Chat"; +$AskRevision = "Solicitar revisión"; +$FeatureDisabledBecauseOfUnmaintainedThirdPartyLibraries = "Esta funcionalidad ha sido desactivada porque las librerías de terceros de las cuales depende ya no están mantenidas."; +$SearchUserByGeolocalization = "Por geolocalización"; +$GiveRevision = "Dar revisión"; +$ForumPostReported = "Post reportado"; +$UserXReportedPostXInForumX = "El usuario %s ha reportado el mensaje %s en el foro %s"; +$MyCommunities = "Mis comunidades"; +$SeeAllCommunities = "Ver todas las comunidades"; +$HideForumNotifications = "Ocultar las notificaciones del foro"; +$Forum_categoryFields = "Campos de categoría de foro"; +$Forum_postFields = "Campos de post de Foro"; +$ExerciseShowOnlyGlobalScoreAndCorrectAnswers = "Mostrar sólo la nota global (no la nota de cada pregunta) y mostrar sólo la respuesta correcta, no las incorrectas"; +$Reported = "Reportado"; +$FromTimeX = "De %s"; +$ToTimeX = "a %s"; +$SurveyInviteLink = "Enlace de invitación a la encuesta"; +$RevisionProposed = "Revisión propuesta"; +$SessionsPlanCalendar = "Calendario de planificación de sesiones"; +$QuizQuestionsLimitPerDay = "Límite de preguntas por día"; +$QuizQuestionsLimitPerDayComment = "Si está opción tiene un valor superior a cero, prohibirá el ingreso a un ejercicio que, en combinación con los ejercicios anteriores, supera el límite de preguntas diarias. Por ejemplo, si el límite fuera de 50 preguntas por día y un alumno hubiese pasado dos ejercicios de 20 preguntas cada uno, no lo dejaría ingresar a un nuevo ejercicio de 20 preguntas (20+20+20=60 > 50). Sin embargo, lo dejaría entrar en un ejercicio de 10 preguntas todavía (20+20+10=50)."; +$QuizQuestionsLimitPerDayXReached = "Lo sentimos, ha alcanzado la cantidad máxima de preguntas (%s) por hoy. Vuelva a intentarlo mañana."; +$VoteLike = "Me gusta"; +$VoteDislike = "No me gusta"; +$GenerateStats = "Generar estadísticas"; +$BasicCourseDocuments = "Documentos básicos del curso"; +$WeekX = "Semana %s"; +$QuizWrongAnswerHereIsTheCorrectOne = "Su selección ha sido errónea, la correcta es:"; +$ThisQuizCanBeEmbeddable = "Este ejercicio puede ser integrado con videos o contenido móvil"; +$SearchGeolocalization = "Localizar por esta dirección"; +$LegalTermsAgreementStatus = "Estado de validación de condiciones de uso"; +$HideSurveyInvitationLink = "Esconder el enlace de invitación a la encuesta"; +$LeaveAMessage = "Deje un mensaje"; +$OrphanQuestion = "Pregunta huérfana"; +$WelcomeToPortalXInCourseSessionX = "Bienvenid@ en el portal %s, Curso/sesión: %s"; +$WelcomeToPortalXInCourseSessionXCoursePartOfCareerX = "Bienvenid@ en el portal %s en el curso %s, parte de la carrera %s"; +$YourNextModule = "Su próximo módulo"; +$FirstLesson = "Primera lección"; +$ImportCourseTeachersAsCourseCoach = "Importar los profesores del curso como tutores del curso en la session"; +$ResumeImport = "Reanudar importación"; +$Candidate = "Candidato"; +$GeneralTotal = "Total general"; +$Domains = "Dominios"; +$ScormStartAttemptDate = "Fecha"; +$LoginsByDate = "Inicios de sesión por fecha"; +$AllowHtaccessScormImport = "Habilitar archivo htaccess en el importe SCORM"; +$ExerciseAutoEvaluationAndRankingMode = "Mostrar sólo la nota global (no la nota de cada pregunta) y mostrar la respuesta correcta y la respuesta seleccionada por el alumno + modo clasificación."; +$YouAreReceivingACopyBecauseYouAreACourseCoach = "Usted recibe esta copia en calidad de tutor de este curso"; +$GenerateReport = "Generar reporte"; +$VersionFromVersionFile = "Versión del archivo version"; +$VersionFromConfigFile = "Versión del archivo de configuración"; +$TheVersionFromTheVersionFileIsUpdatedWithEachVersionIfMainInstallDirectoryIsPresent = "La version del archivo version.php es actualizada a cada actualización del software, pero solo está disponible si la carpeta main/install/ está presente en el disco."; +$TheVersionFromTheConfigurationFileShowsOnTheAdminPageButHasToBeChangedManuallyOnUpgrade = "La versión del archivo de configuración principal se muestra en la página principal de administración, pero tiene que ser modificada manualmente a cada actualización de la plataforma."; +$ResultsConfigurationPage = "Configuración de la pagina de resultados"; +$HideExpectedAnswer = "Esconder la columna de respuestas esperadas"; +$HideTotalScore = "Esconder la puntuación total"; +$HideQuestionScore = "Esconder la puntuación de preguntas"; +$SaveAnswers = "Guardar respuestas"; +$SaveAllAnswers = "Prellenar con las respuestas del intento anterior"; +$SubscribeUsersToAllForumNotifications = "Inscripción automatica de todos los usuarios a todas las notificaciones de forum"; +$ExerciseDirectPopUp = "Retroalimentación inmediata como pop-up"; +$MinStartDate = "Primera conexion"; +$MaxEndDate = "Ultima conexion"; +$TotalDuration = "Tiempo total pasado"; +$RealisationCertificate = "Certificado de logro"; +$SurveysReport = "Reporte de encuestas"; +$EnterYourNewPassword = "Introduzca su nueva contraseña aquí."; +$RepeatYourNewPassword = "Introduzca su nueva contraseña una vez más, para reducir la probabilidad de errores."; +$ExtractionFromX = "Extracción del : %s"; +$Compilatio = "Compilatio"; +$CompilatioDocumentTextNotImage = "Verifique que contenga texto (y no solo imágenes)"; +$CompilatioDocumentNotCorrupt = "y que no está corrompido"; +$CompilatioAnalysis = "Analizar"; +$CompilatioAnalysisPercentage = "(Porcentaje de análisis de archivo)"; +$CompilatioWaitingAnalysis = "Análisis pendiente"; +$CompilatioAwaitingAnalysis = "Esperando análisis"; +$CompilatioAnalysisEnding = "Finalizando análisis"; +$CompilatioProtectedPdfVerification = "Si el archivo está en formato pdf, verifique que no esté protegido por modificación."; +$CompilatioConnectionWithServer = "Conectando con el servidor Compilatio"; +$CompilatioWithCompilatio = "con Compilatio"; +$CompilatioStartAnalysis = "Iniciar análisis de Compilacio"; +$CompilatioSeeReport = "Ver informe"; +$CompilatioNonToAnalyse = "Su selección no contiene trabajos para analizar. Solo se pueden enviar trabajos gestionados por Compilatio y no ya analizados."; +$CompilatioComunicationAjaxImpossible = "La comunicación AJAX con el servidor Compilatio es imposible. Vuelva a intentarlo más tarde."; +$UserClassExplanation = "Información: La lista de clases a continuación contiene la lista de clases que ya ha registrado en su clase. Si esta lista está vacía, use el + verde arriba para agregar clases."; +$InsertTwoNames = "Agregar los dos apellidos"; +$AddRightLogo = "Añadir logo derecho"; +$LearnpathUseScoreAsProgress = "Usar la puntuación como progreso"; +$LearnpathUseScoreAsProgressComment = "Usar el puntaje devuelto, por el único SCO en esta leccion, como el indicador de progreso en la barra de progreso. Esto modifica el comportamiento de SCORM en el sentido estricto, pero mejora la retroalimentación visual para el alumno."; +$Planned = "planificada"; +$InProgress = "en progreso"; +$Cancelled = "cancelada"; +$Finished = "terminada"; +$SessionStatus = "Estado"; +$UpdateSessionStatus = "Actualizar estado de sesión"; +$SessionListCustom = "Lista personalizada"; +$NoStatus = "sin estado"; +$CAS3Text = "CAS 3"; +$GoBackToVideo = "Volver al video"; +$UseLearnpathScoreAsProgress = "Usar el score como progreso"; +$UseLearnpathScoreAsProgressInfo = "Algunas lecciones SCORM, en particular las que tienen un solo SCO, reportan su progreso a través del score de SCO (cmi.core.score.raw). Al seleccionar esta opción (solo disponible para las lecciones con un solo SCO), Chamilo mostrará el progreso en base al score que le envía el elemento SCO. Cuidado: al usar el score como progreso, se pierde la habilidad de obtener el score real del elemento."; +$ThereIsASequenceResourceLinkedToThisCourseYouNeedToDeleteItFirst = "Un recurso de secuencia está vinculado a este curso. Tiene que borrar este enlace primero."; +$QuizPreventBackwards = "Prohibir regresar en las preguntas anteriores"; +$UploadPlugin = "Subir un plugin"; +$PluginUploadPleaseRememberUploadingThirdPartyPluginsCanBeDangerous = "Por favor, recuerde que subir un plugin de terceros puede ser muy dañino para su portal y su servidor. Asegúrese siempre de instalar plugins de fuentes seguras o contando con soporte de sus desarrolladores."; +$PluginUploadingTwiceWillReplacePreviousFiles = "Subir un mismo plugin más de una vez aplastará los archivos del plugin subido anteriormente. Tal como en la primera subida, subir un plugin de terceros o una actualización de este es arriesgado."; +$UploadNewPlugin = "Seleccione el nuevo plugin"; +$PluginUploadIsNotEnabled = "La subida de plugins no está activada. Asegúrese que la opción 'plugin_upload_enable' esté en 'true' en el archivo de configuración de Chamilo."; +$PluginUploaded = "Plugin subido"; +$PluginOfficial = "Oficial"; +$PluginThirdParty = "Plugin de terceros"; +$ErrorPluginOfficialCannotBeUploaded = "Su plugin tiene el mismo nombre que un plugin oficial. Los plugins oficiales no pueden ser sobre-escritos. Por favor cambie el nombre del archivo de su plugin."; +$AllSessionsShort = "Todas"; +$ActiveSessionsShort = "Activas"; +$ClosedSessionsShort = "Cerradas"; +$FirstnameLastnameCourses = "Cursos de %s %s"; +$CanNotSubscribeToCourseUserSessionExpired = "No puede mas inscribirse a cursos porque su sesion ha expirado."; +$CertificateOfAchievement = "Certificado de logro"; +$CertificateOfAchievementByDay = "Certificado de logro por dia"; +$ReducedReport = "Reporte reducido"; +$NotInCourse = "Fuera de cursos"; +$LearnpathCategory = "Categoría de lecciones"; +$MailTemplates = "Plantillas de correos"; +$AnEmailToResetYourPasswordHasBeenSent = "Se le ha enviado un correo electrónico para restablecer su contraseña."; +$TotalNumberOfAvailableCourses = "Total de cursos disponibles"; +$NumberOfMatchingCourses = "Total de cursos correspondiendo a los filtros"; +$SessionsByDate = "Sesiones por fechas"; +$GeneralStats = "Estadísticas globales"; +$Weeks = "Semanas"; +$SessionCount = "Número de sesiones"; +$SessionsPerWeek = "Sesiones por semana"; +$AverageUserPerSession = "Número promedio de usuarios por sesión"; +$AverageSessionPerGeneralCoach = "Número promedio de sesiones por tutor general de sesión"; +$SessionsPerCategory = "Sesiones por categoría"; +$SessionsPerLanguage = "Sesiones por idioma"; +$CountOfSessions = "Número de sesiones"; +$CourseInSession = "Cursos en sesiones"; +$UserStats = "Estadísticas usuarios"; +$TotalNumberOfStudents = "Número total de estudiantes"; +$UsersCreatedInTheSelectedPeriod = "Usuarios creados en el periodo seleccionado"; +$UsersByLanguage = "Usuarios por idioma"; +$Count = "Número"; +$SortKeys = "Ordenar por"; +$SubscriptionCount = "Numero de suscripción"; +$VoteCount = "Numero de votos"; +$ExportAsCompactCSV = "Exportar a CSV compacto"; +$PromotedMessages = "Mensajes importantes"; +$SendToGroupTutors = "Publicar a los tutores de grupo"; +$GroupSurveyX = "Encuesta del groupo %s"; +$HelloXGroupX = "Hola %s

Como tutor del grupo %s te invitamos a participar en la siguiente encuesta:"; +$SurveyXMultiplicated = "Encuesta %s demultiplicada"; +$SurveyXNotMultiplicated = "Encuesta %s no demultiplicada"; +$ExportSurveyResults = "Exportar resultados de encuestas"; +$PointAverage = "Puntajes promedio"; +$TotalScore = "Suma de puntajes"; +$ExportResults = "Exportar resultados"; +$QuizBrowserCheckOK = "Su navegador ha sido verificado. Puede proceder con seguridad."; +$QuizBrowserCheckKO = "Su navegador no pudo ser verificado. Inténtelo de nuevo o pruebe con otro navegador o dispositivo antes de comenzar el examen."; +$PartialCorrect = "Parcialmente correcto"; +$XAnswersSavedByUsersFromXTotal = "%d / %d respuestas guardadas en el ejercicio."; +$TestYourBrowser = "Prueba de navegador"; +$DraggableQuestionIntro = "Ordene las siguientes opciones de la lista como mejor le parezca arrastrándolas a las áreas inferiores. Puede volver a colocarlas en esta área para modificar su respuesta."; +$AverageTrainingTime = "Tiempo promedio en el curso"; +$UsersActiveInATest = "Usuarios activos en una prueba"; +$SurveyQuestionSelectiveDisplay = "Aparición selectiva"; +$SurveyQuestionSelectiveDisplayComment = "Esta pregunta, cuando esté ubicada en una página individual con una primera pregunta de tipo elección única, solo se mostrará si la primera opción de la primera pregunta es seleccionada. Por ejemplo '¿Se fue de vacaciones?' -> si la respuesta es 'Sí', entonces la pregunta selectiva aparecerá con una lista de ubicaciones posibles de vacaciones."; +$SurveyQuestionMultipleChoiceWithOther = "Elección múltiple con texto libre"; +$SurveyQuestionMultipleChoiceWithOtherComment = "Ofrezca unas opciones pre-definidas, pero agregue la posibilidad para el usuario de responder con un texto libre si ninguna opción corresponde."; +$Multiplechoiceother = "Elección múltiple con opción 'Otro'"; +$SurveyOtherAnswerSpecify = "Otro/a..."; +$SurveyOtherAnswer = "Por favor especifique:"; +$UserXPostedADocumentInCourseX = "El usuario %s ha enviado un documento en la herramienta Tareas en el curso %s"; +$DownloadDocumentsFirst = "Descargar los documentos primero"; +$FileXHasNoData = "El archivo %s está vacío o solo contiene líneas vacías."; +$FileXHasYNonEmptyLines = "El archivo %s tiene %d líneas no vacías."; +$DuplicatesOnlyXUniqueUserNames = "Hay duplicados : solo se extrajeron %d nombres de usuario únicos."; +$NoLineMatchedAnyActualUserName = "Ninguna línea coincide con ningún nombre de usuario real."; +$OnlyXLinesMatchedActualUsers = "Solo %d líneas coinciden con los usuarios reales."; +$TheFollowingXLinesDoNotMatchAnyActualUser = "Las siguientes %d líneas no coinciden con ningún usuario real :"; +$XUsersAreAboutToBeAnonymized = "%d usuarios están a punto de ser anonimizados :"; +$LoadingXUsers = "Cargando %d usuarios ..."; +$AnonymizingXUsers = "Anonimizar %d usuarios ..."; +$AllXUsersWereAnonymized = "Todos los %d usuarios fueron anonimizados."; +$OnlyXUsersWereAnonymized = "Solo %d usuarios fueron anonimizados."; +$AttemptedAnonymizationOfTheseXUsersFailed = "El intento de anonimización de los siguientes %d usuarios falló :"; +$PleaseUploadListOfUsers = "Cargue un archivo de texto que enumere los usuarios que se van a anonimizar, un nombre de usuario por línea."; +$InternalInconsistencyXUsersFoundForYUserNames = "Inconsistencia interna encontrada : %d usuarios encontrados de %d nombres de usuario enviados. Por favor comienza de nuevo."; +$BulkAnonymizeUsers = "Anonimizar usuarios por CSV"; +$UsernameList = "Lista de usuarios"; +$UsersAboutToBeAnonymized = "Usuarios que van a ser anonimizados :"; +$CouldNotReadFile = "No se puede leer el archivo."; +$CouldNotReadFileLines = "No se puede leer las lineas del archivo."; +$CertificatesSessions = "Certificados en sesiones"; +$SessionFilterReport = "Filtro de certificados en sesiones"; +$UpdateUserListXMLCSV = "Actualizar lista de usuarios"; +$DonateToTheProject = "Chamilo es un proyecto Open Source (o \"Software Libre\") y este portal está proveído a nuestra comunidad sin costo por la Asociación Chamilo, que persigue el objetivo de mejorar la calidad de una educación de calidad en todo el mundo.

+Desarrollar Chamilo y proveer este servicio son, no obstante, tareas costosas, y su ayuda contribuiría de manera significativa en asegurar que estos servicios se mejoren más rápido en el tiempo.

+Crear un curso en este portal es una de las operaciones más exigentes en términos de recursos para nuestro servicio. Le rogamos considere contribuir simbólicamente un monto pequeño para la Asociación Chamilo antes de crear este curso, con el objetivo de ayudarnos a mantener este servicio de buena calidad y gratuito para todos!"; +$MyStudentPublications = "Mis tareas"; +$AddToEditor = "Añadir al editor"; +$ImageURL = "URL imagen"; +$PixelWidth = "Ancho en px"; +$AddImageWithZoom = "Agregar imagen con zoom"; +$DeleteInAllLanguages = "Eliminar en todos los idiomas"; +$MyStudentsSchedule = "Horario de mis estudiante"; +$QuizConfirmSavedAnswers = "Acepto la cantidad de respuestas guardadas en esta sección."; +$QuizConfirmSavedAnswersHelp = "Si no está satisfecho, no marque la casilla de aceptación y consulte con el encargado del curso o el administrador de la plataforma."; +$TCReport = "Seguimiento de superiores de estudiantes"; +$TIReport = "Calendario de ocupaciones de tutores generales."; +$StudentPublicationsSent = "Tareas enviadas o terminadas"; +$PendingStudentPublications = "Tareas en curso"; +$MyStudentPublicationsTitle = "Todas las tareas"; +$MyStudentPublicationsExplanation = "A continuación encontrará todas sus tareas de todos los cursos y sesiones en los que está registrado."; +$RequiredCourses = "Cursos requeridos"; +$SimpleCourseList = "lista estándar"; +$AdminCourseList = "Gestión administrativa"; +$AnonymizeUserSessions = "Anonimizar las sesiones del usuario"; +$ContinueLastImport = "Continuar con el último importe"; +$Notifications = "Notificaciones"; +$Justification = "Justificación"; +$PeriodicExport = "Exporte periódico"; +$Dates = "Fechas"; +$ErrorPluginFilesExtensionsInsideZip = "Error: Algunos de los archivos dentro del paquete ZIP tienen extensiones no autorizadas."; +$UsersByStatus = "Usuarios por status"; +$SessionsPerStatus = "Sesiones por status"; +$UsersByTargetLanguage = "Usuarios por idioma objetivo"; +$UsersByCareer = "Usuarios por carrera"; +$UsersByContract = "Usuarios por contrato"; +$UsersByCertificate = "Usuarios por certificado"; +$UsersByAge = "Usuarios por edad"; +$ContinueImport = "Seguir con la importación"; +$LDAPConnectFailed = "La operación LDAP_connect falló."; +$LDAPBindFailed = "ldap_bind() falló."; +$LDAPSearchFailed = "ldap_search() falló."; +$LDAPFirstEntryFailed = "ldap_first_entry() falló."; +$LDAPGetValuesFailed = "ldap_get_values() falló."; +$MoreThanOneAttributeValueFound = "Más de un valor de atributo ha sido encontrado."; +$MoreThanOneUserMatched = "Más de un usuario corresponde."; +$CourseCodeConfirmation = "Confirmación de código de curso"; +$UnsupportedQtiVersion = "Versión IMS/QTI no soportada."; +$ExportAllCertificatesToZIP = "Exportar todos los certificados a ZIP"; +$CurrentScore = "Score actual"; +$AddAttempt = "Añadir intento"; +$SurveysWordInASCII = "encuesta"; +$PrivateBetweenUsers = "Privado entre usuarios"; +$Nothing = "Nada"; +$CompilatioAnalysisInProgress = "Análisis de Compilatio en progreso"; +$AccountExpiration = "Expiración de cuenta"; +$JustificationExpiration = "Expiración de justificativo"; +$JustificationType = "Tipo de justificativo"; +$Persistent = "Persistente"; +$LogoutWithYourAccountFromX = "Desconectarse de la cuenta %s"; +$DaysDifference = "Días de diferencia"; +$Graduated = "Graduado"; +$Absent = "Ausente"; +$InternalDatabaseError = "Error interno de base de datos"; +$WrongNumberOfDays = "Número de días erróneo"; +$SubscriptionNotAllowed = "Suscripción no autorizada"; +$YouPassedTheLimitOfXMinutesToSeeTheResults = "Ha pasado el límite de %s minutos para ver los resultados."; +$LastUpdated = "Última actualización"; +$Age = "Edad"; +$ExportToXls = "Exportar a XLS"; +$CourseLearningPathsGenericStats = "Estadísticas genéricas de lecciones"; +$FailedToCreateExtraFieldCasUser = "Falló la creación del campo de perfil cas_user."; +$FailedUserCreation = "Falló la creación del usuario."; +$NoSuchUserInLDAP = "No corresponde ningún usuario en LDAP."; +$NoSuchUserInInternalDatabase = "No corresponde ningún usuario en la base de datos local."; +$CouldNotUpdateUser = "El usuario no ha podido ser actualizado."; +$ModelSessionDoesNotExist = "La sesión plantilla no existe."; +$SessionNotRegistered = "Sesión no registrada."; +$CoursesNotAddedToSession = "Cursos no añadidos a la sesión."; +$SessionNotFound = "Sesión no encontrada."; +$UserNotFound = "Usuario no encontrado."; +$UserNotSubscribed = "Usuario no inscrito."; +$NoSessionMatched = "Ninguna sesión corresponde."; +$MoreThanOneSessionMatched = "Más de una sesión corresponde."; +$CouldNotLoadUser = "Imposible de cargar el usuario."; +$LanguageUnavailable = "Idioma no disponible."; +$CouldNotUpdateExtraFieldValue = "Imposible actualizar el campo de perfil."; +$UnsupportedUpdate = "Actualización no soportada."; +$NoUserMatched = "Ningún usuario corresponde."; +$Resume = "Resumen"; +$AttendanceFromXToY = "Asistencia del %s al %s"; +$AddTime = "Añadir tiempo"; +$AddUser = "Añadir usuario"; +$TimeSpentOnAssignment = "Tiempo dedicado a la tarea"; +$UserXSignedTheAgreementTheDateY = "El usuario %s firmó el acuerdo el %s"; +$Available = "Disponible"; +$SurveyMultipleChoiceWithOther = "Elección múltiple con opción 'otro'"; +$CompilatioDescription = "Módulo anti-plagio de Compilatio"; +$CompilatioQuota = "Quotas"; +$CompilatioCreditXOnY = "Créditos: %s sobre %s"; +$CompilatioConnectionTestSoap = "Prueba de conexión SOAP..."; +$CompilatioServerConnection = "Conexión al servidor SOAP de Compilatio"; +$CompilatioConnectionSuccessful = "Conexión exitosa."; +$CompilatioSendTextToServer = "Envío de texto al servidor de Compilatio"; +$CompilatioTextSendingTestKeyX = "Esta es una prueba de envío de texto al servidor de Compilatio a través de su API.\nLlave Compilatio usada: %s"; +$CompilatioSuccessfulTransfer = "Transferencia exitosa."; +$CompilatioFailedTransfer = "La transferencia falló."; +$CompilatioNoConnection = "Imposible conectarse al servidor SOAP de Compilatio."; +$CompilatioParamVerification = "Verifique su clave, los puertos de sus servidores y posiblemente sus parámetros de proxy."; +$LastVisitedCourse = "Último curso visitado"; +$YouDidNotVisitACourseHereTheCourseList = "Aún no ha visitado ningún curso, aquí está la lista de sus cursos."; +$NoEntity = "Sin entidad"; +$UserByEntityReport = "Usuario por entidad"; +$LpByAuthor = "Lección por autor"; +$SessionImportAssignments = "Importar los tareas del curso base"; +$RedirectToPortalHome = "Redirigir a la página de inicio de la plataforma"; +$MyLps = "Mis lecciones"; +$LastVisitedLp = "Última lección visitada"; +$YouDidNotVisitALpHereTheLpList = "Aún no ha visitado una lección, aquí está la lista de sus lecciones."; +$CourseUsedInOtherURL = "Este curso es usado en otro portal"; +$SubscribeUserGroupsToLp = "Inscripción de clases a lección"; +$ReplaceFile = "Reemplazar archivo"; +$SubscribeClassesToLpCategory = "Suscribir clases a la categoría de lecciones"; +$ExportResponseReport = "Exportar reporte de respuestas"; +$ResponseReport = "Reporte de respuestas"; +$ResultsOnlyAvailableOnline = "Resultado únicamente disponible online"; +$QuestionStats = "Estadísticas de preguntas"; +$WrongAnswer = "Respuesta incorrecta"; +$WrongAttemptXInCourseX = "Fallo en el intento %s de %s"; +$ExerciseValidationInCourseX = "Validacion del ejercicio de %s"; +$BlockCategoryExplanation = "Ha completado las preguntas de esta categoría, esta es su última oportunidad para volver atrás y revisar estas preguntas. Una vez que haga clic en el botón para continuar con el ejercicio, pasará a la siguiente categoría de preguntas y no podrá volver a esta parte del ejercicio."; +$RemainingTimeToFinishExercise = "Tiempo restante para terminar el ejercicio"; +$RemainingTimeToFinishQuestion = "Tiempo restante para terminar la pregunta"; +$QuestionStatsDetailedReport = "Reporte detallado de preguntas"; +$MyPersonalOpenAreaHelp = "Una presentación breve de Usted, sus experiencias profesionales y convicciones."; +$MyCompetencesHelp = "Las competencias que ha adquirido, formalmente o no-formalmente, sociales o técnicas."; +$MyDiplomasHelp = "Los diplomas relevantes y certificados que ha obtenido y de los cuales se siente orgullos@. Debería especificar por lo mínimo el título que figura en el documento, la organización que lo emitió y el año."; +$MyTeachingCapabilitiesHelp = "Dadas sus experiencias y competencias, podría probablemente enseñar en uno de los campos en los cuales sus competencias son las más altas. Si piensa poder hacerlo, indíquelo aquí. Sino, deje simplemente este campo vacío."; +$UserGuides = "Manuales del usuario"; +$MyProductionsHelp = "¿Ha publicado un artículo científico que pueda compartir, o simplemente quiere juntar su CV? Agrégelos aquí."; +$CorrectAttempts = "Intentos correctos"; +$WrongAttempts = "Intentos incorrectos"; +$StudentsWithCorrectAnswers = "Estudiantes con respuestas correctas"; +$StudentsWithWrongAnswers = "Estudiantes con respuestas incorrectas"; +$ContentList = "Lista de contenidos"; +$Tariff = "Tarifa"; +$ToInvoice = "Por facturar"; +$LearningPathItemByAuthor = "Item de lección, por autor"; +$DeleteExerciseAttempts = "También eliminar el resultado de los ejercicios, de lo contrario los resultados seguirán existiendo desconectados de la lección."; +$ExerciseCategoriesRadarMode = "Muestra solo un radar de puntuaciones por categoría, en lugar de una tabla de categorías. No muestra puntuaciones o comentarios individuales."; +$ExerciseBlockBecausePercentageX = "Todos los intentos bloqueados porque no alcanzó la puntuación mínima de %s %% en uno de sus intentos."; +$RegisteredAuthors = "Autores que han sido registrados:"; +$Price = "Precio"; +$PriceUpdated = "Precio actualizado"; +$RemoveSelected = "Eliminar autores seleccionados"; +$DeletedAuthors = "Los autores han sido eliminados"; +$HideCategoryTable = "Esconder la tabla de categorías"; +$XQuestionsSelectedWithTotalScoreY = "Solo se seleccionarán %d preguntas según la configuración del ejercicio, para una puntuación total de %s."; +$QuestionAlsoUsedInTheFollowingTests = "Esta pregunta se usa también en los ejercicios siguientes"; +$LinkToTestEdition = "Vínculo a la edición del ejercicio"; +$MoveUsersFromCourseToSession = "Mover resultados de usuarios del curso base a una sesión"; +$IfYourQuizHaveHotspotQuestionsIncludedYouShouldSelectTheImagesFromTheDocuments = "Si su ejercicio tiene preguntas del tipo Zona interactiva, debería seleccionar las imágenes relacionadas desde los documentos."; +$BackToAttemptList = "Regresar a la lista de intentos"; +$ShowScoreEveryAttemptShowAnswersLastAttemptNoFeedback = "Mostrar el resultado al alumno: mostrar la puntuación, la elección del alumno y sus comentarios en cada intento, agrega la respuesta correcta y sus comentarios cuando se alcance el límite de intentos elegido."; +$AddGradebookComment = "Comentario"; +$LatestLoginInAnyCourse = "Último acceso en un curso"; +$The = "El"; +$MultiplicateQuestionsByClass = "Multiplicar las preguntas por clase"; +$MultiplicateQuestionsByUser = "Multiplicar las preguntas por usuario"; +$QuestionForNextUser = "Preguntas sobre el usuario siguiente"; +$CourseCodeToEnteredCapitalLettersToConfirmDeletionX = "El código del curso que debe ingresar en mayúsculas para confirmar la eliminación: %s"; +$BadgeXTitle = "Insignia: %s"; +$PortfolioCommentFromXUser = "Comentario de %s"; +$PortfolioItemFromXUser = "Artículo del portafolio de %s"; +$CopyToMyPortfolio = "Copiar a mi portafolio"; +$CopyToStudentPortfolio = "Copiar al portafolio del estudiante"; +$OriginallyPublishedAsXTitleByYUser = "Originalmente publicado como \"%s\" por %s"; +$OriginallyCommentedByXUserInYItem = "Originalmente comentado por %s en \"%s\""; +$PortfolioItemAddedToStudents = "Artículo agregado al portafolio de los estudiantes"; +$MarkCommentAsImportant = "Marcar comentario como importante"; +$UnmarkCommentAsImportant = "Desmarcar comentario como importante"; +$CommentMarkedAsImportant = "Cometario marcado como importante"; +$SelectLearnerPortfolio = "Seleccionar un portafolio de estudiante"; +$SeeMyPortfolio = "Ver mi portafolio en este curso"; +$PortfolioDetails = "Detalles del portafolio"; +$PortfolioItemTitle = "Título del artículo"; +$CreationDateXDate = "Fecha de creación: %s"; +$UpdateDateXDate = "Fecha de actualización: %s"; +$CategoryXName = "Categoría: %s"; +$DateXDate = "Fecha: %s"; +$PortfolioItemTitleXName = "Título del artículo: %s"; +$NoItemsInYourPortfolio = "No hay artículos en su portafolio"; +$YouHaveNotCommented = "Usted no ha comentado"; +$PortfolioItems = "Artículos del portafolio"; +$PortfolioComments = "Comentarios en portafolio"; +$PortfolioCommentsMade = "Comentarios hechos"; +$QualifyThisPortfolioItem = "Calificar este artículo"; +$PortfolioItemGraded = "El artículo del portafolio fue calificado"; +$ContextForCommentToBeGrade = "Contexto para el comentario a ser calificado"; +$QualifyThisPortfolioComment = "Calificar este comentario"; +$PortfolioCommentGraded = "El comentario en el portafolio fue calificado"; +$QualifyPortfolioItems = "Calificar artículos"; +$QualifyPortfolioComments = "Calificar comentarios"; +$HideCorrectAnsweredQuestions = "Esconder las preguntas con respuestas correctas"; +$TheSettingXWillChangeToX = "La opción \"%s\" será modificada con el valor \"%s\""; +$VerificationOfAnsweredQuestions = "Verificación de preguntas respondidas"; +$StudentPublicationToCorrect = "Tareas de estudiante para ser corregidas"; +$StudentPublicationCorrectionWarning = "A continuación encontrará todos los trabajos que han enviado los alumnos en uno de sus cursos (puede ser en el curso base o en un curso en una sesión). Puede filtrar la lista seleccionando un curso específico o un estado de tarea."; +$BackToMainPortfolio = "Regresar al portafolio principal del curso"; +$ExportMyPortfolioDataPdf = "Exportar los datos de mi portafolio en un archivo PDF"; +$ExportMyPortfolioDataZip = "Exportar los datos de mi portafolio en un archivo ZIP"; +$PortfolioCategoryFieldHelp = "Las categorías son sólo para organización en el portafolio personal"; +$ExportMytPortfolioDataPdf = "Exportar los datos de mi portafolio a un archivo PDF"; +$ExportMytPortfolioDataZip = "Exportar los datos de mi portafolio a un archivo ZIP"; +$NewLearningPathSubject = "Nueva lección publicada"; +$NewLearningPathBody = "Hay una nueva leccion llamada %s que ha sido agregada al curso %s. Acceder a la lección aqui: %s"; +$XPercentCompleted = "%s %% Completado"; +$EmailToTeachersWhenNewPost = "Enviar correo electrónico a los profesores sobre los nuevos artículos en la herramienta de portafolio"; +$PortfolioAlertNewPostContent = "Hay un nuevo artículo por %s en el portafolio del curso %s. Para verlo haga click aquí."; +$PortfolioAlertNewPostSubject = "[Portfolio] Nuevo artículo en el curso %s"; +$OngoingTraining = "Formación(es) en curso"; +$QuizRemindSubject = "Tienes un nuevo mensaje de %s"; +$QuizFirstRemindBody = "Hola \%s,

Un nuevo ejercicio %s ha sido agregado en el curso %s.

Curso: %s
Ejercicio: %s
"; +$QuizLastRemindBody = "Visitar el ejercicio en %s
"; +$QuizDhrRemindBody = "Hola %s,

Como padre, estan recibiendo este correo para avisarle que %s tiene un nuevo ejercicio %s en el curso %s.

Estudiante: %s
Curso: %s
Ejercicio: %s
"; +$QuizRemindDuration = "Duration del ejercicio: %s
"; +$QuizRemindStartDate = "Fecha de inicio del ejercicio: %s
"; +$QuizRemindEndDate = "Fecha de fin del ejercicio: %s
"; +$CareerDiagramLegend = "Leyenda del diagrama de carrera"; +$CareerDiagramDisclaimer = "Descargo de responsabilidad del diagrama de carrera"; +$SuccessfulAttempt = "Intento exitoso"; +$FailedAttempt = "Intento fallido"; +$StudentWithSuccessfulAttempt = "Estudiantes con intento exitoso"; +$StudentWithFailedAttempt = "Estudiantes con intento fallido"; +$ExerciseAttemptStatsReport = "Reporte de intentos de ejercicio"; +$ComparativeGroupReport = "Reporte comparativo por grupo"; +$CoursesUsage = "Uso de cursos"; +$HideConnectionTime = "Ocultar tiempo de conexión"; +$CourseInWhichTheQuestionWasInitiallyCreated = "Curso en el cual la pregunta fue creada."; +$ApprenticeshipContract = "Contrato de aprendizaje"; +$ExportCcVersion13 = "Exportar en Common Cartridge v1.3"; +$ImportCcVersion13 = "Importar desde Common Cartridge v1.3"; +$ExportCcVersion13Info = "Exporte el contenido de su curso en el formato IMS Common Cartridge 1.3, para compartirlo con otras plataformas."; +$ImportCcVersion13Info = "Importe un curso en el formato IMS Common Cartridge 1.3, desde otra plataforma compatible con este formato. La versión es relevante."; +$IMSCCCreated = "Archivo IMS CC creado."; +$IMSCCFile = "Archivo IMS CC"; +$IMSCCFileImported = "Archivo IMS CC importado."; +$IMSCCImportInstructions = "Suba un archivo IMS CC (.imscc) en la versión correcta y será extraido directamente en su curso."; +$IMSCC13 = "IMS Common Cartridge v1.3"; +$HideQuestionNumber = "Esconder el número de la pregunta"; +$PendingAttempts = "Intentos en espera"; +$EditInProfile = "Editar en el perfil"; +$Guidance = "Guia"; +$RemoveTime = "Eliminar tiempo"; +$CopyWithSessionContent = "Copiar con contenido de sesión"; +$ExportByClass = "Exportar por clase"; +$UploadAnswer = "Subir respuesta"; +$TokenExpiredActionAlreadyRealized = "Token expirado, acción ya realizada"; +$Corrector = "Corrector"; +$CorrectionDate = "Fecha de corrección"; +$HideAttemptsTableOnStartPage = "Ocultar la tabla de intentos en la página de inicio"; +$ScormAndLPMaxProgress = "Progreso máximo en lecciones"; +$HideSkills = "Ocultar competencias"; +$OptionsToHideInExport = "Opciones para esconder en el reporte"; +$HideAssignment = "Esconder tareas"; +$AddSurveyToCourse = "Agregar la encuesta a la lección"; +$MoveTheCurrentSurvey = "Mover la encueta actual"; +$ShareEventsInSessions = "Compartir eventos en sesiones"; +$AgendaEventsInBaseCourseWillBeVisibleInCourseSessions = "Eventos de la agenda del curso serán visibles en sesiones"; +$AgendaEventsOnlyVisibleInCurrentCourse = "Eventos de la agenda solo visibles en el curso actual"; +$TestResult = "Resultado del examen"; +$FilterByLp = "Filtrar por lecciones"; +$ShareForumsInSessions = "Compartir los foros con todas las sesiones"; +$YouHaveAchievedANewSkill = "Has logrado una nueva competencia"; +$YouXHaveAchievedTheSkillYToSeeFollowLinkZ = "Hola, %s. Has logrado la competencia \"%s\". Para ver los detalles haz clic aquí: %s"; +$ToAssignNewSkillToUserClickLinkX = "Para asignar una nueva competencia a este usuario, haga clic aquí"; ?> From dad9e5b0b0ddda4ebb3454a870f2c7e43cc1ad2f Mon Sep 17 00:00:00 2001 From: NicoDucou Date: Fri, 3 Dec 2021 13:10:27 +0100 Subject: [PATCH 03/79] Language: Minor partial translation update in ES FR EN fixing double \ - refs BT#19402 --- main/lang/english/trad4all.inc.php | 2 +- main/lang/french/trad4all.inc.php | 2 +- main/lang/spanish/trad4all.inc.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/main/lang/english/trad4all.inc.php b/main/lang/english/trad4all.inc.php index dcd5956647..095475564e 100644 --- a/main/lang/english/trad4all.inc.php +++ b/main/lang/english/trad4all.inc.php @@ -8828,5 +8828,5 @@ $FilterByLp = "Filter by Learning Path"; $ShareForumsInSessions = "Share forums in all sessions"; $YouHaveAchievedANewSkill = "You have achieved a new skill."; $YouXHaveAchievedTheSkillYToSeeFollowLinkZ = "Hi, %s. You have achieved the skill \"%s\". To see the details go here: %s."; -$ToAssignNewSkillToUserClickLinkX = "To assign a new skill to this user, click here"; +$ToAssignNewSkillToUserClickLinkX = "To assign a new skill to this user, click here"; ?> diff --git a/main/lang/french/trad4all.inc.php b/main/lang/french/trad4all.inc.php index 8cfda50560..6f36211132 100644 --- a/main/lang/french/trad4all.inc.php +++ b/main/lang/french/trad4all.inc.php @@ -8759,5 +8759,5 @@ $FilterByLp = "Filtrer par parcours"; $ShareForumsInSessions = "Partager les forums avec toutes les sessions"; $YouHaveAchievedANewSkill = "Vous avez obtenu une nouvelle compétence."; $YouXHaveAchievedTheSkillYToSeeFollowLinkZ = "Bonjour, %s. Vous avez obtenu la compétence \"%s\". Pour en voir les détails aller sur : %s"; -$ToAssignNewSkillToUserClickLinkX = "Pour assigner une nouvelle compétence à cet utilisateur, cliquer ici"; +$ToAssignNewSkillToUserClickLinkX = "Pour assigner une nouvelle compétence à cet utilisateur, cliquer ici"; ?> diff --git a/main/lang/spanish/trad4all.inc.php b/main/lang/spanish/trad4all.inc.php index be99d07fa5..3deb3c79b8 100644 --- a/main/lang/spanish/trad4all.inc.php +++ b/main/lang/spanish/trad4all.inc.php @@ -8852,5 +8852,5 @@ $FilterByLp = "Filtrar por lecciones"; $ShareForumsInSessions = "Compartir los foros con todas las sesiones"; $YouHaveAchievedANewSkill = "Has logrado una nueva competencia"; $YouXHaveAchievedTheSkillYToSeeFollowLinkZ = "Hola, %s. Has logrado la competencia \"%s\". Para ver los detalles haz clic aquí: %s"; -$ToAssignNewSkillToUserClickLinkX = "Para asignar una nueva competencia a este usuario, haga clic aquí"; +$ToAssignNewSkillToUserClickLinkX = "Para asignar una nueva competencia a este usuario, haga clic aquí"; ?> From 722cd4bc315869ad5fc1aef2d1f99ddde713123b Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Thu, 2 Dec 2021 12:05:44 -0500 Subject: [PATCH 04/79] Skill: Add additional message when finished assigning a skill - refs BT#19401 --- main/badge/assign.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/main/badge/assign.php b/main/badge/assign.php index c2da385c29..8c615abeb9 100644 --- a/main/badge/assign.php +++ b/main/badge/assign.php @@ -352,6 +352,17 @@ if ($form->validate()) { ) ); + Display::addFlash( + Display::return_message( + sprintf( + get_lang('ToAssignNewSkillToUserClickLinkX'), + api_get_self().'?'.http_build_query(['user' => $user->getId()]) + ), + 'info', + false + ) + ); + header('Location: '.api_get_path(WEB_PATH)."badge/{$skillUser->getId()}"); exit; } From fce370e1e95fd7d7a6c7cde9539791aa59bf1eb8 Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Mon, 6 Dec 2021 19:54:56 -0500 Subject: [PATCH 05/79] Translate HTML works with CSS - refs BT#19389 --- main/course_home/course_home.php | 6 +-- main/document/showinframes.php | 13 ++++--- main/exercise/exercise_result.php | 2 +- main/exercise/exercise_show.php | 2 +- main/exercise/exercise_submit.php | 4 +- main/exercise/overview.php | 2 +- main/inc/ajax/lang.ajax.php | 2 +- main/inc/lib/api.lib.php | 61 ++++--------------------------- main/inc/lib/display.lib.php | 6 +-- 9 files changed, 26 insertions(+), 72 deletions(-) diff --git a/main/course_home/course_home.php b/main/course_home/course_home.php index a5f242771f..76388d14ac 100755 --- a/main/course_home/course_home.php +++ b/main/course_home/course_home.php @@ -32,7 +32,7 @@ use Fhaculty\Graph\Graph; $use_anonymous = true; require_once __DIR__.'/../inc/global.inc.php'; -$js = ''; +$js = ''; $htmlHeadXtra[] = $js; $htmlHeadXtra[] = '"; } diff --git a/main/exercise/exercise_result.php b/main/exercise/exercise_result.php index 1e5595b63d..b8b7698be2 100755 --- a/main/exercise/exercise_result.php +++ b/main/exercise/exercise_result.php @@ -54,7 +54,7 @@ if (empty($objExercise)) { api_not_allowed(true); } -$js = ''; +$js = ''; $htmlHeadXtra[] = $js; if (api_is_in_gradebook()) { diff --git a/main/exercise/exercise_show.php b/main/exercise/exercise_show.php index f1517330b4..ba63e8b397 100755 --- a/main/exercise/exercise_show.php +++ b/main/exercise/exercise_show.php @@ -146,7 +146,7 @@ if ($is_allowedToEdit && in_array($action, ['qualify', 'edit', 'export'])) { } if ($showTranslateJs) { - $js = ''; + $js = ''; $htmlHeadXtra[] = $js; } diff --git a/main/exercise/exercise_submit.php b/main/exercise/exercise_submit.php index 8b32635edc..79ec3656c8 100755 --- a/main/exercise/exercise_submit.php +++ b/main/exercise/exercise_submit.php @@ -51,7 +51,7 @@ if ($showGlossary) { $htmlHeadXtra[] = api_get_js('jquery.highlight.js'); } -$js = ''; +$js = ''; $htmlHeadXtra[] = $js; $htmlHeadXtra[] = api_get_js('jqueryui-touch-punch/jquery.ui.touch-punch.min.js'); @@ -1241,7 +1241,7 @@ if (!empty($error)) { //3. Hotspots var hotspot = $(\'*[name*="hotspot[\'+question_id+\']"]\').serialize(); - + //4. choice for degree of certainty var my_choiceDc = $(\'*[name*="choiceDegreeCertainty[\'+question_id+\']"]\').serialize(); diff --git a/main/exercise/overview.php b/main/exercise/overview.php index 1b46251817..730a050f7a 100755 --- a/main/exercise/overview.php +++ b/main/exercise/overview.php @@ -19,7 +19,7 @@ Exercise::cleanSessionVariables(); $this_section = SECTION_COURSES; -$js = ''; +$js = ''; $htmlHeadXtra[] = $js; // Notice for unauthorized people. diff --git a/main/inc/ajax/lang.ajax.php b/main/inc/ajax/lang.ajax.php index 65757efca2..469e85922b 100644 --- a/main/inc/ajax/lang.ajax.php +++ b/main/inc/ajax/lang.ajax.php @@ -12,7 +12,7 @@ $action = $_REQUEST['a']; switch ($action) { case 'translate_html': - header('Content-type: application/x-javascript'); + header('Content-Type: text/css'); echo api_get_language_translate_html(); break; diff --git a/main/inc/lib/api.lib.php b/main/inc/lib/api.lib.php index 489374755a..e8fc2df83b 100644 --- a/main/inc/lib/api.lib.php +++ b/main/inc/lib/api.lib.php @@ -9638,22 +9638,6 @@ function api_get_language_translate_html() return ''; } - $languageList = api_get_languages(); - $hideAll = ''; - foreach ($languageList['all'] as $language) { - $hideAll .= ' - $("span:lang('.$language['isocode'].')").filter( - function(e, val) { - // Only find the spans if they have set the lang - if ($(this).attr("lang") == null) { - return false; - } - - // Ignore ckeditor classes - return !this.className.match(/cke(.*)/); - }).hide();'."\n"; - } - $userInfo = api_get_user_info(); $languageId = api_get_language_id($userInfo['language']); $languageInfo = api_get_language_info($languageId); @@ -9663,42 +9647,11 @@ function api_get_language_translate_html() $isoCode = $languageInfo['isocode']; } - return ' - $(function() { - '.$hideAll.' - var defaultLanguageFromUser = "'.$isoCode.'"; - - $("span:lang('.$isoCode.')").filter( - function() { - // Ignore ckeditor classes - return !this.className.match(/cke(.*)/); - }).show(); - - var defaultLanguage = ""; - var langFromUserFound = false; - - $(this).find("span").filter( - function() { - // Ignore ckeditor classes - return !this.className.match(/cke(.*)/); - }).each(function() { - defaultLanguage = $(this).attr("lang"); - if (defaultLanguage) { - $(this).before().next("br").remove(); - if (defaultLanguageFromUser == defaultLanguage) { - langFromUserFound = true; - } - } - }); - - // Show default language - if (langFromUserFound == false && defaultLanguage) { - $("span:lang("+defaultLanguage+")").filter( - function() { - // Ignore ckeditor classes - return !this.className.match(/cke(.*)/); - }).show(); - } - }); - '; + return 'span[lang] { + display: none; + } + span[class^="cke"], + span[lang="'.$isoCode.'"] { + display: inline; + }'; } diff --git a/main/inc/lib/display.lib.php b/main/inc/lib/display.lib.php index 54deeaf7c8..368910f90a 100755 --- a/main/inc/lib/display.lib.php +++ b/main/inc/lib/display.lib.php @@ -2934,7 +2934,7 @@ HTML; $translateHtml = ''; $translate = api_get_configuration_value('translate_html'); if ($translate) { - $translateHtml = '{type:"script", src:"'.api_get_path(WEB_AJAX_PATH).'lang.ajax.php?a=translate_html&'.api_get_cidreq().'"},'; + $translateHtml = '{type:"stylesheet", src:"'.api_get_path(WEB_AJAX_PATH).'lang.ajax.php?a=translate_html&'.api_get_cidreq().'"},'; } $customCss = api_get_visual_theme(); @@ -2969,8 +2969,7 @@ HTML; {type:"script", src: "'.$webPublicPath.'assets/mediaelement/plugins/vrview/vrview.js"}, {type:"script", src: "'.$webPublicPath.'assets/mediaelement/plugins/markersrolls/markersrolls.js"}, '.$videoPluginFiles.' - ]}, - '.$translateHtml.' + ]} ]}, '.$videoPluginCssFiles.' {type:"script", src:"'.$webPublicPath.'assets/MathJax/MathJax.js?config=AM_HTMLorMML"}, @@ -2980,6 +2979,7 @@ HTML; {type:"stylesheet", src: "'.$webPublicPath.'assets/mediaelement/build/mediaelementplayer.min.css"}, {type:"stylesheet", src: "'.$webPublicPath.'assets/mediaelement/plugins/vrview/vrview.css"}, '.$fileCustomCssMedia.', + '.$translateHtml.' ]);'; return $frameReady; From b15498e947bc504ef8ffd694fc18bfe0e794fb3d Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Tue, 7 Dec 2021 09:46:22 -0500 Subject: [PATCH 06/79] Improve style and load for showinframe - refs BT#19389 --- main/document/showinframes.php | 20 +++++--------------- main/inc/lib/display.lib.php | 4 ++++ 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/main/document/showinframes.php b/main/document/showinframes.php index 21e00ea982..e422a48ef2 100755 --- a/main/document/showinframes.php +++ b/main/document/showinframes.php @@ -429,29 +429,19 @@ if ($execute_iframe) { $translate = api_get_configuration_value('translate_html'); $display = ''; if ($translate) { - $display = ' display:none '; - echo ""; + $display = ' display:none;'; } + echo '
'; echo ''; + echo '
'; } } Display::display_footer(); diff --git a/main/inc/lib/display.lib.php b/main/inc/lib/display.lib.php index 368910f90a..dab13d4dd4 100755 --- a/main/inc/lib/display.lib.php +++ b/main/inc/lib/display.lib.php @@ -2956,6 +2956,10 @@ HTML; }, vrPath: "'.$webPublicPath.'assets/vrview/build/vrview.js" }); + + window.setTimeout(function () { + window.top.document.getElementById("mainFrame").style.display = ""; + }, 1500); }); }, "'.$frameName.'", From 13f5257b3c21103451ae5dbaf6166c074217e7af Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Fri, 3 Dec 2021 22:42:44 -0500 Subject: [PATCH 07/79] Add personal_calendar_show_sessions_occupation conf setting - refs BT#19393 Display sessions ocuppations in personal agenda --- main/inc/lib/agenda.lib.php | 97 ++++++++++++++++++++++++++ main/install/configuration.dist.php | 2 + main/template/default/agenda/month.tpl | 38 ++++++---- 3 files changed, 123 insertions(+), 14 deletions(-) diff --git a/main/inc/lib/agenda.lib.php b/main/inc/lib/agenda.lib.php index 61778b46d9..1e6321654b 100644 --- a/main/inc/lib/agenda.lib.php +++ b/main/inc/lib/agenda.lib.php @@ -1213,6 +1213,7 @@ class Agenda $ignoreVisibility = api_get_configuration_value('personal_agenda_show_all_session_events'); + $session_list = []; // Getting course events $my_course_list = []; if (!api_is_anonymous()) { @@ -1308,6 +1309,9 @@ class Agenda } } } + + $this->loadSessionsAsEvents($start, $end); + break; } @@ -1331,6 +1335,99 @@ class Agenda } } + private function loadSessionsAsEvents(int $start, int $end) + { + if (false === api_get_configuration_value('personal_calendar_show_sessions_occupation')) { + return; + } + + $userInfo = api_get_user_info(); + $sessionList = SessionManager::getSessionsFollowedByUser($userInfo['id'], $userInfo['status']); + + foreach ($sessionList as $sessionInfo) { + if (!empty($sessionInfo['duration'])) { + $courseAccess = CourseManager::getFirstCourseAccessPerSessionAndUser( + $sessionInfo['session_id'], + $userInfo['id'] + ); + + if (empty($courseAccess)) { + continue; + } + + $firstAccessDate = new DateTime($courseAccess['login_course_date'], new DateTimeZone('UTC')); + $lastAccessDate = clone $firstAccessDate; + $lastAccessDate->modify('+'.$sessionInfo['duration'].' days'); + + if ($firstAccessDate->format('Y-m-d H:i:s') > $start + && $lastAccessDate->format('Y-m-d H:i:s') < $end + ) { + continue; + } + + $courseList = SessionManager::get_course_list_by_session_id($sessionInfo['id']); + $firstCourse = current($courseList); + + $this->events[] = [ + 'id' => 'session_' . $sessionInfo['id'], + 'session_id' => $sessionInfo['id'], + 'title' => $sessionInfo['name'], + 'description' => $sessionInfo['show_description'] ? $sessionInfo['description'] : '', + 'className' => 'personal', + 'borderColor' => $this->event_personal_color, + 'backgroundColor' => $this->event_personal_color, + 'editable' => false, + 'sent_to' => get_lang('Me'), + 'type' => 'session', + 'start' => $firstAccessDate->format(DateTime::ISO8601), + 'start_date_localtime' => api_get_local_time($firstAccessDate), + 'end' => $lastAccessDate->format(DateTime::ISO8601), + 'end_date_localtime' => api_get_local_time($lastAccessDate), + 'allDay' => 0, + 'parent_event_id' => 0, + 'has_children' => 0, + 'course_url' => api_get_course_url($firstCourse['code'], $sessionInfo['id']), + ]; + + continue; + } + + if ($sessionInfo['display_start_date'] < $start + && $sessionInfo['display_end_date'] > $end + ) { + continue; + } + + $courseList = SessionManager::get_course_list_by_session_id($sessionInfo['id']); + $firstCourse = current($courseList); + + $this->events[] = [ + 'id' => 'session_' . $sessionInfo['id'], + 'session_id' => $sessionInfo['id'], + 'title' => $sessionInfo['name'], + 'description' => $sessionInfo['show_description'] ? $sessionInfo['description'] : '', + 'className' => 'personal', + 'borderColor' => $this->event_personal_color, + 'backgroundColor' => $this->event_personal_color, + 'editable' => false, + 'sent_to' => get_lang('Me'), + 'type' => 'session', + 'start' => $sessionInfo['display_start_date'], + 'start_date_localtime' => $sessionInfo['display_start_date'] + ? $this->formatEventDate($sessionInfo['display_start_date']) + : '', + 'end' => $sessionInfo['display_end_date'], + 'end_date_localtime' => $sessionInfo['display_end_date'] + ? $this->formatEventDate($sessionInfo['display_end_date']) + : '', + 'allDay' => 0, + 'parent_event_id' => 0, + 'has_children' => 0, + 'course_url' => api_get_course_url($firstCourse['code'], $sessionInfo['id']), + ]; + } + } + /** * Clean events. * diff --git a/main/install/configuration.dist.php b/main/install/configuration.dist.php index 0ba0e44f2f..4f855641c3 100755 --- a/main/install/configuration.dist.php +++ b/main/install/configuration.dist.php @@ -385,6 +385,8 @@ $_configuration['agenda_colors'] = [ 'student_publication' => '#FF8C00' ]; */ +// Display sessions ocuppations in personal agenda +//$_configuration['personal_calendar_show_sessions_occupation'] = false; // ------ // // Save some tool titles with HTML editor. Require DB changes: diff --git a/main/template/default/agenda/month.tpl b/main/template/default/agenda/month.tpl index 387e235fbf..1138d802be 100755 --- a/main/template/default/agenda/month.tpl +++ b/main/template/default/agenda/month.tpl @@ -709,22 +709,32 @@ $(document).ready(function() { $("#simple_title").html(calEvent.title); $("#simple_content").html(calEvent.description); $("#simple_comment").html(calEvent.comment); + $("#simple_attachment").html(calEvent.attachment); + + var buttons = { + '{{"ExportiCalConfidential"|get_lang}}' : function() { + url = "ical_export.php?id=" + calEvent.id+'&course_id='+calEvent.course_id+"&class=confidential"; + window.location.href = url; + }, + '{{"ExportiCalPrivate"|get_lang}}': function() { + url = "ical_export.php?id=" + calEvent.id+'&course_id='+calEvent.course_id+"&class=private"; + window.location.href = url; + }, + '{{"ExportiCalPublic"|get_lang}}': function() { + url = "ical_export.php?id=" + calEvent.id+'&course_id='+calEvent.course_id+"&class=public"; + window.location.href = url; + } + }; + + if ('session' === calEvent.type) { + buttons['{{ "GoToCourse"|get_lang }}'] = function() { + window.location.href = calEvent.course_url; + }; + } + $("#simple-dialog-form").dialog("open"); $("#simple-dialog-form").dialog({ - buttons: { - '{{"ExportiCalConfidential"|get_lang}}' : function() { - url = "ical_export.php?id=" + calEvent.id+'&course_id='+calEvent.course_id+"&class=confidential"; - window.location.href = url; - }, - '{{"ExportiCalPrivate"|get_lang}}': function() { - url = "ical_export.php?id=" + calEvent.id+'&course_id='+calEvent.course_id+"&class=private"; - window.location.href = url; - }, - '{{"ExportiCalPublic"|get_lang}}': function() { - url = "ical_export.php?id=" + calEvent.id+'&course_id='+calEvent.course_id+"&class=public"; - window.location.href = url; - } - } + buttons: buttons }); } }, From 166fd218ac0533aeaba8142e60ed714e43142a1e Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Sat, 4 Dec 2021 00:22:51 -0500 Subject: [PATCH 08/79] Minor: coding standards - refs BT#19393 --- main/inc/lib/agenda.lib.php | 186 ++++++++++++++++++------------------ 1 file changed, 93 insertions(+), 93 deletions(-) diff --git a/main/inc/lib/agenda.lib.php b/main/inc/lib/agenda.lib.php index 1e6321654b..822ab5624c 100644 --- a/main/inc/lib/agenda.lib.php +++ b/main/inc/lib/agenda.lib.php @@ -1335,99 +1335,6 @@ class Agenda } } - private function loadSessionsAsEvents(int $start, int $end) - { - if (false === api_get_configuration_value('personal_calendar_show_sessions_occupation')) { - return; - } - - $userInfo = api_get_user_info(); - $sessionList = SessionManager::getSessionsFollowedByUser($userInfo['id'], $userInfo['status']); - - foreach ($sessionList as $sessionInfo) { - if (!empty($sessionInfo['duration'])) { - $courseAccess = CourseManager::getFirstCourseAccessPerSessionAndUser( - $sessionInfo['session_id'], - $userInfo['id'] - ); - - if (empty($courseAccess)) { - continue; - } - - $firstAccessDate = new DateTime($courseAccess['login_course_date'], new DateTimeZone('UTC')); - $lastAccessDate = clone $firstAccessDate; - $lastAccessDate->modify('+'.$sessionInfo['duration'].' days'); - - if ($firstAccessDate->format('Y-m-d H:i:s') > $start - && $lastAccessDate->format('Y-m-d H:i:s') < $end - ) { - continue; - } - - $courseList = SessionManager::get_course_list_by_session_id($sessionInfo['id']); - $firstCourse = current($courseList); - - $this->events[] = [ - 'id' => 'session_' . $sessionInfo['id'], - 'session_id' => $sessionInfo['id'], - 'title' => $sessionInfo['name'], - 'description' => $sessionInfo['show_description'] ? $sessionInfo['description'] : '', - 'className' => 'personal', - 'borderColor' => $this->event_personal_color, - 'backgroundColor' => $this->event_personal_color, - 'editable' => false, - 'sent_to' => get_lang('Me'), - 'type' => 'session', - 'start' => $firstAccessDate->format(DateTime::ISO8601), - 'start_date_localtime' => api_get_local_time($firstAccessDate), - 'end' => $lastAccessDate->format(DateTime::ISO8601), - 'end_date_localtime' => api_get_local_time($lastAccessDate), - 'allDay' => 0, - 'parent_event_id' => 0, - 'has_children' => 0, - 'course_url' => api_get_course_url($firstCourse['code'], $sessionInfo['id']), - ]; - - continue; - } - - if ($sessionInfo['display_start_date'] < $start - && $sessionInfo['display_end_date'] > $end - ) { - continue; - } - - $courseList = SessionManager::get_course_list_by_session_id($sessionInfo['id']); - $firstCourse = current($courseList); - - $this->events[] = [ - 'id' => 'session_' . $sessionInfo['id'], - 'session_id' => $sessionInfo['id'], - 'title' => $sessionInfo['name'], - 'description' => $sessionInfo['show_description'] ? $sessionInfo['description'] : '', - 'className' => 'personal', - 'borderColor' => $this->event_personal_color, - 'backgroundColor' => $this->event_personal_color, - 'editable' => false, - 'sent_to' => get_lang('Me'), - 'type' => 'session', - 'start' => $sessionInfo['display_start_date'], - 'start_date_localtime' => $sessionInfo['display_start_date'] - ? $this->formatEventDate($sessionInfo['display_start_date']) - : '', - 'end' => $sessionInfo['display_end_date'], - 'end_date_localtime' => $sessionInfo['display_end_date'] - ? $this->formatEventDate($sessionInfo['display_end_date']) - : '', - 'allDay' => 0, - 'parent_event_id' => 0, - 'has_children' => 0, - 'course_url' => api_get_course_url($firstCourse['code'], $sessionInfo['id']), - ]; - } - } - /** * Clean events. * @@ -4216,4 +4123,97 @@ class Agenda return $eventDate->format(DateTime::ISO8601); } + + private function loadSessionsAsEvents(int $start, int $end) + { + if (false === api_get_configuration_value('personal_calendar_show_sessions_occupation')) { + return; + } + + $userInfo = api_get_user_info(); + $sessionList = SessionManager::getSessionsFollowedByUser($userInfo['id'], $userInfo['status']); + + foreach ($sessionList as $sessionInfo) { + if (!empty($sessionInfo['duration'])) { + $courseAccess = CourseManager::getFirstCourseAccessPerSessionAndUser( + $sessionInfo['session_id'], + $userInfo['id'] + ); + + if (empty($courseAccess)) { + continue; + } + + $firstAccessDate = new DateTime($courseAccess['login_course_date'], new DateTimeZone('UTC')); + $lastAccessDate = clone $firstAccessDate; + $lastAccessDate->modify('+'.$sessionInfo['duration'].' days'); + + if ($firstAccessDate->format('Y-m-d H:i:s') > $start + && $lastAccessDate->format('Y-m-d H:i:s') < $end + ) { + continue; + } + + $courseList = SessionManager::get_course_list_by_session_id($sessionInfo['id']); + $firstCourse = current($courseList); + + $this->events[] = [ + 'id' => 'session_'.$sessionInfo['id'], + 'session_id' => $sessionInfo['id'], + 'title' => $sessionInfo['name'], + 'description' => $sessionInfo['show_description'] ? $sessionInfo['description'] : '', + 'className' => 'personal', + 'borderColor' => $this->event_personal_color, + 'backgroundColor' => $this->event_personal_color, + 'editable' => false, + 'sent_to' => get_lang('Me'), + 'type' => 'session', + 'start' => $firstAccessDate->format(DateTime::ISO8601), + 'start_date_localtime' => api_get_local_time($firstAccessDate), + 'end' => $lastAccessDate->format(DateTime::ISO8601), + 'end_date_localtime' => api_get_local_time($lastAccessDate), + 'allDay' => 0, + 'parent_event_id' => 0, + 'has_children' => 0, + 'course_url' => api_get_course_url($firstCourse['code'], $sessionInfo['id']), + ]; + + continue; + } + + if ($sessionInfo['display_start_date'] < $start + && $sessionInfo['display_end_date'] > $end + ) { + continue; + } + + $courseList = SessionManager::get_course_list_by_session_id($sessionInfo['id']); + $firstCourse = current($courseList); + + $this->events[] = [ + 'id' => 'session_'.$sessionInfo['id'], + 'session_id' => $sessionInfo['id'], + 'title' => $sessionInfo['name'], + 'description' => $sessionInfo['show_description'] ? $sessionInfo['description'] : '', + 'className' => 'personal', + 'borderColor' => $this->event_personal_color, + 'backgroundColor' => $this->event_personal_color, + 'editable' => false, + 'sent_to' => get_lang('Me'), + 'type' => 'session', + 'start' => $sessionInfo['display_start_date'], + 'start_date_localtime' => $sessionInfo['display_start_date'] + ? $this->formatEventDate($sessionInfo['display_start_date']) + : '', + 'end' => $sessionInfo['display_end_date'], + 'end_date_localtime' => $sessionInfo['display_end_date'] + ? $this->formatEventDate($sessionInfo['display_end_date']) + : '', + 'allDay' => 0, + 'parent_event_id' => 0, + 'has_children' => 0, + 'course_url' => api_get_course_url($firstCourse['code'], $sessionInfo['id']), + ]; + } + } } From 1e15dac49b6739be0212d076a149d5960a4897bb Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Mon, 6 Dec 2021 10:03:40 -0500 Subject: [PATCH 09/79] Calendar: fix date comparaison when personal_calendar_show_sessions_occupation is enabled - refs BT#19393 --- main/inc/lib/agenda.lib.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/main/inc/lib/agenda.lib.php b/main/inc/lib/agenda.lib.php index 822ab5624c..1a27e88c2d 100644 --- a/main/inc/lib/agenda.lib.php +++ b/main/inc/lib/agenda.lib.php @@ -4130,6 +4130,8 @@ class Agenda return; } + $start = api_get_utc_datetime($start, false, true); + $end = api_get_utc_datetime($end, false, true); $userInfo = api_get_user_info(); $sessionList = SessionManager::getSessionsFollowedByUser($userInfo['id'], $userInfo['status']); From c4c0641d4bba58c1c591ffab3d0f13025c6dbb7a Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Mon, 6 Dec 2021 12:13:32 -0500 Subject: [PATCH 10/79] Announcement: Allow add event when creating announcement - refs BT#18898 --- main/announcements/announcements.php | 34 ++++++++++++++++++++++------ main/inc/lib/AnnouncementManager.php | 33 +++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 7 deletions(-) diff --git a/main/announcements/announcements.php b/main/announcements/announcements.php index dcc77d0915..d8c245e0fa 100755 --- a/main/announcements/announcements.php +++ b/main/announcements/announcements.php @@ -114,7 +114,7 @@ switch ($action) { } $sql = "SELECT DISTINCT announcement.id, announcement.display_order - FROM $tbl_announcement announcement + FROM $tbl_announcement announcement INNER JOIN $tbl_item_property itemproperty ON (announcement.c_id = itemproperty.c_id) WHERE @@ -526,22 +526,22 @@ switch ($action) { $form->addHtml(" '; +$agendaRemindersEnabled = api_get_configuration_value('agenda_reminders'); + +if ($agendaRemindersEnabled) { + $htmlHeadXtra[] = ''; +} + // setting the name of the tool $nameTools = get_lang('Agenda'); @@ -168,6 +207,10 @@ if ($allowToEdit) { $usersToSend = $values['users_to_send'] ?? ''; $startDate = $values['date_range_start']; $endDate = $values['date_range_end']; + $notificationCount = $_REQUEST['notification_count'] ?? []; + $notificationPeriod = $_REQUEST['notification_period'] ?? []; + + $reminders = $notificationCount ? array_map(null, $notificationCount, $notificationPeriod) : []; $eventId = $agenda->addEvent( $startDate, @@ -183,7 +226,8 @@ if ($allowToEdit) { $comment, '', $values['invitees'] ?? [], - $values['collective'] ?? false + $values['collective'] ?? false, + $reminders ); if (!empty($values['repeat']) && !empty($eventId)) { diff --git a/main/calendar/agenda_js.php b/main/calendar/agenda_js.php index 521c267ae7..bbd765ec13 100755 --- a/main/calendar/agenda_js.php +++ b/main/calendar/agenda_js.php @@ -292,6 +292,11 @@ if (api_get_configuration_value('agenda_collective_invitations') && 'personal' = $form->addCheckBox('collective', '', get_lang('IsItEditableByTheInvitees')); } +if (api_get_configuration_value('agenda_reminders')) { + $form->addHtml('
'); + $form->addButton('add_notification', get_lang('AddNotification'), 'bell-o')->setType('button'); +} + $form->addHtml(''); diff --git a/main/cron/agenda_reminders.php b/main/cron/agenda_reminders.php new file mode 100644 index 0000000000..69033c893e --- /dev/null +++ b/main/cron/agenda_reminders.php @@ -0,0 +1,172 @@ +getRepository('ChamiloCoreBundle:AgendaReminder'); + +$reminders = $remindersRepo->findBySent(false); + +foreach ($reminders as $reminder) { + if ('personal' === $reminder->getType()) { + $event = $em->find('ChamiloCoreBundle:PersonalAgenda', $reminder->getEventId()); + + $notificationDate = clone $event->getDate(); + $notificationDate->sub($reminder->getDateInterval()); + + if ($notificationDate > $now) { + continue; + } + + $eventDetails = []; + $eventDetails[] = ''.$event->getTitle().''; + + if ($event->getAllDay()) { + $eventDetails[] = get_lang('AllDay'); + } else { + $eventDetails[] = sprintf( + get_lang('FromDateX'), + api_get_local_time($event->getDate(), null, null, false, true, true) + ); + + if (!empty($event->getEnddate())) { + $eventDetails[] = sprintf( + get_lang('UntilDateX'), + api_get_local_time($event->getEnddate(), null, null, false, true, true) + ); + } + } + + if (!empty($event->getText())) { + $eventDetails[] = $event->getText(); + } + + $messageSubject = sprintf(get_lang('ReminderXEvent'), $event->getTitle()); + $messageContent = implode('
', $eventDetails); + + MessageManager::send_message_simple( + $event->getUser(), + $messageSubject, + $messageContent, + $event->getUser() + ); + + if ($agendaCollectiveInvitations) { + $invitees = Agenda::getInviteesForPersonalEvent($reminder->getEventId()); + $inviteesIdList = array_column($invitees, 'id'); + + foreach ($inviteesIdList as $userId) { + MessageManager::send_message_simple( + $userId, + $messageSubject, + $messageContent, + $event->getUser() + ); + } + } + } + + if ('course' === $reminder->getType()) { + $event = $em->find('ChamiloCourseBundle:CCalendarEvent', $reminder->getEventId()); + $agenda = new Agenda('course'); + + $notificationDate = clone $event->getStartDate(); + $notificationDate->sub($reminder->getDateInterval()); + + if ($notificationDate > $now) { + continue; + } + + $eventDetails = []; + $eventDetails[] = ''.$event->getTitle().''; + + if ($event->getAllDay()) { + $eventDetails[] = get_lang('AllDay'); + } else { + $eventDetails[] = sprintf( + get_lang('FromDateX'), + api_get_local_time($event->getStartDate(), null, null, false, true, true) + ); + + if (!empty($event->getEndDate())) { + $eventDetails[] = sprintf( + get_lang('UntilDateX'), + api_get_local_time($event->getEndDate(), null, null, false, true, true) + ); + } + } + + if (!empty($event->getContent())) { + $eventDetails[] = $event->getContent(); + } + + $messageSubject = sprintf(get_lang('ReminderXEvent'), $event->getTitle()); + $messageContent = implode('
', $eventDetails); + + $courseInfo = api_get_course_info_by_id($event->getCId()); + + $sendTo = $agenda->getUsersAndGroupSubscribedToEvent( + $event->getIid(), + $event->getCId(), + $event->getSessionId() + ); + + if ($sendTo['everyone']) { + $users = CourseManager::get_user_list_from_course_code($courseInfo['code'], $event->getSessionId()); + $userIdList = array_keys($users); + + if ($event->getSessionId()) { + $coaches = SessionManager::getCoachesByCourseSession($event->getSessionId(), $event->getCId()); + $userIdList += $coaches; + } + + foreach ($userIdList as $userId) { + MessageManager::send_message_simple($userId, $messageSubject, $messageContent); + } + } else { + foreach ($sendTo['groups'] as $groupId) { + $groupUserList = GroupManager::get_users($groupId, false, null, null, false, $event->getSessionId()); + + foreach ($groupUserList as $groupUserId) { + MessageManager::send_message_simple($groupUserId, $messageSubject, $messageContent); + } + } + + foreach ($sendTo['users'] as $userId) { + MessageManager::send_message_simple($userId, $messageSubject, $messageContent); + } + } + } + + $reminder->setSent(true); + + $em->persist($reminder); + + ++$batchCounter; + + if (($batchCounter % $batchSize) === 0) { + $em->flush(); + } +} + +$em->flush(); +$em->clear(); diff --git a/main/inc/ajax/agenda.ajax.php b/main/inc/ajax/agenda.ajax.php index 2c2fc85336..caebcf4025 100755 --- a/main/inc/ajax/agenda.ajax.php +++ b/main/inc/ajax/agenda.ajax.php @@ -47,6 +47,10 @@ switch ($action) { $userToSend = isset($_REQUEST['users_to_send']) ? $_REQUEST['users_to_send'] : []; $inviteesList = $_REQUEST['invitees'] ?? []; $isCollective = isset($_REQUEST['collective']); + $notificationCount = $_REQUEST['notification_count'] ?? []; + $notificationPeriod = $_REQUEST['notification_period'] ?? []; + + $reminders = $notificationCount ? array_map(null, $notificationCount, $notificationPeriod) : []; $eventId = $agenda->addEvent( $_REQUEST['start'], @@ -62,7 +66,8 @@ switch ($action) { $comment, '', $inviteesList, - $isCollective + $isCollective, + $reminders ); echo $eventId; diff --git a/main/inc/lib/agenda.lib.php b/main/inc/lib/agenda.lib.php index f1deb90193..3afb6cbb96 100644 --- a/main/inc/lib/agenda.lib.php +++ b/main/inc/lib/agenda.lib.php @@ -3,6 +3,7 @@ use Chamilo\CoreBundle\Entity\AgendaEventInvitation; use Chamilo\CoreBundle\Entity\AgendaEventInvitee; +use Chamilo\CoreBundle\Entity\AgendaReminder; use Chamilo\UserBundle\Entity\User; /** @@ -249,7 +250,8 @@ class Agenda $eventComment = null, $color = '', array $inviteesList = [], - bool $isCollective = false + bool $isCollective = false, + array $reminders = [] ) { $start = api_get_utc_datetime($start); $end = api_get_utc_datetime($end); @@ -451,9 +453,49 @@ class Agenda break; } + if (api_get_configuration_value('agenda_reminders')) { + foreach ($reminders as $reminder) { + $this->addReminder($id, $reminder[0], $reminder[1]); + } + } + return $id; } + /** + * @throws Exception + */ + public function addReminder($eventId, $count, $period) + { + switch ($period) { + case 'i': + $dateInterval = DateInterval::createFromDateString("$count minutes"); + break; + case 'h': + $dateInterval = DateInterval::createFromDateString("$count hours"); + break; + case 'd': + $dateInterval = DateInterval::createFromDateString("$count days"); + break; + case 'w': + $dateInterval = DateInterval::createFromDateString("$count weeks"); + break; + default: + return null; + } + + $agendaReminder = new AgendaReminder(); + $agendaReminder + ->setType($this->type) + ->setEventId($eventId) + ->setDateInterval($dateInterval) + ; + + $em = Database::getManager(); + $em->persist($agendaReminder); + $em->flush(); + } + /** * @param int $eventId * @param int $courseId @@ -2688,6 +2730,11 @@ class Agenda $params['collective'] = $isCollective; } + if (api_get_configuration_value('agenda_reminders') && 'add' === $params['action']) { + $form->addHtml('
'); + $form->addButton('add_notification', get_lang('AddNotification'), 'bell-o')->setType('button'); + } + if ($id) { $form->addButtonUpdate(get_lang('ModifyEvent')); } else { diff --git a/main/install/configuration.dist.php b/main/install/configuration.dist.php index cc18a0383c..1b170bac64 100755 --- a/main/install/configuration.dist.php +++ b/main/install/configuration.dist.php @@ -401,6 +401,12 @@ CREATE UNIQUE INDEX UNIQ_D8612460AF68C6B ON personal_agenda (agenda_event_invita // Then add the "@" symbol to AgendaEventInvitation and AgendaEventInvitee classes in the ORM\Entity() line. // Then uncomment the "use EventCollectiveTrait;" line in the PersonalAgenda class. //$_configuration['agenda_collective_invitations'] = false; +// Enable reminders for agenda events. Requires database changes: +/* + CREATE TABLE agenda_reminder (id BIGINT AUTO_INCREMENT NOT NULL, type VARCHAR(255) NOT NULL, event_id INT NOT NULL, date_interval VARCHAR(255) NOT NULL COMMENT '(DC2Type:dateinterval)', sent TINYINT(1) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE `utf8_unicode_ci` ENGINE = InnoDB; +*/ +// Then add the "@" symbol to AgendaReminder class in the ORM\Entity() line. +//$_configuration['agenda_reminders'] = false; // ------ // // Save some tool titles with HTML editor. Require DB changes: diff --git a/main/template/default/agenda/month.tpl b/main/template/default/agenda/month.tpl index 405a18ffc4..e452799eb6 100755 --- a/main/template/default/agenda/month.tpl +++ b/main/template/default/agenda/month.tpl @@ -871,6 +871,39 @@ $(document).ready(function() { else $('#loading').hide(); } }); + + {% if 'agenda_reminders'|api_get_configuration_value %} + var template = '
' + + '
' + + '' + + '
' + + '
' + + '' + + '
' + + '

{{ 'Before'|get_lang }}

' + + '
' + + '' + + '
' + + '
'; + + $('#form_add_notification').on('click', function (e) { + e.preventDefault(); + + $(template).appendTo('#notification_list'); + $('#notification_list select').selectpicker('refresh'); + }); + + $('#notification_list').on('click', '.delete-notification', function (e) { + e.preventDefault(); + + $(this).parents('.form-group').remove(); + }); + {% endif %} }); {{ actions_div }} diff --git a/src/Chamilo/CoreBundle/Entity/AgendaReminder.php b/src/Chamilo/CoreBundle/Entity/AgendaReminder.php new file mode 100644 index 0000000000..539366f0c4 --- /dev/null +++ b/src/Chamilo/CoreBundle/Entity/AgendaReminder.php @@ -0,0 +1,113 @@ +sent = false; + } + + public function getId(): int + { + return $this->id; + } + + public function getType(): string + { + return $this->type; + } + + public function setType(string $type): AgendaReminder + { + $this->type = $type; + + return $this; + } + + public function getEventId(): int + { + return $this->eventId; + } + + public function setEventId(int $eventId): AgendaReminder + { + $this->eventId = $eventId; + + return $this; + } + + public function getDateInterval(): \DateInterval + { + return $this->dateInterval; + } + + public function setDateInterval(\DateInterval $dateInterval): AgendaReminder + { + $this->dateInterval = $dateInterval; + + return $this; + } + + public function isSent(): bool + { + return $this->sent; + } + + public function setSent(bool $sent): AgendaReminder + { + $this->sent = $sent; + + return $this; + } +} From 04a158fc1912efbb298f06d27bb6d4884a206301 Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Mon, 20 Dec 2021 22:54:59 -0500 Subject: [PATCH 43/79] Minor: Format code - refs BT#19392 --- main/cron/agenda_reminders.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/main/cron/agenda_reminders.php b/main/cron/agenda_reminders.php index 69033c893e..c07f4717ff 100644 --- a/main/cron/agenda_reminders.php +++ b/main/cron/agenda_reminders.php @@ -5,7 +5,6 @@ /** * This script send notification messages to users that have reminders from an event in their agenda. */ - require_once __DIR__.'/../../main/inc/global.inc.php'; exit; @@ -161,7 +160,7 @@ foreach ($reminders as $reminder) { $em->persist($reminder); - ++$batchCounter; + $batchCounter++; if (($batchCounter % $batchSize) === 0) { $em->flush(); From 56c46e34d3de8b03b9849dfb871a15d89db1179d Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Tue, 21 Dec 2021 15:18:59 -0500 Subject: [PATCH 44/79] Calendar: Allow edit reminders - refs BT#19392 --- main/calendar/agenda.php | 10 +++- main/inc/lib/agenda.lib.php | 112 +++++++++++++++++++++++++++++++++++- 2 files changed, 117 insertions(+), 5 deletions(-) diff --git a/main/calendar/agenda.php b/main/calendar/agenda.php index e4b2929089..490a5d0526 100755 --- a/main/calendar/agenda.php +++ b/main/calendar/agenda.php @@ -283,6 +283,10 @@ if ($allowToEdit) { $attachmentList = $sendAttachment ? $_FILES : null; $attachmentCommentList = $values['legend'] ?? ''; $comment = $values['comment'] ?? ''; + $notificationCount = $_REQUEST['notification_count'] ?? []; + $notificationPeriod = $_REQUEST['notification_period'] ?? []; + + $reminders = $notificationCount ? array_map(null, $notificationCount, $notificationPeriod) : []; // This is a sub event. Delete the current and create another BT#7803 if (!empty($event['parent_event_id'])) { @@ -302,7 +306,8 @@ if ($allowToEdit) { $comment, '', $values['invitees'] ?? [], - $values['collective'] ?? false + $values['collective'] ?? false, + $reminders ); $message = Display::return_message(get_lang('Updated'), 'confirmation'); @@ -330,7 +335,8 @@ if ($allowToEdit) { true, 0, $values['invitees'] ?? [], - $values['collective'] ?? false + $values['collective'] ?? false, + $reminders ); if (!empty($values['repeat']) && !empty($eventId)) { diff --git a/main/inc/lib/agenda.lib.php b/main/inc/lib/agenda.lib.php index 3afb6cbb96..24ae90cd80 100644 --- a/main/inc/lib/agenda.lib.php +++ b/main/inc/lib/agenda.lib.php @@ -496,6 +496,16 @@ class Agenda $em->flush(); } + public function removeReminders(int $eventId) + { + Database::getManager() + ->createQuery( + 'DELETE FROM ChamiloCoreBundle:AgendaReminder ar WHERE ar.eventId = :eventId AND ar.type = :type' + ) + ->setParameters(['eventId' => $eventId, 'type' => $this->type]) + ->execute(); + } + /** * @param int $eventId * @param int $courseId @@ -791,7 +801,8 @@ class Agenda $updateContent = true, $authorId = 0, array $inviteesList = [], - bool $isCollective = false + bool $isCollective = false, + array $reminders = [] ) { $id = (int) $id; $start = api_get_utc_datetime($start); @@ -1109,6 +1120,14 @@ class Agenda } break; } + + if (api_get_configuration_value('agenda_reminders')) { + $this->removeReminders($id); + + foreach ($reminders as $reminder) { + $this->addReminder($id, $reminder[0], $reminder[1]); + } + } } /** @@ -2471,6 +2490,41 @@ class Agenda return $sendTo; } + public function getEventReminders($eventId): array + { + $em = Database::getManager(); + $remindersRepo = $em->getRepository('ChamiloCoreBundle:AgendaReminder'); + + return $remindersRepo->findBy(['eventId' => $eventId, 'type' => $this->type]); + } + + public function parseEventReminders(array $eventReminders): array + { + return array_map( + function (AgendaReminder $reminder) { + $interval = $reminder->getDateInterval(); + + $reminderInfo = [ + 'id' => $reminder->getId(), + 'type' => $reminder->getType(), + 'sent' => $reminder->isSent(), + 'date_interval' => [$interval->format('%a'), 'd'], + ]; + + if ($interval->i) { + $reminderInfo['date_interval'] = [$interval->i, 'i']; + } elseif ($interval->h) { + $reminderInfo['date_interval'] = [$interval->h, 'h']; + } elseif ($interval->d) { + $reminderInfo['date_interval'] = [$interval->d, 'd']; + } + + return $reminderInfo; + }, + $eventReminders + ); + } + /** * @param array $params * @@ -2730,9 +2784,16 @@ class Agenda $params['collective'] = $isCollective; } - if (api_get_configuration_value('agenda_reminders') && 'add' === $params['action']) { - $form->addHtml('
'); + if (api_get_configuration_value('agenda_reminders')) { + $form->addHtml('
'); + + if ($id) { + $this->addFieldsForRemindersToForm($id, $form); + } + + $form->addHtml('
'); $form->addButton('add_notification', get_lang('AddNotification'), 'bell-o')->setType('button'); + $form->addHtml('
'); } if ($id) { @@ -2752,6 +2813,51 @@ class Agenda return $form; } + public function addFieldsForRemindersToForm(int $eventId, FormValidator $form) + { + $remindersList = $this->parseEventReminders( + $this->getEventReminders($eventId) + ); + + foreach ($remindersList as $reminderInfo) { + $form->addHtml('
'); + $form + ->addNumeric('notification_count[]', '', ['step' => 1, 'min' => 0]) + ->setValue($reminderInfo['date_interval'][0]) + ; + $form + ->addSelect( + 'notification_period[]', + '', + [ + 'i' => get_lang('Minutes'), + 'h' => get_lang('Hours'), + 'd' => get_lang('Days'), + 'w' => get_lang('Weeks'), + ] + ) + ->setValue($reminderInfo['date_interval'][1]) + ; + $form->addHtml('

'.get_lang('Before').'

'); + $form->addHtml( + '
' + .'' + .'
' + ); + $form->addHtml('
'); + } + + $renderer = $form->defaultRenderer(); + $renderer->setElementTemplate( + '
{element}
', + 'notification_count[]' + ); + $renderer->setElementTemplate( + '
{element}
', + 'notification_period[]' + ); + } + /** * @param FormValidator $form * @param array $sendTo array('everyone' => false, 'users' => [1, 2], 'groups' => [3, 4]) From 3e1dfc63b22baefb002d7980d9451da30cc010f4 Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Tue, 21 Dec 2021 16:48:28 -0500 Subject: [PATCH 45/79] Calendar: Show reminders in calendar - refs BT#19392 --- main/calendar/agenda_js.php | 1 + main/inc/lib/agenda.lib.php | 30 ++++++++++--- main/template/default/agenda/month.tpl | 62 ++++++++++++++++++++++++++ 3 files changed, 86 insertions(+), 7 deletions(-) diff --git a/main/calendar/agenda_js.php b/main/calendar/agenda_js.php index bbd765ec13..a472610a42 100755 --- a/main/calendar/agenda_js.php +++ b/main/calendar/agenda_js.php @@ -295,6 +295,7 @@ if (api_get_configuration_value('agenda_collective_invitations') && 'personal' = if (api_get_configuration_value('agenda_reminders')) { $form->addHtml('
'); $form->addButton('add_notification', get_lang('AddNotification'), 'bell-o')->setType('button'); + $form->addHtml('
'); } $form->addHtml('