Update get_lang calls using full string.

pull/3016/head
Julio Montoya 5 years ago
parent 3541e3a92c
commit 40b6234ef9
  1. 1
      main/attendance/attendance_controller.php
  2. 14
      main/exercise/ReadingComprehension.php
  3. 28
      main/exercise/UniqueAnswerImage.php
  4. 2
      main/exercise/exercise_reminder.php
  5. 4
      main/exercise/exercise_result.php
  6. 8
      main/exercise/question_admin.inc.php
  7. 28
      main/exercise/question_create.php
  8. 22
      main/exercise/question_list_admin.inc.php
  9. 62
      main/exercise/question_pool.php
  10. 2
      main/exercise/result.php
  11. 2
      main/exercise/savescores.php
  12. 2
      main/exercise/showinframes.php
  13. 20
      main/exercise/stats.php
  14. 52
      main/exercise/tests_category.php
  15. 34
      main/exercise/unique_answer.class.php
  16. 24
      main/exercise/unique_answer_no_option.class.php
  17. 40
      main/exercise/upload_exercise.php

@ -11,7 +11,6 @@
* @author Christian Fasanando <christian1827@gmail.com>
* @author Julio Montoya <gugli100@gmail.com> lot of bugfixes + improvements
*
* @package chamilo.attendance
*/
class AttendanceController
{

@ -78,7 +78,7 @@ class ReadingComprehension extends UniqueAnswer
if (empty($text)) {
// We have an issue here... how do we treat this case?
// For now, let's define a default case
$text = get_lang('NoExercise');
$text = get_lang('No tests');
}
$words = str_word_count($text, 2, '0..9');
$indexes = array_keys($words);
@ -155,7 +155,7 @@ class ReadingComprehension extends UniqueAnswer
}
// hidden values
$form->addRule('questionName', get_lang('GiveQuestion'), 'required');
$form->addRule('questionName', get_lang('Please type the question'), 'required');
$isContent = isset($_REQUEST['isContent']) ? (int) $_REQUEST['isContent'] : null;
// default values
@ -181,11 +181,11 @@ class ReadingComprehension extends UniqueAnswer
public static function get_default_levels()
{
$select_level = [
1 => sprintf(get_lang('ReadingComprehensionLevelX'), self::$speeds[1]),
2 => sprintf(get_lang('ReadingComprehensionLevelX'), self::$speeds[2]),
3 => sprintf(get_lang('ReadingComprehensionLevelX'), self::$speeds[3]),
4 => sprintf(get_lang('ReadingComprehensionLevelX'), self::$speeds[4]),
5 => sprintf(get_lang('ReadingComprehensionLevelX'), self::$speeds[5]),
1 => sprintf(get_lang('%s words per minute'), self::$speeds[1]),
2 => sprintf(get_lang('%s words per minute'), self::$speeds[2]),
3 => sprintf(get_lang('%s words per minute'), self::$speeds[3]),
4 => sprintf(get_lang('%s words per minute'), self::$speeds[4]),
5 => sprintf(get_lang('%s words per minute'), self::$speeds[5]),
];
return $select_level;

@ -58,16 +58,16 @@ class UniqueAnswerImage extends UniqueAnswer
}
$html = '<div class="alert alert-success" role="alert">'.
get_lang('UniqueAnswerImagePreferredSize200x150').'</div>';
get_lang('Images will be resized (up or down) to 200x150 pixels. For a better rendering of the question, we recommend you upload only images of this size.').'</div>';
$html .= '<table class="table table-striped table-hover">
<thead>
<tr style="text-align: center;">
<th width="10">'.get_lang('Number').'</th>
<th width="10">'.get_lang('N°').'</th>
<th>'.get_lang('True').'</th>
<th>'.get_lang('Answer').'</th>
'.$commentTitle.'
'.$feedbackTitle.'
<th width="15">'.get_lang('Weighting').'</th>
<th width="15">'.get_lang('Score').'</th>
</tr>
</thead>
<tbody>';
@ -92,7 +92,7 @@ class UniqueAnswerImage extends UniqueAnswer
//Feedback SELECT
$questionList = $objExercise->selectQuestionList();
$selectQuestion = [];
$selectQuestion[0] = get_lang('SelectTargetQuestion');
$selectQuestion[0] = get_lang('Select target question');
if (is_array($questionList)) {
foreach ($questionList as $key => $questionid) {
@ -107,12 +107,12 @@ class UniqueAnswerImage extends UniqueAnswer
}
}
$selectQuestion[-1] = get_lang('ExitTest');
$selectQuestion[-1] = get_lang('Exit test');
$list = new LearnpathList(api_get_user_id());
$flatList = $list->get_flat_list();
$selectLpId = [];
$selectLpId[0] = get_lang('SelectTargetLP');
$selectLpId[0] = get_lang('Select target course');
foreach ($flatList as $id => $details) {
$selectLpId[$id] = cut($details['lp_name'], 20);
@ -121,7 +121,7 @@ class UniqueAnswerImage extends UniqueAnswer
$tempScenario = [];
if ($numberAnswers < 1) {
$numberAnswers = 1;
echo Display::return_message(get_lang('YouHaveToCreateAtLeastOneAnswer'));
echo Display::return_message(get_lang('You have to create at least one answer'));
}
for ($i = 1; $i <= $numberAnswers; $i++) {
@ -160,9 +160,9 @@ class UniqueAnswerImage extends UniqueAnswer
$tempScenario['lp'.$i] = $lp;
$tempScenario['destination'.$i] = $listDestination;
} else {
$defaults['answer[1]'] = get_lang('DefaultUniqueAnswer1');
$defaults['answer[1]'] = get_lang('A then B then C');
$defaults['weighting[1]'] = 10;
$defaults['answer[2]'] = get_lang('DefaultUniqueAnswer2');
$defaults['answer[2]'] = get_lang('A then C then B');
$defaults['weighting[2]'] = 0;
$tempScenario['destination'.$i] = ['0'];
@ -198,7 +198,7 @@ class UniqueAnswerImage extends UniqueAnswer
$form->addElement('radio', 'correct', null, null, $i, 'class="checkbox"');
$form->addHtmlEditor('answer['.$i.']', null, null, false, $editorConfig);
$form->addRule('answer['.$i.']', get_lang('ThisFieldIsRequired'), 'required');
$form->addRule('answer['.$i.']', get_lang('Required field'), 'required');
switch ($objExercise->getFeedbackType()) {
case EXERCISE_FEEDBACK_TYPE_DIRECT:
@ -223,8 +223,8 @@ class UniqueAnswerImage extends UniqueAnswer
(empty($this->exerciseList) && empty($objExercise->id))
) {
//setting the save button here and not in the question class.php
$buttonGroup[] = $form->addButtonDelete(get_lang('LessAnswer'), 'lessAnswers', true);
$buttonGroup[] = $form->addButtonCreate(get_lang('PlusAnswer'), 'moreAnswers', true);
$buttonGroup[] = $form->addButtonDelete(get_lang('Remove answer option'), 'lessAnswers', true);
$buttonGroup[] = $form->addButtonCreate(get_lang('Add answer option'), 'moreAnswers', true);
$buttonGroup[] = $form->addButtonSave($text, 'submitQuestion', true);
$form->addGroup($buttonGroup);
}
@ -350,9 +350,9 @@ class UniqueAnswerImage extends UniqueAnswer
if ($exercise->showExpectedChoice()) {
$header = '<table class="'.$this->question_table_class.'">
<tr>
<th>'.get_lang('Choice').'</th>';
<th>'.get_lang('Your choice').'</th>';
if ($exercise->showExpectedChoiceColumn()) {
$header .= '<th>'.get_lang('ExpectedChoice').'</th>';
$header .= '<th>'.get_lang('ExpectedYour choice').'</th>';
}
$header .= '<th>'.get_lang('Answer').'</th>';
$header .= '<th>'.get_lang('Status').'</th>';

@ -146,7 +146,7 @@ echo '<script>
$("#message").addClass("warning-message");
$("#message").html("'.addslashes(get_lang('Select a question to revise')).'");
} else {
window.location = "exercise_submit.php?'.api_get_cidreq().'&exerciseId='.$objTest->id.'&reminder=2&" + lp_data;
window.location = "exercise_submit.php?'.api_get_cidreq().'&exerciseId='.$objExercise->id.'&reminder=2&" + lp_data;
}
}

@ -101,7 +101,7 @@ if (api_is_course_admin() && !in_array($origin, ['learnpath', 'embeddable'])) {
echo '<div class="actions">';
echo '<a href="admin.php?'.api_get_cidreq().'&exerciseId='.$objExercise->id.'">'.
Display::return_icon('back.png', get_lang('Go back to the questions list'), [], 32).'</a>';
echo '<a href="exercise_admin.php?'.api_get_cidreq().'&modifyTest=yes&exerciseId='.$objTest->id.'">'.
echo '<a href="exercise_admin.php?'.api_get_cidreq().'&modifyTest=yes&exerciseId='.$objExercise->id.'">'.
Display::return_icon('edit.png', get_lang('ModifyTest'), [], 32).'</a>';
echo '</div>';
}
@ -229,7 +229,7 @@ if (!in_array($origin, ['learnpath', 'embeddable'])) {
Display::display_reduced_footer();
} else {
$lp_mode = Session::read('lp_mode');
$url = '../lp/lp_controller.php?'.api_get_cidreq().'&action=view&lp_id='.$learnpath_id.'&lp_item_id='.$learnpath_item_id.'&exeId='.$exercise_stat_info['exe_id'].'&fb_type='.$objTest->getFeedbackType().'#atoc_'.$learnpath_item_id;
$url = '../lp/lp_controller.php?'.api_get_cidreq().'&action=view&lp_id='.$learnpath_id.'&lp_item_id='.$learnpath_item_id.'&exeId='.$exercise_stat_info['exe_id'].'&fb_type='.$objExercise->getFeedbackType().'#atoc_'.$learnpath_item_id;
$href = $lp_mode === 'fullscreen' ? ' window.opener.location.href="'.$url.'" ' : ' top.location.href="'.$url.'"';
if (api_is_allowed_to_session_edit()) {

@ -24,11 +24,11 @@ if (is_object($objQuestion)) {
$form = new FormValidator('question_admin_form', 'post', $action);
if (isset($_GET['editQuestion'])) {
$class = 'btn btn-default';
$text = get_lang('ModifyQuestion');
$text = get_lang('Save the question');
$type = isset($_GET['type']) ? Security::remove_XSS($_GET['type']) : null;
} else {
$class = 'btn btn-default';
$text = get_lang('AddQuestionToExercise');
$text = get_lang('Add this question to the test');
$type = $_REQUEST['answerType'];
}
@ -66,12 +66,12 @@ if (is_object($objQuestion)) {
) {
if (isset($_GET['editQuestion'])) {
if (empty($exerciseId)) {
Display::addFlash(Display::return_message(get_lang('ItemUpdated')));
Display::addFlash(Display::return_message(get_lang('Item updated')));
$url = 'admin.php?exerciseId='.$exerciseId.'&'.api_get_cidreq().'&editQuestion='.$objQuestion->id;
echo '<script type="text/javascript">window.location.href="'.$url.'"</script>';
exit;
}
echo '<script type="text/javascript">window.location.href="admin.php?exerciseId='.$exerciseId.'&'.api_get_cidreq().'&page='.$page.'&message=ItemUpdated"</script>';
echo '<script type="text/javascript">window.location.href="admin.php?exerciseId='.$exerciseId.'&'.api_get_cidreq().'&page='.$page.'&message=Item updated"</script>';
} else {
// New question
$page = 1;

@ -2,9 +2,7 @@
/* For licensing terms, see /license.txt */
/**
* Exercise.
*
* @package chamilo.exercise
* Test.
*/
require_once __DIR__.'/../inc/global.inc.php';
@ -21,15 +19,15 @@ if (!$allow) {
}
// breadcrumbs
$interbreadcrumb[] = ["url" => "exercise.php", "name" => get_lang('Exercises')];
$interbreadcrumb[] = ["url" => "exercise.php", "name" => get_lang('Tests')];
// Tool name
$nameTools = get_lang('AddQuestionToExercise');
$nameTools = get_lang('Add this question to the test');
// The form
$form = new FormValidator('add_question', 'post', api_get_self().'?'.api_get_cidreq());
// form title
$form->addElement('header', '', get_lang('AddQuestionToExercise'));
$form->addElement('header', '', get_lang('Add this question to the test'));
$question_list = Question::getQuestionTypeList();
$question_list_options = [];
@ -39,7 +37,7 @@ foreach ($question_list as $key => $value) {
$form->addElement(
'select',
'question_type_hidden',
get_lang('QuestionType'),
get_lang('Question type'),
$question_list_options,
['id' => 'question_type_hidden']
);
@ -56,30 +54,30 @@ $sql = "SELECT id,title,type,description, results_disabled
WHERE c_id = $course_id AND active<>'-1' AND session_id=".$session_id."
ORDER BY title ASC";
$result = Database::query($sql);
$exercises['-'] = '-'.get_lang('SelectExercise').'-';
$exercises['-'] = '-'.get_lang('Select exercise').'-';
while ($row = Database :: fetch_array($result)) {
$exercises[$row['id']] = cut($row['title'], EXERCISE_MAX_NAME_SIZE);
}
$form->addElement('select', 'exercise', get_lang('Exercise'), $exercises);
$form->addElement('select', 'exercise', get_lang('Test'), $exercises);
// generate default content
$form->addElement(
'checkbox',
'is_content',
null,
get_lang('GenerateDefaultContent'),
get_lang('Generate default content'),
['checked' => true]
);
// the submit button
$form->addButtonCreate(get_lang('CreateQuestion'), 'SubmitCreateQuestion');
$form->addButtonCreate(get_lang('Create a question'), 'SubmitCreate a question');
// setting the rules
$form->addRule('exercise', get_lang('ThisFieldIsRequired'), 'required');
$form->addRule('exercise', get_lang('YouHaveToSelectATest'), 'numeric');
$form->addRule('exercise', get_lang('Required field'), 'required');
$form->addRule('exercise', get_lang('You have to select a test'), 'numeric');
$form->registerRule('validquestiontype', 'callback', 'check_question_type');
$form->addRule('question_type_hidden', get_lang('InvalidQuestionType'), 'validquestiontype');
$form->addRule('question_type_hidden', get_lang('InvalidQuestion type'), 'validquestiontype');
if ($form->validate()) {
$values = $form->exportValues();
@ -105,7 +103,7 @@ if ($form->validate()) {
Display::display_header($nameTools);
echo '<div class="actions">';
echo '<a href="exercise.php?show=test">'.Display::return_icon('back.png', get_lang('BackToExercisesList'), '', ICON_SIZE_MEDIUM).'</a>';
echo '<a href="exercise.php?show=test">'.Display::return_icon('back.png', get_lang('BackToTestsList'), '', ICON_SIZE_MEDIUM).'</a>';
echo '</div>';
// displaying the form

@ -37,10 +37,10 @@ if ($deleteQuestion) {
$ajax_url = api_get_path(WEB_AJAX_PATH).'exercise.ajax.php?'.api_get_cidreq().'&exercise_id='.intval($exerciseId);
?>
<div id="dialog-confirm"
title="<?php echo get_lang('ConfirmYourChoice'); ?>"
title="<?php echo get_lang('Please confirm your choice'); ?>"
style="display:none;">
<p>
<?php echo get_lang('AreYouSureToDelete'); ?>
<?php echo get_lang('Are you sure you want to delete'); ?>
</p>
</div>
<script>
@ -158,7 +158,7 @@ Session::erase('less_answer');
// If we are in a test
$inATest = isset($exerciseId) && $exerciseId > 0;
if (!$inATest) {
echo Display::return_message(get_lang('ChoiceQuestionType'), 'warning');
echo Display::return_message(get_lang('Choose question type'), 'warning');
} else {
if ($nbrQuestions) {
// In the building exercise mode show question list ordered as is.
@ -206,8 +206,8 @@ if (!$inATest) {
<div class="col-sm-1 text-center"><strong>'.get_lang('Type').'</strong></div>
<div class="col-sm-2"><strong>'.get_lang('Category').'</strong></div>
<div class="col-sm-1 text-right"><strong>'.get_lang('Difficulty').'</strong></div>
<div class="col-sm-1 text-right"><strong>'.get_lang('MaximumScore').'</strong></div>
<div class="col-sm-2 text-right"><strong>'.get_lang('Actions').'</strong></div>
<div class="col-sm-1 text-right"><strong>'.get_lang('Score').'</strong></div>
<div class="col-sm-2 text-right"><strong>'.get_lang('Detail').'</strong></div>
</div>
<div id="question_list">
';
@ -242,7 +242,7 @@ if (!$inATest) {
? Display::span(
Display::return_icon(
'edit_na.png',
get_lang('QuestionEditionNotAvailableBecauseItIsAlreadyAnsweredHoweverYouCanCopyItAndModifyTheCopy'),
get_lang('Question edition is not available because the question has been already answered. However, you can copy and modify it.'),
[],
ICON_SIZE_TINY
),
@ -251,7 +251,7 @@ if (!$inATest) {
: Display::url(
Display::return_icon(
'edit.png',
get_lang('Modify'),
get_lang('Edit'),
[],
ICON_SIZE_TINY
),
@ -268,7 +268,7 @@ if (!$inATest) {
$delete_link = Display::url(
Display::return_icon(
'delete.png',
get_lang('RemoveFromTest'),
get_lang('Remove from test'),
[],
ICON_SIZE_TINY
),
@ -289,7 +289,7 @@ if (!$inATest) {
$delete_link = '';
}
$btnActions = implode(
$btnDetail = implode(
PHP_EOL,
[$edit_link, $clone_link, $delete_link]
);
@ -355,7 +355,7 @@ if (!$inATest) {
.$questionScore.'
</div>
<div class="btn-actions text-right col-sm-2 col-xs-6">
<div class="edition">'.$btnActions.'</div>
<div class="edition">'.$btnDetail.'</div>
</div>
</div>
</div>
@ -369,6 +369,6 @@ if (!$inATest) {
echo '</div>'; //question list div
} else {
echo Display::return_message(get_lang('NoQuestion'), 'warning');
echo Display::return_message(get_lang('Questions list (there is no question so far).'), 'warning');
}
}

@ -9,8 +9,6 @@ use Knp\Component\Pager\Paginator;
* This script allows administrators to manage questions and add them into their exercises.
* One question can be in several exercises.
*
* @package chamilo.exercise
*
* @author Olivier Brouckaert
* @author Julio Montoya adding support to query all questions from all session, courses, exercises
* @author Modify by hubert borderiou 2011-10-21 Question's category
@ -52,8 +50,8 @@ if (!empty($fromExercise)) {
$objExercise->read($fromExercise, false);
}
$nameTools = get_lang('QuestionPool');
$interbreadcrumb[] = ['url' => 'exercise.php?'.api_get_cidreq(), 'name' => get_lang('Exercises')];
$nameTools = get_lang('Recycle existing questions');
$interbreadcrumb[] = ['url' => 'exercise.php?'.api_get_cidreq(), 'name' => get_lang('Tests')];
if (!empty($objExercise->id)) {
$interbreadcrumb[] = [
@ -94,7 +92,7 @@ if ($is_allowedToEdit) {
$objExercise->read($fromExercise);
Session::write('objExercise', $objExercise);
}
$displayMessage = get_lang('ItemAdded');
$displayMessage = get_lang('Item added');
}
// Deletes a question from the database and all exercises
@ -178,7 +176,7 @@ if ($is_allowedToEdit) {
if (api_is_in_gradebook()) {
$interbreadcrumb[] = [
'url' => Category::getUrl(),
'name' => get_lang('ToolGradebook'),
'name' => get_lang('Assessments'),
];
}
@ -187,7 +185,7 @@ if (!$is_allowedToEdit) {
api_not_allowed(true);
}
$confirmYourChoice = addslashes(api_htmlentities(get_lang('ConfirmYourChoice'), ENT_QUOTES, $charset));
$confirmYourChoice = addslashes(api_htmlentities(get_lang('Please confirm your choice'), ENT_QUOTES, $charset));
$htmlHeadXtra[] = "
<script>
function submit_form(obj) {
@ -299,14 +297,14 @@ Display::display_header($nameTools, 'Exercise');
echo '<div class="actions">';
if (isset($fromExercise) && $fromExercise > 0) {
echo '<a href="admin.php?'.api_get_cidreq().'&exerciseId='.$fromExercise.'">'.
Display::return_icon('back.png', get_lang('GoBackToQuestionList'), '', ICON_SIZE_MEDIUM).'</a>';
$titleAdd = get_lang('AddQuestionToTest');
Display::return_icon('back.png', get_lang('Go back to the questions list'), '', ICON_SIZE_MEDIUM).'</a>';
$titleAdd = get_lang('Add question to test');
} else {
echo '<a href="exercise.php?'.api_get_cidreq().'">'.
Display::return_icon('back.png', get_lang('BackToExercisesList'), '', ICON_SIZE_MEDIUM).'</a>';
Display::return_icon('back.png', get_lang('BackToTestsList'), '', ICON_SIZE_MEDIUM).'</a>';
echo "<a href='admin.php?exerciseId=0'>".
Display::return_icon('add_question.gif', get_lang('NewQu'), '', ICON_SIZE_MEDIUM).'</a>';
$titleAdd = get_lang('ManageAllQuestions');
Display::return_icon('add_question.gif', get_lang('New question'), '', ICON_SIZE_MEDIUM).'</a>';
$titleAdd = get_lang('Manage all questions');
}
echo '</div>';
@ -404,7 +402,7 @@ $selectCourseCategory = Display::select(
['onchange' => 'submit_form(this);'],
false
);
echo Display::form_row(get_lang('QuestionCategory'), $selectCourseCategory);
echo Display::form_row(get_lang('Questions category'), $selectCourseCategory);
// Get exercise list for this course
$exercise_list = ExerciseLib::get_all_exercises_for_course_id(
@ -420,8 +418,8 @@ if ($exercise_id_changed == 1) {
// Exercise List
$my_exercise_list = [];
$my_exercise_list['0'] = get_lang('AllExercises');
$my_exercise_list['-1'] = get_lang('OrphanQuestions');
$my_exercise_list['0'] = get_lang('AllTests');
$my_exercise_list['-1'] = get_lang('Orphan questions');
$titleSavedAsHtml = api_get_configuration_value('save_titles_as_html');
if (is_array($exercise_list)) {
foreach ($exercise_list as $row) {
@ -446,7 +444,7 @@ $exerciseListToString = Display::select(
false
);
echo Display::form_row(get_lang('Exercise'), $exerciseListToString);
echo Display::form_row(get_lang('Test'), $exerciseListToString);
// Difficulty list (only from 0 to 5)
$levels = [
@ -501,7 +499,7 @@ $select_answer_html = Display::select(
false
);
echo Display::form_row(get_lang('AnswerType'), $select_answer_html);
echo Display::form_row(get_lang('Answer type'), $select_answer_html);
echo Display::form_row(get_lang('Id'), Display::input('text', 'question_id', $questionId));
echo Display::form_row(
get_lang('Description'),
@ -842,14 +840,14 @@ $mainQuestionList = getQuestions(
if ($fromExercise <= 0) {
// NOT IN A TEST - NOT IN THE COURSE
$actionLabel = get_lang('Reuse');
$actionIcon1 = get_lang('MustBeInATest');
$actionLabel = get_lang('Re-use in current test');
$actionIcon1 = get_lang('Must be in a test');
$actionIcon2 = '';
// We are not in this course, to messy if we link to the question in another course
$questionTagA = 0;
if ($selected_course == api_get_course_int_id()) {
// NOT IN A TEST - IN THE COURSE
$actionLabel = get_lang('Modify');
$actionLabel = get_lang('Edit');
$actionIcon1 = 'edit';
$actionIcon2 = 'delete';
// We are in the course, question title can be a link to the question edit page
@ -857,14 +855,14 @@ if ($fromExercise <= 0) {
}
} else {
// IN A TEST - NOT IN THE COURSE
$actionLabel = get_lang('ReUseACopyInCurrentTest');
$actionLabel = get_lang('Re-use a copy inside the current test');
$actionIcon1 = 'clone';
$actionIcon2 = '';
$questionTagA = 0;
if ($selected_course == api_get_course_int_id()) {
// IN A TEST - IN THE COURSE
$actionLabel = get_lang('Reuse');
$actionLabel = get_lang('Re-use in current test');
$actionIcon1 = 'add';
$actionIcon2 = '';
$questionTagA = 1;
@ -950,7 +948,7 @@ $header = [
'',
],
[
get_lang('QuestionUpperCaseFirstLetter'),
get_lang('Question'),
false,
['style' => 'text-align:center'],
'',
@ -963,7 +961,7 @@ $header = [
'',
],
[
get_lang('QuestionCategory'),
get_lang('Questions category'),
false,
['style' => 'text-align:center'],
['style' => 'text-align:center'],
@ -1004,20 +1002,20 @@ $tableId = 'question_pool_id';
$html = '<div class="btn-toolbar">';
$html .= '<div class="btn-group">';
$html .= '<a class="btn btn-default" href="?'.$url.'selectall=1" onclick="javascript: setCheckbox(true, \''.$tableId.'\'); return false;">'.
get_lang('SelectAll').'</a>';
$html .= '<a class="btn btn-default" href="?'.$url.'" onclick="javascript: setCheckbox(false, \''.$tableId.'\'); return false;">'.get_lang('UnSelectAll').'</a> ';
get_lang('Select all').'</a>';
$html .= '<a class="btn btn-default" href="?'.$url.'" onclick="javascript: setCheckbox(false, \''.$tableId.'\'); return false;">'.get_lang('UnSelect all').'</a> ';
$html .= '</div>';
$html .= '<div class="btn-group">
<button class="btn btn-default" onclick="javascript:return false;">'.get_lang('Actions').'</button>
<button class="btn btn-default" onclick="javascript:return false;">'.get_lang('Detail').'</button>
<button class="btn btn-default dropdown-toggle" data-toggle="dropdown">
<span class="caret"></span>
</button>';
$html .= '<ul class="dropdown-menu">';
$actionLabel = get_lang('ReUseACopyInCurrentTest');
$actions = ['clone' => get_lang('ReUseACopyInCurrentTest')];
$actionLabel = get_lang('Re-use a copy inside the current test');
$actions = ['clone' => get_lang('Re-use a copy inside the current test')];
if ($selected_course == api_get_course_int_id()) {
$actions = ['reuse' => get_lang('ReuseQuestion')];
$actions = ['reuse' => get_lang('Re-use in current testQuestion')];
}
foreach ($actions as $action => &$label) {
@ -1154,7 +1152,7 @@ function get_action_icon_for_question(
$from_exercise,
$in_questionid,
$in_questiontype,
Display::return_icon('edit.png', get_lang('Modify')),
Display::return_icon('edit.png', get_lang('Edit')),
$in_session_id,
$in_exercise_id
);
@ -1172,7 +1170,7 @@ function get_action_icon_for_question(
$url = api_get_self().'?'.api_get_cidreq().$getParams.
"&question_copy=$in_questionid&course_id=$in_selected_course&fromExercise=$from_exercise";
$res = Display::url(
Display::return_icon('cd.png', get_lang('ReUseACopyInCurrentTest')),
Display::return_icon('cd.png', get_lang('Re-use a copy inside the current test')),
$url
);
break;

@ -70,7 +70,7 @@ $htmlHeadXtra[] = api_get_build_js('exercise.js');
if ($show_headers) {
$interbreadcrumb[] = [
'url' => 'exercise.php?'.api_get_cidreq(),
'name' => get_lang('Exercises'),
'name' => get_lang('Tests'),
];
$interbreadcrumb[] = ['url' => '#', 'name' => get_lang('Result')];
$this_section = SECTION_COURSES;

@ -104,7 +104,7 @@ if ($origin != 'learnpath') {
lp_view_id = $lpViewId
";
Database::query($sql);
echo Display::return_message(get_lang('HotPotatoesFinished'), 'confirm');
echo Display::return_message(get_lang('This HotPotatoes test has been closed.'), 'confirm');
} else {
echo Display::return_message(get_lang('Error'), 'error');
}

@ -108,7 +108,7 @@ $htmlHeadXtra[] = <<<HTML
</script>
HTML;
$interbreadcrumb[] = ["url" => './exercise.php?'.api_get_cidreq(), 'name' => get_lang('Exercises')];
$interbreadcrumb[] = ["url" => './exercise.php?'.api_get_cidreq(), 'name' => get_lang('Tests')];
if ($origin == 'learnpath') {
Display::display_reduced_header($nameTools, "Exercise");
} else {

@ -49,12 +49,12 @@ $data = [];
// Question title # of students who tool it Lowest score Average Highest score Maximum score
$headers = [
get_lang('Question'),
get_lang('QuestionType'),
get_lang('NumberStudentWhoSelectedIt'),
get_lang('LowestScore'),
get_lang('AverageScore'),
get_lang('HighestScore'),
get_lang('Weighting'),
get_lang('Question type'),
get_lang('Number of learners who selected it'),
get_lang('Lowest score'),
get_lang('Average score'),
get_lang('Highest score'),
get_lang('Score'),
];
if (!empty($question_list)) {
@ -121,7 +121,7 @@ $headers = [
get_lang('Question'),
get_lang('Answer'),
get_lang('Correct'),
get_lang('NumberStudentWhoSelectedIt'),
get_lang('Number of learners who selected it'),
];
$data = [];
@ -302,18 +302,18 @@ $content .= $table->toHtml();
$interbreadcrumb[] = [
"url" => "exercise.php?".api_get_cidreq(),
"name" => get_lang('Exercises'),
"name" => get_lang('Tests'),
];
$interbreadcrumb[] = [
"url" => "admin.php?exerciseId=$exerciseId&".api_get_cidreq(),
"name" => $objExercise->selectTitle(true),
];
$tpl = new Template(get_lang('ReportByQuestion'));
$tpl = new Template(get_lang('Report by question'));
$actions = '<a href="exercise_report.php?exerciseId='.$exerciseId.'&'.api_get_cidreq().'">'.
Display:: return_icon(
'back.png',
get_lang('GoBackToQuestionList'),
get_lang('Go back to the questions list'),
'',
ICON_SIZE_MEDIUM
)

@ -38,7 +38,7 @@ $sessionId = api_get_session_id();
// breadcrumbs
$interbreadcrumb[] = [
"url" => "exercise.php?".api_get_cidreq(),
"name" => get_lang('Exercises'),
"name" => get_lang('Tests'),
];
$action = isset($_GET['action']) ? $_GET['action'] : '';
@ -99,8 +99,8 @@ Display::display_footer();
function importCategoryForm()
{
$form = new FormValidator('import', 'post', api_get_self().'?action=import_category&'.api_get_cidreq());
$form->addElement('file', 'file', get_lang('ImportCSVFileLocation'));
$form->addRule('file', get_lang('ThisFieldIsRequired'), 'required');
$form->addElement('file', 'file', get_lang('CSV file import location'));
$form->addRule('file', get_lang('Required field'), 'required');
$form->addButtonImport(get_lang('Import'));
return $form;
@ -127,17 +127,17 @@ function edit_category_form($action)
);
// Setting the form elements
$form->addElement('header', get_lang('EditCategory'));
$form->addElement('header', get_lang('Edit this category'));
$form->addElement('hidden', 'category_id');
$form->addElement('text', 'category_name', get_lang('CategoryName'), ['size' => '95']);
$form->addElement('text', 'category_name', get_lang('Category name'), ['size' => '95']);
$form->addHtmlEditor(
'category_description',
get_lang('CategoryDescription'),
get_lang('Category description'),
false,
false,
['ToolbarSet' => 'TestQuestionDescription', 'Height' => '200']
);
$form->addButtonSave(get_lang('ModifyCategory'), 'SubmitNote');
$form->addButtonSave(get_lang('Edit category'), 'SubmitNote');
// setting the defaults
$defaults = [];
@ -147,7 +147,7 @@ function edit_category_form($action)
$form->setDefaults($defaults);
// setting the rules
$form->addRule('category_name', get_lang('ThisFieldIsRequired'), 'required');
$form->addRule('category_name', get_lang('Required field'), 'required');
// The validation or display
if ($form->validate()) {
@ -161,9 +161,9 @@ function edit_category_form($action)
$category->name = $values['category_name'];
$category->description = $values['category_description'];
$category->modifyCategory();
Display::addFlash(Display::return_message(get_lang('Updated')));
Display::addFlash(Display::return_message(get_lang('Update successful')));
} else {
Display::addFlash(Display::return_message(get_lang('ModifyCategoryError'), 'error'));
Display::addFlash(Display::return_message(get_lang('Edit categoryError'), 'error'));
}
}
Security::clear_token();
@ -176,7 +176,7 @@ function edit_category_form($action)
}
} else {
Display::addFlash(
Display::return_message(get_lang('CannotEditCategory'), 'error')
Display::return_message(get_lang('CannotEdit this category'), 'error')
);
}
}
@ -187,12 +187,12 @@ function delete_category_form()
if (isset($_GET['category_id']) && is_numeric($_GET['category_id'])) {
$category = new TestCategory();
if ($category->removeCategory($_GET['category_id'])) {
Display::addFlash(Display::return_message(get_lang('DeleteCategoryDone')));
Display::addFlash(Display::return_message(get_lang('Category deleted')));
} else {
Display::addFlash(Display::return_message(get_lang('CannotDeleteCategoryError'), 'error'));
Display::addFlash(Display::return_message(get_lang('Error: could not delete category'), 'error'));
}
} else {
Display::addFlash(Display::return_message(get_lang('CannotDeleteCategoryError'), 'error'));
Display::addFlash(Display::return_message(get_lang('Error: could not delete category'), 'error'));
}
}
@ -209,18 +209,18 @@ function add_category_form($action)
// initiate the object
$form = new FormValidator('note', 'post', api_get_self().'?action='.$action.'&'.api_get_cidreq());
// Setting the form elements
$form->addElement('header', get_lang('AddACategory'));
$form->addElement('text', 'category_name', get_lang('CategoryName'), ['size' => '95']);
$form->addElement('header', get_lang('Add category'));
$form->addElement('text', 'category_name', get_lang('Category name'), ['size' => '95']);
$form->addHtmlEditor(
'category_description',
get_lang('CategoryDescription'),
get_lang('Category description'),
false,
false,
['ToolbarSet' => 'TestQuestionDescription', 'Height' => '200']
);
$form->addButtonCreate(get_lang('AddTestCategory'), 'SubmitNote');
$form->addButtonCreate(get_lang('Add test category'), 'SubmitNote');
// setting the rules
$form->addRule('category_name', get_lang('ThisFieldIsRequired'), 'required');
$form->addRule('category_name', get_lang('Required field'), 'required');
// The validation or display
if ($form->validate()) {
$check = Security::check_token('post');
@ -230,9 +230,9 @@ function add_category_form($action)
$category->name = $values['category_name'];
$category->description = $values['category_description'];
if ($category->save()) {
Display::addFlash(Display::return_message(get_lang('AddCategoryDone')));
Display::addFlash(Display::return_message(get_lang('Category added')));
} else {
Display::addFlash(Display::return_message(get_lang('AddCategoryNameAlreadyExists'), 'warning'));
Display::addFlash(Display::return_message(get_lang('AddCategory nameAlreadyExists'), 'warning'));
}
}
Security::clear_token();
@ -250,22 +250,22 @@ function displayActionBar()
{
echo '<div class="actions">';
echo '<a href="'.api_get_path(WEB_CODE_PATH).'exercise/exercise.php?'.api_get_cidreq().'">'.
Display::return_icon('back.png', get_lang('GoBackToQuestionList'), '', ICON_SIZE_MEDIUM).'</a>';
Display::return_icon('back.png', get_lang('Go back to the questions list'), '', ICON_SIZE_MEDIUM).'</a>';
echo '<a href="'.api_get_self().'?action=addcategory&'.api_get_cidreq().'">'.
Display::return_icon('new_folder.png', get_lang('AddACategory'), null, ICON_SIZE_MEDIUM).'</a>';
Display::return_icon('new_folder.png', get_lang('Add category'), null, ICON_SIZE_MEDIUM).'</a>';
echo Display::url(
Display::return_icon('export_csv.png', get_lang('ExportAsCSV'), [], ICON_SIZE_MEDIUM),
Display::return_icon('export_csv.png', get_lang('CSV export'), [], ICON_SIZE_MEDIUM),
api_get_self().'?action=export_category&'.api_get_cidreq()
);
echo Display::url(
Display::return_icon('import_csv.png', get_lang('ImportAsCSV'), [], ICON_SIZE_MEDIUM),
Display::return_icon('import_csv.png', get_lang('Import from a CSV'), [], ICON_SIZE_MEDIUM),
api_get_self().'?action=import_category&'.api_get_cidreq()
);
echo '</div>';
echo "<br/>";
echo "<fieldset><legend>".get_lang('QuestionCategory')."</legend></fieldset>";
echo "<fieldset><legend>".get_lang('Questions category')."</legend></fieldset>";
}

@ -13,8 +13,6 @@ use ChamiloSession as Session;
*
* @author Eric Marguin
* @author Julio Montoya
*
* @package chamilo.exercise
*/
class UniqueAnswer extends Question
{
@ -69,12 +67,12 @@ class UniqueAnswer extends Question
$html = '<table class="table table-striped table-hover">
<thead>
<tr style="text-align: center;">
<th width="5%">'.get_lang('Number').'</th>
<th width="5%">'.get_lang('N°').'</th>
<th width="5%"> '.get_lang('True').'</th>
<th width="40%">'.get_lang('Answer').'</th>
'.$comment_title.'
'.$feedback_title.'
<th width="10%">'.get_lang('Weighting').'</th>
<th width="10%">'.get_lang('Score').'</th>
</tr>
</thead>
<tbody>';
@ -96,7 +94,7 @@ class UniqueAnswer extends Question
$obj_ex->setQuestionList(true);
$question_list = $obj_ex->getQuestionList();
$select_question = [];
$select_question[0] = get_lang('SelectTargetQuestion');
$select_question[0] = get_lang('Select target question');
if (is_array($question_list)) {
foreach ($question_list as $key => $questionid) {
//To avoid warning messages
@ -108,12 +106,12 @@ class UniqueAnswer extends Question
$select_question[$questionid] = "Q$key: $questionTitle";
}
}
$select_question[-1] = get_lang('ExitTest');
$select_question[-1] = get_lang('Exit test');
$list = new LearnpathList(api_get_user_id());
$flat_list = $list->get_flat_list();
$select_lp_id = [];
$select_lp_id[0] = get_lang('SelectTargetLP');
$select_lp_id[0] = get_lang('Select target course');
foreach ($flat_list as $id => $details) {
$select_lp_id[$id] = cut($details['lp_name'], 20);
@ -123,7 +121,7 @@ class UniqueAnswer extends Question
if ($nb_answers < 1) {
$nb_answers = 1;
echo Display::return_message(
get_lang('YouHaveToCreateAtLeastOneAnswer')
get_lang('You have to create at least one answer')
);
}
@ -161,9 +159,9 @@ class UniqueAnswer extends Question
$temp_scenario['lp'.$i] = $lp;
$temp_scenario['destination'.$i] = $list_dest;
} else {
$defaults['answer[1]'] = get_lang('DefaultUniqueAnswer1');
$defaults['answer[1]'] = get_lang('A then B then C');
$defaults['weighting[1]'] = 10;
$defaults['answer[2]'] = get_lang('DefaultUniqueAnswer2');
$defaults['answer[2]'] = get_lang('A then C then B');
$defaults['weighting[2]'] = 0;
$temp_scenario['destination'.$i] = ['0'];
@ -214,7 +212,7 @@ class UniqueAnswer extends Question
$form->addRule(
'answer['.$i.']',
get_lang('ThisFieldIsRequired'),
get_lang('Required field'),
'required'
);
@ -241,8 +239,8 @@ class UniqueAnswer extends Question
(empty($this->exerciseList) && empty($obj_ex->id))
) {
//setting the save button here and not in the question class.php
$buttonGroup[] = $form->addButtonDelete(get_lang('LessAnswer'), 'lessAnswers', true);
$buttonGroup[] = $form->addButtonCreate(get_lang('PlusAnswer'), 'moreAnswers', true);
$buttonGroup[] = $form->addButtonDelete(get_lang('Remove answer option'), 'lessAnswers', true);
$buttonGroup[] = $form->addButtonCreate(get_lang('Add answer option'), 'moreAnswers', true);
$buttonGroup[] = $form->addButton(
'submitQuestion',
$text,
@ -298,18 +296,18 @@ class UniqueAnswer extends Question
'checkbox',
'try'.$i,
null,
get_lang('TryAgain')
get_lang('Try again')
);
$group['lp'.$i] = $form->createElement(
'select',
'lp'.$i,
get_lang('SeeTheory').': ',
get_lang('Theory link').': ',
$select_lp_id
);
$group['destination'.$i] = $form->createElement(
'select',
'destination'.$i,
get_lang('GoToQuestion').': ',
get_lang('Go to question').': ',
$select_question
);
$group['url'.$i] = $form->createElement(
@ -428,9 +426,9 @@ class UniqueAnswer extends Question
$header = parent::return_header($exercise, $counter, $score);
$header .= '<table class="'.$this->question_table_class.'"><tr>';
$header .= '<th>'.get_lang('Choice').'</th>';
$header .= '<th>'.get_lang('Your choice').'</th>';
if ($exercise->showExpectedChoiceColumn()) {
$header .= '<th>'.get_lang('ExpectedChoice').'</th>';
$header .= '<th>'.get_lang('ExpectedYour choice').'</th>';
}
$header .= '<th>'.get_lang('Answer').'</th>';

@ -10,8 +10,6 @@ use ChamiloSession as Session;
*
* @author Eric Marguin
* @author Julio Montoya
*
* @package chamilo.exercise
*/
class UniqueAnswerNoOption extends Question
{
@ -49,8 +47,8 @@ class UniqueAnswerNoOption extends Question
/*
Types of Feedback
$feedback_option[0]=get_lang('Feedback');
$feedback_option[1]=get_lang('DirectFeedback');
$feedback_option[2]=get_lang('NoFeedback');
$feedback_option[1]=get_lang('Adaptative test with immediate feedback');
$feedback_option[2]=get_lang('Exam (no feedback)');
*/
$feedback_title = '';
@ -66,11 +64,11 @@ class UniqueAnswerNoOption extends Question
$html = '<table class="table table-striped table-hover">';
$html .= '<thead>';
$html .= '<tr>';
$html .= '<th>'.get_lang('Number').'</th>';
$html .= '<th>'.get_lang('N°').'</th>';
$html .= '<th>'.get_lang('True').'</th>';
$html .= '<th width="50%">'.get_lang('Answer').'</th>';
$html .= $comment_title.$feedback_title;
$html .= '<th>'.get_lang('Weighting').'</th>';
$html .= '<th>'.get_lang('Score').'</th>';
$html .= '</tr>';
$html .= '</thead>';
$html .= '<tbody>';
@ -92,7 +90,7 @@ class UniqueAnswerNoOption extends Question
$temp_scenario = [];
if ($nb_answers < 1) {
$nb_answers = 1;
echo Display::return_message(get_lang('YouHaveToCreateAtLeastOneAnswer'));
echo Display::return_message(get_lang('You have to create at least one answer'));
}
$editQuestion = isset($_GET['editQuestion']) ? $_GET['editQuestion'] : false;
if ($editQuestion) {
@ -209,7 +207,7 @@ class UniqueAnswerNoOption extends Question
$form->addHtml('<tr>');
$defaults["counter[$i]"] = '-';
$defaults['answer['.$i.']'] = get_lang('DontKnow');
$defaults['answer['.$i.']'] = get_lang('Don\'t know');
$defaults['weighting['.$i.']'] = '0';
$defaults['scenario'] = $temp_scenario;
$renderer = &$form->defaultRenderer();
@ -243,7 +241,7 @@ class UniqueAnswerNoOption extends Question
$form->addElement('radio', 'correct', null, null, $i, ['class' => 'checkbox', 'disabled' => true]);
$form->addElement('html_editor', 'answer['.$i.']', null, [], $editor_config);
$form->addRule('answer['.$i.']', get_lang('ThisFieldIsRequired'), 'required');
$form->addRule('answer['.$i.']', get_lang('Required field'), 'required');
$form->addElement('html_editor', 'comment['.$i.']', null, [], $editor_config);
$form->addElement('text', "weighting[$i]", null)->freeze();
@ -258,8 +256,8 @@ class UniqueAnswerNoOption extends Question
(empty($this->exerciseList) && empty($obj_ex->id))
) {
//setting the save button here and not in the question class.php
$buttonGroup[] = $form->addButtonDelete(get_lang('LessAnswer'), 'lessAnswers', true);
$buttonGroup[] = $form->addButtonCreate(get_lang('PlusAnswer'), 'moreAnswers', true);
$buttonGroup[] = $form->addButtonDelete(get_lang('Remove answer option'), 'lessAnswers', true);
$buttonGroup[] = $form->addButtonCreate(get_lang('Add answer option'), 'moreAnswers', true);
$buttonGroup[] = $form->addButtonSave($text, 'submitQuestion', true);
$form->addGroup($buttonGroup);
@ -408,9 +406,9 @@ class UniqueAnswerNoOption extends Question
RESULT_DISABLE_SHOW_ONLY_IN_CORRECT_ANSWER,
])
) {
$header .= '<th>'.get_lang('Choice').'</th>';
$header .= '<th>'.get_lang('Your choice').'</th>';
if ($exercise->showExpectedChoiceColumn()) {
$header .= '<th>'.get_lang('ExpectedChoice').'</th>';
$header .= '<th>'.get_lang('ExpectedYour choice').'</th>';
}
}
$header .= '<th>'.get_lang('Answer').'</th>';

@ -5,13 +5,9 @@ use ChamiloSession as Session;
/**
* Upload quiz: This script shows the upload quiz feature.
*
* @package chamilo.exercise
*/
// setting the help
$help_content = 'exercise_upload';
require_once __DIR__.'/../inc/global.inc.php';
api_protect_course_script(true);
@ -37,13 +33,11 @@ lp_upload_quiz_action_handling();
$interbreadcrumb[] = [
'url' => 'exercise.php?'.api_get_cidreq(),
'name' => get_lang('Exercises'),
'name' => get_lang('Tests'),
];
// Display the header
Display :: display_header(get_lang('ImportExcelQuiz'), 'Exercises');
Display::display_header(get_lang('Import quiz from Excel'), 'Exercises');
// display the actions
echo '<div class="actions">';
echo lp_upload_quiz_actions();
echo '</div>';
@ -56,7 +50,7 @@ function lp_upload_quiz_actions()
$return = '<a href="exercise.php?'.api_get_cidreq().'">'.
Display::return_icon(
'back.png',
get_lang('BackToExercisesList'),
get_lang('BackToTestsList'),
'',
ICON_SIZE_MEDIUM
).'</a>';
@ -75,25 +69,25 @@ function lp_upload_quiz_main()
'',
['enctype' => 'multipart/form-data']
);
$form->addElement('header', get_lang('ImportExcelQuiz'));
$form->addElement('file', 'user_upload_quiz', get_lang('FileUpload'));
$form->addElement('header', get_lang('Import quiz from Excel'));
$form->addElement('file', 'user_upload_quiz', get_lang('File upload'));
$link = '<a href="../exercise/quiz_template.xls">'.
Display::return_icon('export_excel.png', get_lang('DownloadExcelTemplate')).get_lang('DownloadExcelTemplate').'</a>';
Display::return_icon('export_excel.png', get_lang('Download the Excel Template')).get_lang('Download the Excel Template').'</a>';
$form->addElement('label', '', $link);
$table = new HTML_Table(['class' => 'table']);
$tableList = [
UNIQUE_ANSWER => get_lang('UniqueSelect'),
MULTIPLE_ANSWER => get_lang('MultipleSelect'),
FILL_IN_BLANKS => get_lang('FillBlanks'),
UNIQUE_ANSWER => get_lang('Multiple choice'),
MULTIPLE_ANSWER => get_lang('Multiple answers'),
FILL_IN_BLANKS => get_lang('Fill blanks or form'),
MATCHING => get_lang('Matching'),
FREE_ANSWER => get_lang('FreeAnswer'),
GLOBAL_MULTIPLE_ANSWER => get_lang('GlobalMultipleAnswer'),
FREE_ANSWER => get_lang('Open question'),
GLOBAL_MULTIPLE_ANSWER => get_lang('Global multiple answer'),
];
$table->setHeaderContents(0, 0, get_lang('QuestionType'));
$table->setHeaderContents(0, 0, get_lang('Question type'));
$table->setHeaderContents(0, 1, '#');
$row = 1;
@ -104,20 +98,20 @@ function lp_upload_quiz_main()
}
$table = $table->toHtml();
$form->addElement('label', get_lang('QuestionType'), $table);
$form->addElement('label', get_lang('Question type'), $table);
$form->addElement(
'checkbox',
'user_custom_score',
null,
get_lang('UseCustomScoreForAllQuestions'),
get_lang('Use custom score for all questions'),
['id' => 'user_custom_score']
);
$form->addElement('html', '<div id="options" style="display:none">');
$form->addElement('text', 'correct_score', get_lang('CorrectScore'));
$form->addElement('text', 'incorrect_score', get_lang('IncorrectScore'));
$form->addElement('text', 'correct_score', get_lang('Correct score'));
$form->addElement('text', 'incorrect_score', get_lang('Incorrect score'));
$form->addElement('html', '</div>');
$form->addRule('user_upload_quiz', get_lang('ThisFieldIsRequired'), 'required');
$form->addRule('user_upload_quiz', get_lang('Required field'), 'required');
$form->addProgress();
$form->addButtonUpload(get_lang('Upload'), 'submit_upload_quiz');

Loading…
Cancel
Save