Display: Fixes to course image header feature PR by @TheTomcat14 - refs #4599

pull/4716/head
Yannick Warnier 2 years ago
commit cf1c3420fc
  1. 2
      .htaccess
  2. 57
      main/course_info/infocours.php
  3. 2
      main/inc/ajax/course.ajax.php
  4. 25
      main/inc/lib/api.lib.php
  5. 22
      main/inc/lib/banner.lib.php
  6. 104
      main/inc/lib/course.lib.php
  7. 11
      main/inc/lib/exercise.lib.php
  8. 12
      main/inc/lib/pdf.lib.php
  9. 65
      main/inc/lib/pear/HTML/QuickForm/file.php
  10. 26
      main/inc/lib/template.lib.php
  11. 6
      main/install/configuration.dist.php
  12. 72
      main/lang/dutch/trad4all.inc.php
  13. 276
      main/lang/english/trad4all.inc.php
  14. 11
      main/survey/surveyUtil.class.php
  15. 15
      main/wiki/wiki.inc.php

@ -46,6 +46,8 @@ RewriteRule ^courses/([^/]+)/work/(.*)$ main/work/download.php?file=work/$2&cDir
RewriteRule ^courses/([^/]+)/course-pic85x85.png$ main/inc/ajax/course.ajax.php?a=get_course_image&code=$1&image=course_image_source [QSA,L]
RewriteRule ^courses/([^/]+)/course-pic.png$ main/inc/ajax/course.ajax.php?a=get_course_image&code=$1&image=course_image_large_source [QSA,L]
RewriteRule ^courses/([^/]+)/course-email-pic-cropped.png$ main/inc/ajax/course.ajax.php?a=get_course_image&code=$1&image=course_email_image_source [QSA,L]
RewriteRule ^courses/([^/]+)/course-email-pic.png$ main/inc/ajax/course.ajax.php?a=get_course_image&code=$1&image=course_email_image_large_source [QSA,L]
# Redirect all courses/ to app/courses/
RewriteRule ^courses/([^/]+)/(.*)$ app/courses/$1/$2 [QSA,L]

@ -85,14 +85,22 @@ $form->addHtml('
<div class="panel-body">
');
// Display regular image
$image = '';
// Display course picture
$course_path = api_get_path(SYS_COURSE_PATH).$currentCourseRepository; // course path
if (file_exists($course_path.'/course-pic85x85.png')) {
if (file_exists($course_path.'/course-pic85x85.png') || file_exists($course_path.'/course-email-pic-cropped.png')) {
$image = '<div class="row">';
$course_web_path = api_get_path(WEB_COURSE_PATH).$currentCourseRepository; // course web path
$course_medium_image = $course_web_path.'/course-pic85x85.png?'.rand(1, 1000); // redimensioned image 85x85
$image = '<div class="row"><label class="col-md-2 control-label">'.get_lang('Image').'</label>
<div class="col-md-8"><img src="'.$course_medium_image.'" /></div></div>';
if (file_exists($course_path.'/course-pic85x85.png')) {
$course_medium_image = $course_web_path.'/course-pic85x85.png?'.rand(1, 1000); // resized image
$image .= '<label class="col-md-2 control-label">'.get_lang('Image').'</label><div class="col-md-4"><img src="'.$course_medium_image.'" /></div>';
}
if (file_exists($course_path.'/course-email-pic-cropped.png')) {
$course_medium_image = $course_web_path.'/course-email-pic-cropped.png?'.rand(1, 1000); // redimensioned image
$image .= '<label class="col-md-2 control-label">'.get_lang('EmailPicture').'</label><div class="col-md-4"><img src="'.$course_medium_image.'" /></div>';
}
$image .= '</div>';
}
$form->addHtml($image);
$form->addText('title', get_lang('Title'), true);
@ -153,7 +161,7 @@ $(function() {
// Picture
$form->addFile(
'picture',
get_lang('AddPicture'),
[get_lang('AddPicture'), get_lang('AddPictureComment')],
['id' => 'picture', 'class' => 'picture-form', 'crop_image' => true]
);
@ -166,6 +174,24 @@ $form->addRule(
);
$form->addElement('checkbox', 'delete_picture', null, get_lang('DeletePicture'));
// Email Picture
$form->addFile(
'email_picture',
[get_lang('AddEmailPicture'), get_lang('AddEmailPictureComment')],
['id' => 'email_picture', 'class' => 'picture-form', 'crop_image' => true, 'crop_min_ratio' => '250 / 70', 'crop_max_ratio' => '10']
);
$allowed_picture_types = api_get_supported_image_extensions(false);
$form->addRule(
'email_picture',
get_lang('OnlyImagesAllowed').' ('.implode(',', $allowed_picture_types).')',
'filetype',
$allowed_picture_types
);
$form->addElement('checkbox', 'delete_email_picture', null, get_lang('DeleteEmailPicture'));
if (api_get_setting('pdf_export_watermark_by_course') === 'true') {
$url = PDF::get_watermark($course_code);
$form->addText('pdf_export_watermark_text', get_lang('PDFExportWatermarkTextTitle'), false, ['size' => '60']);
@ -1111,6 +1137,22 @@ if ($form->validate() && is_settings_editable()) {
);
}
// update email picture
$emailPicture = $_FILES['email_picture'];
if (!empty($emailPicture['name'])) {
CourseManager::updateCourseEmailPicture(
$_course,
$emailPicture['tmp_name'],
$updateValues['email_picture_crop_result']
);
Event::addEvent(
LOG_COURSE_SETTINGS_CHANGED,
'course_email_picture',
$emailPicture['name']
);
}
if ($visibilityChangeable && isset($updateValues['visibility'])) {
$visibility = $updateValues['visibility'];
} else {
@ -1122,6 +1164,11 @@ if ($form->validate() && is_settings_editable()) {
CourseManager::deleteCoursePicture($course_code);
}
$deleteEmailPicture = isset($updateValues['delete_email_picture']) ? $updateValues['delete_email_picture'] : '';
if ($deleteEmailPicture) {
CourseManager::deleteCourseEmailPicture($course_code);
}
global $_configuration;
$urlId = api_get_current_access_url_id();
if (isset($_configuration[$urlId]) &&

@ -33,7 +33,7 @@ switch ($action) {
case 'get_course_image':
$courseId = ChamiloApi::getCourseIdByDirectory($_REQUEST['code']);
$courseInfo = api_get_course_info_by_id($courseId);
$image = isset($_REQUEST['image']) && in_array($_REQUEST['image'], ['course_image_large_source', 'course_image_source']) ? $_REQUEST['image'] : '';
$image = isset($_REQUEST['image']) && in_array($_REQUEST['image'], ['course_image_large_source', 'course_image_source', 'course_email_image_large_source', 'course_email_image_source']) ? $_REQUEST['image'] : '';
if ($courseInfo && $image) {
// Arbitrarily set a cache of 10' for the course image to
// avoid hammering the server with otherwise unfrequently

@ -2535,6 +2535,28 @@ function api_format_course_array($course_data)
$_course['course_image_large'] = $url_image;
// email pictures
// Course image
$url_image = null;
$_course['course_email_image_source'] = '';
$mailPicture = $courseSys.'/course-email-pic-cropped.png';
if (file_exists($mailPicture)) {
$url_image = $webCourseHome.'/course-email-pic-cropped.png';
$_course['course_email_image_source'] = $mailPicture;
}
$_course['course_email_image'] = $url_image;
// Course large image
$url_image = null;
$_course['course_email_image_large_source'] = '';
$mailPicture = $courseSys.'/course-email-pic.png';
if (file_exists($mailPicture)) {
$url_image = $webCourseHome.'/course-email-pic.png';
$_course['course_email_image_large_source'] = $mailPicture;
}
$_course['course_email_image_large'] = $url_image;
return $_course;
}
@ -9636,6 +9658,9 @@ function api_mail_html(
if (isset($additionalParameters['link'])) {
$mailView->assign('link', $additionalParameters['link']);
}
if (isset($additionalParameters['logo'])) {
$mailView->assign('logo', $additionalParameters['logo']);
}
$mailView->assign('mail_header_style', api_get_configuration_value('mail_header_style'));
$mailView->assign('mail_content_style', api_get_configuration_value('mail_content_style'));
$mailView->assign('include_ldjson', (empty(api_get_mail_configuration_value('EXCLUDE_JSON')) ? true : false));

@ -213,6 +213,28 @@ function return_logo($theme = '', $responsive = true)
$class = '';
}
if (api_get_configuration_value('mail_header_from_custom_course_logo') == true) {
// check if current page is a course page
$courseCode = api_get_course_id();
if (!empty($courseCode)) {
$course = api_get_course_info($courseCode);
if (!empty($course) && !empty($course['course_email_image_large'])) {
$image = \Display::img(
$course['course_email_image_large'],
$course['name'],
[
'title' => $course['name'],
'class' => $class,
'id' => 'header-logo',
]
);
return \Display::url($image, $course['course_public_url']);
}
}
}
return ChamiloApi::getPlatformLogo(
$theme,
[

@ -7403,4 +7403,108 @@ class CourseManager
$courseFieldValue = new ExtraFieldValue('course');
$courseFieldValue->saveFieldValues($params);
}
/**
* Update course email picture.
*
* @param array $courseInfo
* @param string $sourceFile the full system name of the image from which course picture will be created
* @param string $cropParameters Optional string that contents "x,y,width,height" of a cropped image format
*
* @return bool Returns the resulting. In case of internal error or negative validation returns FALSE.
*/
public static function updateCourseEmailPicture(
array $courseInfo,
string $sourceFile = null,
string $cropParameters = null
): bool {
if (empty($courseInfo)) {
return false;
}
// Course path
$store_path = api_get_path(SYS_COURSE_PATH).$courseInfo['path'];
// Image name for courses
$course_image = $store_path.'/course-email-pic.png';
$course_medium_image = $store_path.'/course-email-pic-cropped.png';
if (file_exists($course_image)) {
unlink($course_image);
}
if (file_exists($course_medium_image)) {
unlink($course_medium_image);
}
//Crop the image to adjust 4:3 ratio
$image = new Image($sourceFile);
$image->crop($cropParameters);
//Resize the images in two formats
$medium = new Image($sourceFile);
$medium->resize(85);
$medium->send_image($course_medium_image, -1, 'png');
$normal = new Image($sourceFile);
$normal->resize(250);
$normal->send_image($course_image, -1, 'png');
return $medium && $normal; //if both ops were ok, return true, otherwise false
}
/**
* Deletes the course email picture.
*
* @param string $courseCode
*/
public static function deleteCourseEmailPicture(string $courseCode): void
{
$course_info = api_get_course_info($courseCode);
// course path
$storePath = api_get_path(SYS_COURSE_PATH).$course_info['path'];
// image name for courses
$courseImage = $storePath.'/course-email-pic.png';
$courseMediumImage = $storePath.'/course-email-pic-cropped.png';
if (file_exists($courseImage)) {
unlink($courseImage);
}
if (file_exists($courseMediumImage)) {
unlink($courseMediumImage);
}
}
/**
* Get the course logo
*
* @param array $course array containing course info, @see api_get_course_info()
* @param array $attributes Array containing extra attributes for the image tag
*
* @return string|null
*/
public static function getCourseEmailPicture($course, $attributes = null)
{
$logo = null;
if (!empty($course)
&& !empty($course['course_email_image_large_source'])
&& file_exists($course['course_email_image_large_source'])
) {
if (is_null($attributes)) {
$attributes = [
'title' => $course['name'],
'class' => 'img-responsive',
'id' => 'header-logo',
'width' => 250,
];
}
$logo = \Display::url(
\Display::img(
$course['course_email_image_large'],
$course['name'],
$attributes
),
api_get_path(WEB_PATH) . 'index.php'
);
}
return $logo;
}
}

@ -7046,10 +7046,16 @@ EOT;
$exercise_stat_info,
$studentId
);
$extraParameters = [];
if (api_get_configuration_value('mail_header_from_custom_course_logo') == true) {
$extraParameters = ['logo' => CourseManager::getCourseEmailPicture($courseInfo)];
}
foreach ($emailList as $email) {
if (empty($email)) {
continue;
}
api_mail_html(
null,
$email,
@ -7058,7 +7064,10 @@ EOT;
null,
null,
[],
$attachments
$attachments,
false,
$extraParameters,
''
);
}
}

@ -748,7 +748,17 @@ class PDF
}
}
$organization = ChamiloApi::getPlatformLogo('', [], true, true);
$organization = null;
// try getting the course logo
if (api_get_configuration_value('mail_header_from_custom_course_logo') == true) {
$organization = CourseManager::getCourseEmailPicture($courseInfo, []);
}
// only show platform logo in mail if no course photo available
if (empty($organization)) {
$organization = ChamiloApi::getPlatformLogo('', [], false, true);
}
// Use custom logo image.
$pdfLogo = api_get_setting('pdf_logo_header');
if ($pdfLogo === 'true') {

@ -253,6 +253,8 @@ class HTML_QuickForm_file extends HTML_QuickForm_input
{
$id = $this->getAttribute('id');
$ratio = 'aspectRatio: 16 / 9';
$cropMove = '';
if (!empty($param['ratio'])) {
$ratio = 'aspectRatio: '.$param['ratio'].',';
}
@ -262,6 +264,28 @@ class HTML_QuickForm_file extends HTML_QuickForm_input
$scalable = $param['scalable'];
}
if (!empty($param['maxRatio']) && !empty($param['minRatio'])) {
$ratio = 'autoCropArea: 1, ';
$scalable = 'true';
$cropMove = ',cropmove: function (e) {
var cropBoxData = $image.cropper(\'getCropBoxData\');
var minAspectRatio = ' . $param['minRatio'] . ';
var maxAspectRatio = ' . $param['maxRatio'] . ';
var cropBoxWidth = cropBoxData.width;
var aspectRatio = cropBoxWidth / cropBoxData.height;
if (aspectRatio < minAspectRatio) {
$image.cropper(\'setCropBoxData\', {
height: cropBoxWidth / minAspectRatio
});
} else if (aspectRatio > maxAspectRatio) {
$image.cropper(\'setCropBoxData\', {
height: cropBoxWidth / maxAspectRatio
});
}
}';
}
return '<script>
$(function() {
var $inputFile = $(\'#'.$id.'\'),
@ -272,7 +296,7 @@ class HTML_QuickForm_file extends HTML_QuickForm_input
function isValidType(file) {
var fileTypes = [\'image/jpg\', \'image/jpeg\', \'image/gif\', \'image/png\'];
for(var i = 0; i < fileTypes.length; i++) {
if(file.type === fileTypes[i]) {
return true;
@ -281,11 +305,10 @@ class HTML_QuickForm_file extends HTML_QuickForm_input
return false;
}
function imageCropper() {
$formGroup.show();
$cropButton.show();
$image
.cropper(\'destroy\')
.cropper({
@ -301,6 +324,7 @@ class HTML_QuickForm_file extends HTML_QuickForm_input
// Output the result data for cropping image.
$input.val(e.x + \',\' + e.y + \',\' + e.width + \',\' + e.height);
}
' . $cropMove . '
});
}
@ -361,7 +385,14 @@ class HTML_QuickForm_file extends HTML_QuickForm_input
if (!empty($this->_attributes['crop_scalable'])) {
$scalable = $this->_attributes['crop_scalable'];
}
$js = $this->getElementJS(array('ratio' => $ratio, 'scalable' => $scalable));
$maxRatio = $minRatio = null;
if (!empty($this->_attributes['crop_min_ratio']) && !empty($this->_attributes['crop_max_ratio'])) {
$minRatio = $this->_attributes['crop_min_ratio'];
$maxRatio = $this->_attributes['crop_max_ratio'];
}
$js = $this->getElementJS(array('ratio' => $ratio, 'scalable' => $scalable, 'minRatio' => $minRatio, 'maxRatio' => $maxRatio));
}
if ($this->isFrozen()) {
@ -402,41 +433,41 @@ class HTML_QuickForm_file extends HTML_QuickForm_input
case FormValidator::LAYOUT_HORIZONTAL:
if (isset($attributes['custom']) && $attributes['custom']) {
$template = '
<div class="input-file-container">
<div class="input-file-container">
{element}
<label tabindex="0" {label-for} class="input-file-trigger">
<i class="fa fa-picture-o fa-lg" aria-hidden="true"></i> {label}
</label>
</div>
<p class="file-return"></p>
<p class="file-return"></p>
<script>
document.querySelector("html").classList.add(\'js\');
var fileInput = document.querySelector( ".input-file" ),
var fileInput = document.querySelector( ".input-file" ),
button = document.querySelector( ".input-file-trigger" ),
the_return = document.querySelector(".file-return");
button.addEventListener("keydown", function(event) {
if ( event.keyCode == 13 || event.keyCode == 32 ) {
fileInput.focus();
}
button.addEventListener("keydown", function(event) {
if ( event.keyCode == 13 || event.keyCode == 32 ) {
fileInput.focus();
}
});
button.addEventListener("click", function(event) {
fileInput.focus();
return false;
});
});
fileInput.addEventListener("change", function(event) {
fileName = this.value;
if (this.files[0]) {
fileName = this.files[0].name;
}
the_return.innerHTML = fileName;
});
the_return.innerHTML = fileName;
});
</script>
';
} else {
$template = '
<div id="file_'.$name.'" class="form-group {error_class}">
<label {label-for} class="col-sm-'.$size[0].' control-label" >
<!-- BEGIN required --><span class="form_required">*</span><!-- END required -->
{label}
@ -464,7 +495,7 @@ class HTML_QuickForm_file extends HTML_QuickForm_input
return '
<label {label-for}>{label}</label>
<div class="input-group">
{icon}
{element}
</div>';

@ -2075,11 +2075,27 @@ class Template
$portalImageMeta .= '<meta property="twitter:image:alt" content="'.$imageAlt.'" />'."\n";
}
} else {
$logo = ChamiloApi::getPlatformLogoPath($this->theme);
if (!empty($logo)) {
$portalImageMeta = '<meta property="og:image" content="'.$logo.'" />'."\n";
$portalImageMeta .= '<meta property="twitter:image" content="'.$logo.'" />'."\n";
$portalImageMeta .= '<meta property="twitter:image:alt" content="'.$imageAlt.'" />'."\n";
if (api_get_configuration_value('mail_header_from_custom_course_logo') == true) {
// check if current page is a course page
$courseId = api_get_course_int_id();
if (!empty($courseId)) {
$course = api_get_course_info_by_id($courseId);
if (!empty($course) && !empty($course['course_email_image_large'])) {
$portalImageMeta = '<meta property="og:image" content="'.$course['course_email_image_large'].'" />'."\n";
$portalImageMeta .= '<meta property="twitter:image" content="'.$course['course_email_image_large'].'" />'."\n";
$portalImageMeta .= '<meta property="twitter:image:alt" content="'.$imageAlt.'" />'."\n";
}
}
}
if (empty($portalImageMeta)) {
$logo = ChamiloApi::getPlatformLogoPath($this->theme);
if (!empty($logo)) {
$portalImageMeta = '<meta property="og:image" content="'.$logo.'" />'."\n";
$portalImageMeta .= '<meta property="twitter:image" content="'.$logo.'" />'."\n";
$portalImageMeta .= '<meta property="twitter:image:alt" content="'.$imageAlt.'" />'."\n";
}
}
}

@ -2448,10 +2448,10 @@ INSERT INTO extra_field_options (field_id, option_value, display_text, priority,
//Hides the link to the course catalog in the menu when the catalog is public.
// $_configuration['catalog_hide_public_link'] = false;
// KEEP THIS AT THE END
// -------- Custom DB changes
// Add user activation by confirmation email
// This option prevents the new user to login in the platform if your account is not confirmed via email
// You need add a new option called "confirmation" to the registration settings
//INSERT INTO settings_options (variable, value, display_text) VALUES ('allow_registration', 'confirmation', 'MailConfirmation');
// ------ (End) Custom DB changes
// Enable use of a custom course logo in mail & PDF headers
// $_configuration['mail_header_from_custom_course_logo'] = false;

@ -226,17 +226,17 @@ $AreYouSureDeleteTestResultBeforeDateD = "Weet u zeker dat u de resultaten wilt
$CleanStudentsResultsBeforeDate = "Verwijder alle resultaten voor de geselecteerde datum";
$HGlossary = "Woordenlijst help";
$GlossaryContent = "Deze tool stelt u in staat woordenlijst items te maken, die daarna vanuit de documententool kunnen worden gebruikt.";
$ForumContent = " The forum is an discussion tool for asynchronous written work. In contrast to email, a forum is for public, or semi-public, group discussion.
To use the Chamilo forum, members can simply use their browser - they do not require separate client software.
To organize forums, clickon the Forums tool. Discussions are organized hierarchically according to the following structure: Category> Forum> Topic> Post To ensure members can participate in the forum tidily and effectively, it is essential in th first instance to create categories and forums; it's then up to the participants to create topics and posts. By default, the forum contains a single (public) category, an example topic and an example post. You can add forums to the category, change its title or create other categories within which you could then create new forums. (Don't confuse categories and forums, and remember that a category that contains no forum is useless and is not displayed.)
\n
The forum description might include a list of its members, a definition of its purpose, a target a task, a theme etc.
Group forums should not be created via the Forum tool but instead via the Groups tool, where you can determinewhether your group forums should be private or public, at the same time providing a location for sharing groups of documents.
Teaching Tips A learning forum is not quite the same as the forums you are used to seeing on the internet. For one thing, it is not possible for learners to alter their posts once they have been published as the course is logically archived to allow tracking of what has been said in the past. Furthermore, Chamilo forums allow for specific uses relevant to teaching. For example, some teachers/trainers publish corrections directly within forums in the following way:
$ForumContent = " The forum is an discussion tool for asynchronous written work. In contrast to email, a forum is for public, or semi-public, group discussion.
To use the Chamilo forum, members can simply use their browser - they do not require separate client software.
To organize forums, clickon the Forums tool. Discussions are organized hierarchically according to the following structure: Category> Forum> Topic> Post To ensure members can participate in the forum tidily and effectively, it is essential in th first instance to create categories and forums; it's then up to the participants to create topics and posts. By default, the forum contains a single (public) category, an example topic and an example post. You can add forums to the category, change its title or create other categories within which you could then create new forums. (Don't confuse categories and forums, and remember that a category that contains no forum is useless and is not displayed.)
\n
The forum description might include a list of its members, a definition of its purpose, a target a task, a theme etc.
Group forums should not be created via the Forum tool but instead via the Groups tool, where you can determinewhether your group forums should be private or public, at the same time providing a location for sharing groups of documents.
Teaching Tips A learning forum is not quite the same as the forums you are used to seeing on the internet. For one thing, it is not possible for learners to alter their posts once they have been published as the course is logically archived to allow tracking of what has been said in the past. Furthermore, Chamilo forums allow for specific uses relevant to teaching. For example, some teachers/trainers publish corrections directly within forums in the following way:
A learner is asked to post a report directly into the forum, The teacher corrects it by clicking Edit (yellow pencil) and marking it using the graphics editor (color, underlining, etc.) Finally, other learners benefit from viewing the corrections was made on the production of one of of them, Note that the same principle can be applied between learners, but will require his copying/pasting the message of his fellow student because students / trainees can not edit one another's posts. <. li>";
$HForum = "Forum help";
$LoginToGoToThisCourse = "Gelieve in te loggen om de cursus te bekijken";
@ -298,7 +298,7 @@ $IfSessionExistsUpdate = "Als een sessie bestaat, update deze dan.";
$CreatedByXYOnZ = "Gemaakt door %s op %s";
$LoginWithExternalAccount = "Login zonder instituutaccount";
$ImportAikenQuizExplanationExample = "This is the text for question 1 A. Answer 1 B. Answer 2 C. Answer 3 ANSWER: B This is the text for question 2 A. Answer 1 B. Answer 2 C. Answer 3 D. Answer 4 ANSWER: D ANSWER_EXPLANATION: this is an optional feedback comment that will appear next to the correct answer.";
$ImportAikenQuizExplanation = "
$ImportAikenQuizExplanation = "
The Aiken format comes in a simple text (.txt) file, with several question blocks, each separated by a blank line. The first line is the question, the answer lines are prefixed by a letter and a dot, and the correct answer comes next with the ANSWER: prefix. See example below.";
$ExerciseAikenErrorNoAnswerOptionGiven = "The imported file has at least one question without any answer (or the answers do not include the required prefix letter). Please make sure each question has at least one answer and that it is prefixed by a letter and a dot or a parenthesis, like this: A. answer one";
$ExerciseAikenErrorNoCorrectAnswerDefined = "The imported file includes at least one question without any correct answer defined. Please make sure all questions include the ANSWER: [Letter] line.";
@ -331,21 +331,21 @@ $NoIWantToTurnBack = "Nee, ik wil terugkeren";
$IfYouContinueYourAnswerWillBeSavedAnyChangeWillBeNotAllowed = "Als u verder gaat, wordt uw antwoord opgeslagen. Aanpassing is dan niet meer mogelijk.";
$SpecialCourses = "Speciale cursussen";
$Roles = "Rollen";
$ToolCurriculum = "
$ToolCurriculum = "
Curriculum";
$ToReviewXYZ = "
$ToReviewXYZ = "
%s to review (%s)";
$UnansweredXYZ = "
$UnansweredXYZ = "
%s onbeantwoord (%s)";
$AnsweredXYZ = "
$AnsweredXYZ = "
%s beantwoord (%s)+(%s)";
$UnansweredZ = "
$UnansweredZ = "
(%s) Onbeantwoord";
$AnsweredZ = "
$AnsweredZ = "
(%s) Beantwoord";
$CurrentQuestionZ = "
$CurrentQuestionZ = "
(%s) Huidige vraag";
$ToReviewZ = "
$ToReviewZ = "
(%s) Te beoordelen";
$ReturnToExerciseList = "Keer terug naar oefeningenlijst";
$ExerciseAutoLaunch = "Auto-launch voor oefeningen";
@ -388,15 +388,15 @@ $QuestionReused = "Aantal toegevoegde vragen in de oefening";
$QuestionCopied = "Aantal naar de oefening gekopieerde vragen";
$BreadcrumbNavigationDisplayComment = "Show or hide the breadcrumb navigation, the one appearing just below the main navigation tabs. It is highly recommended to have this navigation shown to users, as this allows them to locate their current position and navigate to previous pages easily. Sometimes, however, it might be necessary to hide it (for example in the case of exam platforms) to avoid users navigating to pages they should not see.";
$BreadcrumbNavigationDisplayTitle = "Broodkruimelnavigatie";
$AllowurlfopenIsSetToOff = "
$AllowurlfopenIsSetToOff = "
The PHP setting \"allow_url_fopen\" is set to off. This prevents the registration mechanism to work properly. This setting can be changed in you PHP configuration file (php.ini) or in the Apache Virtual Host configuration, using the php_admin_value directive";
$ImpossibleToContactVersionServerPleaseTryAgain = "On mogelijk om de versieserver nu te contacteren. Probeer later nogmaals.";
$VersionUpToDate = "Uw versie is up-to-date";
$LatestVersionIs = "De meest recente versie";
$YourVersionNotUpToDate = "Uw versie is niet up-to-date";
$Hotpotatoes = "
$Hotpotatoes = "
Hotpotatoes";
$ZeroMeansNoQuestionWillBeSelectedMinusOneMeansThatAllQuestionsWillBeSelected = "
$ZeroMeansNoQuestionWillBeSelectedMinusOneMeansThatAllQuestionsWillBeSelected = "
-1 = Alle vragen worden geselecteerd. 0 = Er worden geen vragen geselecteerd.";
$EmailNotificationTemplateDescription = "You can customize the email sent to users when they finished the exercise. You can use tags like these: 1. {{ student.username }} 2. {{ student.firstname }} 3. {{ student.lastname }} 4. {{ student.official_code }} 5. {{ exercise.title }} 6. {{ exercise.start_time }} 7. {{ exercise.end_time }} 8. {{ course.title }} 9. {{ course.code }";
$EmailNotificationTemplate = "E-mail notificatie sjabloon";
@ -1510,7 +1510,7 @@ $EditNews = "Wijzig nieuws";
$EditCategories = "Wijzig categorieën";
$EditHomePage = "Wijzig startpagina";
$AllowUserHeadingsComment = "Kan een cursusbeheerder extra velden definiëren om meer gegevens van de gebruikers van de cursus te verzamelen?";
$MetaTwitterSiteTitle = "
$MetaTwitterSiteTitle = "
Twitter Site account";
$Languages = "Talen";
$NoticeTitle = "Titel";
@ -5836,7 +5836,7 @@ $DeleteAllCertificates = "Verwijder alle certificaten";
$dateFormatLongNoDay = "%d %B &Y";
$dateFormatOnlyDayName = "%A";
$ReturnToCourseList = "Ga terug naar de cursuslijst";
$dateFormatShortNumberNoYear = "
$dateFormatShortNumberNoYear = "
%d/%m";
$CourseTutor = "Cursus tutor";
$StudentInSessionCourse = "Student in sessie cursus";
@ -5846,7 +5846,7 @@ $SessionCourseCoach = "Sessie cursus coach";
$Admin = "Admin";
$SessionTutorsCanSeeExpiredSessionsResultsComment = "Kunnen sessie tutors de rapporten voor hun sessie zien nadat deze is verlopen?";
$SessionTutorsCanSeeExpiredSessionsResultsTitle = "Sessie tutors rapporten zichtbaarheid";
$UserNotAttendedSymbol = "
$UserNotAttendedSymbol = "
NP";
$UserAttendedSymbol = "P";
$SessionCalendar = "Sessie agenda";
@ -6121,8 +6121,8 @@ $Pediaphon = "Gebruik Pediaphon audiodiensten";
$HelpPediaphon = "Ondersteunt teksten van ettelijke duizenden karakters, in diverse mannelijke of vrouwelijke stemmen (afhankelijke van de taal). Audio bestanden zullen gegenereerd en automatisch opgeslagen worden in je huidige Chamilo map.";
$FirstSelectALanguage = "Kies een taal";
$MoveUserStats = "Verplaats resultaten van een gebruiker van/naar een sessie";
$CompareUserResultsBetweenCoursesAndCoursesInASession = "Met deze geavanceerde tool wordt het mogelijk de resultaten van gebruikers beter te volgen als je van een cursusbenadering naar een sessiebenadering evolueert. In de meeste gevallen heb je deze tool niet nodig.
Op dit scherm kun je de resultaten vergelijken tussen gebruikers van losse cursussen versus cursussen in de context van een sessie.
$CompareUserResultsBetweenCoursesAndCoursesInASession = "Met deze geavanceerde tool wordt het mogelijk de resultaten van gebruikers beter te volgen als je van een cursusbenadering naar een sessiebenadering evolueert. In de meeste gevallen heb je deze tool niet nodig.
Op dit scherm kun je de resultaten vergelijken tussen gebruikers van losse cursussen versus cursussen in de context van een sessie.
Eens beslist, wordt het mogelijk om de vorderingsgegevens van studenten (resultaten van oefeningen en leerpad-opvolging) over te dragen van een cursus naar een sessie.";
$PDFExportWatermarkEnableTitle = "Watermerk inschakelen voor PDF export";
$PDFExportWatermarkEnableComment = "Als je deze optie inschakelt, kun je een afbeelding of tekst opladen die dan automatisch als watermerk op als je geëxporteerde PDF-documenten zal verschijnen.";
@ -6218,7 +6218,7 @@ $CreateASocialGroup = "Sociale groep maken";
$StatsUsersDidNotLoginInLastPeriods = "Al enige tijd niet ingelogd";
$LastXMonths = "Laatste %i maanden";
$NeverConnected = "Nooit verbonden";
$EnableAccessibilityFontResizeTitle = "
$EnableAccessibilityFontResizeTitle = "
Font resize accessibility feature";
$EnableAccessibilityFontResizeComment = "Schakel deze optie in om een reeks opties voor het wijzigen van het lettertype rechtsboven op uw campus weer te geven. Hierdoor kunnen slechtzienden hun cursusinhoud gemakkelijker lezen.";
$HotSpotDelineation = "Hotspot schets";
@ -6316,7 +6316,7 @@ $IfYourLPsHaveAudioFilesIncludedYouShouldSelectThemFromTheDocuments = "Als je le
$IfYouPlanToUpgradeFromOlderVersionYouMightWantToHaveAlookAtTheChangelog = "Als je van plan bent om te upgraden van een oudere versie van Chamilo, dan wil je misschien de <a href='/documentation/changelog.html'>changelog</a> bekijken om te weten wat er nieuw is en wat er veranderd is.";
$UplUploadFailedSizeIsZero = "Er was een probleem bij het uploaden van uw document: het ontvangen bestand had 0 bytes om de server. Kijk je lokale bestand na op corruptie of beschadiging, probeer dan opnieuw.";
$YouMustChooseARelationType = "U moet een relatietype kiezen";
$SelectARelationType = "
$SelectARelationType = "
Relation type selectie";
$AddUserToURL = "Voeg gebruiker toe aan deze URL";
$CourseBelongURL = "Cursus geregistreerd aan de URL";
@ -6378,7 +6378,7 @@ $Responsable = "Verantwoordelijk";
$TheAttendanceSheetIsLocked = "De presentielijst is gesloten";
$Presence = "Aanwezigheid";
$ACourseCategoryWithThisNameAlreadyExists = "Er bestaat al een cursuscategorie met dezelfde naam";
$OpenIDRedirect = "
$OpenIDRedirect = "
OpenID redirect";
$Blogs = "Blogs";
$SelectACourse = "Selecteer een cursus";
@ -6873,12 +6873,12 @@ $PasswordVeryWeak = "Heel zwak";
$UserXHasBeenAssignedToBoss = "U bent toegewezen aan de student %s";
$UserXHasBeenAssignedToBossWithUrlX = "U bent als tutor toegewezen aan student %s. U kunt zijn profiel bekijken van hier: %s";
$AgendaAvailableInCourseX = "Voor module %s is jouw agenda beschikbaar.";
$YouHaveBeenSubscribedToCourseXTheStartDateXAndCommentX = "<br />Je bent ingeschreven voor de module %s . Je kan de lesmomenten, lestijden en leslokalen in jouw agenda op de ELO terugvinden. <br />
Indien je nog geen toegang hebt tot onze ELO, zal je bij de eerste les de nodige info ontvangen van jouw lesgever.<br /> <br />
Het eerstvolgende moment dat voor deze module werd ingevuld is: <br />
$YouHaveBeenSubscribedToCourseXTheStartDateXAndCommentX = "<br />Je bent ingeschreven voor de module %s . Je kan de lesmomenten, lestijden en leslokalen in jouw agenda op de ELO terugvinden. <br />
Indien je nog geen toegang hebt tot onze ELO, zal je bij de eerste les de nodige info ontvangen van jouw lesgever.<br /> <br />
Het eerstvolgende moment dat voor deze module werd ingevuld is: <br />
%s <br /> %s";
$WelcomeToPortalXInCourseSessionX = "Welkom bij %s: informatie over de module %s";
$WelcomeToPortalXInCourseSessionXCoursePartOfCareerX = "Welkom bij %s. Je bent ingeschreven voor de module %s.
$WelcomeToPortalXInCourseSessionXCoursePartOfCareerX = "Welkom bij %s. Je bent ingeschreven voor de module %s.
Deze module maakt deel uit van de opleiding %s.";
$YourNextModule = "Jouw eerstvolgende lesmoment voor de module";
$FirstLesson = "Eerste lesmoment";
@ -6905,4 +6905,4 @@ $NumberOfQuestionsLimitedFromXToY = "Het aantal vragen is beperkt tot tussen %d
$AddTestAfterEachPage = "Voeg na elke pagina een test toe";
$HiddenButVisibleForMe = "Verborgen maar zichtbaar voor mij";
$EndOfLearningPath = "Conclusie";
?>
?>

@ -325,19 +325,19 @@ $DeleteUsersNotInList = "Unsubscribe students which are not in the imported list
$IfSessionExistsUpdate = "If a session exists, update it";
$CreatedByXYOnZ = "Create by <a href=\"%s\">%s</a> on %s";
$LoginWithExternalAccount = "Login without an institutional account";
$ImportAikenQuizExplanationExample = "This is the text for question 1
A. Answer 1
B. Answer 2
C. Answer 3
ANSWER: B
This is the text for question 2
A. Answer 1
B. Answer 2
C. Answer 3
D. Answer 4
ANSWER: D
ANSWER_EXPLANATION: this is an optional feedback comment that will appear next to the correct answer.
$ImportAikenQuizExplanationExample = "This is the text for question 1
A. Answer 1
B. Answer 2
C. Answer 3
ANSWER: B
This is the text for question 2
A. Answer 1
B. Answer 2
C. Answer 3
D. Answer 4
ANSWER: D
ANSWER_EXPLANATION: this is an optional feedback comment that will appear next to the correct answer.
SCORE: 20";
$ImportAikenQuizExplanation = "The Aiken format comes in a simple text (.txt) file, with several question blocks, each separated by a blank line. The first line is the question, the answer lines are prefixed by a letter and a dot, and the correct answer comes next with the ANSWER: prefix. See example below.";
$ExerciseAikenErrorNoAnswerOptionGiven = "The imported file has at least one question without any answer (or the answers do not include the required prefix letter). Please make sure each question has at least one answer and that it is prefixed by a letter and a dot or a parenthesis, like this: A. answer one";
@ -426,18 +426,18 @@ $VersionUpToDate = "Your version is up-to-date";
$LatestVersionIs = "The latest version is";
$YourVersionNotUpToDate = "Your version is not up-to-date";
$Hotpotatoes = "Hotpotatoes";
$ZeroMeansNoQuestionWillBeSelectedMinusOneMeansThatAllQuestionsWillBeSelected = "-1 = All questions will be selected.
$ZeroMeansNoQuestionWillBeSelectedMinusOneMeansThatAllQuestionsWillBeSelected = "-1 = All questions will be selected.
0 = No questions will be selected.";
$EmailNotificationTemplateDescription = "You can customize the email sent to users when they finished the exercise. You can use tags like these:
1. {{ student.username }}
2. {{ student.firstname }}
3. {{ student.lastname }}
4. {{ student.official_code }}
5. {{ exercise.title }}
6. {{ exercise.start_time }}
7. {{ exercise.end_time }}
8. {{ course.title }}
$EmailNotificationTemplateDescription = "You can customize the email sent to users when they finished the exercise. You can use tags like these:
1. {{ student.username }}
2. {{ student.firstname }}
3. {{ student.lastname }}
4. {{ student.official_code }}
5. {{ exercise.title }}
6. {{ exercise.start_time }}
7. {{ exercise.end_time }}
8. {{ course.title }}
9. {{ course.code }}";
$EmailNotificationTemplate = "E-mail notification template";
$ExerciseEndButtonDisconnect = "Logout";
@ -845,10 +845,10 @@ $AllowVisitors = "Allow visitors";
$EnableIframeInclusionComment = "Allowing arbitrary iframes in the HTML Editor will enhance the edition capabilities of the users, but it can represent a security risk. Please make sure you can rely on your users (i.e. you know who they are) before enabling this feature.";
$AddedToLPCannotBeAccessed = "This exercise has been included in a learning path, so it cannot be accessed by students directly from here. If you want to put the same exercise available through the exercises tool, please make a copy of the current exercise using the copy icon.";
$EnableIframeInclusionTitle = "Allow iframes in HTML Editor";
$MailTemplateRegistrationMessage = "Dear ((firstname)) ((lastname)),\n\nYou are registered on
((sitename)) with the following settings:\n\nUsername :
((username))\nPass : ((password))\n\nThe address of ((sitename)) is :
((url))\n\nIn case of trouble, contact us.\n\nYours sincerely
$MailTemplateRegistrationMessage = "Dear ((firstname)) ((lastname)),\n\nYou are registered on
((sitename)) with the following settings:\n\nUsername :
((username))\nPass : ((password))\n\nThe address of ((sitename)) is :
((url))\n\nIn case of trouble, contact us.\n\nYours sincerely
\n((admin_name)) ((admin_surname)).";
$Explanation = "Once you click on \"Create a course\", a course is created with a section for Tests, Project based learning, Assessments, Courses, Dropbox, Agenda and much more. Logging in as teacher provides you with editing privileges for this course.";
$CodeTaken = "This course code is already in use.<br>Use the <b>Back</b> button on your browser and try again.";
@ -2641,16 +2641,16 @@ $NoPosts = "No posts";
$WithoutAchievedSkills = "Without achieved skills";
$TypeMessage = "Please type your message!";
$ConfirmReset = "Do you really want to delete all messages?";
$MailCronCourseExpirationReminderBody = "Dear %s,
It has come to our attention that you have not completed the course %s although its expiration date had been set on %s, remaining %s days to finish it.
We remind you that you have only the possibility to follow this course once a year, that is why we invite you insistently to complete your course on time.
You can return to the course connecting to the platform through this address: %s
Best Regards,
$MailCronCourseExpirationReminderBody = "Dear %s,
It has come to our attention that you have not completed the course %s although its expiration date had been set on %s, remaining %s days to finish it.
We remind you that you have only the possibility to follow this course once a year, that is why we invite you insistently to complete your course on time.
You can return to the course connecting to the platform through this address: %s
Best Regards,
%s Team";
$MailCronCourseExpirationReminderSubject = "Urgent: %s course expiration reminder";
$ExerciseAndLearningPath = "Exercise and learning path";
@ -5778,8 +5778,8 @@ $CheckThatYouHaveEnoughQuestionsInYourCategories = "Make sure you have enough qu
$PortalCoursesLimitReached = "Sorry, this installation has a courses limit, which has now been reached. To increase the number of courses allowed on this Chamilo installation, please contact your hosting provider or, if available, upgrade to a superior hosting plan.";
$PortalTeachersLimitReached = "Sorry, this installation has a teachers limit, which has now been reached. To increase the number of teachers allowed on this Chamilo installation, please contact your hosting provider or, if available, upgrade to a superior hosting plan.";
$PortalUsersLimitReached = "Sorry, this installation has a users limit, which has now been reached. To increase the number of users allowed on this Chamilo installation, please contact your hosting provider or, if available, upgrade to a superior hosting plan.";
$GenerateSurveyAccessLinkExplanation = "By copying the link below and pasting it in an e-mail or on a website, you will allow any anonymous person to enter and answer this survey.
You can test this feature by clicking the link above and answering the survey.
$GenerateSurveyAccessLinkExplanation = "By copying the link below and pasting it in an e-mail or on a website, you will allow any anonymous person to enter and answer this survey.
You can test this feature by clicking the link above and answering the survey.
This is particularly useful if you want to allow anyone on a forum to answer you survey and you don't know their e-mail addresses.";
$LinkOpenSelf = "Open self";
$LinkOpenBlank = "Open blank";
@ -5832,8 +5832,8 @@ $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";
$CopyLabelSuffix = "Copy";
@ -5895,7 +5895,7 @@ $CourseSettingsRegisterDirectLink = "If your course is public or open, you can u
$DirectLink = "Direct link";
$here = "here";
$GoAheadAndBrowseOurCourseCatalogXOnceRegisteredYouWillSeeTheCourseHereX = "<p>Go ahead and browse our course catalog %s to register to any course you like. Once registered, you will see the course appear right %s, instead of this message.</p>";
$HelloXAsYouCanSeeYourCourseListIsEmpty = "<p>Hello <strong>%s</strong> and welcome,</p>
$HelloXAsYouCanSeeYourCourseListIsEmpty = "<p>Hello <strong>%s</strong> and welcome,</p>
<p>As you can see, your courses list is still empty. That's because you are not registered to any course yet! </p>";
$UnsubscribeUsersAlreadyAddedInCourse = "Unsubscribe users already added";
$ImportUsers = "Import users";
@ -6158,7 +6158,7 @@ $AverageScore = "Average score";
$LastConnexionDate = "Last connexion date";
$ToolVideoconference = "Videoconference";
$BigBlueButtonEnableTitle = "BigBlueButton videoconference tool";
$BigBlueButtonEnableComment = "Choose whether you want to enable the BigBlueButton videoconference tool. Once enabled, it will show as an additional course tool in all courses' homepage, and teachers will be able to launch a conference at any time. Learners will not be able to launch a conference, only join one. If you don't have a BigBlueButton server, please <a href=\"http://bigbluebutton.org/\" target=\"_blank\">set one up</a> or ask the <a href=\"http://www.chamilo.org/en/providers\" target=\"_blank\">Chamilo official providers</a> for a quote.
$BigBlueButtonEnableComment = "Choose whether you want to enable the BigBlueButton videoconference tool. Once enabled, it will show as an additional course tool in all courses' homepage, and teachers will be able to launch a conference at any time. Learners will not be able to launch a conference, only join one. If you don't have a BigBlueButton server, please <a href=\"http://bigbluebutton.org/\" target=\"_blank\">set one up</a> or ask the <a href=\"http://www.chamilo.org/en/providers\" target=\"_blank\">Chamilo official providers</a> for a quote.
BigBlueButton is a free (as in freedom *and* beer), but its installation requires a set of technical skills that might not be immediately available to all. You can install it on your own or seek professional help to assist you or do it for you. This help, however, will generate a certain cost. In the pure logic of the free software, we offer you the tools to make your work easier and recommend professionals (the Chamilo Official Providers) that will be able to help you if this were too difficult.";
$BigBlueButtonHostTitle = "BigBlueButton server host";
$BigBlueButtonHostComment = "This is the name of the server where your BigBlueButton server is running. Might be <i>localhost</i>, an IP address (e.g. 192.168.13.54) or a domain name (e.g. my.video.com).";
@ -6169,14 +6169,14 @@ $OnlyAccessFromYourGroup = "Only accessible from your group";
$CreateAssignmentPage = "This will create a special wiki page in which the teacher can describe the task and which will be automatically linked to the wiki pages where learners perform the task. Both the teacher's and the learners' pages are created automatically. In these tasks, learners can only edit and view theirs pages, but this can be changed easily if you need to.";
$UserFolders = "Folders of users";
$UserFolder = "User folder";
$HelpUsersFolder = "INFORMATION VISIBLE TO THE TEACHER ONLY:\nThe users folder contains a folder for each user who has accessed it through the documents tool, or when any file has been sent in the course through the online editor. If neither circumstances has occurred, then no user folder will have been created. In the case of groups, files that are sent through the editor will be added in the folder of each group, which is only accessible by students from this group.
<br /><br />
The users folder and each of the included folders will be hidden by default in for all students, but each student can see the contents of his/her directory through the online editor. However, if a student knows the address of a file or folder of another student, he may be able to access it.
<br /><br />
If the folder of a student is visible, other students can see what it contains. In this case, the student that owns the folder can also (from the documents tool and only in his/her folder): create and edit web documents, convert a document into a template for personal use, create and edit drawings in SVG and PNG formats, record audio files in WAV format, make audio files in MP3 from a text, make snapshops from a webcam, send documents, create folders, move folders and files, delete folders and files, and download backup of his/her folder.
<br /><br />
Moreover, the documents tool is synchronized with the file manager of the online editor, so changes in the documents triggered in any one of these will affect both.
<br /><br />
$HelpUsersFolder = "INFORMATION VISIBLE TO THE TEACHER ONLY:\nThe users folder contains a folder for each user who has accessed it through the documents tool, or when any file has been sent in the course through the online editor. If neither circumstances has occurred, then no user folder will have been created. In the case of groups, files that are sent through the editor will be added in the folder of each group, which is only accessible by students from this group.
<br /><br />
The users folder and each of the included folders will be hidden by default in for all students, but each student can see the contents of his/her directory through the online editor. However, if a student knows the address of a file or folder of another student, he may be able to access it.
<br /><br />
If the folder of a student is visible, other students can see what it contains. In this case, the student that owns the folder can also (from the documents tool and only in his/her folder): create and edit web documents, convert a document into a template for personal use, create and edit drawings in SVG and PNG formats, record audio files in WAV format, make audio files in MP3 from a text, make snapshops from a webcam, send documents, create folders, move folders and files, delete folders and files, and download backup of his/her folder.
<br /><br />
Moreover, the documents tool is synchronized with the file manager of the online editor, so changes in the documents triggered in any one of these will affect both.
<br /><br />
As such, the user folder is not only a place to deposit files, it becomes a complete manager of the documents students use during the course. Also, remember that any user can copy a file that is visible from any folder in the documents tool (whether or not he is the owner) to his/her portfolios or personal documents area of social network, which will be available to him/her for use in other courses.";
$HelpFolderChat = "INFORMATION VISIBLE TO THE TEACHER ONLY:\nThis folder contains all sessions that have been opened in the chat. Although the chat sessions can often be trivial, others can be really interesting and worthy of being incorporated as an additional work document. To do this without changing the visibility of this folder, make the file visible and link it from where you deem appropriate. It is not recommended to make this folder visible to all.";
$HelpFolderCertificates = "INFORMATION VISIBLE TO THE TEACHER ONLY:\nThis folder contains the various certificates templates that have been created for the rating tool. It is not recommended to make this folder visible to all.";
@ -6225,8 +6225,8 @@ $Pediaphon = "Use Pediaphon audio services";
$HelpPediaphon = "Supports text with several thousands characters, in various types of male and female voices (depending on the language). Audio files will be generated and automatically saved to the Chamilo directory in which you are.";
$FirstSelectALanguage = "Please select a language";
$MoveUserStats = "Move users results from/to a session";
$CompareUserResultsBetweenCoursesAndCoursesInASession = "This advanced tool allows you to manually improve the tracking of users results when moving from courses methodology to sessions methodology. In most cases, you won't need to use it.<br />
On this screen, you can compare results of users between the context of a standalone course, and the context of the same course inside a session.<br />
$CompareUserResultsBetweenCoursesAndCoursesInASession = "This advanced tool allows you to manually improve the tracking of users results when moving from courses methodology to sessions methodology. In most cases, you won't need to use it.<br />
On this screen, you can compare results of users between the context of a standalone course, and the context of the same course inside a session.<br />
Once you are sure about what to do, you can choose to move the tracking data of the students (exercises results and learning paths tracking) from a course to a session.";
$PDFExportWatermarkEnableTitle = "Enable watermark in PDF export";
$PDFExportWatermarkEnableComment = "By enabling this option, you can upload an image or a text that will be automatically added as watermark to all PDF exports of documents on the system.";
@ -6658,7 +6658,7 @@ $DisableEndDate = "Disable end date";
$ForumCategories = "Forum Categories";
$Copy = "Copy";
$ArchiveDirCleanup = "Cleanup of cache and temporary files";
$ArchiveDirCleanupDescr = "Chamilo keeps a copy of most of the temporary files it generates (for backups, exports, copies, etc) into its app/cache/ directory. After a while, this can add up to a very large amount of disk space being used for nothing. Click the button below to clean your archive directory up. This operation should be automated by a cron process, but if this is not possible, you can come to this page regularly to remove all temporary files from the directory.
$ArchiveDirCleanupDescr = "Chamilo keeps a copy of most of the temporary files it generates (for backups, exports, copies, etc) into its app/cache/ directory. After a while, this can add up to a very large amount of disk space being used for nothing. Click the button below to clean your archive directory up. This operation should be automated by a cron process, but if this is not possible, you can come to this page regularly to remove all temporary files from the directory.
This feature also cleans up the theme cache files.";
$ArchiveDirCleanupProceedButton = "Proceed with cleanup";
$ArchiveDirCleanupSucceeded = "The app/cache/ directory cleanup has been executed successfully.";
@ -7007,45 +7007,45 @@ $ResourceLockedByGradebook = "This option is not available because this activity
$GradebookLockedAlert = "This assessment has been locked. You cannot unlock it. If you really need to unlock it, please contact the platform administrator, explaining the reason why you would need to do that (it might otherwise be considered as fraud attempt).";
$GradebookEnableLockingTitle = "Enable locking of assessments by teachers";
$GradebookEnableLockingComment = "Once enabled, this option will enable locking of any assessment by the teachers of the corresponding course. This, in turn, will prevent any modification of results by the teacher inside the resources used in the assessment: exams, learning paths, tasks, etc. The only role authorized to unlock a locked assessment is the administrator. The teacher will be informed of this possibility. The locking and unlocking of gradebooks will be registered in the system's report of important activities";
$LdapDescriptionComment = " <div class=\"alert alert-info\">
<ul>
<li>LDAP authentication : <br>
See I. below to configure LDAP <br>
See II. below to activate LDAP authentication
</li>
<li>Update user attributes, with LDAP data, after CAS authentication(see <a href=\"settings.php?category=CAS\">CAS configuration </a>) : <br>
See I. below to configure LDAP <br>
CAS manage user authentication, LDAP activation isn't required.
</li>
</ul>
</div>
<h4>I. LDAP configuration</h4>
<h5>Edit file app/config/auth.conf.php </h5>
<p>-&gt; Edit values of array <code>\$extldap_config</code></p>
<ul>
<li>base domain string (ex : 'base_dn' =&gt; 'DC=cblue,DC=be')</li>
<li>admin distinguished name (ex : 'admin_dn' =&gt;'CN=admin,dc=cblue,dc=be')</li>
<li>admin password (ex : 'admin_password' =&gt; '123456') </li>
<li>ldap host (ex : 'host' =&gt; array('1.2.3.4', '2.3.4.5', '3.4.5.6'))</li>
<li>filter (ex : 'filter' =&gt; '') </li>
<li>port (ex : 'port' =&gt; 389) </li>
<li>protocol version (2 or 3) (ex : 'protocol_version' =&gt; 3)</li>
<li>user_search (ex : 'user_search' =&gt; 'sAMAccountName=%username%') </li>
<li>encoding (ex : 'encoding' =&gt; 'UTF-8')</li>
<li>update_userinfo (ex : 'update_userinfo' =&gt; true) </li>
</ul>
<p>-&gt; To update correspondences between user and LDAP attributes, edit array <code>\$extldap_user_correspondance</code></p>
<p>Array values are &lt;chamilo_field&gt; =&gt; &gt;ldap_field&gt;</p><p>
</p>
<h4>II. Activate LDAP authentication </h4>
<h5>Edit file app/config/configuration.php </h5>
<p>-&gt; Uncomment lines:</p>
<ul>
<li>
\$extAuthSource[\"extldap\"][\"login\"] = \$_configuration['root_sys'].\"main/auth/external_login/login.ldap.php\";</li>
<li>\$extAuthSource[\"extldap\"][\"newUser\"] = \$_configuration['root_sys'].\"main/auth/external_login/newUser.ldap.php\";</li>
</ul>
<p>N.B.: LDAP users use same fields than platform users to login. <br>
$LdapDescriptionComment = " <div class=\"alert alert-info\">
<ul>
<li>LDAP authentication : <br>
See I. below to configure LDAP <br>
See II. below to activate LDAP authentication
</li>
<li>Update user attributes, with LDAP data, after CAS authentication(see <a href=\"settings.php?category=CAS\">CAS configuration </a>) : <br>
See I. below to configure LDAP <br>
CAS manage user authentication, LDAP activation isn't required.
</li>
</ul>
</div>
<h4>I. LDAP configuration</h4>
<h5>Edit file app/config/auth.conf.php </h5>
<p>-&gt; Edit values of array <code>\$extldap_config</code></p>
<ul>
<li>base domain string (ex : 'base_dn' =&gt; 'DC=cblue,DC=be')</li>
<li>admin distinguished name (ex : 'admin_dn' =&gt;'CN=admin,dc=cblue,dc=be')</li>
<li>admin password (ex : 'admin_password' =&gt; '123456') </li>
<li>ldap host (ex : 'host' =&gt; array('1.2.3.4', '2.3.4.5', '3.4.5.6'))</li>
<li>filter (ex : 'filter' =&gt; '') </li>
<li>port (ex : 'port' =&gt; 389) </li>
<li>protocol version (2 or 3) (ex : 'protocol_version' =&gt; 3)</li>
<li>user_search (ex : 'user_search' =&gt; 'sAMAccountName=%username%') </li>
<li>encoding (ex : 'encoding' =&gt; 'UTF-8')</li>
<li>update_userinfo (ex : 'update_userinfo' =&gt; true) </li>
</ul>
<p>-&gt; To update correspondences between user and LDAP attributes, edit array <code>\$extldap_user_correspondance</code></p>
<p>Array values are &lt;chamilo_field&gt; =&gt; &gt;ldap_field&gt;</p><p>
</p>
<h4>II. Activate LDAP authentication </h4>
<h5>Edit file app/config/configuration.php </h5>
<p>-&gt; Uncomment lines:</p>
<ul>
<li>
\$extAuthSource[\"extldap\"][\"login\"] = \$_configuration['root_sys'].\"main/auth/external_login/login.ldap.php\";</li>
<li>\$extAuthSource[\"extldap\"][\"newUser\"] = \$_configuration['root_sys'].\"main/auth/external_login/newUser.ldap.php\";</li>
</ul>
<p>N.B.: LDAP users use same fields than platform users to login. <br>
N.B.: LDAP activation adds a menu External authentication [LDAP] in \"add or modify\" user pages.</p>";
$ShibbolethMainActivateTitle = "<h3>Shibboleth authentication</h3>";
$ShibbolethMainActivateComment = "<p>First of all, you have to configure Shibboleth for your web server.</p>To configure it for Chamilo<h5>edit file main/auth/shibboleth/config/aai.class.php</h5><p>Modify object &#36;result values with the name of your Shibboleth attributes</p><ul><li>&#36;result-&gt;unique_id = 'mail';</li><li>&#36;result-&gt;firstname = 'cn';</li><li>&#36;result-&gt;lastname = 'uid';</li><li>&#36;result-&gt;email = 'mail';</li><li>&#36;result-&gt;language = '-';</li><li>&#36;result-&gt;gender = '-';</li><li>&#36;result-&gt;address = '-';</li><li>&#36;result-&gt;staff_category = '-';</li><li>&#36;result-&gt;home_organization_type = '-'; </li><li>&#36;result-&gt;home_organization = '-';</li><li>&#36;result-&gt;affiliation = '-';</li><li>&#36;result-&gt;persistent_id = '-';</li><li>...</li></ul><br/>Go to <a href='settings.php?category=Shibboleth'>Plugin</a> to add a configurable 'Shibboleth Login' button for your Chamilo campus.";
@ -7476,7 +7476,7 @@ $AreYouSureToSubscribe = "Are you sure to subscribe?";
$CheckYourEmailAndFollowInstructions = "Check your e-mail and follow the instructions.";
$LinkExpired = "Link expired, please try again.";
$ResetPasswordInstructions = "Instructions for the password change procedure";
$ResetPasswordCommentWithUrl = "You are receiving this message because you (or someone pretending to be you) have requested a new password to be generated for you.<br/>
$ResetPasswordCommentWithUrl = "You are receiving this message because you (or someone pretending to be you) have requested a new password to be generated for you.<br/>
To set a the new password you need to activate it. To do this, please click this link:<br/>%s<br/>If you did not request this procedure, then please ignore this message. If you keep receiving it, please contact the portal administrator.";
$CronRemindCourseExpirationActivateTitle = "Remind Course Expiration cron";
$CronRemindCourseExpirationActivateComment = "Enable the Remind Course Expiration cron";
@ -7485,8 +7485,8 @@ $CronRemindCourseExpirationFrequencyComment = "Number of days before the expirat
$CronCourseFinishedActivateText = "Course Finished cron";
$CronCourseFinishedActivateComment = "Activate the Course Finished cron";
$MailCronCourseFinishedSubject = "End of course %s";
$MailCronCourseFinishedBody = "Dear %s,<br/>Thank you for your participation to course %s. We hope you've acquired new relevant knowledge and enjoyed the course.<br/>
You can check your performance in the course through the My Progress section.<br/>Best regards,<br/>
$MailCronCourseFinishedBody = "Dear %s,<br/>Thank you for your participation to course %s. We hope you've acquired new relevant knowledge and enjoyed the course.<br/>
You can check your performance in the course through the My Progress section.<br/>Best regards,<br/>
%s Team";
$GenerateDefaultContent = "Generate default content";
$ThanksForYourSubscription = "Thanks for your subscription";
@ -7858,7 +7858,7 @@ $EditCourseCategoryToURL = "Edit course categories for one URL";
$VisibleToSelf = "Visible to self";
$VisibleToOthers = "Visible to others";
$UpgradeVersion = "Upgrade Chamilo LMS version";
$CRSTablesIntro = "The install script has detected tables left over from previous versions that could cause problems during the upgrade process.
$CRSTablesIntro = "The install script has detected tables left over from previous versions that could cause problems during the upgrade process.
Please click on the button below to delete them. We heavily recommend you do a full backup of them before confirming this last install step.";
$Removing = "Removing";
$CheckForCRSTables = "Check for tables from previous versions";
@ -7869,7 +7869,7 @@ $TooManyRepetitions = "Too many repetitions";
$YourPasswordContainsSequences = "Your password contains sequences";
$PasswordVeryWeak = "Very weak";
$UserXHasBeenAssignedToBoss = "You have been assigned the learner %s";
$UserXHasBeenAssignedToBossWithUrlX = "You have been assigned as tutor for the learner %s.<br/>
$UserXHasBeenAssignedToBossWithUrlX = "You have been assigned as tutor for the learner %s.<br/>
You can access his profile here: %s";
$ShortName = "Short name";
$Portal = "Portal";
@ -7939,8 +7939,8 @@ $InstallMultiURLDetectedNotMainURL = "You are currently using the multi-URL feat
$OnlyXQuestionsPickedRandomly = "Only %s questions will be picked randomly following the quiz configuration.";
$AllowDownloadDocumentsByApiKeyTitle = "Allow download course documents by API Key";
$AllowDownloadDocumentsByApiKeyComment = "Download documents verifying the REST API key for a user";
$UploadCorrectionsExplanationWithDownloadLinkX = "First you have to download the corrections <a href='%s'> here </a>.
After that you have to unzip that file and edit the files as you wanted without changing the file names.
$UploadCorrectionsExplanationWithDownloadLinkX = "First you have to download the corrections <a href='%s'> here </a>.
After that you have to unzip that file and edit the files as you wanted without changing the file names.
Then create a zip file with those modified files and upload it in this form.";
$PostsPendingModeration = "Posts pending moderation";
$OnlyUsersFromCourseSession = "Only users from one course in a session";
@ -8007,12 +8007,12 @@ $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.
There are two types of announcements that can be sent:
Specific date: In this case a specific day is selected to make the announcement.
$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:
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.";
$ShowPreviousButton = "Show previous button";
@ -8033,18 +8033,18 @@ $AddHrmToUser = "Add Human Resources Manager to user";
$HrmAssignedUsersCourseList = "Human Resources Manager assigned users course list";
$GoToSurvey = "Go to Survey";
$NotificationCertificateSubject = "Certificate notification";
$NotificationCertificateTemplate = "((user_first_name)),
Congratulations on the completion of ((course_title)). Your final grade received for this class is ((score)). Please allow a few days for it to reflect in their system. We look forward to seeing you in future classes. If we can assist you further in any way, please feel free to contact us.
Sincerely,
((author_first_name)), ((author_last_name))
$NotificationCertificateTemplate = "((user_first_name)),
Congratulations on the completion of ((course_title)). Your final grade received for this class is ((score)). Please allow a few days for it to reflect in their system. We look forward to seeing you in future classes. If we can assist you further in any way, please feel free to contact us.
Sincerely,
((author_first_name)), ((author_last_name))
((portal_name))";
$SendCertificateNotifications = "Send certificate notification to all users";
$MailSubjectForwardShort = "Fwd";
$ForwardedMessage = "Forwarded message";
$ForwardMessage = "Forward message";
$MyCoursePageCategoryIntroduction = "You will find below the list of course categories.
$MyCoursePageCategoryIntroduction = "You will find below the list of course categories.
Click on one of them to see the list of courses it has.";
$FeatureDisabledByAdministrator = "Feature disabled by administrator";
$SubscribeUsersToLpCategory = "Subscribe users to category";
@ -8149,10 +8149,10 @@ $RedirectToTheDocumentList = "Redirect to the document list";
$TheExerciseAutoLaunchSettingIsONStudentsWillBeRedirectToTheExerciseList = "The exercises auto-launch feature configuration is enabled. Learners will be automatically redirected to exercise list.";
$PostedExpirationDate = "Posted deadline for sending the work (Visible to the learner)";
$BossAlertMsgSentToUserXTitle = "Follow up message about student %s";
$BossAlertUserXSentMessageToUserYWithLinkZ = "Hi,<br/><br/>
User %s sent a follow up message about student %s.<br/><br/>
$BossAlertUserXSentMessageToUserYWithLinkZ = "Hi,<br/><br/>
User %s sent a follow up message about student %s.<br/><br/>
The message can be seen here %s";
$include_services = "Include services";
$culqi_enable = "Enable culqi";
@ -8184,8 +8184,8 @@ $PersonalDataLimitationTitle = "Personal data limitation";
$PersonalDataDeletionTitle = "Personal data deletion";
$PersonalDataDestructionTitle = "Personal data destruction";
$PersonalDataProfilingTitle = "Personal data profiling";
$PersonalDataIntroductionText = "We respect your privacy!
This page unites all aspects of the personal data we might be keeping on you, how we treat it, what you have authorized us to do with it and who we are, in an effort to comply with most data privacy laws available.
$PersonalDataIntroductionText = "We respect your privacy!
This page unites all aspects of the personal data we might be keeping on you, how we treat it, what you have authorized us to do with it and who we are, in an effort to comply with most data privacy laws available.
Please read this information carefully and, if you have any question, check the contact details below to ask us for more details.";
$YourDegreeOfCertainty = "Your degree of certainty";
$DegreeOfCertaintyThatMyAnswerIsCorrect = "Degree of certainty that my answer will be considered correct";
@ -8196,11 +8196,11 @@ $ResultAccomplishedTest = "Results for the accomplished test";
$YourResultsByDiscipline = "Your results by discipline";
$ForComparisonYourLastResultToThisTest = "In comparison, your latest results for this test";
$YourOverallResultForTheTest = "Your overall results for the test";
$QuestionDegreeCertaintyHTMLMail = "You will find your results for test %s below.<br />
To see the details of these results:
<br /><br />
1. Connect to the platform (login/password): <a href='%s'>To the platform</a>.
<br /><br />
$QuestionDegreeCertaintyHTMLMail = "You will find your results for test %s below.<br />
To see the details of these results:
<br /><br />
1. Connect to the platform (login/password): <a href='%s'>To the platform</a>.
<br /><br />
2. Click this link: <a href='%s'>See detailed results</a>.";
$DegreeOfCertaintyVerySure = "Very sure";
$DegreeOfCertaintyVerySureDescription = "Your answer was correct and you were 80% sure about it. Congratulations!";
@ -8262,8 +8262,8 @@ $SubSkill = "Sub-skill";
$AddMultipleUsersToCalendar = "Add multiple users to calendar";
$UpdateCalendar = "Update calendar";
$ControlPoint = "Control point";
$MessageQuestionCertainty = "Please follow the instructions below to check your results for test %s.<br /><br />
1. Connect to the platform (username/password) at: %s<br />
$MessageQuestionCertainty = "Please follow the instructions below to check your results for test %s.<br /><br />
1. Connect to the platform (username/password) at: %s<br />
2. Click the following link: %s<br />";
$SessionMinDuration = "Session min duration";
$CanNotTranslate = "Could not translate";
@ -8315,9 +8315,9 @@ $ProgressObtainedFromLPProgressAndTestsAverage = "Note: This progress is obtaine
$CreateNewSurveyDoodle = "Create a new Doodle type survey";
$RemoveMultiplicateQuestions = "Remove multiplicated questions";
$MultiplicateQuestions = "Multiplicate questions";
$QuestionTags = "You can use the tags {{class_name}} and {{student_full_name}} in the question to be able to multiplicate questions.
On the survey's list page in the action field you have a button to multiplicate question that will look for the {{class_name}} tag and duplicate the question for all the class subscribed to the course and rename it with the name of the class.
It will also add a page ending to make a new page for each class.
$QuestionTags = "You can use the tags {{class_name}} and {{student_full_name}} in the question to be able to multiplicate questions.
On the survey's list page in the action field you have a button to multiplicate question that will look for the {{class_name}} tag and duplicate the question for all the class subscribed to the course and rename it with the name of the class.
It will also add a page ending to make a new page for each class.
Then it will look for the {{student_full_name}} tag and duplicate the question for all the student in the class (for each class) and rename it with the student's full name.";
$CreateMeeting = "Create meeting poll";
$QuestionForNextClass = "Question for next class";
@ -8557,8 +8557,8 @@ $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.<br /><br />
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.<br /><br />
$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.<br /><br />
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.<br /><br />
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";
@ -8948,8 +8948,8 @@ $SkillLevels = "Skill levels";
$ImportCourseEvents = "Import course events";
$TagsCanBeUsed = "Tags can be used";
$ImportCourseAgendaReminderTitleDefault = "Invitation to the ((course_title)) course";
$ImportCourseAgendaReminderDescriptionDefault = "<p>Hello ((user_complete_name)).</p>
<p>You have to take course ((course_title)) between ((date_start)) and ((date_end)). You can access it here: ((course_link)).</p>
$ImportCourseAgendaReminderDescriptionDefault = "<p>Hello ((user_complete_name)).</p>
<p>You have to take course ((course_title)) between ((date_start)) and ((date_end)). You can access it here: ((course_link)).</p>
<p>Cheers.</p>";
$XUserPortfolioItems = "%s's portfolio items";
$Scored = "Scored";
@ -8976,11 +8976,11 @@ $reportByAttempts = "Report by attempts";
$QuestionsTopic = "Questions topic";
$QuestionsTopicHelp = "The questions topic will be used as the name of the test and will be sent to the AI generator to generate questions in the language configured for this course, asking for them to be generated in the Aiken format so they can easily be imported into this course.";
$AIQuestionsGenerator = "AI Questions Generator";
$AIQuestionsGeneratorNumberHelper = "Most AI generators are limited in the number of characters they can return, and often your organization will be charged based on the number of characters returned, so please use with moderation, asking for smaller numbers first, then extending as you gain confidence.
$AIQuestionsGeneratorNumberHelper = "Most AI generators are limited in the number of characters they can return, and often your organization will be charged based on the number of characters returned, so please use with moderation, asking for smaller numbers first, then extending as you gain confidence.
A good number for a first test is 3 questions.";
$LPEndStepAddTagsToShowCertificateOrSkillAutomatically = "Use one (or more) of the following proposed tags to automatically generate a certificate or a skill and show them here when the student gets to this step, which requires all other steps to be finished first.";
$ImportSessionAgendaReminderDescriptionDefault = "Hi ((user_complete_name)).
$ImportSessionAgendaReminderDescriptionDefault = "Hi ((user_complete_name)).
You are invited to follow the session ((session_name)) from the ((date_start)) until the ((date_end)). ";
$ImportSessionAgendaReminderTitleDefault = "Invitation to session ((session_name))";
$FillBlanksCombination = "Fill blanks or form with exact selection";
@ -9017,4 +9017,4 @@ $ExportExerciseAllResults = "Export all results from an exercise";
$ExportExerciseNoResult = "No result found for export in this test.";
$UserXChangedToYToCancelClickZ = "User %s has been changed to %s. To cancel, click <a href='%s'>here</a>.";
$Exlearner = "Ex-learner";
?>
?>

@ -2993,6 +2993,11 @@ class SurveyUtil
true
);
} else {
$extraParameters = [];
if (api_get_configuration_value('mail_header_from_custom_course_logo') == true) {
$extraParameters = ['logo' => CourseManager::getCourseEmailPicture($_course)];
}
@api_mail_html(
'',
$invitedUser,
@ -3000,7 +3005,11 @@ class SurveyUtil
$full_invitation_text,
$sender_name,
$sender_email,
$replyto
$replyto,
[],
false,
$extraParameters,
''
);
}
}

@ -2253,6 +2253,12 @@ class Wiki
}
///make and send email
if ($allow_send_mail) {
$extraParameters = [];
if (api_get_configuration_value('mail_header_from_custom_course_logo') == true) {
$extraParameters = ['logo' => CourseManager::getCourseEmailPicture($_course)];
}
while ($row = Database::fetch_array($result)) {
$userinfo = api_get_user_info(
$row['user_id']
@ -2289,7 +2295,12 @@ class Wiki
$email_subject,
$email_body,
$sender_name,
$sender_email
$sender_email,
[],
[],
false,
$extraParameters,
''
);
}
}
@ -2782,7 +2793,7 @@ class Wiki
$sql .= ") AND ".$groupfilter.$sessionCondition.$categoriesCondition;
} else {
// warning don't use group by reflink because don't return the last version
$sql = "SELECT * FROM $tbl_wiki AS wp
$sql = "SELECT * FROM $tbl_wiki AS wp
WHERE wp.c_id = ".$this->course_id."
AND wp.visibility = 1
AND (wp.title LIKE '%".Database::escape_string($search_term)."%' ";

Loading…
Cancel
Save