понедельник, 25 июля 2016 г.

История о переходе на безопасный протокол HTTPS

    Всё началось с того, что Mozilla собирается избавиться от небезопасных HTTP-соединений в своём браузере. Так, Ричард Барнс, глава отдела безопасности Firefox, заявил, что переход на HTTPS будет проходить в два крупных этапа. Сначала компания назначит дату, после которой весь новый функционал Firefox будет доступен только для защищённых сайтов, поддерживающих HTTPS. На втором этапе будет отключена поддержка незащищённых HTTP-сайтов существующим функционалом, в особенности это касается функционала, обеспечивающего безопасность и приватность пользователя.

    Дальше – больше. Официальные представители Google объявили, что поисковик будет по умолчанию индексировать HTTPS-версии страниц. Таким образом, если на каком-либо сайте имеются HTTP-страницы, поисковая система попытается найти их аналоги в формате HTTPS. И если HTTPS-версии обнаружатся, они будут проиндексированы первыми. В общем, для ранжирования страниц в поисковой выдаче более предпочтительным является HTTPS.
   
    Что это значит для обычного пользователя? Это означает, что пора переводить свои сайты на безопасный протокол HTTPS: приобретать SSL-сертификаты, устанавливать возможность для сайта обращаться к HTTPS-протоколу.

    Не сильно вдаваясь в технические детали, расскажу о своём опыте перехода на HTTPS.

    У меня есть два сайта: один на СДО Moodle, другой – на Wordpress. Но суть в переходе на безопасный протокол для каждого из них одинаков. Как и следовало ожидать, при переходе на HTTPS обязательно возникнут ошибки. Главная из них, несмотря на то, что сертификат был установлен правильно, сайт отказывался функционировать: он отображался некорректно. Слетали стили, не работал JS… Что же было делать?


    И тут пришло решение проблемы. Учитывая тот факт, что сайты расположены на VPS с рабочей связкой nginx (frontend) и Apache (backend), то проблема была именно в этой связке.
    Так как сайт отдавался nginx, на нём и был записан сертификат для работы сайта в HTTPS. Однако, Apache продолжал работать в режиме HTTP и отдавал nginx запросы именно по этому протоколу. Решение нашлось неожиданно: достаточно было заставить Apache отдавать запросы в HTTPS. Для этого необходимо было сделать небольшие изменения в настройки каждого сайта.
    Вносим изменения в файл .htaccess (или создаём его) в корне сайта, добавляем строчки:
<IfModule env_module>
    SetEnv HTTP_PORT 443
    SetEnv HTTP_SCHEME https
    SetEnv HTTPS on
    SetEnv HTTP_HOSTNAME site.com
</IfModule>
    Для работы необходимо поменять site.com на адрес вашего сайта.
   В Moodle Вам также необходимо изменить содержание файла config.php в корне сайта:
изменить строчку
$CFG->wwwroot   = 'http://site.com'; 
на строку
$CFG->wwwroot   = 'https://site.com';
где site.com - адрес Вашего сайта.

Если после всех изменений сайт Moodle отказывается работать на протоколе HTTP, дописать в корне сайта в файл .htaccess строки переадресации на HTTPS-протокол.
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}


После этих изменений сайт заработал, как нужно.

    При переходе на защищённый протокол HTTPS ваш сайт в браузере будет отражаться, как обычно. Однако, например, в браузере Firefox напротив адреса сайта будет стоять зелёный замочек.

А если у вас достаточно средств, можно купить сертификат, который будет отражать ещё и название компании…

    Внимание №1! Эта статья будет полезна только тем, у кого сервер работает в связке nginx+Apache. Все изменения вы вносите самостоятельно и на свой страх и риск.
   
   Внимание №2! Сайту на СДО Moodle требуется безопасный протокол только для входа на сайт, далее он продолжает работать в режиме HTTP. Возможно, в будущем работа всей системы Moodle будет основываться на HTTPS-протоколе. На текущий момент после установки SSL-сертификата вы можете не увидеть зелёного замочка при работе с сайтом. Однако, это не означает, что протокол не работает. Зелёный замочек появляется в адресной строке браузера во время аутентификации на сайте.

   Внимание №3! В браузерах, отличных от Firefox, работа сайта на протоколе HTTPS в адресной строке может отображаться несколько иначе, нежели зелёным замочком.
Share:

пятница, 15 июля 2016 г.

Выравниваем блоки значков категорий курсов в Essential Moodle Theme

Если Ваш Moodle-сайт оформляется темой Essential, то Вы могли наверняка заметить, что блоки значков категорий у Вас разной высоты, если название категории достаточно длинное и состоит из нескольких слов. Однако, хотелось бы видеть эти блоки одинаковой высоты. Что делать? Ответ один: править код темы!

Отключаем значок загрузки при клике на категорию.
Открываем файл core_course_renderer.php в папке classes темы.
Находим coursecat_include_js() и комментируем весь блок if:

//  if (intval($CFG->version) >= 2013111800) {
            // Make sure JS file to expand category content is included.
       //     $this->coursecat_include_js();
       // }

Для чего это сделано? Для того, чтобы значок загрузки не мешал выравниванию блоков. Иначе будет возникать ошибка JSON. И также теперь обращений к серверу меньше )

Добавляем файл скрипта, выравнивающего блоки
В этом же файле добавим ещё одну строку в функции public function __construct(moodle_page $page, $target):
после
$theme = theme_config::load('essential');
вставим строчку
print "<script type='text/javascript' src='/theme/essential/javascript/hei.js'></script>";

Таким образом мы подключим к блокам категорий курсов скрипт, позволяющий выравнивать блоки. Скрипт напишем позже.
Вся функция будет выглядеть вот так:

public function __construct(moodle_page $page, $target) {
        parent::__construct($page, $target);
        static $theme;
        if (empty($theme)) {
            $theme = theme_config::load('essential');
            print "<script type='text/javascript' src='/theme/essential/javascript/hei.js'></script>";
        }
        $this->enablecategoryicon = (!empty($theme->settings->enablecategoryicon)) ? $theme->settings->enablecategoryicon : false;
    }

Обратите внимание на название файла скрипта: hei.js и его расположение: /theme/essential/javascript/

Создаём скрипт hei.js
window.onload = function() {
setTimeout(function() {
var subcatDivs = document.getElementsByClassName("categoryname");
var maxHCat = 0;
for (var cat_h = 0; cat_h < subcatDivs.length; ++cat_h) {
if (maxHCat < subcatDivs[cat_h].clientHeight) {
maxHCat = subcatDivs[cat_h].clientHeight;
}
}
for (var cat_h = 0; cat_h < subcatDivs.length; ++cat_h) {
subcatDivs[cat_h].style.height = maxHCat + "px";
}
}, 100);
}


Задержка в скрипте нужна, чтобы после загрузки страницы было время для расчёта высоты блоков. Сохраняем данный файл в /theme/essential/javascript/.

Костыли хака
Во время использования хака заметил следующее: изменяется размер некоторых полей ввода. Необходимо их поправить. Файл essential.css в папке style. К сожалению, структура файла минимизирована, поэтому нам нужно будет выполнять поиск в файле (не привязываясь к строкам).
Ищем login_password. Добавляем в строку (выделено полужирным): login_password,.block_login input#login_username{width:95%; height:30px}
Ищем coursesearchbox. Добавляем в строку: coursesearchbox label{display:inline}#coursesearchbox{height:30px}
Ищем adminsearchquery. Добавляем в строку: #adminsearchquery{max-width:92%; height:30px}

Замечание: при обновлении темы Вам придётся повторять те же операции с файлами вновь и вновь.
Share:

среда, 13 июля 2016 г.

Компетенции и учебные планы в Moodle

В любом курсе, даже если этот курс - домашние задания для учащихся, должна быть цель: что даст изучающему то или иное задание?

У меня постоянно вертится в голове мысль: если не знаешь, зачем в курсе тот или иной элемент - удали. Эта мысль заставляет задавать цели и сопоставлять их со средствами. Цель, в свою очередь, должна быть проверяемой.

В Moodle версии 3.1 появились компетенции. Что это? Не что иное, как ЗУНы (знания, умения, навыки), то есть, то, чем должны владеть обучающиеся на выходе.

Традиционный курс - задания, промежуточный и итоговый контроль. Наши курсы для школьников специфичны. Мы тоже используем тесты для итогового контроля, но можно обойтись и без отдельного теста, когда есть компетенции и учебный план. Компетенция выполнена - есть результат.

Приступаем к настройкам компетенций. Прежде всего их нужно включить из меню Администрирование - Компетенции - Настройки компетенций. Ставим две галочки.



После этого их нужно создать Фреймворки компетенций. Создаются фреймворки компетенций на уровне системы или категории, затем добавляются в курс.

Каждая компетенция должна иметь свой уникальный ID. Чтобы не мудрить, для обозначения ID курса я взяла год, класс и Unit (раздел учебника): 201681. Для подкатегорий - обычные цифры 1, 2, 3 и так далее. Но для самих компетенций  - ID элемента в курсе. Найти его можно в адресной строке, а чтобы не использовать два браузера, отыскивая ID, можно скопировать список с элементами курса в документ Word и ID будет виден при наведении курсора мыши на строчку со ссылкой.

Например, у меня есть курс Form 8 English, в нём 4 модуля, в каждом модуле по 2 темы. Создадим фреймворк (дерево) компетенций для первых двух тем. На скрине конечный результат.


Помните: создаём фреймворк через Администрирование, а используем в панели Настроек.

Дерево компетанций создаём, добавляя справа плюсиком нужное название компетенции. У меня оно соответствует названию элемента курса. Там же вводим ID элемента. Для добавления компетенции нужно выделить категорию слева. На скрине видно, что выделена категория Vocabulary, ей присвоен ID 4.
Получилось вот такое развесистое дерево (фреймворк) компетенций.



После того, как дерево компетенций создано, нужно добавить эти компетенции в курс:  Компетенции - Добавить компетенции в курс (Настройки - Компетенции) и создать учебные планы для учащихся (Администрирование - Компетенции - Шаблоны учебного плана).

Через настройки заходим в компетенции курса и добавляем созданный фреймворк. Затем создаём шаблон учебного плана. .



На скриншоте ниже  - учебный план с добавленными компетенциями.



После добавления компетенций в шаблон учебного плана нужно добавить учебный план в профили учащихся. Под галочкой Найти  - фамилии учащихся. Или же глобальная группа, которую нужно добавить и нажать Выбираем учащихся и нажимаем Создать учебные планы.



Учебные планы будут видны в профилях учащихся, а самим учащимся в меню навигации после добавления их как блок.



Учителю и даже администратору эти планы видны только в профиле пользователя. Учащиеся видят учебный план и процент его выполнения.



Конечно, мои записи не мануал, но основные моменты я постаралась упомянуть.
Share:

Выпрямляем ссылки на облачных сервисах

Часто может случиться ситуация, когда заказанный Вами хостинг удовлетворяет всем Вашим требованиям, кроме одного: Ваш проект разросся до масштабов Солнечной системы и на нём постоянно не хватает места или оно ограниченно тарифным планом, и постоянно не хватает средств на увеличение объёма диска хостинга. Что делать в таком случае? Искать спонсора для своего проекта или решать проблему нехватки места самостоятельно?

Если Вас не устраивает первый спонсорский вариант, то перейдём ко второму. Не секрет, что многие уважаемые компании, предоставляющие услуги электронной почты, предоставляют так же так называемые "облачные" сервисы, одним из которых является сервис удалённого диска.

Зарегистрировавшись на таком сервисе, Вы можете не беспокоиться из-за отсутствия на Вашем хостинге места до определённого момента. Зато необходимо побеспокоиться, как совместить Ваш хостинг с Вашим же удалённым диском... Ниже пойдёт речь о выпрямлении ссылок к файлам на облачном диске.

Google Drive
Загрузив файл на GoogleDrive, Вы можете его сделать доступным для всех, кто имеет ссылку на него или разрешить читать/редактировать файл определённому кругу людей. Понятно, для того, чтобы совмещать хостинг с "облаком", нам необходимо открыть доступ к файлу по ссылке. Однако, в таком виде нельзя использовать ссылку для хостинга (если Вы хотите использовать, например, картинку для фона), она не будет прямой (откроется в системе GoogleDrive). Как быть?
Изучаем ссылку, которая автоматически генерируется системой... Например, получили такую ссылку:
https://drive.google.com/open?id=0B_DJFjdH0anuVzZaRXVRbkVkOVk

Копируем код ссылки (после id=), вот он: 0B_DJFjdH0anuVzZaRXVRbkVkOVk

Для использования на хостинге используем прямую ссылку к файлу в виде
https://drive.google.com/uc?export=download&confirm=no_antivirus&id=0B_DJFjdH0anuVzZaRXVRbkVkOVk

Теперь ссылка на файл прямая.
Вот её результат:
 

DropBox
Аналогично GoogleDrive, загружаем файл в свой DropBox, жмём кнопку "Поделиться", в открывшемся всплывающем окне создаём ссылку на файл и копируем её в буфер обмена.
Получим, например, такую:
https://www.dropbox.com/s/31csv7gzllp1mpe/cover_1453235345-630x315.jpg?dl=0

Немного изменим полученную ссылку:
https://dl.dropbox.com/s/31csv7gzllp1mpe/cover_1453235345-630x315.jpg?dl=1

Это и есть наша прямая ссылка на файл.
А вот и файл по этой ссылке:
 
Share:

Essential Moodle Theme: проблема одна – решений несколько


Одной из самых скачиваемых дополнительных бесплатных тем для СДО Moodle является тема Essential: хорошая тема с массой настроек, которым может позавидовать не одна премиум-тема.
Однако, как и в любом развивающемся продукте – как платном, так и бесплатном – в теме Essential присутствуют мелкие недоработки. В данном случае затронем одну проблему: проблему сокращения кириллического текста. Она возникает на кнопке возврата в раздел, например, при прохождении теста.
Как выглядит данная недоработка? Смотрите сами…

Решение №1. Увеличиваем количество сокращаемых символов.
В настройках темы есть пункт об увеличении количества сокращаемых символов. Находится данная настройка тут: Настройки – Администрирование – Внешний вид – Темы – Essential – Features. Смотрим настройку Return to section name text limit и изменяем её значение в большую сторону (по умолчанию количество сокращаемых символов находится от 5 до 45 – более чем достаточно для названия раздела). Можно установить максимальное значение. При этом размер кнопки увеличится. Однако, в случае, если название Вашего раздела превышает 45 кириллических символов – то проблема возникнет вновь. Тогда можно воспользоваться решением №2.

Решение №2. Увеличиваем допустимое количество сокращаемых символов

Если название Вашего раздела не удовлетворяет требованию – не более 45 символов, – возможно, Вам придётся воспользоваться следующим предложением: увеличить наибольшее количество символов для сокращения, например, до 100. Как это сделать?
 В папке темы (находится по адресу расположения Вашего Moodle / theme/essential) открываем для редактирования файл settings.php (это непременно нужно сделать либо через панель управления сервером с использованием встроенного редактора кода, либо на локальном компьютере, предварительно скачав тему и разархивировав её, с использованием текстового редактора Notepad++). В данном файле находим строки (начиная от строки в районе 197, для версии темы 3.1.0.4):
// Return to section name text limit.
    $name = 'theme_essential/returntosectiontextlimitfeature';
    $title = get_string('returntosectiontextlimitfeature', 'theme_essential');
    $default = 15;
    $lower = 5;
    $upper = 45;
Изменяя значение параметра $upper, указываем максимально возможное количество символов для сокращения, например, 100 вместо 45.
Затем в настройках темы (см. Решение №1) меняем на необходимое нам количество усекаемых символов.

Решение №3. Используем кодировки

Третье решение позволяет использовать сокращение по умолчанию – 15 символов, и без появления значка вопроса. В нашем примере название раздела было: 1 сентября – 8 сентября. Установка на количество сокращаемых символов: 15. Обратите внимание на кнопку: количество сокращённых символов составляет 8 (с учётом пробела). В чём же дело? Очевидно, в используемой кодировке. Тема неправильно обрабатывает кириллические строки, скорее всего в кодировке Windows.
Значит, нам желательно «научить» тему обрабатывать строки в универсальной кодировке UTF-8. Как это сделать?
В папке темы открываем для редактирования (см. Решение №2) файл core_renderer.php (находится по адресу расположения Вашего Moodle / theme/essential/classes/output). Находим строку 430 (или в этом районе):
$sectionname = substr($sectionname, 0, $sectionnamelimit).'...';
и заменяем её на
$sectionname = mb_substr($sectionname, 0, $sectionnamelimit, 'UTF-8').'...';


Кнопка теперь выглядит так:
Решение №3 является универсальным. Данное решение, начиная с версии темы 3.1.0.5, будет использоваться по умолчанию (по крайней мере, в официальном репозитории темы на GitHub предложенные изменения уже внесены).

P.S. Техническая справка. Функция substr, установленная по умолчанию в теме, некорректно обрабатывает нелатинские символы, в связи с этим и возникают проблемы с кодировками. Дело в том, что для латинских символов отводится 1 байт памяти, а для всех остальных – более 1 байта. Так, для кириллических символов отводится 2 байта. Кодировка UTF-8 универсальна, она автоматически подбирает количество байт, отводимых в памяти для исполнения кода, для различных символов. Обратите внимание на количество сокращаемых символов в теме по умолчанию: 15. А теперь обратите внимание на количество символов, полученных после сокращения кириллического названия раздела – 8 (с учётом пробела). Посчитаем количество байт, отданных для данного сокращения: едиица и пробел – по одному байту, “сентяб” – по 2 байта символ. Итого: 2+2*6=14 (байт на строку). Учитывая, что дробного количества байт не предусматривается, получаем, что сокращённая строка вместилась в выделенные 15 байт по умолчанию.
Указав в функции mb_substr явную кодировку, мы избавили тему от ошибок сокращения кириллических (и других нелатинских) символов.
Share:

пятница, 8 июля 2016 г.

О кодировке в Moodle

Как-то моя коллега обратилась за помощью: разобраться, почему созданный в текстовом редакторе тест не импортируется в Moodle. Синтаксис вопросов множественного выбора с одним вариантом ответа правильный, а Moodle в ходе импорта выдаёт ошибку записи в базу данных, импортируя при этом 2 вопроса из 20.

Начали разбираться, в чём причина. Первое, о чём подумали – о кодировке файла; второе – о кодировке базы данных сервера. Показательно, что Moodle всё же импортировал 2 первых вопроса. Поэтому вариант №2 отпал сам собой – если бы была ошибка в кодировке БД, то тест не импортировался бы полностью.

Рассмотрим первый вариант.
Открываю присланный мне файл в Блокноте – ошибок не вижу. Пытаюсь импортировать в своём Moodle на своём сервере – та же самая проблема. Два первых вопроса импортируются, остальные не хотят! Что делать? Снова лезть в файл и искать ошибки. И вскоре они были найдены. Итак, ниже описание проблемы и её решение.

Пришлось немного повозиться, чтобы понять, что присланные файлы не соответствуют кодировке БД сервера. Присланные файлы были в кодировке ANSI (Windows, чтобы было понятнее), а БД сервера – в кодировке UTF-8. Что это значит? А это значит, что в файлах используется разный набор символов (кодировка UTF-8 богаче набором символов, но многие коды ANSI не соответствуют кодам UTF-8). Как это определить? Можно пытаться на глаз, а можно воспользоваться расширенным блокнотом Notepad++, чем я и не замедлил воспользоваться.
При загрузке файла в Notepad++ и смене кодировки на UTF-8 нечитаемые символы сразу проявляются, это видно на изображении ниже:


Набор этих символов отсутствует в кодировке UTF-8 и они заменяются на последовательности типа x92 и т. п. (выделены на чёрном фоне).

Наша задача заменить все такие символы. В нашем случае, это троеточие в системе ANSI (обратите внимание на то, что три точки в ANSI могут быть стандартными точками, а могут быть и отдельным символом, укороченным троеточием (увидеть это можно, если в Word напечатать три точки подряд. Программа автоматически преобразует три точки в символ троеточия)). Его нужно заменить на троеточие в UTF-8, то есть просто поставить три точки (...) в блокноте Notepad++.
И ещё один код соответствует символу апострофа с неверным наклоном (апостроф в UTF-8 - прямой). Заменяем его на '.
Для замены символов в Notepad++ переходим обратно на систему кодировки ANSI и жмём комбинацию клавиш Ctrl+H (стандартная комбинация клавиш поиска и замены) или вызываем команды меню Поиск – Замена…. Копируем первый символ для замены, затем вставляем заменяемые символы. Жмём «Заменить всё». То же самое производим со вторым (и, если надо, последующими) символами.


Ну вот вроде бы и всё, что нужно знать администратору Moodle для исправления ошибок импорта.
Share:

четверг, 23 июня 2016 г.

Moodle Test Creator

Создавать тесты для Moodle на сервисе http://text2gift.atwebpages.com/Text2GiftConverter.html проще, чем в текстовом редакторе.

Сервис позволяет преобразовать в формат GIFT тесты, созданные в любом текстовом редакторе для последующего их импорта в Moodle списком.

Сервис работает с тремя типами вопросов: тестом множественного выбора с одним или несколькими вариантами ответов и кратким ответом.

Экономия времени на фигурных скобках, номерах, двоеточиях и знаках равенства значительна. Создаём тест в обычном текстовом редакторе, копируем на сервис, сохраняем в нужном формате и импортируем.

Пример:


What's the capital of ___ Australia?
the
*-

My favourite subject at school was ___ French.
*-
the

I live on ___ seventh floor.
*the
-

Получим тест множественного выбора с одним вариантом ответа. Убрав второй вариант ответа, получим тест с кратким ответом:

What's the capital of ___ Australia?
*-

My favourite subject at school was ___ French.
*-

I live on ___ seventh floor.
*the

Если нужен тест множественного выбора с несколькими вариантами ответа, звёздочек в ответах будет больше.
Share:

E4School

English for School