Автор работы: Пользователь скрыл имя, 01 Декабря 2013 в 19:13, отчет по практике
Система дистанционного обучения (СДО) JoomlaLMS — высокотехнологичное программное обеспечение для организации дистанционного обучения в учреждениях образования и на предприятиях, для тестирования и оценки персонала. Возможности и функционал системы обновляются в соответствии с современным требованиям к программному обеспечению для образования.
Система управления обучением JoomlaLMS — это совокупность мощных инструментов для организации онлайн обучения и тестирования, основанная на системе управления контентом с открытым кодом Joomla! CMS. Это комплексная система дистанционного обучения (CДО) с инновационными приложениями для создания курсов, учебного материала, контроля успеваемости и проведения онлайн вебинаров и конференций.
Для передачи пакетов по сети (например, для загрузки в систему управления обучением) спецификация SCORM CAM предписывает помещать содержимое пакета в zip-архив. Файл imsmanifest.xml должен располагаться в корне архива. Остальные файлы пакета должны располагаться так, как указано их расположение в элементах file в содержимом манифеста. Например, в случае приведённого ранее кода манифеста файл sco.htm должен располагаться на том же уровне, где и imsmanifest.xml, то есть в корне архива. А если бы в манифесте было прописано <file href="folder1\sco.htm" />, файл sco.htm должен был бы располагаться в папке folder1 в архиве.
Эта часть стандарта описывает взаимодействие SCO и системы управления обучением (англ. Learning Management System, LMS) через программный интерфейс приложения (Application Program Interface, API). Требования SCORM RTE позволяют обеспечить совместимость SCO и LMS, чтобы каждая система дистанционного обучения могла взаимодействовать со SCO таким же образом, как и любая другая, соответствующая стандарту SCORM. LMS должна обеспечивать доставку требуемых ресурсов пользователю, запуск SCO, отслеживание и обработку информации о действиях учащегося, передачу SCO-объекту запрашиваемых данных и сохранение получаемых.
Взаимодействие осуществляется через
объект API_1484_11, располагающийся в
одном из родительских окон браузера
по отношению к окну учебного объекта.
Учебный объект должен быть запущен
либо во фрейме (iframe) на странице системы управления обучением,
либо во всплывающем окне (посредством javascript-
После успешной инициализации SCO может
запрашивать у системы данные посредством
метода GetValue(«название_элемента_
Также API позволяет отслеживать SCO-объекту
возможные ошибки, возникающие в
процессе взаимодействия, посредством
методов GetLastError, GetError
В конце своей работы SCO должен вызвать метод Terminate(""), тем самым сообщив системе, что работа с ним закончена и его можно закрывать (или переходить к следующему объекту).
Пример простейшего SCO: (данная html-страница запрашивает у системы управления обучением имя учащегося, который её открыл).
Для того, чтобы иметь возможность загрузить созданный по стандарту SCORM курс в СДО была разработана форма загрузки, представленная на рисунке 3.1. Данная форма позволяет также настраивать рахличные параметры для загружаемого курса, такие как режим отображения, размер отображения и прочее
Рисунок 3.1 – Форма загрузки SCORM-пакета
После успешной загрузки SCORM-пакета, должен отображаться список всех загруженных пакетов с указанием в виде иконки их типа, как представлено на рисунке 3.2.
Рисунок 3.2 – Список всех загруженных SCORM – пакетов
При запуске и выполнении SCORM-пакета, он должен корректно отображаться в зависимости от выбранного реэима отображения. Пример выполнения SCORM-пакета представлен на рисунке 3.3.
Рисунок 3.3 – Пример выполнения SCORM-пакета
В администраторской части сайта должна быть возможность конфигурировать работу загрузчика SCORM-пакетов, в частности, указывать путь для загрузки файлов, расширения и прочее. Форма для такого конфигурирования на рисунке 3.4.
Рисунок 3.4 – Форма конфигурирования SCORM загрузчика
3.3 Размещение изменений в репозитории
При разработке поддержки стандарта SCORM для отслеживания версий и сохранения изменений использовалась распределённая система управления версиями GIT.
Имеется удалённый Git-репозиторий и рабочая копия файлов для проекта. Каждый файл в рабочем каталоге может находиться в одном из двух состояний: под версионным контролем (отслеживаемые) и нет (неотслеживаемые). Отслеживаемые файлы — это те файлы, которые были в последнем слепке состояния проекта; они могут быть неизменёнными, изменёнными или подготовленными к коммиту. Неотслеживаемые файлы — это всё остальное, любые файлы в рабочем каталоге, которые не входили в последний слепок состояния и не подготовлены к коммиту. Когда впервые клонируется репозиторий, все файлы будут отслеживаемыми и неизменёнными, потому что только были взяты из хранилища и изменения ещё не вносились.
Как только будут отредактированы файлы, Git будет рассматривать их как изменённые, т.к. были внесены изменения с момента последнего коммита. Сначала индексируются эти изменения и фиксируются все индексированные изменения, а затем цикл повторяется. Этот жизненный цикл изображён на рисунке 3.5.
Рисунок 3.5 - Жизненный цикл состояний файлов.
Для того, чтобы внести изменения на локале в репозиторий, необходимо выполнить несколько действий. Сначала необходимо. Проиндексировать изменения командой Git Commit, как это показано на рисунке 3.6.
Рисунок 3.6 – Индексирование изменений
Далее необходимо перенести эти изменения на серверное хранилище проекта. Это выполняется с помощью Git Push как показано на рисунке 3.7
Рисунок 3.7 – Перенос изменений на серверное хранилище
ЗАКЛЮЧЕНИЕ
В результате прохождения практики были решены задачи, поставленные руководителем практики от предприятия СООО «Белитсофт Интернешнл»: разработка нового и доработка имеющегося функционала системы дистанционного обучения Joomla LMS. Разработанный функционал был спроектирован согласно техническому заданию, разработан, протестирован и размещён на сервере, а также серверном хранилище.
В ходе производственной практики были получены навыки по специальности «Программное обеспечение информационных технологий» был повышен уровень как разработчика благодаря хорошим и ответственным руководителям на предприятии. Дружественная и тёплая атмосфера помогла быстро освоится на рабочем месте.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
[1] Joomla.com [Электронный ресурс]. – Электронные данные. – Режим доступа: http://joomla.com
[2] Joomlalms.com [Электронный ресурс]. – Электронные данные. – Режим доступа: http://joomlalms.com
[3] Php.net [Электронный ресурс]. – Электронные данные. – Режим доступа: http://php.net
[4] Scorm.com [Электронный ресурс]. – Электронные данные. – Режим доступа: http://scorm.com
Приложение А.
Исходный код модуля загрузчика SCORM-пакетов
?php
require_once('../../config.
require_once($CFG->dirroot.'/
$id = optional_param('id', '', PARAM_INT); // Course Module ID, or
$a = optional_param('a', '', PARAM_INT); // scorm ID
$scoid = required_param('scoid', PARAM_INT); // sco ID
$delayseconds = 2; // Delay time before sco launch, used to give time to browser to define API
if (!empty($id)) {
if
(! $cm = get_coursemodule_from_id('
print_error('
}
if (! $course = $DB->get_record('course', array('id'=>$cm->course))) {
print_error('coursemisconf');
}
if (! $scorm = $DB->get_record('scorm', array('id'=>$cm->instance))) {
print_error('
}
} else if (!empty($a)) {
if (! $scorm = $DB->get_record('scorm', array('id'=>$a))) {
print_error('coursemisconf');
}
if (! $course = $DB->get_record('course', array('id'=>$scorm->course))) {
print_error('coursemisconf');
}
if
(! $cm = get_coursemodule_from_
print_error('
}
} else {
print_error('missingparameter'
}
$PAGE->set_url('/mod/scorm/
if (!isloggedin()) { // Prevent login page from being shown in iframe.
// Using simple html instead of exceptions here as shown inside iframe/object.
echo
html_writer::start_tag('html')
echo html_writer::tag('head', '');
echo html_writer::tag('body', get_string('loggedinnot'));
echo html_writer::end_tag('html');
exit;
}
require_login($course, false, $cm, false); // Call require_login anyway to set up globals correctly.
//check if scorm closed
$timenow = time();
if ($scorm->timeclose !=0) {
if ($scorm->timeopen > $timenow) {
print_error('notopenyet', 'scorm', null, userdate($scorm->timeopen));
} else if ($timenow > $scorm->timeclose) {
print_error('expired', 'scorm', null, userdate($scorm->timeclose));
}
}
$context = context_module::instance($cm->
if (!empty($scoid)) {
//
// Direct SCO request
//
if ($sco = scorm_get_sco($scoid)) {
if ($sco->launch == '') {
// Search for the next launchable sco
if ($scoes = $DB->get_records_select(
'scorm_scoes',
'scorm = ? AND '.$DB->sql_isnotempty('scorm_
array($scorm->id, $sco->id),
'id ASC')) {
$sco = current($scoes);
}
}
}
}
//
// If no sco was found get the first of SCORM package
//
if (!isset($sco)) {
$scoes = $DB->get_records_select(
'scorm_scoes',
'scorm = ? AND '.$DB->sql_isnotempty('scorm_
array($scorm->id),
'id ASC'
);
$sco = current($scoes);
}
if ($sco->scormtype == 'asset') {
$attempt
= scorm_get_last_attempt($scorm-
$element
= (scorm_version_check($scorm->
$value = 'completed';
$result = scorm_insert_track($USER->id, $scorm->id, $sco->id, $attempt, $element, $value);
}
//
// Forge SCO URL
//
$connector = '';
$version = substr($scorm->version, 0, 4);
if ((isset($sco->parameters) && (!empty($sco->parameters))) || ($version == 'AICC')) {
if (stripos($sco->launch, '?') !== false) {
$connector = '&';
} else {
$connector = '?';
}
if ((isset($sco->parameters) && (!empty($sco->parameters))) && ($sco->parameters[0] == '?')) {
$sco->parameters = substr($sco->parameters, 1);
}
}
if ($version == 'AICC') {
require_once("$CFG->dirroot/
$aicc_sid
= scorm_aicc_get_hacp_session($
if (empty($aicc_sid)) {
$aicc_sid = sesskey();
}
$sco_params = '';
if (isset($sco->parameters) && (!empty($sco->parameters))) {
$sco_params = '&'. $sco->parameters;
}
$launcher
= $sco->launch.$connector.'aicc_
} else {
if (isset($sco->parameters) && (!empty($sco->parameters))) {
$launcher = $sco->launch.$connector.$sco->
} else {
$launcher = $sco->launch;
}
}
if (scorm_external_link($sco->
//TODO: does this happen?
$result = $launcher;
} else if ($scorm->scormtype === SCORM_TYPE_EXTERNAL) {
// Remote learning activity
$result
= dirname($scorm->reference).'/'
} else if ($scorm->scormtype === SCORM_TYPE_IMSREPOSITORY) {
// Repository
$result
= $CFG->repositorywebroot.