Compare commits
53 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 49648fdf30 | |||
| 210635e015 | |||
| c1c224d602 | |||
| 5d14a3a27b | |||
| 2f6ff54b11 | |||
| 7ec37a051e | |||
| 85778f5ee3 | |||
| 03ef84c148 | |||
| 7fd07a352e | |||
| f3fa3d90c2 | |||
| 42fa42b715 | |||
| d776693f92 | |||
| b9cd521f6a | |||
| 2a10e1c6b0 | |||
| 2976ff42b9 | |||
| cd89f55a46 | |||
| 45cd4e36fb | |||
| f799c3042c | |||
| be93a16c16 | |||
| c4106464c6 | |||
| 8f746357c0 | |||
| 57a347a748 | |||
| f49cb04ca5 | |||
| a305ee2485 | |||
| e313b4b446 | |||
| 8ed413eaf9 | |||
| 5013939aa2 | |||
| acde050775 | |||
| 52aa1e4c99 | |||
| 0da32cf406 | |||
| ba21297ca7 | |||
| ea63088252 | |||
| 7066bec864 | |||
| 1fe517b522 | |||
| fcd0785e3f | |||
| d08501d58e | |||
| 3a8088c2ad | |||
| 3e6c1f2f97 | |||
| e3055df4b8 | |||
| 2dafc14703 | |||
| f5afb04143 | |||
| 09756b8b41 | |||
| 39ad2de97e | |||
| 432e0ca9a6 | |||
| 041aeab494 | |||
| c51f4c9dd2 | |||
| acd8c191fe | |||
| a0902ad740 | |||
| a3ad581e52 | |||
| 83ce32a4be | |||
| bdd8caa90e | |||
| bfcae1607c | |||
| b6f2f2bcef |
+1
-1
@@ -2,7 +2,7 @@ MOODLE TRADEMARKS POLICY
|
||||
========================
|
||||
|
||||
The word "Moodle" is trademarked in many countries around the world. The word
|
||||
was originally an acronym: Modular Object-Oriented Dynamic Learning
|
||||
was originally coined as an acronym: Modular Object-Oriented Dynamic Learning
|
||||
Environment. The trademark is owned by Martin Dougiamas, Founder and Director
|
||||
of Moodle.
|
||||
|
||||
|
||||
@@ -3447,7 +3447,7 @@
|
||||
</PHP_EXTENSION>
|
||||
<PHP_EXTENSION name="hash" level="required"/>
|
||||
<PHP_EXTENSION name="fileinfo" level="required"/>
|
||||
<PHP_EXTENSION name="sodium" level="required"/>
|
||||
<PHP_EXTENSION name="sodium" level="optional"/>
|
||||
</PHP_EXTENSIONS>
|
||||
<PHP_SETTINGS>
|
||||
<PHP_SETTING name="memory_limit" value="96M" level="required">
|
||||
@@ -3527,6 +3527,8 @@
|
||||
<ON_CHECK message="sixtyfourbitswarning" />
|
||||
</FEEDBACK>
|
||||
</CUSTOM_CHECK>
|
||||
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_max_input_vars" level="optional">
|
||||
</CUSTOM_CHECK>
|
||||
</CUSTOM_CHECKS>
|
||||
</MOODLE>
|
||||
</COMPATIBILITY_MATRIX>
|
||||
|
||||
@@ -132,12 +132,12 @@ Feature: Upload users
|
||||
# Boost check.
|
||||
And I log in as "jonest"
|
||||
And I am on "Maths" course homepage
|
||||
And "Turn editing on" "button" should not exist
|
||||
And "Calendar" "link" should be visible
|
||||
And I log out
|
||||
# Classic check.
|
||||
And I log in as "reznor"
|
||||
And I am on "Maths" course homepage
|
||||
And "Turn editing on" "button" should exist
|
||||
And "Calendar" "link" should not be visible
|
||||
|
||||
@javascript
|
||||
Scenario: Upload users setting their user theme when allowuserthemes is false
|
||||
|
||||
+1
-3
@@ -716,9 +716,7 @@ class auth_plugin_mnet extends auth_plugin_base {
|
||||
|
||||
foreach($superArray as $subArray) {
|
||||
$subArray = array_values($subArray);
|
||||
$instring = "('".implode("', '",$subArray)."')";
|
||||
$query = "select id, session_id, username from {mnet_session} where username in $instring";
|
||||
$results = $DB->get_records_sql($query);
|
||||
$results = $DB->get_records_list('mnet_session', 'username', $subArray, '', 'id, session_id, username');
|
||||
|
||||
if ($results == false) {
|
||||
// We seem to have a username that breaks our query:
|
||||
|
||||
@@ -87,7 +87,7 @@ class provider implements
|
||||
* @param int $userid The userid of the user whose data is to be exported.
|
||||
*/
|
||||
public static function export_user_preferences(int $userid) {
|
||||
$preferences = get_user_preferences();
|
||||
$preferences = get_user_preferences(null, null, $userid);
|
||||
foreach ($preferences as $name => $value) {
|
||||
$prefname = null;
|
||||
$prefdescription = null;
|
||||
|
||||
@@ -63,14 +63,18 @@ class gradereport_grader_privacy_testcase extends \core_privacy\tests\provider_t
|
||||
* These preferences can be set on each course, but the value is shared in the whole site.
|
||||
*/
|
||||
public function test_export_user_preferences_single() {
|
||||
// Add some user preferences.
|
||||
// Create test user, add some preferences.
|
||||
$user = $this->getDataGenerator()->create_user();
|
||||
$this->setUser($user);
|
||||
|
||||
set_user_preference('grade_report_showcalculations', 1, $user);
|
||||
set_user_preference('grade_report_meanselection', GRADE_REPORT_MEAN_GRADED, $user);
|
||||
set_user_preference('grade_report_studentsperpage', 50, $user);
|
||||
|
||||
// Validate exported data.
|
||||
// Switch to admin user (so we can validate preferences of our test user are still exported).
|
||||
$this->setAdminUser();
|
||||
|
||||
// Validate exported data for our test user.
|
||||
provider::export_user_preferences($user->id);
|
||||
$context = context_user::instance($user->id);
|
||||
$writer = writer::with_context($context);
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$string['language'] = 'Език';
|
||||
$string['moodlelogo'] = 'Лого на Moodle';
|
||||
$string['next'] = 'Още';
|
||||
$string['previous'] = 'Обратно';
|
||||
$string['reload'] = 'Презареждане';
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
// This file is part of Moodle - https://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Automatically generated strings for Moodle installer
|
||||
*
|
||||
* Do not edit this file manually! It contains just a subset of strings
|
||||
* needed during the very first steps of installation. This file was
|
||||
* generated automatically by export-installer.php (which is part of AMOS
|
||||
* {@link http://docs.moodle.org/dev/Languages/AMOS}) using the
|
||||
* list of strings defined in /install/stringnames.txt.
|
||||
*
|
||||
* @package installer
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$string['parentlanguage'] = 'da';
|
||||
$string['thislanguage'] = 'Dansk til Workplace';
|
||||
@@ -31,4 +31,13 @@ defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$string['clianswerno'] = 'n';
|
||||
$string['cliansweryes'] = 'w';
|
||||
$string['cliincorrectvalueerror'] = 'Erè, valè kòrèk "{$ a-> valè}" pou "{$ a-> opsyon}"';
|
||||
$string['cliincorrectvalueretry'] = 'Valè ki pa kòrèk, tanpri eseye ankò';
|
||||
$string['clitypevalue'] = 'valè kalite';
|
||||
$string['clitypevaluedefault'] = 'tape valè, peze Antre pou itilize valè default ({$ a})';
|
||||
$string['cliunknowoption'] = 'Opsyon ki pa rekonèt:
|
||||
{$ a}
|
||||
Tanpri itilize opsyon --help.';
|
||||
$string['cliyesnoprompt'] = 'Tape w (pou wi) oswa n (pou non)';
|
||||
$string['environmentrequireinstall'] = 'dwe enstale ak pèmèt';
|
||||
$string['environmentrequireversion'] = 'vèsyon {$ a-> bezwen} obligatwa epi w ap kouri {$ a-> current}';
|
||||
|
||||
@@ -29,6 +29,6 @@
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$string['parentlanguage'] = 'he';
|
||||
$string['parentlanguage'] = '';
|
||||
$string['thisdirection'] = 'rtl';
|
||||
$string['thislanguage'] = 'עברית';
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
// This file is part of Moodle - https://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Automatically generated strings for Moodle installer
|
||||
*
|
||||
* Do not edit this file manually! It contains just a subset of strings
|
||||
* needed during the very first steps of installation. This file was
|
||||
* generated automatically by export-installer.php (which is part of AMOS
|
||||
* {@link http://docs.moodle.org/dev/Languages/AMOS}) using the
|
||||
* list of strings defined in /install/stringnames.txt.
|
||||
*
|
||||
* @package installer
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$string['cannotcreatedboninstall'] = '<p> Tidak dapat membuat basis data. </p> <p> Basis data yang ditentukan tidak ada dan pengguna yang diberikan tidak memiliki izin untuk membuat basis data. </p> <p> Administrator situs harus memverifikasi konfigurasi basis data. < / p>';
|
||||
$string['cannotcreatelangdir'] = 'Tidak dapat membuat direktori lang';
|
||||
$string['cannotcreatetempdir'] = 'Tidak dapat membuat direktori temp';
|
||||
$string['cannotdownloadcomponents'] = 'Tidak dapat mengunduh komponen';
|
||||
$string['cannotdownloadzipfile'] = 'Tidak dapat mengunduh berkas ZIP';
|
||||
$string['cannotfindcomponent'] = 'Tidak dapat menemukan komponen';
|
||||
$string['cannotsavemd5file'] = 'Tidak dapat menyimpan berkas md5';
|
||||
$string['cannotsavezipfile'] = 'Tidak dapat menyimpan berkas ZIP';
|
||||
$string['cannotunzipfile'] = 'Tidak dapat mengekstrak berkas';
|
||||
$string['componentisuptodate'] = 'Komponen sudah mutakhir';
|
||||
$string['dmlexceptiononinstall'] = '<p>Terjadi kesalahan basis data [{$a->errorcode}].<br />{$a->debuginfo}</p>';
|
||||
$string['downloadedfilecheckfailed'] = 'Pemeriksaan berkas yang diunduh gagal';
|
||||
$string['invalidmd5'] = 'Variabel periksa salah - coba lagi';
|
||||
$string['missingrequiredfield'] = 'Beberapa ruas wajib tidak ada';
|
||||
$string['remotedownloaderror'] = '<p> Pengunduhan komponen ke peladen Anda gagal. Harap verifikasi setelan proksi; ekstensi PHP cURL sangat direkomendasikan. </p> <p> Anda harus mengunduh berkas <a href="{$a->url} ">{$a->url} </a> secara manual, menyalinnya ke"{$a->dest} "di peladen Anda dan uraikan di sana. </p>';
|
||||
$string['wrongdestpath'] = 'Jalur tujuan salah';
|
||||
$string['wrongsourcebase'] = 'Basis URL sumber salah';
|
||||
$string['wrongzipfilename'] = 'Nama file ZIP salah';
|
||||
@@ -70,12 +70,12 @@ $string['pathsroparentdataroot'] = 'La cartella genitore ({$a->parent}) non è s
|
||||
$string['pathssubadmindir'] = 'Alcuni web host utilizzano la cartella /admin come URL di accesso a pannelli di controllo od altre funzioni particolari. Tuttavia questo nome coincide con il nome della cartella che Moodle utilizza per i propri file di amministrazione. Per evitare conflitti, è possibile specificare un nome alternativo per la cartella Admin di Moodle. Ad esempio:<p><b>moodleadmin</b></p>
|
||||
Tutti i link che puntano ai file di amministrazione di Moodle terranno conto di questa variazione.';
|
||||
$string['pathssubdataroot'] = '<p>La cartella dove Moodle memorizzerà i file caricati dagli utenti.</p>
|
||||
<p>L\'utente con il qule gira il processo del web server (in genere \'www-data\' o \'apache\') deve avere i permessi di lettura e di scrittura su questa cartella.</p>
|
||||
<p>L\'utente con il quale gira il processo del web server (in genere \'www-data\' o \'apache\') deve avere i permessi di lettura e di scrittura su questa cartella.</p>
|
||||
<p>La cartella inoltre non deve essere direttamente accessibile via web.</p>
|
||||
<p>Qualora la cartella non esista, lo script di installazione tenterà di crearla.</p>';
|
||||
$string['pathssubdirroot'] = '<p>Percorso assoluto della cartella dove si trova il codice di Moodle.</p>';
|
||||
$string['pathssubwwwroot'] = '<p>L\'iIndirizzo web per raggiungere a Moodle, in altre parole l\'indirizzo che gli utenti inseriranno nella barra degli indirizzi del proprio browser per accedere a questa installazione.</p>
|
||||
<p>Non è possibile accedere alla stessa installazione Moodle usando più di un indirizzi web. Se il tuo sito usa più indirizzi web, devi configurare dei re-indirizzamenti permanenti per tutti gli altri indirizzi web.</p>
|
||||
$string['pathssubwwwroot'] = '<p>L\'indirizzo web per raggiungere a Moodle, in altre parole l\'indirizzo che gli utenti inseriranno nella barra degli indirizzi del proprio browser per accedere a questa installazione.</p>
|
||||
<p>Non è possibile accedere alla stessa installazione Moodle usando più di un indirizzo web. Se il tuo sito usa più indirizzi web, devi configurare dei re-indirizzamenti permanenti per tutti gli altri indirizzi web.</p>
|
||||
<p>Se il tuo sito è raggiungibile sia dalla Internet sia dalla rete interna (a volte chiamata Intranet), allora usa l\'indirizzo Internet pubblico.</p>
|
||||
<p>Se l\'indirizzo utilizzato è errato, per favore correggilo nella barra degli indirizzi del browser e avvia nuovamente l\'installazione.</p>';
|
||||
$string['pathsunsecuredataroot'] = 'La posizione della Cartella dati non è sicura';
|
||||
@@ -89,7 +89,7 @@ $string['welcomep10'] = '{$a->installername} ({$a->installerversion})';
|
||||
$string['welcomep20'] = 'Se vedi questa pagina hai installato correttamente e lanciato il pacchetto <strong>{$a->packname} {$a->packversion}</strong>. Complimenti!';
|
||||
$string['welcomep30'] = 'La release di <strong>{$a->installername}</strong> include l\'applicazione per creare l\'ambiente necessario a far girare <strong>Moodle</strong>:';
|
||||
$string['welcomep40'] = 'Il pacchetto include anche <strong>Moodle {$a->moodlerelease} ({$a->moodleversion})</strong>.';
|
||||
$string['welcomep50'] = 'L\'utilizzo delle applicazioni incluse in questo pacchetto è regolato dalle rispettive licenze. L\'intero pacchetto <strong>{$a->installername}</strong> è <a href="http://www.opensource.org/docs/definition_plain.html">open source</a> ed è distribuito in accordo alla licenza <a href="http://www.gnu.org/copyleft/gpl.html">GPL</a>.';
|
||||
$string['welcomep50'] = 'L\'utilizzo delle applicazioni incluse in questo pacchetto è regolato dalle rispettive licenze. L\'intero pacchetto <strong>{$a->installername}</strong> è <a href="https://www.opensource.org/docs/definition_plain.html">open source</a> ed è distribuito in accordo alla licenza <a href="https://www.gnu.org/copyleft/gpl.html">GPL</a>.';
|
||||
$string['welcomep60'] = 'Le prossime pagine ti guideranno attraverso semplici passi per installare e configurare <strong>Moodle</strong> nel tuo computer. Puoi utilizzare le impostazioni di default oppure modificarle per adeguarle alle tue esigenze.';
|
||||
$string['welcomep70'] = 'Fai click sul pulsante "Avanti" per continuare l\'installazione di <strong>Moodle</strong>.';
|
||||
$string['wwwroot'] = 'Indirizzo web';
|
||||
|
||||
@@ -45,7 +45,7 @@ $string['dbprefix'] = 'Префикс на табели';
|
||||
$string['dirroot'] = 'Moodle директориум';
|
||||
$string['environmenthead'] = 'Ја проверувам околината...';
|
||||
$string['installation'] = 'Инсталација';
|
||||
$string['langdownloaderror'] = 'За жал, јазикот "{$a}" не беше инсталиран. Инсталацискиот процес ќе продолжи на англиски.';
|
||||
$string['langdownloaderror'] = 'За жал, јазикот "{$a}" не е преземен. Инсталацискиот процес ќе продолжи на англиски.';
|
||||
$string['memorylimithelp'] = '<p>Прагот на меморијата кај PHP за Вашиот компјутер моментално е подесена на {$a}. </p>
|
||||
|
||||
<p>Ова може да предизвика проблеми со меморијата подоцна,
|
||||
@@ -64,6 +64,12 @@ $string['memorylimithelp'] = '<p>Прагот на меморијата кај P
|
||||
<p><blockquote>php_value memory_limit 40M</blockquote></p>
|
||||
<p>Како и да е, на некои компјутери, ова може да ги спречи <b>сите </b> PHP страници да работат (ќе забележите грешки на страниците) па ќе треба да ја преместите датотеката .htaccess.</p></li>
|
||||
</ol>';
|
||||
$string['paths'] = 'Патеки';
|
||||
$string['pathshead'] = 'Потврди патеки';
|
||||
$string['pathsroparentdataroot'] = 'Неможе да се запишува во предходниот директориум ({$a->parent}). Процесот на инсталација неможе да го создаде директориумот ({$a->dataroot}).';
|
||||
$string['pathssubdataroot'] = '<p>Директориум каде што Moodle ќе ја зачува целата содржина на датотеки прикачена од корисниците.</p> <p>Овој директориум треба да биде има дозвола за читање и запишување од веб-серверот (најлесто \'www-data\', \'nobody\', или \'apache\').</p> <p>Не смее да биде директно достапен преку Интернет.</p> <p>Ако директориумот во моментов не постои, процесот на инсталација ќе се обиде да го создаде.</p>';
|
||||
$string['pathssubdirroot'] = '<p>Целосна патека до директориумот каде што е кодот на Moodle.</p>';
|
||||
$string['pathssubwwwroot'] = '<p>Целосната адреса каде што ќе се пристапува до Moodle, т.е. адресата што корисниците треба да ја внесат во лентата за адреси на нивниот прелистувач за пристап до Moodle.</p> <p>Не е можно да се пристапи до Moodle со користење на повеќе адреси. Ако вашата страница е достапна преку повеќе адреси, тогаш изберете ја најлесната и поставете трајно пренасочување за секоја од другите адреси.</p> <p>Ако вашата страница е достапна и од Интернет, и од внатрешна мрежа (понекогаш наречена Интранет), тогаш користете ја јавната адреса тука.</p> <p>Ако тековната адреса не е точна, променете ја URL-адресата во лентата за адреси на прелистувачот и повторно стартувајте ја инсталацијата.</p>';
|
||||
$string['pathswrongadmindir'] = 'Администраторскиот директориум не постои';
|
||||
$string['phpversion'] = 'Верзија на PHP';
|
||||
$string['phpversionhelp'] = '<p>На Moodle му е потребна верзија на PHP, и тоа најмалку 4.1.0. </p>
|
||||
|
||||
@@ -29,5 +29,6 @@
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$string['parentlanguage'] = 'en';
|
||||
$string['thisdirection'] = 'ltr';
|
||||
$string['thislanguage'] = 'Македонски';
|
||||
|
||||
@@ -40,7 +40,7 @@ $string['databasehost'] = 'Servidor da base de dados';
|
||||
$string['databasename'] = 'Nome da base de dados';
|
||||
$string['databasetypehead'] = 'Escolha o <i>driver</i> da base de dados';
|
||||
$string['dataroot'] = 'Pasta de dados';
|
||||
$string['datarootpermission'] = 'Permissões da diretoria de dados';
|
||||
$string['datarootpermission'] = 'Permissões da pasta de dados';
|
||||
$string['dbprefix'] = 'Prefixo das tabelas';
|
||||
$string['dirroot'] = 'Pasta do Moodle';
|
||||
$string['environmenthead'] = 'A verificar sistema...';
|
||||
@@ -55,11 +55,11 @@ $string['pathshead'] = 'Confirmar caminhos';
|
||||
$string['pathsrodataroot'] = 'A pasta de dados não tem permissões de escrita.';
|
||||
$string['pathsroparentdataroot'] = 'A pasta ascendente <b>{$a->parent}</b> não tem permissões de escrita. O programa de instalação não conseguiu criar a pasta <b>{$a->dataroot}</b>.';
|
||||
$string['pathssubadmindir'] = 'Alguns servidores Web utilizam a pasta <strong>admin</strong> em URLs especiais de acesso a funcionalidades especiais, como é o caso de painéis de controlo. Algumas situações podem criar conflitos com a localização normal das páginas de administração do Moodle. Estes problemas podem ser resolvidos renomeando a pasta <strong>admin</strong> na instalação do Moodle e indicando aqui o novo nome a utilizar. Por exemplo:<br /><br /><b>moodleadmin</b><br /><br />Esta ação resolverá os problemas de acesso das hiperligações para as funcionalidades de administração do Moodle.';
|
||||
$string['pathssubdataroot'] = '<p>Diretoria onde o Moodle irá armazenar todo o conteúdo de ficheiros enviados pelos utilizadores.</p>
|
||||
<p>Esta diretoria deve ser legível e gravável pelo utilizador do servidor web (geralmente \'www-data\', \'nobody\', ou \'apache\').</p>
|
||||
$string['pathssubdataroot'] = '<p>Pasta onde o Moodle irá armazenar todo o conteúdo de ficheiros enviados pelos utilizadores.</p>
|
||||
<p>Esta pasta deve ser legível e gravável pelo utilizador do servidor web (geralmente \'www-data\', \'nobody\', ou \'apache\').</p>
|
||||
<p>Não deve ser acessível diretamente através da web.</p>
|
||||
<p>Se a diretoria não existir, o processo de instalação tentará criá-la.</p>';
|
||||
$string['pathssubdirroot'] = 'Caminho completo para a diretoria que contém o código Moodle.';
|
||||
<p>Se a pasta não existir, o processo de instalação tentará criá-la.</p>';
|
||||
$string['pathssubdirroot'] = 'Caminho completo para a pasta que contém o código Moodle.';
|
||||
$string['pathssubwwwroot'] = 'Endereço web completo de acesso ao Moodle. Não é possível aceder ao Moodle usando mais do que um endereço. Se o site tiver mais do que um endereço público, devem ser configurados redirecionamentos permanentes em todos eles, à exceção deste. Se o site pode ser acedido a partir da Internet e de Intranet, use o endereço público aqui. Se o endereço atual não está correto, altere o endereço indicado na barra de endereço do seu navegador e reinicie a instalação.';
|
||||
$string['pathsunsecuredataroot'] = 'A localização da pasta de dados não é segura';
|
||||
$string['pathswrongadmindir'] = 'A pasta <b>admin</b> não existe';
|
||||
|
||||
@@ -29,15 +29,19 @@
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$string['cannotcreatelangdir'] = 'Nie je možné vytvoriť adresár pre jazykové súbory.';
|
||||
$string['cannotcreatedboninstall'] = '<p>Nie je možné vytvoriť databázu.</p>
|
||||
<p>Zadaná databáza neexistuje a používateľ nemá oprávnenie pre vytvorenie databázy.</p>
|
||||
<p>Administrátor portálu by mal overiť konfiguráciu databázy.</p>';
|
||||
$string['cannotcreatelangdir'] = 'Nie je možné vytvoriť priečinok pre jazykové súbory';
|
||||
$string['cannotcreatetempdir'] = 'Nie je možné vytvoriť dočasný adresár.';
|
||||
$string['cannotdownloadcomponents'] = 'Nie je možné stiahnuť komponenty.';
|
||||
$string['cannotdownloadzipfile'] = 'Nie je možné stiahnuť súbor ZIP.';
|
||||
$string['cannotfindcomponent'] = 'Komponent nenájdený.';
|
||||
$string['cannotsavemd5file'] = 'Nie je možné uložiť súbor MD5.';
|
||||
$string['cannotsavezipfile'] = 'Nie je možné uložiť súbor ZIP.';
|
||||
$string['cannotunzipfile'] = 'Nie je možné dekomprimovať súbor.';
|
||||
$string['cannotunzipfile'] = 'Nie je možné dekomprimovať súbor';
|
||||
$string['componentisuptodate'] = 'Komponent je aktuálny.';
|
||||
$string['dmlexceptiononinstall'] = '<p>Došlo k chybe databázy [{$a->errorcode}].<br />{$a->debuginfo}</p>';
|
||||
$string['downloadedfilecheckfailed'] = 'Kontrola stiahnutého súboru bola neúspešná';
|
||||
$string['invalidmd5'] = 'Kontrolovaná premenná bola nesprávna - skúste znova';
|
||||
$string['missingrequiredfield'] = 'Chýba niektoré z povinných polí';
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$string['admindirname'] = 'Adresár pre správu (admin)';
|
||||
$string['admindirname'] = 'Adresár so súbormi pre správu servera';
|
||||
$string['availablelangs'] = 'Dostupné jazykové balíčky';
|
||||
$string['chooselanguagehead'] = 'Vyberte jazyk';
|
||||
$string['chooselanguagesub'] = 'Zvoľte si jazyk pre inštaláciu. Tento jazyk bude tiež použitý ako východzí jazyk portálu, ale môže byť neskôr zmenený.';
|
||||
@@ -64,16 +64,21 @@ $string['pathserrcreatedataroot'] = 'Inštalátor nemôže vytvoriť dátový ad
|
||||
$string['pathshead'] = 'Vytvoriť cesty';
|
||||
$string['pathsrodataroot'] = 'Kmeňový adresár nie je zapisovateľný';
|
||||
$string['pathsroparentdataroot'] = 'Nadriadený adresár ({$a->parent}) nie je zapisovateľný. Inštalátor nemôže vytvoriť dátový adresár ({$a->dataroot}). ';
|
||||
$string['pathssubadmindir'] = 'Na niektorých serveroch je URL adresa /admin vyhradená pre špeciálne účely (napr. pre ovládací panel). Na takých serveroch môže dojsť ku kolízii so štandardným umiestnením stránok pre administratívu Moodle. Ak máte tento problém, premenujte adresár <em>admin</em> vo vašej inštalácii Moodle a sem zadajte jeho nový názov - napríklad <em>moodleadmin</em>. Všetky generované odkazy na stránky správy Moodle budú používať tento nový názov.';
|
||||
$string['pathssubdataroot'] = '<p>Potrebujete adresár, kam Moodle bude ukladať nahrané súbory.</p>
|
||||
<p>Adresár by mal povoliť čítanie a zapisovanie údajov používateľom web serveru (webový server býva väčšinou spustený pod používateľom "www-data" alebo "apache"), ale nesmie byť prístupný priamo cez web rozhranie. Pokiaľ ešte neexistuje, inštalácia sa pokúsi o jeho vytvorenie. </p>';
|
||||
$string['pathssubdirroot'] = '<p>Absolútna cesta adresára Moodle inštalácie.</p>';
|
||||
$string['pathssubwwwroot'] = '<p>Zadajte úplnú webovú adresu, na ktorej bude Moodle dostupný, t.j. adresa, ktorú zadajú používatelia do adresného riadku svojho prehliadača, aby spustili Moodle.</p>
|
||||
<p>Moodle potrebuje jedinečnú adresu, nie je možné ho prevádzkovať na niekoľkých URL súčasne. Ak používate niekoľko verejných domén, musíte si sami nastaviť permanentné presmerovanie na jednu z nich a tú potom použiť.</p>
|
||||
<p> Ak je váš server dostupný z vonkajšej a vnútornej siete pod rôznymi IP adresami, použite jeho verejnú adresu a nastavte si váš DNS server tak, že ju môžu používať aj používatelia z vnútornej siete.</p>
|
||||
<p>Ak nie je aktuálna adresa správna, zmeňte URL adresu v adresnom riadku prehliadača a spusťte inštaláciu.</p>';
|
||||
$string['pathsunsecuredataroot'] = 'Umiestnenie dátového adresára nie je bezpečné';
|
||||
$string['pathswrongadmindir'] = 'Administrátorský adresár neexistuje';
|
||||
$string['phpextension'] = 'Rozšírenie PHP {$a}';
|
||||
$string['phpversion'] = 'Verzia PHP';
|
||||
$string['phpversionhelp'] = '<p>Moodle si vyžaduje verziu PHP aspoň 5.6.5 alebo 7.1 (7.0.x má určité obmedzenia jadra).</p>
|
||||
<p>Vy máte momentálne nainštalovanú túto verziu {$a}.</p>
|
||||
<p>Musíte aktualizovať PHP alebo sa presunúť na hostiteľský počítač s novšou verziou PHP!</p>';
|
||||
<p>Musíte aktualizovať PHP alebo sa presunúť na hostiteľský počítač s novšou verziou PHP</p>';
|
||||
$string['welcomep10'] = '{$a->installername} ({$a->installerversion})';
|
||||
$string['welcomep20'] = 'Podarilo so vám úspešne nainštalovať a spustiť balíček <strong>{$a->packname} {$a->packversion}</strong>. Gratulujeme!';
|
||||
$string['welcomep30'] = 'Táto verzia <strong>{$a->installername}</strong> obsahuje aplikáciu k vytvoreniu prostredia, v ktorom bude prevádzkovaný váš <strong>Moodle</strong>. Menovite sa jedná o:';
|
||||
|
||||
@@ -75,7 +75,7 @@ $string['pathssubwwwroot'] = '<p>Пуна адреса путем које ће
|
||||
<p>Није могуће приступати Moodleu коришћењем више адреса. Ако се вашем сајту може приступити са више адреса, онда изаберите најлакшу, а за све остале адресе подесите перманентну редирекцију.</p>
|
||||
<p>Ако се вашем сајту може приступити како са интернета, тако и из интерне мреже (која се понекад назив интранет), онда овде употребите јавну адресу.</p>
|
||||
<p>Ако је текућа адреса нетачна, молимо вас, промените URL адресу у адресној траци свог веб читача и поново покрените инсталацију.</p>';
|
||||
$string['pathsunsecuredataroot'] = 'Dataroot локација није безбедна';
|
||||
$string['pathsunsecuredataroot'] = 'Локација директоријума са подацима није безбедна';
|
||||
$string['pathswrongadmindir'] = 'Админ директоријум не постоји';
|
||||
$string['phpextension'] = '{$a} PHP екстензија';
|
||||
$string['phpversion'] = 'PHP верзија';
|
||||
|
||||
@@ -72,7 +72,7 @@ $string['pathssubdataroot'] = '<p>Direktorijum gde će Moodle čuvati datoteke i
|
||||
<p>Ukoliko ovaj direktorijum ne postoji proces instalacije će pokušati da ga kreira.</p>';
|
||||
$string['pathssubdirroot'] = '<p>Puna putanja do direktorijuma koji sadrži kôd Moodlea.</p>';
|
||||
$string['pathssubwwwroot'] = '<p>Puna adresa putem koje će se pristupati Moodleu, tj. adresa koju će korisnici uneti u adresnu traku svojih veb čitača kako bi pristupili Moodleu.</p> <p>Nije moguće pristupati Moodleu korišćenjem više adresa. Ako se vašem sajtu može pristupiti sa više adresa, onda izaberite najlakšu, a za sve ostale adrese podesite permanentnu redirekciju.</p> <p>Ako se vašem sajtu može pristupiti kako sa interneta, tako i iz interne mreže (koja se ponekad naziv intranet), onda ovde upotrebite javnu adresu.</p> <p>Ako je tekuća adresa netačna, molimo vas, promenite URL adresu u adresnoj traci svog veb čitača i ponovo pokrenite instalaciju.</p>';
|
||||
$string['pathsunsecuredataroot'] = 'Dataroot lokacija nije bezbedna';
|
||||
$string['pathsunsecuredataroot'] = 'Lokacija direktorijuma sa podacima nije bezbedna';
|
||||
$string['pathswrongadmindir'] = 'Admin direktorijum ne postoji';
|
||||
$string['phpextension'] = '{$a} PHP ekstenѕija';
|
||||
$string['phpversion'] = 'PHP verzija';
|
||||
|
||||
@@ -37,15 +37,15 @@ $string['cannotcreatetempdir'] = 'Det går inte att skapa temp-katalogen';
|
||||
$string['cannotdownloadcomponents'] = 'Kan inte ladda ned komponenter';
|
||||
$string['cannotdownloadzipfile'] = 'Kan inte ladda ned ZIP-fil';
|
||||
$string['cannotfindcomponent'] = 'Hittar inte komponenten';
|
||||
$string['cannotsavemd5file'] = 'Det går inte att spara md5-fil';
|
||||
$string['cannotsavezipfile'] = 'Det går inte att spara ZIP-fil';
|
||||
$string['cannotunzipfile'] = 'Det går inte att packa upp fil';
|
||||
$string['cannotsavemd5file'] = 'Kan inte spara md5-fil';
|
||||
$string['cannotsavezipfile'] = 'Kan inte spara ZIP-fil';
|
||||
$string['cannotunzipfile'] = 'Det går inte att packa upp filen';
|
||||
$string['componentisuptodate'] = 'Komponenten är aktuell';
|
||||
$string['dmlexceptiononinstall'] = '<p>Ett databasfel har inträffat [{$a->errorcode}].<br />{$a->debuginfo}</p>';
|
||||
$string['downloadedfilecheckfailed'] = 'Kontrollen av den nedladdade filen misslyckades';
|
||||
$string['invalidmd5'] = 'Kontrollvariabeln var felaktig - försök igen';
|
||||
$string['missingrequiredfield'] = 'Det saknas några obligatoriska fält';
|
||||
$string['remotedownloaderror'] = 'Nedladdningen av en komponent till din server misslyckades. Vänligen verifiera inställningar för proxy. <br /><br />Du måste ladda ner <a href="{$a->url}">{$a->url}</a> filen manuellt, kopiera den till "{$a->dest}" på din server och packa upp den där.';
|
||||
$string['wrongdestpath'] = 'Fel sökväg';
|
||||
$string['wrongsourcebase'] = 'Fel bas-URL till källan';
|
||||
$string['wrongdestpath'] = 'Fel målsökväg';
|
||||
$string['wrongsourcebase'] = 'Felaktig käll- URL rot';
|
||||
$string['wrongzipfilename'] = 'Fel namn på ZIP-filen';
|
||||
|
||||
@@ -40,9 +40,12 @@ $string['databasehost'] = 'Databasserver';
|
||||
$string['databasename'] = 'Namn på databas';
|
||||
$string['databasetypehead'] = 'Välj drivrutin för databasen';
|
||||
$string['dataroot'] = 'Datakatalog';
|
||||
$string['datarootpermission'] = 'Behörigheter för datakataloger';
|
||||
$string['dbprefix'] = 'Prefix för tabeller';
|
||||
$string['dirroot'] = 'Moodle-katalog';
|
||||
$string['environmenthead'] = 'Kontrollerar miljön...';
|
||||
$string['environmentsub2'] = 'Varje Moodle-utgåva har ett lägsta PHP-versionskrav samt krav på ett antal obligatoriska PHP-tillägg.
|
||||
Fullständig miljökontroll görs före varje installation och uppgradering. Kontakta serveradministratören om du inte vet hur du installerar en ny version eller aktiverar PHP-tillägg.';
|
||||
$string['errorsinenvironment'] = 'Kontrollen av miljön misslyckades';
|
||||
$string['installation'] = 'Installation';
|
||||
$string['langdownloaderror'] = 'Språket "{$a}" gick tyvärr inte att ladda ner. Installationen kommer att fullföljas på engelska.';
|
||||
@@ -63,11 +66,22 @@ $string['memorylimithelp'] = '<p>PHP-minnesgränsen för servern är för närva
|
||||
<p>Dock kan detta för vissa servrar resultera i att <b>alla</b> PHP-sidor slutar fungera (du får felmeddelande då du försöker visa dem). I dessa fall behöver du ta bort .htaccess-filen.</p></li>
|
||||
</ol>';
|
||||
$string['paths'] = 'Sökvägar';
|
||||
$string['pathserrcreatedataroot'] = 'Datakatalogen ({$a->dataroot}) går inte att skapa med hjälp av installeraren.';
|
||||
$string['pathserrcreatedataroot'] = 'Installationsprogrammet kan inte skapa datakatalogen <code>{$a->dataroot}</code>.';
|
||||
$string['pathshead'] = 'Bekräfta sökvägar';
|
||||
$string['pathsrodataroot'] = 'Det går inte att skriva till dataroot-katalogen.';
|
||||
$string['pathsroparentdataroot'] = 'Överliggande katalog ({$a->parent}) är inte skrivbar. Installationsprogrammet kan inte skapa dataroot-katalogen ({$a->dataroot}).';
|
||||
$string['pathssubadmindir'] = 'Ett fåtal webbhotell använder <var>/admin</var> som en speciell URL för att ge möjlighet att komma åt en
|
||||
kontrollpanel eller liknande. Tyvärr står detta i konflikt med standardplatsen för Moodle-administratörssidorna. Du kan åtgärda detta genom att
|
||||
byta namn på administratörskatalogen i installationen och ange det nya namnet här. Till exempel: <var>moodleadmin</var>. Detta kommer att korrigera administratörslänkarna i Moodle.';
|
||||
$string['pathssubdataroot'] = '<p>En katalog där Moodle lagrar allt filinnehåll som laddas upp av användare.</p>
|
||||
<p>Den här katalogen ska vara både skriv- och läsbar av webbserveranvändaren (vanligtvis "www-data", "nobody" eller "apache").</p>
|
||||
<p>Den får inte vara direkt tillgängligt över internet.</p>
|
||||
<p>Om katalogen inte finns kommer installationsprogrammet försöka skapa den.</p>';
|
||||
$string['pathssubdirroot'] = '<p>Fullständig sökväg till katalogen som innehåller Moodle-koden.</p>';
|
||||
$string['pathssubwwwroot'] = '<p>Den fullständiga webadressen där Moodle finns, dvs. adressen som användarna kommer att ange i adressfältet i sin webbläsare för att komma åt Moodle.</p>
|
||||
<p>Det går inte att komma åt Moodle med flera adresser. Om din webbplats är tillgänglig via flera adresser väljer du den enklaste och ställer in en permanent omdirigering för var och en av de andra adresserna.</p>
|
||||
<p>Om webbplatsen är tillgänglig både från Internet och från ett internt nätverk (kallas ibland intranät) använder du den publika adressen här.</p>
|
||||
<p>Om den aktuella adressen inte är korrekt ändrar du URL:en i webbläsarens adressfält och startar om installationen.</p>';
|
||||
$string['pathsunsecuredataroot'] = 'Platsen för dataroot är inte säker';
|
||||
$string['pathswrongadmindir'] = 'Admin-katalogen saknas';
|
||||
$string['phpextension'] = '{$a} PHP-tillägg';
|
||||
|
||||
@@ -29,5 +29,6 @@
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$string['parentlanguage'] = '';
|
||||
$string['thisdirection'] = 'ltr';
|
||||
$string['thislanguage'] = 'Svenska';
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$string['language'] = 'Ngôn ngữ';
|
||||
$string['moodlelogo'] = 'Logo Moodle';
|
||||
$string['next'] = 'Tiếp theo';
|
||||
$string['previous'] = 'Trước';
|
||||
$string['reload'] = 'Nạp lại';
|
||||
|
||||
@@ -1131,6 +1131,8 @@ $string['sessionhandling'] = 'Session handling';
|
||||
$string['sessiontimeout'] = 'Timeout';
|
||||
$string['settingdependenton'] = 'This setting may be hidden, based on the value of <strong>{$a}</strong>.';
|
||||
$string['settingfileuploads'] = 'File uploading is required for normal operation, please enable it in PHP configuration.';
|
||||
$string['settingmaxinputvars'] = 'PHP setting max_input_vars is recommended to be at least 5000.';
|
||||
$string['settingmaxinputvarsrequired'] = 'PHP setting max_input_vars must be at least 5000.';
|
||||
$string['settingmemorylimit'] = 'Insufficient memory detected, please set higher memory limit in PHP settings.';
|
||||
$string['settingsafemode'] = 'Moodle is not fully compatible with safe mode, please ask server administrator to turn it off. Running Moodle under safe mode is not supported, please expect various problems if you do so.';
|
||||
$string['setupsearchengine'] = 'Setup search engine';
|
||||
|
||||
@@ -389,6 +389,7 @@ $string['loginasnoenrol'] = 'You cannot use enrol or unenrol when in course "Log
|
||||
$string['loginasonecourse'] = 'You cannot enter this course.<br /> You have to terminate the "Login as" session before entering any other course.';
|
||||
$string['maxbytesfile'] = 'The file {$a->file} is too large. The maximum size you can upload is {$a->size}.';
|
||||
$string['maxareabytes'] = 'The file is larger than the space remaining in this area.';
|
||||
$string['maxdraftitemids'] = 'Due to uploading a high volume of files, your file uploads are temporarily limited. Please try again after a few seconds.';
|
||||
$string['messageundeliveredbynotificationsettings'] = 'The message could not be sent because personal messages between users (in Notification settings) has been disabled by a site administrator.';
|
||||
$string['messagingdisable'] = 'Messaging is disabled on this site';
|
||||
$string['mimetexisnotexist'] = 'Your system is not configured to run mimeTeX. You need to obtain the C source from <a href="https://www.forkosh.com/mimetex.zip">https://www.forkosh.com/mimetex.zip</a>, compile it and put the executable into your moodle/filter/tex/ directory.';
|
||||
|
||||
+1
-1
@@ -118,7 +118,7 @@ $string['roleassignmentsnumber'] = 'Number of role assignments ({$a})';
|
||||
$string['search'] = 'Search';
|
||||
$string['sendingsize'] = 'Please wait the course file is uploading ({$a->total}Mb)...';
|
||||
$string['sendfollowinginfo'] = 'More information';
|
||||
$string['sendfollowinginfo_help'] = 'The following information will be sent to contribute to overall statistics only. It will not be made public on any site listing.';
|
||||
$string['sendfollowinginfo_help'] = 'The following information will be sent to Moodle each time your site registration is updated (by default weekly, when the \'Site registration\' scheduled task is run). The information contributes to overall statistics only and will not be made public on any site listing.';
|
||||
$string['sent'] = '...finished';
|
||||
$string['siteadmin'] = 'Administrator';
|
||||
$string['siteadmin_help'] = 'The full name of the site administrator.';
|
||||
|
||||
@@ -63,8 +63,8 @@ class site_registration_form extends \moodleform {
|
||||
'regioncode' => '-', // Not supported yet.
|
||||
'language' => explode('_', current_language())[0],
|
||||
'geolocation' => '',
|
||||
'emailalert' => 1,
|
||||
'commnews' => 1,
|
||||
'emailalert' => 0,
|
||||
'commnews' => 0,
|
||||
'policyagreed' => 0
|
||||
|
||||
]);
|
||||
@@ -138,15 +138,14 @@ class site_registration_form extends \moodleform {
|
||||
$mform->hideIf('contactable', 'privacy', 'eq', registration::HUB_SITENOTPUBLISHED);
|
||||
unset($options);
|
||||
|
||||
$this->add_select_with_email('emailalert', 'siteregistrationemail', [
|
||||
0 => get_string('registrationno'),
|
||||
1 => get_string('registrationyes'),
|
||||
]);
|
||||
$this->add_checkbox_with_email('emailalert', 'siteregistrationemail', false, get_string('registrationyes'));
|
||||
|
||||
$this->add_select_with_email('commnews', 'sitecommnews', [
|
||||
0 => get_string('sitecommnewsno', 'hub'),
|
||||
1 => get_string('sitecommnewsyes', 'hub'),
|
||||
], in_array('commnews', $highlightfields));
|
||||
$this->add_checkbox_with_email(
|
||||
'commnews',
|
||||
'sitecommnews',
|
||||
in_array('commnews', $highlightfields),
|
||||
get_string('sitecommnewsyes', 'hub')
|
||||
);
|
||||
|
||||
// TODO site logo.
|
||||
$mform->addElement('hidden', 'imageurl', ''); // TODO: temporary.
|
||||
@@ -228,6 +227,38 @@ class site_registration_form extends \moodleform {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Add yes/no checkbox with additional checkbox allowing to specify another email
|
||||
*
|
||||
* @param string $elementname
|
||||
* @param string $stridentifier
|
||||
* @param bool $highlight highlight as a new field
|
||||
* @param string $checkboxtext The text to show after the text.
|
||||
*/
|
||||
protected function add_checkbox_with_email($elementname, $stridentifier, $highlight = false, string $checkboxtext = '') {
|
||||
$mform = $this->_form;
|
||||
|
||||
$group = [
|
||||
$mform->createElement('advcheckbox', $elementname, '', $checkboxtext, ['class' => 'pt-2']),
|
||||
$mform->createElement('static', $elementname . 'sep', '', '<br/>'),
|
||||
$mform->createElement('advcheckbox', $elementname . 'newemail', '', get_string('usedifferentemail', 'hub'),
|
||||
['onchange' => "this.form.elements['{$elementname}email'].focus();"]),
|
||||
$mform->createElement('text', $elementname . 'email', get_string('email'))
|
||||
];
|
||||
|
||||
$element = $mform->addElement('group', $elementname . 'group', get_string($stridentifier, 'hub'), $group, '', false);
|
||||
if ($highlight) {
|
||||
$element->setAttributes(['class' => $element->getAttribute('class') . ' needsconfirmation mark']);
|
||||
}
|
||||
$mform->hideif($elementname . 'email', $elementname, 'eq', 0);
|
||||
$mform->hideif($elementname . 'newemail', $elementname, 'eq', 0);
|
||||
$mform->hideif($elementname . 'email', $elementname . 'newemail', 'notchecked');
|
||||
$mform->setType($elementname, PARAM_INT);
|
||||
$mform->setType($elementname . 'email', PARAM_RAW_TRIMMED); // E-mail will be validated in validation().
|
||||
$mform->addHelpButton($elementname . 'group', $stridentifier, 'hub');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Validation of the form data
|
||||
*
|
||||
|
||||
@@ -61,7 +61,7 @@ class provider implements
|
||||
* @param int $userid The userid of the user whose data is to be exported.
|
||||
*/
|
||||
public static function export_user_preferences(int $userid) {
|
||||
$preference = get_user_preferences('htmleditor');
|
||||
$preference = get_user_preferences('htmleditor', null, $userid);
|
||||
if (!empty($preference)) {
|
||||
$desc = get_string('privacy:preference:htmleditor', 'core_editor',
|
||||
get_string('pluginname', "editor_{$preference}"));
|
||||
|
||||
@@ -53,14 +53,19 @@ class core_editor_privacy_provider_testcase extends \core_privacy\tests\provider
|
||||
* When preference exists but is empty, there should be no export.
|
||||
*/
|
||||
public function test_empty_preference() {
|
||||
global $USER;
|
||||
|
||||
$this->resetAfterTest();
|
||||
|
||||
// Create test user, add some preferences.
|
||||
$user = $this->getDataGenerator()->create_user();
|
||||
$this->setUser($user);
|
||||
|
||||
set_user_preference('htmleditor', '', $user);
|
||||
|
||||
// Switch to admin user (so we can validate preferences of the correct user are being exported).
|
||||
$this->setAdminUser();
|
||||
|
||||
set_user_preference('htmleditor', '');
|
||||
|
||||
provider::export_user_preferences($USER->id);
|
||||
// Export test users preferences.
|
||||
provider::export_user_preferences($user->id);
|
||||
$this->assertFalse(writer::with_context(\context_system::instance())->has_any_data());
|
||||
}
|
||||
|
||||
@@ -68,13 +73,19 @@ class core_editor_privacy_provider_testcase extends \core_privacy\tests\provider
|
||||
* When an editor is set, the name of that editor will be reported.
|
||||
*/
|
||||
public function test_editor_atto() {
|
||||
global $USER;
|
||||
$this->resetAfterTest();
|
||||
$this->setAdminUser();
|
||||
|
||||
// Create test user, add some preferences.
|
||||
$user = $this->getDataGenerator()->create_user();
|
||||
$this->setUser($user);
|
||||
|
||||
set_user_preference('htmleditor', 'atto');
|
||||
|
||||
provider::export_user_preferences($USER->id);
|
||||
// Switch to admin user (so we can validate preferences of the correct user are being exported).
|
||||
$this->setAdminUser();
|
||||
|
||||
// Export test users preferences.
|
||||
provider::export_user_preferences($user->id);
|
||||
$this->assertTrue(writer::with_context(\context_system::instance())->has_any_data());
|
||||
|
||||
$prefs = writer::with_context(\context_system::instance())->get_user_preferences('core_editor');
|
||||
|
||||
+60
-1
@@ -40,6 +40,16 @@ define('IGNORE_FILE_MERGE', -1);
|
||||
*/
|
||||
define('FILE_AREA_MAX_BYTES_UNLIMITED', -1);
|
||||
|
||||
/**
|
||||
* Capacity of the draft area bucket when using the leaking bucket technique to limit the draft upload rate.
|
||||
*/
|
||||
define('DRAFT_AREA_BUCKET_CAPACITY', 50);
|
||||
|
||||
/**
|
||||
* Leaking rate of the draft area bucket when using the leaking bucket technique to limit the draft upload rate.
|
||||
*/
|
||||
define('DRAFT_AREA_BUCKET_LEAK', 0.2);
|
||||
|
||||
require_once("$CFG->libdir/filestorage/file_exceptions.php");
|
||||
require_once("$CFG->libdir/filestorage/file_storage.php");
|
||||
require_once("$CFG->libdir/filestorage/zip_packer.php");
|
||||
@@ -390,7 +400,7 @@ function file_get_unused_draft_itemid() {
|
||||
* @return string|null returns string if $text was passed in, the rewritten $text is returned. Otherwise NULL.
|
||||
*/
|
||||
function file_prepare_draft_area(&$draftitemid, $contextid, $component, $filearea, $itemid, array $options=null, $text=null) {
|
||||
global $CFG, $USER, $CFG;
|
||||
global $CFG, $USER;
|
||||
|
||||
$options = (array)$options;
|
||||
if (!isset($options['subdirs'])) {
|
||||
@@ -606,6 +616,55 @@ function file_is_draft_area_limit_reached($draftitemid, $areamaxbytes, $newfiles
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether a user has reached their draft area upload rate.
|
||||
*
|
||||
* @param int $userid The user id
|
||||
* @return bool
|
||||
*/
|
||||
function file_is_draft_areas_limit_reached(int $userid): bool {
|
||||
global $CFG;
|
||||
|
||||
$capacity = $CFG->draft_area_bucket_capacity ?? DRAFT_AREA_BUCKET_CAPACITY;
|
||||
$leak = $CFG->draft_area_bucket_leak ?? DRAFT_AREA_BUCKET_LEAK;
|
||||
|
||||
$since = time() - floor($capacity / $leak); // The items that were in the bucket before this time are already leaked by now.
|
||||
// We are going to be a bit generous to the user when using the leaky bucket
|
||||
// algorithm below. We are going to assume that the bucket is empty at $since.
|
||||
// We have to do an assumption here unless we really want to get ALL user's draft
|
||||
// items without any limit and put all of them in the leaking bucket.
|
||||
// I decided to favour performance over accuracy here.
|
||||
|
||||
$fs = get_file_storage();
|
||||
$items = $fs->get_user_draft_items($userid, $since);
|
||||
$items = array_reverse($items); // So that the items are sorted based on time in the ascending direction.
|
||||
|
||||
// We only need to store the time that each element in the bucket is going to leak. So $bucket is array of leaking times.
|
||||
$bucket = [];
|
||||
foreach ($items as $item) {
|
||||
$now = $item->timemodified;
|
||||
// First let's see if items can be dropped from the bucket as a result of leakage.
|
||||
while (!empty($bucket) && ($now >= $bucket[0])) {
|
||||
array_shift($bucket);
|
||||
}
|
||||
|
||||
// Calculate the time that the new item we put into the bucket will be leaked from it, and store it into the bucket.
|
||||
if ($bucket) {
|
||||
$bucket[] = max($bucket[count($bucket) - 1], $now) + (1 / $leak);
|
||||
} else {
|
||||
$bucket[] = $now + (1 / $leak);
|
||||
}
|
||||
}
|
||||
|
||||
// Recalculate the bucket's content based on the leakage until now.
|
||||
$now = time();
|
||||
while (!empty($bucket) && ($now >= $bucket[0])) {
|
||||
array_shift($bucket);
|
||||
}
|
||||
|
||||
return count($bucket) >= $capacity;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get used space of files
|
||||
* @global moodle_database $DB
|
||||
|
||||
@@ -663,6 +663,41 @@ class file_storage {
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the file area item ids and their updatetime for a user's draft uploads, sorted by updatetime DESC.
|
||||
*
|
||||
* @param int $userid user id
|
||||
* @param int $updatedsince only return draft areas updated since this time
|
||||
* @param int $lastnum only return the last specified numbers
|
||||
* @return array
|
||||
*/
|
||||
public function get_user_draft_items(int $userid, int $updatedsince = 0, int $lastnum = 0): array {
|
||||
global $DB;
|
||||
|
||||
$params = [
|
||||
'component' => 'user',
|
||||
'filearea' => 'draft',
|
||||
'contextid' => context_user::instance($userid)->id,
|
||||
];
|
||||
|
||||
$updatedsincesql = '';
|
||||
if ($updatedsince) {
|
||||
$updatedsincesql = 'AND f.timemodified > :time';
|
||||
$params['time'] = $updatedsince;
|
||||
}
|
||||
$sql = "SELECT itemid,
|
||||
MAX(f.timemodified) AS timemodified
|
||||
FROM {files} f
|
||||
WHERE component = :component
|
||||
AND filearea = :filearea
|
||||
AND contextid = :contextid
|
||||
$updatedsincesql
|
||||
GROUP BY itemid
|
||||
ORDER BY MAX(f.timemodified) DESC";
|
||||
|
||||
return $DB->get_records_sql($sql, $params, 0, $lastnum);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns array based tree structure of area files
|
||||
*
|
||||
|
||||
@@ -63,9 +63,7 @@ class provider implements
|
||||
* @param int $userid The ID of the user whose data is to be exported.
|
||||
*/
|
||||
public static function export_user_preferences(int $userid) {
|
||||
|
||||
$preference = get_user_preferences('filemanager_recentviewmode');
|
||||
|
||||
$preference = get_user_preferences('filemanager_recentviewmode', null, $userid);
|
||||
if ($preference !== null) {
|
||||
switch ($preference) {
|
||||
case 1:
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
use core_form\privacy\provider;
|
||||
use core_privacy\local\request\writer;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
@@ -43,7 +44,7 @@ class core_form_privacy_provider_testcase extends \core_privacy\tests\provider_t
|
||||
$this->resetAfterTest();
|
||||
$this->setAdminUser();
|
||||
|
||||
\core_form\privacy\provider::export_user_preferences($USER->id);
|
||||
provider::export_user_preferences($USER->id);
|
||||
$this->assertFalse(writer::with_context(\context_system::instance())->has_any_data());
|
||||
}
|
||||
|
||||
@@ -55,13 +56,19 @@ class core_form_privacy_provider_testcase extends \core_privacy\tests\provider_t
|
||||
* @param string $desc Text describing the preference
|
||||
*/
|
||||
public function test_filemanager_recentviewmode(string $val, string $desc) {
|
||||
global $USER;
|
||||
$this->resetAfterTest();
|
||||
|
||||
// Create test user, add some preferences.
|
||||
$user = $this->getDataGenerator()->create_user();
|
||||
$this->setUser($user);
|
||||
|
||||
set_user_preference('filemanager_recentviewmode', $val, $user);
|
||||
|
||||
// Switch to admin user (so we can validate preferences of the correct user are being exported).
|
||||
$this->setAdminUser();
|
||||
|
||||
set_user_preference('filemanager_recentviewmode', $val);
|
||||
|
||||
core_form\privacy\provider::export_user_preferences($USER->id);
|
||||
// Export test users preferences.
|
||||
provider::export_user_preferences($user->id);
|
||||
$this->assertTrue(writer::with_context(\context_system::instance())->has_any_data());
|
||||
|
||||
$prefs = writer::with_context(\context_system::instance())->get_user_preferences('core_form');
|
||||
|
||||
Binary file not shown.
@@ -5,52 +5,52 @@
|
||||
<json>
|
||||
<![CDATA[
|
||||
{
|
||||
"fontFamily": "h5p-core-21",
|
||||
"fontFamily": "h5p-core",
|
||||
"description": "Font generated by IcoMoon.",
|
||||
"majorVersion": 1,
|
||||
"minorVersion": 1,
|
||||
"version": "Version 1.1",
|
||||
"fontId": "h5p-core-21",
|
||||
"psName": "h5p-core-21",
|
||||
"fontId": "h5p-core",
|
||||
"psName": "h5p-core",
|
||||
"subFamily": "Regular",
|
||||
"fullName": "h5p-core-21"
|
||||
"fullName": "h5p-core"
|
||||
}
|
||||
]]>
|
||||
</json>
|
||||
</metadata>
|
||||
<defs>
|
||||
<font id="h5p-core-21" horiz-adv-x="1024">
|
||||
<font id="h5p-core" horiz-adv-x="1024">
|
||||
<font-face units-per-em="1024" ascent="960" descent="-64" />
|
||||
<missing-glyph horiz-adv-x="1024" />
|
||||
<glyph unicode=" " horiz-adv-x="512" d="" />
|
||||
<glyph unicode="" glyph-name="arrow-down" data-tags="arrow-down" d="M234 389.669h556l-278-278z" />
|
||||
<glyph unicode="" glyph-name="arrow-left" data-tags="arrow-left" d="M381-11.331v524l262-262z" />
|
||||
<glyph unicode="" glyph-name="colapse" data-tags="colapse" d="M512 447.336l256-256-60-60-196 196-196-196-60 60z" />
|
||||
<glyph unicode="" glyph-name="expand" data-tags="expand" d="M708 423.336l60-60-256-256-256 256 60 60 196-196z" />
|
||||
<glyph unicode="" glyph-name="move" data-tags="move" d="M386.662 725.063h71.27v-71.27h-71.27v71.27zM566.067 725.063h71.27v-71.27h-71.27v71.27zM386.662 568.8h71.27v-71.27h-71.27v71.27zM566.067 568.8h71.27v-71.27h-71.27v71.27zM386.662 412.435h71.27v-71.27h-71.27v71.27zM566.067 412.435h71.27v-71.27h-71.27v71.27zM386.662 256.173h71.27v-71.27h-71.27v71.27zM566.067 256.173h71.27v-71.27h-71.27v71.27zM386.662 99.808h71.27v-71.27h-71.27v71.27zM566.067 99.808h71.27v-71.27h-71.27v71.27zM386.662-56.454h71.27v-71.27h-71.27v71.27zM566.067-56.454h71.27v-71.27h-71.27v71.27z" />
|
||||
<glyph unicode="" glyph-name="check-mark" data-tags="check-mark" d="M454.299 245.924l-116.917 116.917-84.781-84.707 201.696-201.697 317.097 317.097-84.781 84.706z" />
|
||||
<glyph unicode="" glyph-name="arrow-up-circle" data-tags="arrow-up-circle" d="M512 606.057c-148.616 0-264.722-120.75-260.077-269.367 0-125.395 88.241-232.212 208.991-255.434v213.636h-92.885c-13.933 0-13.933 9.288-9.288 18.577l139.327 171.838c4.645 9.288 13.933 9.288 23.221 4.645 0 0 4.645-4.645 4.645-4.645l139.327-171.838c9.288-9.288 4.645-18.577-9.288-18.577h-92.885v-213.636c143.972 32.51 232.212 171.838 199.703 315.808-23.221 120.75-130.039 204.347-250.789 208.991z" />
|
||||
<glyph unicode="" glyph-name="info-circle" data-tags="info-circle" d="M512 601.601c-144.077 0-260.266-116.191-260.266-260.266s116.191-260.266 260.266-260.266 260.266 116.191 260.266 260.266v0c0 139.429-116.191 255.619-260.266 260.266zM470.171 550.478h88.305v-69.714h-88.305v69.714zM600.305 160.078h-181.257v51.123h51.123v162.666h-51.123v51.123h139.429v-218.438h46.477l-4.648-46.477z" />
|
||||
<glyph unicode="" glyph-name="search" data-tags="search" d="M772.098 125.51l-110.68 110.68c71.943 99.612 49.806 243.494-49.806 315.437s-243.494 44.27-315.437-55.339c-71.943-99.612-49.806-243.494 49.806-315.437 77.475-55.339 182.623-55.339 260.098 0l110.68-110.68c5.533-5.533 11.068-5.533 16.601 0 0 0 0 0 0 0l33.205 33.205c11.068 5.533 11.068 16.601 5.533 22.137 0 0 0 0 0 0zM478.795 202.985c-88.544 0-160.486 71.943-160.486 160.486s71.943 160.486 160.486 160.486 160.486-71.943 160.486-160.486-71.943-160.486-160.486-160.486v0z" />
|
||||
<glyph unicode="" glyph-name="fullscreen" data-tags="fullscreen" d="M368.55 490.521c5.737 5.737 0 5.737-5.737 5.737l-103.284 11.476c-5.737 5.737-11.476 0-11.476-5.737l11.476-109.021c0-5.737 5.737-5.737 5.737-5.737l103.284 103.284zM293.959 427.403l63.118-63.118c5.737-5.737 11.476-5.737 17.213 0l22.953 22.953c5.737 5.737 5.737 11.476 0 17.213l-63.118 57.379-40.166-34.429zM787.42 387.237c5.737-5.737 5.737 0 5.737 5.737l11.476 109.021c0 5.737-5.737 11.476-11.476 11.476l-109.021-11.476c-5.737 0-5.737-5.737-5.737-5.737l109.021-109.021zM724.305 461.832l-63.118-63.118c-5.737-5.737-5.737-11.476 0-17.213l22.953-22.953c5.737-5.737 11.476-5.737 17.213 0l63.118 63.118-40.166 40.166zM689.876 180.672c-5.737-5.737 0-5.737 5.737-5.737l109.021-11.476c5.737 0 11.476 5.737 11.476 11.476l-17.213 103.284c0 5.737-5.737 5.737-5.737 5.737l-103.284-103.284zM758.731 249.527l-63.118 63.118c-5.737 5.737-11.476 5.737-17.213 0l-22.953-22.953c-5.737-5.737-5.737-11.476 0-17.213l63.118-63.118 40.166 40.166zM265.269 283.956c-5.737 5.737-5.737 0-5.737-5.737l-11.476-109.021c0-5.737 5.737-11.476 11.476-11.476l109.021 11.476c5.737 0 5.737 5.737 5.737 5.737l-109.021 109.021zM334.124 209.362l63.118 63.118c5.737 5.737 5.737 11.476 0 17.213l-22.953 22.953c-5.737 5.737-11.476 5.737-17.213 0l-63.118-63.118 40.166-40.166zM161.985 593.805v-499.201h722.979v499.201h-722.979zM844.799 134.77h-636.911v413.13h636.911v-413.13z" />
|
||||
<glyph unicode="" glyph-name="h5p" data-tags="h5p" d="M934.072 489.192c-22.319 16.738-50.216 27.897-89.273 27.897h-139.487v-66.954h-156.225l-11.159-55.795c11.159 5.579 27.897 11.159 39.057 11.159s22.319 0 33.476 0c33.476 0 66.954-11.159 89.273-33.476s33.476-50.216 33.476-83.692c0-22.319-5.579-44.635-16.738-66.954s-27.897-39.057-50.216-50.216c-5.579-5.579-16.738 0-22.319-11.159h117.17v133.908h66.954c44.635 0 78.113 11.159 100.43 27.897 22.319 22.319 33.476 50.216 33.476 83.692 0 39.057-11.159 66.954-27.897 83.692v0zM839.221 377.603c-11.159-5.579-22.319-11.159-44.635-11.159h-33.476v83.692h39.057c22.319 0 33.476-5.579 44.635-11.159 5.579-5.579 11.159-16.738 11.159-27.897 0-16.738-5.579-27.897-16.738-33.476v0zM565.826 338.546c-16.738 0-33.476-11.159-44.635-27.897l-94.851 16.738 44.635 195.281h-94.851v-150.646h-117.17v150.646h-111.589v-362.667h111.589v133.908h117.17v-133.908h139.487c-16.738 11.159-33.476 11.159-44.635 22.319s-22.319 22.319-27.897 33.476c-5.579 11.159-11.159 22.319-16.738 39.057l94.851 16.738c5.579-16.738 22.319-27.897 44.635-27.897 27.897 0 50.216 22.319 50.216 50.216 0 22.319-22.319 44.635-50.216 44.635v0z" />
|
||||
<glyph unicode="" glyph-name="rights-of-use" data-tags="rights-of-use" d="M899.611 329.519c0-5.907 0-5.907 0-5.907-23.631-23.631-47.261-35.448-76.799-41.355-11.813 0-23.631-5.907-35.448-5.907s-17.724 0-29.537 0c0 0-5.907 0-5.907 5.907-64.985 59.079-135.877 118.153-200.863 183.139 0 0-5.907 0-5.907 0-23.631-5.907-47.261-11.813-70.892-17.724s-53.168 0-76.799 11.813c-17.724 11.813-23.631 17.724-29.537 35.448-5.907 5.907 0 23.631 11.813 23.631 41.355 11.813 88.616 29.537 129.971 47.261 11.813 5.907 29.537 5.907 41.355 5.907 5.907 0 11.813-5.907 11.813-5.907 41.355-17.724 82.709-29.537 124.060-47.261 0 0 5.907 0 5.907 0 29.537 5.907 64.985 17.724 94.523 23.631 5.907 0 5.907 0 5.907 0l106.34-212.676zM291.12 335.429c17.724 11.813 35.448 5.907 53.168-11.813 11.813-11.813 11.813-29.537 5.907-47.261 17.724 5.907 35.448-5.907 41.355-17.724 11.813-17.724 5.907-35.448-5.907-47.261 5.907 0 11.813 0 17.724 0 11.813-5.907 23.631-11.813 29.537-29.537s0-29.537-5.907-35.448c-5.907-5.907-11.813-11.813-17.724-17.724s-11.813-11.813-17.724-17.724-35.448-17.724-53.168 0c-29.537 29.537-53.168 64.985-82.709 94.523-17.724 23.631-35.448 41.355-47.261 64.985-5.907 11.813-11.813 17.724-11.813 29.537 0 5.907 0 17.724 5.907 23.631 11.813 11.813 17.724 17.724 29.537 29.537 17.724 17.724 47.261 11.813 64.985-5.907-5.907 0-5.907-5.907-5.907-11.813v0zM438.811 128.66l29.537-29.537c17.724-17.724 47.261-11.813 59.079 5.907l-5.907 5.907c-23.631 23.631-47.261 47.261-70.892 70.892-5.907 5.907-5.907 5.907-5.907 11.813s5.907 5.907 11.813 11.813c5.907 0 11.813 0 11.813-5.907 11.813-11.813 29.537-29.537 47.261-47.261 11.813-11.813 29.537-29.537 47.261-47.261 5.907-11.813 17.724-11.813 29.537-11.813 11.813 5.907 23.631 11.813 29.537 23.631 0 5.907 0 5.907 0 5.907-41.355 41.355-88.616 82.709-129.971 129.971-5.907 5.907-5.907 5.907-5.907 11.813 0 11.813 11.813 11.813 23.631 5.907 0 0 5.907 0 5.907-5.907 41.355-41.355 88.616-88.616 129.971-129.971 5.907-5.907 5.907-5.907 5.907-5.907 17.724 0 35.448 17.724 35.448 35.448 0 5.907 0 5.907 0 5.907-47.261 47.261-100.429 100.429-147.691 147.691-5.907 5.907-5.907 5.907-5.907 11.813s5.907 11.813 5.907 11.813c5.907 0 11.813 0 11.813-5.907 5.907-5.907 5.907-5.907 11.813-11.813 35.448-35.448 70.892-70.892 106.34-106.34 11.813-11.813 23.631-23.631 29.537-29.537 0 0 5.907-5.907 5.907 0 23.631 5.907 35.448 29.537 29.537 53.168h35.448c0 0 0 0 0 0 0-5.907 0-17.724 0-23.631-5.907-29.537-23.631-47.261-53.168-59.079 0 0-5.907 0-5.907-5.907-11.813-29.537-35.448-53.168-64.985-53.168-5.907 0-5.907 0-5.907-5.907-17.724-35.448-59.079-47.261-88.616-35.448-5.907 0-11.813 5.907-11.813 5.907-5.907-5.907-11.813-11.813-23.631-17.724-29.537-11.813-59.079-5.907-76.799 11.813-11.813 11.813-17.724 17.724-29.537 29.537 17.724 23.631 23.631 29.537 29.537 41.355v0 0zM273.396 642.628c29.537-11.813 64.985-23.631 94.523-29.537 35.448-11.813 64.985-23.631 100.429-29.537 0 0 0 0 5.907 0-17.724-5.907-35.448-11.813-47.261-17.724 0 0-5.907 0-5.907 0-47.261 11.813-94.523 23.631-135.877 41.355-5.907 0-5.907 0-5.907 0l-76.799-183.139c0-11.813 5.907-17.724 11.813-23.631s5.907-5.907 5.907-11.813c-5.907-5.907-11.813-17.724-23.631-23.631-17.724 17.724-29.537 35.448-29.537 64.985l88.616 212.676c-5.907-11.813 5.907 5.907 17.724 0v0z" />
|
||||
<glyph unicode="" glyph-name="delete-circle" data-tags="delete-circle" d="M512 601.601c-147.107 0-260.266-118.817-260.266-260.266s118.817-260.266 260.266-260.266 260.266 118.817 260.266 260.266-113.158 260.266-260.266 260.266zM653.449 262.123c5.659-5.659 5.659-16.973 0-28.29l-33.949-33.949c-5.659-5.659-16.973-5.659-28.29 0l-79.212 79.212-79.212-79.212c-5.659-5.659-16.973-5.659-28.29 0l-33.949 33.949c-5.659 5.659-5.659 16.973 0 28.29l84.871 79.212-79.212 79.212c-5.659 5.659-5.659 16.973 0 28.29l33.949 33.949c5.659 5.659 16.973 5.659 28.29 0l73.554-84.871 79.212 79.212c5.659 5.659 16.973 5.659 28.29 0l33.949-33.949c5.659-5.659 5.659-16.973 0-28.29l-79.212-73.554 79.212-79.212z" />
|
||||
<glyph unicode="" glyph-name="window" data-tags="window" d="M203.936 461.136c-5.704-5.704 0-5.704 5.704-5.704l108.394-11.41c5.704 0 11.41 5.704 11.41 11.41l-17.114 102.687c0 5.704-5.704 5.704-5.704 5.704l-102.687-102.687zM272.395 523.891l-62.752 62.752c-5.704 5.704-11.41 5.704-17.114 0l-17.114-22.821c-5.704-5.704-5.704-11.41 0-17.114l62.752-62.752 34.228 39.935zM751.605 558.119c-5.704 5.704-5.704 0-5.704-5.704l-11.41-108.394c0-5.704 5.704-11.41 11.41-11.41l108.394 11.41c5.704 0 5.704 5.704 5.704 5.704l-108.394 108.394zM814.357 483.957l62.752 62.752c5.704 5.704 5.704 11.41 0 17.114l-22.821 22.821c-5.704 5.704-11.41 5.704-17.114 0l-62.752-62.752 39.935-39.935zM848.588 221.534c5.704 5.704 0 5.704-5.704 5.704l-102.687 17.114c-5.704 0-11.41-5.704-11.41-11.41l11.41-108.394c0-5.704 5.704-5.704 5.704-5.704l102.687 102.687zM780.129 158.779l62.752-62.752c5.704-5.704 11.41-5.704 17.114 0l22.821 22.821c5.704 5.704 5.704 11.41 0 17.114l-62.752 62.752-39.935-39.935zM300.919 124.551c5.704-5.704 5.704 0 5.704 5.704l11.41 108.394c0 5.704-5.704 11.41-11.41 11.41l-108.394-11.41c-5.704 0-5.704-5.704-5.704-5.704l108.394-108.394zM238.167 193.010l-62.752-62.752c-5.704-5.704-5.704-11.41 0-17.114l22.821-22.821c5.704-5.704 11.41-5.704 17.114 0l62.752 62.752-39.935 39.935zM352.264 466.843v-239.605h347.998v239.605h-347.998zM654.622 267.172h-262.424v154.032h262.424v-154.032z" />
|
||||
<glyph unicode="" glyph-name="code" data-tags="code" d="M449.641 235.325c6.235-6.235 6.235-12.472 6.235-18.707v-62.359c0-6.235-6.235-6.235-6.235-6.235l-230.728 155.897c-6.235 6.235-6.235 12.472-6.235 18.707v49.886c0 6.235 6.235 12.472 6.235 18.707l230.728 155.897c6.235 6.235 6.235 0 6.235-6.235v-62.359c0-6.235-6.235-12.472-6.235-18.707l-162.134-112.245c-6.235-6.235-6.235-6.235 0-12.472l162.134-99.776zM736.493 341.335c6.235 6.235 6.235 6.235 0 12.472l-155.897 112.245c-6.235 6.235-6.235 12.472-6.235 18.707v62.359c0 6.235 6.235 6.235 6.235 6.235l230.728-155.897c6.235-6.235 6.235-12.472 6.235-18.707v-49.886c0-6.235-6.235-12.472-6.235-18.707l-230.728-155.897c-6.235-6.235-6.235 0-6.235 6.235v62.359c0 6.235 6.235 12.472 6.235 18.707l155.897 99.776z" />
|
||||
<glyph unicode="" glyph-name="download" data-tags="download" d="M358.941 435.525c-11.773 0-17.66-5.887-5.887-17.66l153.059-188.382c5.887-11.773 23.547-11.773 29.433 0l153.059 188.382c5.887 11.773 5.887 17.66-5.887 17.66h-323.782zM576.756 423.751v135.399c0 11.773-11.773 23.547-23.547 23.547h-70.643c-11.773 0-23.547-11.773-23.547-23.547v-141.286h117.739zM653.286 288.352c-5.887 0-17.66-5.887-23.547-11.773l-76.53-94.19c-5.887-5.887-17.66-17.66-23.547-23.547 0 0-5.887-5.887-11.773-5.887s-17.66 11.773-17.66 11.773c-5.887 5.887-17.66 17.66-23.547 23.547l-76.53 94.19c-5.887 5.887-17.66 11.773-23.547 11.773h-123.626c-5.887 0-17.66-5.887-17.66-17.66v-141.286c0-5.887 5.887-17.66 17.66-17.66h529.824c5.887 0 17.66 5.887 17.66 17.66v141.286c0 5.887-5.887 17.66-17.66 17.66l-129.513-5.887zM305.958 176.502c-17.66 0-29.433 11.773-29.433 29.433s11.773 29.433 29.433 29.433c17.66 0 29.433-11.773 29.433-29.433s-11.773-29.433-29.433-29.433v0z" />
|
||||
<glyph unicode="" glyph-name="delete" data-tags="delete" d="M620.266 341.335l134.045 134.045c10.311 10.311 10.311 30.934 0 41.245l-61.866 61.866c-10.311 10.311-30.934 10.311-41.245 0l-134.045-134.045-134.045 134.045c-10.311 10.311-30.934 10.311-41.245 0l-61.866-61.866c-10.311-10.311-10.311-30.934 0-41.245l134.045-134.045-134.045-134.045c-10.311-10.311-10.311-30.934 0-41.245l61.866-61.866c10.311-10.311 30.934-10.311 41.245 0l134.045 134.045 134.045-134.045c10.311-10.311 30.934-10.311 41.245 0l61.866 61.866c10.311 10.311 10.311 30.934 0 41.245l-134.045 134.045z" />
|
||||
<glyph unicode="" glyph-name="edit-image" data-tags="edit-image" d="M300.237 621.639c69.018 23.142 133.325 14.234 189.133-33.28 56.627-48.128 77.619-110.592 63.181-183.808-2.355-12.186 0.307-19.456 8.704-27.853 93.901-93.389 156.774-156.467 250.47-250.163 5.427-5.427 10.957-10.854 15.667-16.896 39.424-50.278 16.794-124.006-44.237-142.029-36.966-10.957-68.403 0-95.334 27.034-95.642 96.051-160.973 160.973-256.614 257.024-6.963 6.963-12.8 8.909-22.63 6.758-117.76-26.317-229.171 60.826-231.731 181.453-0.614 26.419 3.584 52.326 15.974 77.926 34.816-34.816 68.506-67.789 101.274-101.786 10.445-10.752 20.992-15.36 36.045-15.36 14.643 0 25.19 3.891 34.816 14.848 10.752 12.39 23.040 23.347 34.611 35.021 14.336 14.438 14.336 46.080-0.205 60.518-35.123 35.226-70.349 70.349-106.598 106.496 3.891 2.253 5.632 3.482 7.475 4.096zM703.386 63.559c-0.41-24.269 20.685-45.466 44.851-45.158 23.757 0.41 44.032 20.992 43.93 44.544-0.102 23.757-20.275 44.032-44.237 44.134-23.859 0.307-44.237-19.661-44.544-43.52z" />
|
||||
<glyph unicode="" glyph-name="hourglass" data-tags="hourglass" d="M733.286-10.579c-147.763 0-295.526 0-443.29 0 0 2.048 0.102 4.096 0 6.144-0.307 13.824-1.024 32.666-0.922 46.49 0.41 39.731 6.861 78.131 19.046 115.2 17.203 52.224 43.725 96.256 81.306 130.355 4.506 4.096 9.216 7.885 13.722 11.776-0.205 0.717-0.307 1.126-0.41 1.229-1.331 1.229-2.765 2.355-4.198 3.584-28.058 22.63-50.688 51.405-68.403 85.606-30.618 59.085-43.52 123.597-41.165 192.614 0.205 7.168 0.614 18.33 0.922 25.498 147.763 0 295.526 0 443.29 0 0.205-1.331 0.512-2.662 0.614-3.994 2.662-36.966 1.229-77.722-5.939-113.869-14.336-72.909-44.544-133.837-95.027-179.405-4.096-3.686-8.294-7.066-12.39-10.547 0.205-0.717 0.307-1.126 0.512-1.331 0.819-0.717 1.638-1.434 2.458-2.15 42.189-33.894 71.68-79.872 90.931-135.782 11.776-34.202 18.637-69.837 20.070-106.701 0.819-19.763-0.614-44.851-1.126-64.717zM687.309 32.634c0 6.554 0.205 12.493 0 18.432-1.331 37.581-7.27 74.138-19.866 108.749-17.92 49.562-45.568 88.269-88.678 108.646-2.458 1.126-2.97 3.072-2.97 5.837 0.102 16.691 0.102 33.485 0 50.176 0 3.994 1.331 5.427 4.096 6.963 9.114 5.325 18.432 10.24 26.829 16.896 29.696 23.552 49.152 56.934 62.362 95.744 10.342 30.413 15.77 62.259 17.818 94.822 0.614 9.114 0.102 18.227 0.102 27.546-116.634 0-233.574 0-351.027 0 0.307-8.704 0.614-16.998 1.024-25.395 1.946-37.274 8.499-73.216 21.504-107.213 18.125-47.104 45.261-83.558 86.528-103.117 2.253-1.024 2.867-2.662 2.867-5.427-0.102-17.203-0.102-34.509 0-51.712 0-3.072-1.024-4.506-3.277-5.632-5.632-2.867-11.366-5.734-16.691-9.216-34.304-22.733-56.832-57.754-71.987-100.147-12.493-35.123-18.125-71.987-19.661-109.875-0.205-5.325 0-10.752 0-16.282 117.35 0.205 234.189 0.205 351.027 0.205zM410.214 451.962c68.096 0 135.373 0 203.674 0-3.789-6.554-7.168-12.595-10.752-18.227-10.957-16.998-24.269-30.618-39.731-41.472s-27.75-25.293-32.768-46.592c-1.638-6.963-2.765-14.336-2.867-21.606-0.307-17.203-0.205-34.406 0.307-51.712 0.717-28.058 12.493-48.947 32.154-62.566 43.008-30.003 65.843-75.878 75.776-132.506 0.307-1.638 0.307-3.379 0.614-5.53-83.149 0-166.093 0-249.242 0 2.662 20.685 7.885 40.346 15.462 59.085 13.312 32.973 32.768 59.187 59.494 77.722 16.589 11.469 28.365 27.955 32.358 50.995 0.819 4.813 1.331 9.83 1.434 14.746 0.102 18.637 0.614 37.274-0.205 55.808-1.126 24.678-11.981 43.213-28.57 57.139-9.216 7.782-18.944 14.746-27.648 23.142-11.981 11.162-21.197 25.395-29.491 41.574z" />
|
||||
<glyph unicode="" glyph-name="plus-icon" data-tags="plus-icon" d="M768 285.015c0-19.323-15.664-34.987-34.987-34.987h-151.040v-151.467c0-19.323-15.664-34.987-34.987-34.987h-69.547c-19.323 0-34.987 15.664-34.987 34.987v151.467h-151.467c-19.323 0-34.987 15.664-34.987 34.987v69.547c0 19.323 15.664 34.987 34.987 34.987h151.467v151.467c0 19.323 15.664 34.987 34.987 34.987h69.547c19.323 0 34.987-15.664 34.987-34.987v-151.467h151.467c19.323 0 34.987-15.664 34.987-34.987z" />
|
||||
<glyph unicode="" glyph-name="video-upload-icon" data-tags="video-upload-icon" d="M384 328.535v-128c0-21.333 21.333-42.667 42.667-42.667h128c21.333 0 42.667 17.067 42.667 42.667v128c0 21.333-17.067 42.667-42.667 42.667h-128c-21.333 0-42.667-17.067-42.667-42.667zM785.067 499.201l-102.4 106.667c-12.8 12.8-38.4 21.333-55.467 21.333h-140.8l21.333-42.667h89.6v-136.533c0-17.067 12.8-29.867 29.867-29.867h140.8v-341.333h-426.667v328.533h-42.667v-341.333c0-17.067 12.8-29.867 29.867-29.867h448c17.067 0 29.867 12.8 29.867 29.867v384c4.267 17.067-8.533 38.4-21.333 51.2zM640 456.535v123.733c4.267 0 12.8-4.267 12.8-8.533l102.4-102.4c4.267-4.267 4.267-8.533 8.533-12.8h-123.733zM725.333 166.401v196.267c0 4.267-4.267 8.533-8.533 8.533s-8.533 0-12.8-4.267l-89.6-89.6v-29.867l89.6-89.6c8.533-4.267 8.533 0 12.8 0 4.267 4.267 8.533 4.267 8.533 8.533zM349.867 473.601v136.533l59.733-59.733c8.533-8.533 17.067-4.267 25.6 0l12.8 12.8c8.533 8.533 8.533 17.067 0 25.6l-115.2 106.667c-8.533 8.533-17.067 8.533-21.333 0l-115.2-110.933c-4.267-8.533-4.267-17.067 0-25.6l12.8-12.8c8.533-8.533 17.067-8.533 21.333 0l59.733 59.733v-136.533c0-8.533 8.533-17.067 17.067-17.067h25.6c0 0 17.067 8.533 17.067 21.333z" />
|
||||
<glyph unicode="" glyph-name="play-icon" data-tags="play-icon" d="M392.533 597.335c81.067 46.933 187.733 46.933 273.067 0 42.667-25.6 72.533-55.467 98.133-98.133 72.533-128 29.867-294.4-98.133-371.2-128-72.533-294.4-29.867-371.2 98.133-46.933 81.067-46.933 187.733 0 273.067 21.333 42.667 55.467 72.533 98.133 98.133zM661.333 345.601c12.8 8.533 12.8 29.867 0 38.4l-192 110.933c-8.533 4.267-12.8 4.267-21.333 0s-12.8-12.8-12.8-21.333v-226.133c0-8.533 4.267-17.067 12.8-21.333s17.067-4.267 21.333 0l192 119.467z" />
|
||||
<glyph unicode="" glyph-name="copy" data-tags="copy" d="M722.133 561.201h-247.733c-65.867 0-119.2-53.333-119.2-119.2v-288.533c0-65.867 53.333-119.2 119.2-119.2h247.867c65.867 0 119.2 53.333 119.2 119.2v288.533c-0.267 65.867-53.467 119.2-119.333 119.2zM778.533 156.534c0-31.333-25.067-56.4-56.4-56.4h-247.867c-31.333 0-56.4 25.067-56.4 56.4v285.467c0 31.333 25.067 56.4 56.4 56.4h247.733c31.333 0 56.4-25.067 56.4-56.4v-285.467zM245.2 326.001v288.533c0 31.333 25.067 56.4 56.4 56.4h247.733c31.333 0 56.4-25.067 56.4-56.4v-18.8h62.667v18.8c0 65.867-53.333 119.2-119.2 119.2h-247.467c-65.867 0-119.2-53.333-119.2-119.2v-288.533c0-65.867 53.333-119.2 119.2-119.2h18.8v62.667h-18.8c-31.467-3.067-56.533 22-56.533 56.533zM681.2 360.534h-163.067c-18.8 0-31.333 12.533-31.333 31.333s12.533 31.333 31.333 31.333h163.067c18.8 0 31.333-12.533 31.333-31.333s-15.6-31.333-31.333-31.333zM681.2 266.401h-163.067c-18.8 0-31.333 12.533-31.333 31.333s12.533 31.333 31.333 31.333h163.067c18.8 0 31.333-12.533 31.333-31.333s-15.6-31.333-31.333-31.333zM681.2 172.268h-163.067c-18.8 0-31.333 12.533-31.333 31.333s12.533 31.333 31.333 31.333h163.067c18.8 0 31.333-12.533 31.333-31.333s-15.6-31.333-31.333-31.333z" />
|
||||
<glyph unicode="" glyph-name="examples-icon" data-tags="examples-icon" d="M213.333 166.402c89.6 38.4 183.467 68.267 273.067 17.067v281.6c-68.267 46.933-157.867 55.467-234.667 12.8l-38.4-311.467zM810.667 166.402l-42.667 315.733c-72.533 38.4-166.4 34.133-234.667-17.067v-285.867c93.867 51.2 187.733 21.333 277.333-12.8zM832 520.535c-51.2 29.867-110.933 46.933-170.667 55.467-51.2 0-102.4-8.533-149.333-29.867-46.933 21.333-98.133 29.867-149.333 29.867-59.733-4.267-119.467-25.6-170.667-55.467l-64-452.267c0 0 29.867-17.067 110.933 21.333 46.933 25.6 102.4 34.133 157.867 25.6 42.667-4.267 85.333-21.333 115.2-55.467v0c29.867 34.133 72.533 51.2 115.2 55.467 55.467 4.267 106.667-4.267 157.867-29.867 81.067-38.4 110.933-21.333 110.933-21.333l-64 456.533zM793.6 115.202c-42.667 21.333-89.6 34.133-140.8 34.133-8.533 0-21.333 0-29.867 0-42.667-4.267-81.067-17.067-115.2-42.667-34.133 25.6-72.533 38.4-115.2 42.667-12.8 0-21.333 0-34.133 0-46.933 0-93.867-8.533-136.533-29.867-21.333-12.8-46.933-21.333-72.533-25.6l64 413.867c46.933 25.6 98.133 38.4 149.333 42.667 46.933 0 93.867-8.533 136.533-25.6l12.8-8.533 12.8 4.267c42.667 17.067 89.6 25.6 136.533 25.6 51.2-4.267 102.4-17.067 149.333-42.667l59.733-418.133c-29.867 8.533-51.2 17.067-76.8 29.867z" />
|
||||
<glyph unicode="" glyph-name="tutorials-icon" data-tags="tutorials-icon" d="M887.467 430.935l-375.467-110.933h-4.267l-217.6 68.267c-21.333-25.6-34.133-59.733-34.133-98.133 21.333-12.8 25.6-38.4 12.8-59.733-4.267-4.267-8.533-8.533-12.8-12.8l17.067-145.067c0-4.267 0-4.267-4.267-8.533 0 0 0 0-4.267 0h-64c-4.267 0-4.267 0-8.533 4.267 0 4.267-4.267 4.267-4.267 8.533l17.067 145.067c-12.8 8.533-17.067 21.333-17.067 34.133 0 17.067 8.533 29.867 21.333 38.4 0 38.4 12.8 76.8 34.133 110.933l-106.667 29.867c-8.533 4.267-8.533 8.533-8.533 17.067 0 4.267 4.267 4.267 4.267 4.267l375.467 119.467h4.267l375.467-123.733c4.267 0 8.533-4.267 8.533-8.533s-4.267-8.533-8.533-12.8zM725.333 234.669c4.267-46.933-93.867-85.333-213.333-85.333s-213.333 38.4-213.333 85.333l4.267 106.667 192-64c4.267 0 12.8 0 17.067 0s12.8 0 17.067 4.267l192 59.733 4.267-106.667z" />
|
||||
<glyph unicode="" glyph-name="info-important-description" data-tags="info-important-description" d="M512 697.368c-188.5 0-341.3-152.8-341.3-341.3s152.8-341.4 341.3-341.4 341.3 152.8 341.3 341.3-152.8 341.4-341.3 341.4v0zM512 43.268c-172.7 0-312.7 140-312.7 312.7s140 312.7 312.7 312.7c172.7 0 312.7-140 312.7-312.7-0.2-172.6-140.1-312.5-312.7-312.7v0zM512 605.568c-137.9 0-249.6-111.8-249.6-249.6s111.7-249.6 249.6-249.6 249.6 111.8 249.6 249.6-111.8 249.6-249.6 249.6v0z" />
|
||||
<glyph unicode="" glyph-name="icon-info" data-tags="icon-info" d="M467.2 459.522h87.467c0.028 0 0.062 0 0.095 0 6.056 0 11.499 2.629 15.248 6.808 3.979 4.15 6.419 9.769 6.419 15.957 0 0.097-0.001 0.194-0.002 0.29v70.385c0.001 0.082 0.002 0.179 0.002 0.276 0 6.188-2.44 11.806-6.409 15.946-3.759 4.19-9.201 6.819-15.257 6.819-0.033 0-0.067 0-0.1 0h-87.462c-0.028 0-0.062 0-0.095 0-6.056 0-11.499-2.629-15.248-6.808-3.979-4.15-6.419-9.769-6.419-15.957 0-0.097 0.001-0.194 0.002-0.29v-69.959c-0.001-0.082-0.002-0.179-0.002-0.276 0-6.188 2.44-11.806 6.409-15.946 3.715-4.373 9.2-7.159 15.338-7.245zM597.333 156.589h-22.187v209.92c0.001 0.082 0.002 0.179 0.002 0.276 0 6.188-2.44 11.806-6.409 15.946-3.759 4.19-9.201 6.819-15.257 6.819-0.033 0-0.067 0-0.1 0h-130.128c-0.028 0-0.062 0-0.095 0-6.056 0-11.499-2.629-15.248-6.808-3.979-4.15-6.419-9.769-6.419-15.957 0-0.097 0.001-0.194 0.002-0.29v-46.492c-0.001-0.082-0.002-0.179-0.002-0.276 0-6.188 2.44-11.806 6.409-15.946 3.759-4.19 9.201-6.819 15.257-6.819 0.033 0 0.067 0 0.1 0h22.182v-139.947h-22.187c-0.028 0-0.062 0-0.095 0-6.056 0-11.499-2.629-15.248-6.808-3.979-4.15-6.419-9.769-6.419-15.957 0-0.097 0.001-0.194 0.002-0.29v-46.492c-0.001-0.082-0.002-0.179-0.002-0.276 0-6.188 2.44-11.806 6.409-15.946 3.759-4.19 9.201-6.819 15.257-6.819 0.033 0 0.067 0 0.1 0h174.075c0.028 0 0.062 0 0.095 0 6.056 0 11.499 2.629 15.248 6.808 3.979 4.15 6.419 9.769 6.419 15.957 0 0.097-0.001 0.194-0.002 0.29v46.065c0.043 0.527 0.067 1.141 0.067 1.761 0 5.302-1.791 10.185-4.8 14.079-3.742 4.424-9.36 7.247-15.636 7.247-0.489 0-0.975-0.017-1.456-0.051z" />
|
||||
<glyph unicode="" glyph-name="paste" data-tags="paste" d="M394.402 702.4h-75.333c-65.867 0-119.2-53.333-119.2-119.2v-288.533c0-56.4 37.6-100.4 87.867-116v69.067c-15.733 9.467-25.067 25.067-25.067 47.067v288.4c0 31.333 25.067 56.4 56.4 56.4h131.733c0 0 0 0 3.2 3.2v0c0 31.333-28.267 59.6-59.6 59.6zM704.802 592.533c0 0-28.267 0-40.8 0-12.533 34.533-43.867 59.6-84.667 59.6s-69.067-25.067-81.6-59.6c-12.533 0-40.8 0-40.8 0-65.867 0-119.2-53.333-119.2-119.2v-288.533c0-65.867 53.333-119.2 119.2-119.2h247.867c65.867 0 119.2 53.333 119.2 119.2v285.467c3.2 65.867-53.2 122.267-119.2 122.267zM582.535 605.2c22 0 40.8-18.8 40.8-40.8s-18.8-40.8-40.8-40.8c-22 0-40.8 18.8-40.8 40.8s15.733 40.8 40.8 40.8zM764.402 181.733c0-31.333-25.067-56.4-56.4-56.4h-250.933c-31.333 0-56.4 25.067-56.4 56.4v288.533c0 18.8 9.467 37.6 25.067 47.067v0c0-43.867 34.533-78.4 78.4-78.4h160c43.867 0 78.4 34.533 78.4 78.4v0c12.533-9.467 22-28.267 22-47.067v-288.533z" />
|
||||
<glyph unicode="" glyph-name="arrow-down" data-tags="arrow-down" d="M234 565.667h556l-278-278z" />
|
||||
<glyph unicode="" glyph-name="arrow-left" data-tags="arrow-left" d="M381 164.667v524l262-262z" />
|
||||
<glyph unicode="" glyph-name="colapse" data-tags="colapse" d="M512 584.667l256-256-60-60-196 196-196-196-60 60z" />
|
||||
<glyph unicode="" glyph-name="expand" data-tags="expand" d="M708 584.667l60-60-256-256-256 256 60 60 196-196z" />
|
||||
<glyph unicode="" glyph-name="move" data-tags="move" d="M386.662 853.061h71.27v-71.27h-71.27v71.27zM566.067 853.061h71.27v-71.27h-71.27v71.27zM386.662 696.798h71.27v-71.27h-71.27v71.27zM566.067 696.798h71.27v-71.27h-71.27v71.27zM386.662 540.433h71.27v-71.27h-71.27v71.27zM566.067 540.433h71.27v-71.27h-71.27v71.27zM386.662 384.171h71.27v-71.27h-71.27v71.27zM566.067 384.171h71.27v-71.27h-71.27v71.27zM386.662 227.806h71.27v-71.27h-71.27v71.27zM566.067 227.806h71.27v-71.27h-71.27v71.27zM386.662 71.544h71.27v-71.27h-71.27v71.27zM566.067 71.544h71.27v-71.27h-71.27v71.27z" />
|
||||
<glyph unicode="" glyph-name="check-mark" data-tags="check-mark" d="M454.301 395.253l-116.917 116.917-84.781-84.707 201.696-201.697 317.097 317.097-84.781 84.706z" />
|
||||
<glyph unicode="" glyph-name="arrow-up-circle" data-tags="arrow-up-circle" d="M513.344 689.068c-148.616 0-264.722-120.75-260.077-269.367 0-125.395 88.241-232.212 208.991-255.434v213.636h-92.885c-13.933 0-13.933 9.288-9.288 18.577l139.327 171.838c4.645 9.288 13.933 9.288 23.221 4.645 0 0 4.645-4.645 4.645-4.645l139.327-171.838c9.288-9.288 4.645-18.577-9.288-18.577h-92.885v-213.636c143.972 32.51 232.212 171.838 199.703 315.808-23.221 120.75-130.039 204.347-250.789 208.991z" />
|
||||
<glyph unicode="" glyph-name="info-circle" data-tags="info-circle" d="M512 686.933c-144.077 0-260.266-116.191-260.266-260.266s116.191-260.266 260.266-260.266 260.266 116.191 260.266 260.266v0c0 139.429-116.191 255.619-260.266 260.266zM470.171 635.81h88.305v-69.714h-88.305v69.714zM600.305 245.41h-181.257v51.123h51.123v162.666h-51.123v51.123h139.429v-218.438h46.477l-4.648-46.477z" />
|
||||
<glyph unicode="" glyph-name="search" data-tags="search" d="M769.263 223.163l-110.68 110.68c71.943 99.612 49.806 243.494-49.806 315.437s-243.494 44.27-315.437-55.339c-71.943-99.612-49.806-243.494 49.806-315.437 77.475-55.339 182.623-55.339 260.098 0l110.68-110.68c5.533-5.533 11.068-5.533 16.601 0 0 0 0 0 0 0l33.205 33.205c11.068 5.533 11.068 16.601 5.533 22.137 0 0 0 0 0 0zM475.96 300.638c-88.544 0-160.486 71.943-160.486 160.486s71.943 160.486 160.486 160.486 160.486-71.943 160.486-160.486-71.943-160.486-160.486-160.486v0z" />
|
||||
<glyph unicode="" glyph-name="fullscreen" data-tags="fullscreen" d="M357.075 572.983c5.737 5.737 0 5.737-5.737 5.737l-103.284 11.476c-5.737 5.737-11.476 0-11.476-5.737l11.476-109.021c0-5.737 5.737-5.737 5.737-5.737l103.284 103.284zM282.484 509.865l63.118-63.118c5.737-5.737 11.476-5.737 17.213 0l22.953 22.953c5.737 5.737 5.737 11.476 0 17.213l-63.118 57.379-40.166-34.429zM775.945 469.699c5.737-5.737 5.737 0 5.737 5.737l11.476 109.021c0 5.737-5.737 11.476-11.476 11.476l-109.021-11.476c-5.737 0-5.737-5.737-5.737-5.737l109.021-109.021zM712.83 544.294l-63.118-63.118c-5.737-5.737-5.737-11.476 0-17.213l22.953-22.953c5.737-5.737 11.476-5.737 17.213 0l63.118 63.118-40.166 40.166zM678.401 263.134c-5.737-5.737 0-5.737 5.737-5.737l109.021-11.476c5.737 0 11.476 5.737 11.476 11.476l-17.213 103.284c0 5.737-5.737 5.737-5.737 5.737l-103.284-103.284zM747.256 331.989l-63.118 63.118c-5.737 5.737-11.476 5.737-17.213 0l-22.953-22.953c-5.737-5.737-5.737-11.476 0-17.213l63.118-63.118 40.166 40.166zM253.794 366.418c-5.737 5.737-5.737 0-5.737-5.737l-11.476-109.021c0-5.737 5.737-11.476 11.476-11.476l109.021 11.476c5.737 0 5.737 5.737 5.737 5.737l-109.021 109.021zM322.649 291.824l63.118 63.118c5.737 5.737 5.737 11.476 0 17.213l-22.953 22.953c-5.737 5.737-11.476 5.737-17.213 0l-63.118-63.118 40.166-40.166zM150.51 676.267v-499.201h722.979v499.201h-722.979zM833.324 217.232h-636.911v413.13h636.911v-413.13z" />
|
||||
<glyph unicode="" glyph-name="h5p" data-tags="h5p" d="M891.406 574.524c-22.319 16.738-50.216 27.897-89.273 27.897h-139.487v-66.954h-156.225l-11.159-55.795c11.159 5.579 27.897 11.159 39.057 11.159s22.319 0 33.476 0c33.476 0 66.954-11.159 89.273-33.476s33.476-50.216 33.476-83.692c0-22.319-5.579-44.635-16.738-66.954s-27.897-39.057-50.216-50.216c-5.579-5.579-16.738 0-22.319-11.159h117.17v133.908h66.954c44.635 0 78.113 11.159 100.43 27.897 22.319 22.319 33.476 50.216 33.476 83.692 0 39.057-11.159 66.954-27.897 83.692v0zM796.555 462.935c-11.159-5.579-22.319-11.159-44.635-11.159h-33.476v83.692h39.057c22.319 0 33.476-5.579 44.635-11.159 5.579-5.579 11.159-16.738 11.159-27.897 0-16.738-5.579-27.897-16.738-33.476v0zM523.16 423.878c-16.738 0-33.476-11.159-44.635-27.897l-94.851 16.738 44.635 195.281h-94.851v-150.646h-117.17v150.646h-111.589v-362.667h111.589v133.908h117.17v-133.908h139.487c-16.738 11.159-33.476 11.159-44.635 22.319s-22.319 22.319-27.897 33.476c-5.579 11.159-11.159 22.319-16.738 39.057l94.851 16.738c5.579-16.738 22.319-27.897 44.635-27.897 27.897 0 50.216 22.319 50.216 50.216 0 22.319-22.319 44.635-50.216 44.635v0z" />
|
||||
<glyph unicode="" glyph-name="rights-of-use" data-tags="rights-of-use" d="M878.277 414.35c0-5.907 0-5.907 0-5.907-23.631-23.631-47.261-35.448-76.799-41.355-11.813 0-23.631-5.907-35.448-5.907s-17.724 0-29.537 0c0 0-5.907 0-5.907 5.907-64.985 59.079-135.877 118.153-200.863 183.139 0 0-5.907 0-5.907 0-23.631-5.907-47.261-11.813-70.892-17.724s-53.168 0-76.799 11.813c-17.724 11.813-23.631 17.724-29.537 35.448-5.907 5.907 0 23.631 11.813 23.631 41.355 11.813 88.616 29.537 129.971 47.261 11.813 5.907 29.537 5.907 41.355 5.907 5.907 0 11.813-5.907 11.813-5.907 41.355-17.724 82.709-29.537 124.060-47.261 0 0 5.907 0 5.907 0 29.537 5.907 64.985 17.724 94.523 23.631 5.907 0 5.907 0 5.907 0l106.34-212.676zM269.786 420.26c17.724 11.813 35.448 5.907 53.168-11.813 11.813-11.813 11.813-29.537 5.907-47.261 17.724 5.907 35.448-5.907 41.355-17.724 11.813-17.724 5.907-35.448-5.907-47.261 5.907 0 11.813 0 17.724 0 11.813-5.907 23.631-11.813 29.537-29.537s0-29.537-5.907-35.448c-5.907-5.907-11.813-11.813-17.724-17.724s-11.813-11.813-17.724-17.724-35.448-17.724-53.168 0c-29.537 29.537-53.168 64.985-82.709 94.523-17.724 23.631-35.448 41.355-47.261 64.985-5.907 11.813-11.813 17.724-11.813 29.537 0 5.907 0 17.724 5.907 23.631 11.813 11.813 17.724 17.724 29.537 29.537 17.724 17.724 47.261 11.813 64.985-5.907-5.907 0-5.907-5.907-5.907-11.813v0zM417.477 213.491l29.537-29.537c17.724-17.724 47.261-11.813 59.079 5.907l-5.907 5.907c-23.631 23.631-47.261 47.261-70.892 70.892-5.907 5.907-5.907 5.907-5.907 11.813s5.907 5.907 11.813 11.813c5.907 0 11.813 0 11.813-5.907 11.813-11.813 29.537-29.537 47.261-47.261 11.813-11.813 29.537-29.537 47.261-47.261 5.907-11.813 17.724-11.813 29.537-11.813 11.813 5.907 23.631 11.813 29.537 23.631 0 5.907 0 5.907 0 5.907-41.355 41.355-88.616 82.709-129.971 129.971-5.907 5.907-5.907 5.907-5.907 11.813 0 11.813 11.813 11.813 23.631 5.907 0 0 5.907 0 5.907-5.907 41.355-41.355 88.616-88.616 129.971-129.971 5.907-5.907 5.907-5.907 5.907-5.907 17.724 0 35.448 17.724 35.448 35.448 0 5.907 0 5.907 0 5.907-47.261 47.261-100.429 100.429-147.691 147.691-5.907 5.907-5.907 5.907-5.907 11.813s5.907 11.813 5.907 11.813c5.907 0 11.813 0 11.813-5.907 5.907-5.907 5.907-5.907 11.813-11.813 35.448-35.448 70.892-70.892 106.34-106.34 11.813-11.813 23.631-23.631 29.537-29.537 0 0 5.907-5.907 5.907 0 23.631 5.907 35.448 29.537 29.537 53.168h35.448c0 0 0 0 0 0 0-5.907 0-17.724 0-23.631-5.907-29.537-23.631-47.261-53.168-59.079 0 0-5.907 0-5.907-5.907-11.813-29.537-35.448-53.168-64.985-53.168-5.907 0-5.907 0-5.907-5.907-17.724-35.448-59.079-47.261-88.616-35.448-5.907 0-11.813 5.907-11.813 5.907-5.907-5.907-11.813-11.813-23.631-17.724-29.537-11.813-59.079-5.907-76.799 11.813-11.813 11.813-17.724 17.724-29.537 29.537 17.724 23.631 23.631 29.537 29.537 41.355v0 0zM252.062 727.459c29.537-11.813 64.985-23.631 94.523-29.537 35.448-11.813 64.985-23.631 100.429-29.537 0 0 0 0 5.907 0-17.724-5.907-35.448-11.813-47.261-17.724 0 0-5.907 0-5.907 0-47.261 11.813-94.523 23.631-135.877 41.355-5.907 0-5.907 0-5.907 0l-76.799-183.139c0-11.813 5.907-17.724 11.813-23.631s5.907-5.907 5.907-11.813c-5.907-5.907-11.813-17.724-23.631-23.631-17.724 17.724-29.537 35.448-29.537 64.985l88.616 212.676c-5.907-11.813 5.907 5.907 17.724 0v0z" />
|
||||
<glyph unicode="" glyph-name="delete-circle" data-tags="delete-circle" d="M512 686.933c-147.107 0-260.266-118.817-260.266-260.266s118.817-260.266 260.266-260.266 260.266 118.817 260.266 260.266-113.158 260.266-260.266 260.266zM653.449 347.455c5.659-5.659 5.659-16.973 0-28.29l-33.949-33.949c-5.659-5.659-16.973-5.659-28.29 0l-79.212 79.212-79.212-79.212c-5.659-5.659-16.973-5.659-28.29 0l-33.949 33.949c-5.659 5.659-5.659 16.973 0 28.29l84.871 79.212-79.212 79.212c-5.659 5.659-5.659 16.973 0 28.29l33.949 33.949c5.659 5.659 16.973 5.659 28.29 0l73.554-84.871 79.212 79.212c5.659 5.659 16.973 5.659 28.29 0l33.949-33.949c5.659-5.659 5.659-16.973 0-28.29l-79.212-73.554 79.212-79.212z" />
|
||||
<glyph unicode="" glyph-name="window" data-tags="window" d="M186.821 549.319c-5.704-5.704 0-5.704 5.704-5.704l108.394-11.41c5.704 0 11.41 5.704 11.41 11.41l-17.114 102.687c0 5.704-5.704 5.704-5.704 5.704l-102.687-102.687zM255.28 612.074l-62.752 62.752c-5.704 5.704-11.41 5.704-17.114 0l-17.114-22.821c-5.704-5.704-5.704-11.41 0-17.114l62.752-62.752 34.228 39.935zM734.49 646.302c-5.704 5.704-5.704 0-5.704-5.704l-11.41-108.394c0-5.704 5.704-11.41 11.41-11.41l108.394 11.41c5.704 0 5.704 5.704 5.704 5.704l-108.394 108.394zM797.242 572.14l62.752 62.752c5.704 5.704 5.704 11.41 0 17.114l-22.821 22.821c-5.704 5.704-11.41 5.704-17.114 0l-62.752-62.752 39.935-39.935zM831.473 309.717c5.704 5.704 0 5.704-5.704 5.704l-102.687 17.114c-5.704 0-11.41-5.704-11.41-11.41l11.41-108.394c0-5.704 5.704-5.704 5.704-5.704l102.687 102.687zM763.014 246.962l62.752-62.752c5.704-5.704 11.41-5.704 17.114 0l22.821 22.821c5.704 5.704 5.704 11.41 0 17.114l-62.752 62.752-39.935-39.935zM283.804 212.734c5.704-5.704 5.704 0 5.704 5.704l11.41 108.394c0 5.704-5.704 11.41-11.41 11.41l-108.394-11.41c-5.704 0-5.704-5.704-5.704-5.704l108.394-108.394zM221.052 281.193l-62.752-62.752c-5.704-5.704-5.704-11.41 0-17.114l22.821-22.821c5.704-5.704 11.41-5.704 17.114 0l62.752 62.752-39.935 39.935zM335.149 555.026v-239.605h347.998v239.605h-347.998zM637.507 355.355h-262.424v154.032h262.424v-154.032z" />
|
||||
<glyph unicode="" glyph-name="code" data-tags="code" d="M446.523 311.303c6.235-6.235 6.235-12.472 6.235-18.707v-62.359c0-6.235-6.235-6.235-6.235-6.235l-230.728 155.897c-6.235 6.235-6.235 12.472-6.235 18.707v49.886c0 6.235 6.235 12.472 6.235 18.707l230.728 155.897c6.235 6.235 6.235 0 6.235-6.235v-62.359c0-6.235-6.235-12.472-6.235-18.707l-162.134-112.245c-6.235-6.235-6.235-6.235 0-12.472l162.134-99.776zM733.375 417.313c6.235 6.235 6.235 6.235 0 12.472l-155.897 112.245c-6.235 6.235-6.235 12.472-6.235 18.707v62.359c0 6.235 6.235 6.235 6.235 6.235l230.728-155.897c6.235-6.235 6.235-12.472 6.235-18.707v-49.886c0-6.235-6.235-12.472-6.235-18.707l-230.728-155.897c-6.235-6.235-6.235 0-6.235 6.235v62.359c0 6.235 6.235 12.472 6.235 18.707l155.897 99.776z" />
|
||||
<glyph unicode="" glyph-name="download" data-tags="download" d="M353.050 512.027c-11.773 0-17.66-5.887-5.887-17.66l153.059-188.382c5.887-11.773 23.547-11.773 29.433 0l153.059 188.382c5.887 11.773 5.887 17.66-5.887 17.66h-323.782zM570.865 500.253v135.399c0 11.773-11.773 23.547-23.547 23.547h-70.643c-11.773 0-23.547-11.773-23.547-23.547v-141.286h117.739zM647.395 364.854c-5.887 0-17.66-5.887-23.547-11.773l-76.53-94.19c-5.887-5.887-17.66-17.66-23.547-23.547 0 0-5.887-5.887-11.773-5.887s-17.66 11.773-17.66 11.773c-5.887 5.887-17.66 17.66-23.547 23.547l-76.53 94.19c-5.887 5.887-17.66 11.773-23.547 11.773h-123.626c-5.887 0-17.66-5.887-17.66-17.66v-141.286c0-5.887 5.887-17.66 17.66-17.66h529.824c5.887 0 17.66 5.887 17.66 17.66v141.286c0 5.887-5.887 17.66-17.66 17.66l-129.513-5.887zM300.067 253.004c-17.66 0-29.433 11.773-29.433 29.433s11.773 29.433 29.433 29.433c17.66 0 29.433-11.773 29.433-29.433s-11.773-29.433-29.433-29.433v0z" />
|
||||
<glyph unicode="" glyph-name="delete" data-tags="delete" d="M615.111 426.667l134.045 134.045c10.311 10.311 10.311 30.934 0 41.245l-61.866 61.866c-10.311 10.311-30.934 10.311-41.245 0l-134.045-134.045-134.045 134.045c-10.311 10.311-30.934 10.311-41.245 0l-61.866-61.866c-10.311-10.311-10.311-30.934 0-41.245l134.045-134.045-134.045-134.045c-10.311-10.311-10.311-30.934 0-41.245l61.866-61.866c10.311-10.311 30.934-10.311 41.245 0l134.045 134.045 134.045-134.045c10.311-10.311 30.934-10.311 41.245 0l61.866 61.866c10.311 10.311 10.311 30.934 0 41.245l-134.045 134.045z" />
|
||||
<glyph unicode="" glyph-name="edit-image" data-tags="edit-image" d="M300.336 749.664c69.018 23.142 133.325 14.234 189.133-33.28 56.627-48.128 77.619-110.592 63.181-183.808-2.355-12.186 0.307-19.456 8.704-27.853 93.901-93.389 156.774-156.467 250.47-250.163 5.427-5.427 10.957-10.854 15.667-16.896 39.424-50.278 16.794-124.006-44.237-142.029-36.966-10.957-68.403 0-95.334 27.034-95.642 96.051-160.973 160.973-256.614 257.024-6.963 6.963-12.8 8.909-22.63 6.758-117.76-26.317-229.171 60.826-231.731 181.453-0.614 26.419 3.584 52.326 15.974 77.926 34.816-34.816 68.506-67.789 101.274-101.786 10.445-10.752 20.992-15.36 36.045-15.36 14.643 0 25.19 3.891 34.816 14.848 10.752 12.39 23.040 23.347 34.611 35.021 14.336 14.438 14.336 46.080-0.205 60.518-35.123 35.226-70.349 70.349-106.598 106.496 3.891 2.253 5.632 3.482 7.475 4.096zM703.485 191.584c-0.41-24.269 20.685-45.466 44.851-45.158 23.757 0.41 44.032 20.992 43.93 44.544-0.102 23.757-20.275 44.032-44.237 44.134-23.859 0.307-44.237-19.661-44.544-43.52z" />
|
||||
<glyph unicode="" glyph-name="hourglass" data-tags="hourglass" d="M733.414 117.419c-147.763 0-295.526 0-443.29 0 0 2.048 0.102 4.096 0 6.144-0.307 13.824-1.024 32.666-0.922 46.49 0.41 39.731 6.861 78.131 19.046 115.2 17.203 52.224 43.725 96.256 81.306 130.355 4.506 4.096 9.216 7.885 13.722 11.776-0.205 0.717-0.307 1.126-0.41 1.229-1.331 1.229-2.765 2.355-4.198 3.584-28.058 22.63-50.688 51.405-68.403 85.606-30.618 59.085-43.52 123.597-41.165 192.614 0.205 7.168 0.614 18.33 0.922 25.498 147.763 0 295.526 0 443.29 0 0.205-1.331 0.512-2.662 0.614-3.994 2.662-36.966 1.229-77.722-5.939-113.869-14.336-72.909-44.544-133.837-95.027-179.405-4.096-3.686-8.294-7.066-12.39-10.547 0.205-0.717 0.307-1.126 0.512-1.331 0.819-0.717 1.638-1.434 2.458-2.15 42.189-33.894 71.68-79.872 90.931-135.782 11.776-34.202 18.637-69.837 20.070-106.701 0.819-19.763-0.614-44.851-1.126-64.717zM687.437 160.632c0 6.554 0.205 12.493 0 18.432-1.331 37.581-7.27 74.138-19.866 108.749-17.92 49.562-45.568 88.269-88.678 108.646-2.458 1.126-2.97 3.072-2.97 5.837 0.102 16.691 0.102 33.485 0 50.176 0 3.994 1.331 5.427 4.096 6.963 9.114 5.325 18.432 10.24 26.829 16.896 29.696 23.552 49.152 56.934 62.362 95.744 10.342 30.413 15.77 62.259 17.818 94.822 0.614 9.114 0.102 18.227 0.102 27.546-116.634 0-233.574 0-351.027 0 0.307-8.704 0.614-16.998 1.024-25.395 1.946-37.274 8.499-73.216 21.504-107.213 18.125-47.104 45.261-83.558 86.528-103.117 2.253-1.024 2.867-2.662 2.867-5.427-0.102-17.203-0.102-34.509 0-51.712 0-3.072-1.024-4.506-3.277-5.632-5.632-2.867-11.366-5.734-16.691-9.216-34.304-22.733-56.832-57.754-71.987-100.147-12.493-35.123-18.125-71.987-19.661-109.875-0.205-5.325 0-10.752 0-16.282 117.35 0.205 234.189 0.205 351.027 0.205zM410.342 579.96c68.096 0 135.373 0 203.674 0-3.789-6.554-7.168-12.595-10.752-18.227-10.957-16.998-24.269-30.618-39.731-41.472s-27.75-25.293-32.768-46.592c-1.638-6.963-2.765-14.336-2.867-21.606-0.307-17.203-0.205-34.406 0.307-51.712 0.717-28.058 12.493-48.947 32.154-62.566 43.008-30.003 65.843-75.878 75.776-132.506 0.307-1.638 0.307-3.379 0.614-5.53-83.149 0-166.093 0-249.242 0 2.662 20.685 7.885 40.346 15.462 59.085 13.312 32.973 32.768 59.187 59.494 77.722 16.589 11.469 28.365 27.955 32.358 50.995 0.819 4.813 1.331 9.83 1.434 14.746 0.102 18.637 0.614 37.274-0.205 55.808-1.126 24.678-11.981 43.213-28.57 57.139-9.216 7.782-18.944 14.746-27.648 23.142-11.981 11.162-21.197 25.395-29.491 41.574z" />
|
||||
<glyph unicode="" glyph-name="plus-icon" data-tags="plus-icon" d="M767.787 391.893c0-19.323-15.664-34.987-34.987-34.987h-151.040v-151.467c0-19.323-15.664-34.987-34.987-34.987h-69.547c-19.323 0-34.987 15.664-34.987 34.987v151.467h-151.467c-19.323 0-34.987 15.664-34.987 34.987v69.547c0 19.323 15.664 34.987 34.987 34.987h151.467v151.467c0 19.323 15.664 34.987 34.987 34.987h69.547c19.323 0 34.987-15.664 34.987-34.987v-151.467h151.467c19.323 0 34.987-15.664 34.987-34.987z" />
|
||||
<glyph unicode="" glyph-name="video-upload-icon" data-tags="video-upload-icon" d="M395.848 387.201v-128c0-21.333 21.333-42.667 42.667-42.667h128c21.333 0 42.667 17.067 42.667 42.667v128c0 21.333-17.067 42.667-42.667 42.667h-128c-21.333 0-42.667-17.067-42.667-42.667zM796.915 557.867l-102.4 106.667c-12.8 12.8-38.4 21.333-55.467 21.333h-140.8l21.333-42.667h89.6v-136.533c0-17.067 12.8-29.867 29.867-29.867h140.8v-341.333h-426.667v328.533h-42.667v-341.333c0-17.067 12.8-29.867 29.867-29.867h448c17.067 0 29.867 12.8 29.867 29.867v384c4.267 17.067-8.533 38.4-21.333 51.2zM651.848 515.201v123.733c4.267 0 12.8-4.267 12.8-8.533l102.4-102.4c4.267-4.267 4.267-8.533 8.533-12.8h-123.733zM737.181 225.067v196.267c0 4.267-4.267 8.533-8.533 8.533s-8.533 0-12.8-4.267l-89.6-89.6v-29.867l89.6-89.6c8.533-4.267 8.533 0 12.8 0 4.267 4.267 8.533 4.267 8.533 8.533zM361.715 532.267v136.533l59.733-59.733c8.533-8.533 17.067-4.267 25.6 0l12.8 12.8c8.533 8.533 8.533 17.067 0 25.6l-115.2 106.667c-8.533 8.533-17.067 8.533-21.333 0l-115.2-110.933c-4.267-8.533-4.267-17.067 0-25.6l12.8-12.8c8.533-8.533 17.067-8.533 21.333 0l59.733 59.733v-136.533c0-8.533 8.533-17.067 17.067-17.067h25.6c0 0 17.067 8.533 17.067 21.333z" />
|
||||
<glyph unicode="" glyph-name="play-icon" data-tags="play-icon" d="M375.444 661.357c81.067 46.933 187.733 46.933 273.067 0 42.667-25.6 72.533-55.467 98.133-98.133 72.533-128 29.867-294.4-98.133-371.2-128-72.533-294.4-29.867-371.2 98.133-46.933 81.067-46.933 187.733 0 273.067 21.333 42.667 55.467 72.533 98.133 98.133zM644.244 409.623c12.8 8.533 12.8 29.867 0 38.4l-192 110.933c-8.533 4.267-12.8 4.267-21.333 0s-12.8-12.8-12.8-21.333v-226.133c0-8.533 4.267-17.067 12.8-21.333s17.067-4.267 21.333 0l192 119.467z" />
|
||||
<glyph unicode="" glyph-name="copy" data-tags="copy" d="M722.133 603.867h-247.733c-65.867 0-119.2-53.333-119.2-119.2v-288.533c0-65.867 53.333-119.2 119.2-119.2h247.867c65.867 0 119.2 53.333 119.2 119.2v288.533c-0.267 65.867-53.467 119.2-119.333 119.2zM778.533 199.2c0-31.333-25.067-56.4-56.4-56.4h-247.867c-31.333 0-56.4 25.067-56.4 56.4v285.467c0 31.333 25.067 56.4 56.4 56.4h247.733c31.333 0 56.4-25.067 56.4-56.4v-285.467zM245.2 368.667v288.533c0 31.333 25.067 56.4 56.4 56.4h247.733c31.333 0 56.4-25.067 56.4-56.4v-18.8h62.667v18.8c0 65.867-53.333 119.2-119.2 119.2h-247.467c-65.867 0-119.2-53.333-119.2-119.2v-288.533c0-65.867 53.333-119.2 119.2-119.2h18.8v62.667h-18.8c-31.467-3.067-56.533 22-56.533 56.533zM681.2 403.2h-163.067c-18.8 0-31.333 12.533-31.333 31.333s12.533 31.333 31.333 31.333h163.067c18.8 0 31.333-12.533 31.333-31.333s-15.6-31.333-31.333-31.333zM681.2 309.067h-163.067c-18.8 0-31.333 12.533-31.333 31.333s12.533 31.333 31.333 31.333h163.067c18.8 0 31.333-12.533 31.333-31.333s-15.6-31.333-31.333-31.333zM681.2 214.934h-163.067c-18.8 0-31.333 12.533-31.333 31.333s12.533 31.333 31.333 31.333h163.067c18.8 0 31.333-12.533 31.333-31.333s-15.6-31.333-31.333-31.333z" />
|
||||
<glyph unicode="" glyph-name="examples-icon" data-tags="examples-icon" d="M213.333 275.201c89.6 38.4 183.467 68.267 273.067 17.067v281.6c-68.267 46.933-157.867 55.467-234.667 12.8l-38.4-311.467zM810.667 275.201l-42.667 315.733c-72.533 38.4-166.4 34.133-234.667-17.067v-285.867c93.867 51.2 187.733 21.333 277.333-12.8zM832 629.334c-51.2 29.867-110.933 46.933-170.667 55.467-51.2 0-102.4-8.533-149.333-29.867-46.933 21.333-98.133 29.867-149.333 29.867-59.733-4.267-119.467-25.6-170.667-55.467l-64-452.267c0 0 29.867-17.067 110.933 21.333 46.933 25.6 102.4 34.133 157.867 25.6 42.667-4.267 85.333-21.333 115.2-55.467v0c29.867 34.133 72.533 51.2 115.2 55.467 55.467 4.267 106.667-4.267 157.867-29.867 81.067-38.4 110.933-21.333 110.933-21.333l-64 456.533zM793.6 224.001c-42.667 21.333-89.6 34.133-140.8 34.133-8.533 0-21.333 0-29.867 0-42.667-4.267-81.067-17.067-115.2-42.667-34.133 25.6-72.533 38.4-115.2 42.667-12.8 0-21.333 0-34.133 0-46.933 0-93.867-8.533-136.533-29.867-21.333-12.8-46.933-21.333-72.533-25.6l64 413.867c46.933 25.6 98.133 38.4 149.333 42.667 46.933 0 93.867-8.533 136.533-25.6l12.8-8.533 12.8 4.267c42.667 17.067 89.6 25.6 136.533 25.6 51.2-4.267 102.4-17.067 149.333-42.667l59.733-418.133c-29.867 8.533-51.2 17.067-76.8 29.867z" />
|
||||
<glyph unicode="" glyph-name="tutorials-icon" data-tags="tutorials-icon" d="M887.468 537.598l-375.467-110.933h-4.267l-217.6 68.267c-21.333-25.6-34.133-59.733-34.133-98.133 21.333-12.8 25.6-38.4 12.8-59.733-4.267-4.267-8.533-8.533-12.8-12.8l17.067-145.067c0-4.267 0-4.267-4.267-8.533 0 0 0 0-4.267 0h-64c-4.267 0-4.267 0-8.533 4.267 0 4.267-4.267 4.267-4.267 8.533l17.067 145.067c-12.8 8.533-17.067 21.333-17.067 34.133 0 17.067 8.533 29.867 21.333 38.4 0 38.4 12.8 76.8 34.133 110.933l-106.667 29.867c-8.533 4.267-8.533 8.533-8.533 17.067 0 4.267 4.267 4.267 4.267 4.267l375.467 119.467h4.267l375.467-123.733c4.267 0 8.533-4.267 8.533-8.533s-4.267-8.533-8.533-12.8zM725.334 341.332c4.267-46.933-93.867-85.333-213.333-85.333s-213.333 38.4-213.333 85.333l4.267 106.667 192-64c4.267 0 12.8 0 17.067 0s12.8 0 17.067 4.267l192 59.733 4.267-106.667z" />
|
||||
<glyph unicode="" glyph-name="info-important-description" data-tags="info-important-description" d="M512 768.017c-188.5 0-341.3-152.8-341.3-341.3s152.8-341.4 341.3-341.4 341.3 152.8 341.3 341.3-152.8 341.4-341.3 341.4v0zM512 113.917c-172.7 0-312.7 140-312.7 312.7s140 312.7 312.7 312.7c172.7 0 312.7-140 312.7-312.7-0.2-172.6-140.1-312.5-312.7-312.7v0zM512 676.217c-137.9 0-249.6-111.8-249.6-249.6s111.7-249.6 249.6-249.6 249.6 111.8 249.6 249.6-111.8 249.6-249.6 249.6v0z" />
|
||||
<glyph unicode="" glyph-name="icon-info" data-tags="icon-info" d="M468.875 565.974h87.467c0.028 0 0.062 0 0.095 0 6.056 0 11.499 2.629 15.248 6.808 3.979 4.15 6.419 9.769 6.419 15.957 0 0.097-0.001 0.194-0.002 0.29v70.385c0.001 0.082 0.002 0.179 0.002 0.276 0 6.188-2.44 11.806-6.409 15.946-3.759 4.19-9.201 6.819-15.257 6.819-0.033 0-0.067 0-0.1 0h-87.462c-0.028 0-0.062 0-0.095 0-6.056 0-11.499-2.629-15.248-6.808-3.979-4.15-6.419-9.769-6.419-15.957 0-0.097 0.001-0.194 0.002-0.29v-69.959c-0.001-0.082-0.002-0.179-0.002-0.276 0-6.188 2.44-11.806 6.409-15.946 3.715-4.373 9.2-7.159 15.338-7.245zM599.008 263.041h-22.187v209.92c0.001 0.082 0.002 0.179 0.002 0.276 0 6.188-2.44 11.806-6.409 15.946-3.759 4.19-9.201 6.819-15.257 6.819-0.033 0-0.067 0-0.1 0h-130.128c-0.028 0-0.062 0-0.095 0-6.056 0-11.499-2.629-15.248-6.808-3.979-4.15-6.419-9.769-6.419-15.957 0-0.097 0.001-0.194 0.002-0.29v-46.492c-0.001-0.082-0.002-0.179-0.002-0.276 0-6.188 2.44-11.806 6.409-15.946 3.759-4.19 9.201-6.819 15.257-6.819 0.033 0 0.067 0 0.1 0h22.182v-139.947h-22.187c-0.028 0-0.062 0-0.095 0-6.056 0-11.499-2.629-15.248-6.808-3.979-4.15-6.419-9.769-6.419-15.957 0-0.097 0.001-0.194 0.002-0.29v-46.492c-0.001-0.082-0.002-0.179-0.002-0.276 0-6.188 2.44-11.806 6.409-15.946 3.759-4.19 9.201-6.819 15.257-6.819 0.033 0 0.067 0 0.1 0h174.075c0.028 0 0.062 0 0.095 0 6.056 0 11.499 2.629 15.248 6.808 3.979 4.15 6.419 9.769 6.419 15.957 0 0.097-0.001 0.194-0.002 0.29v46.065c0.043 0.527 0.067 1.141 0.067 1.761 0 5.302-1.791 10.185-4.8 14.079-3.742 4.424-9.36 7.247-15.636 7.247-0.489 0-0.975-0.017-1.456-0.051z" />
|
||||
<glyph unicode="" glyph-name="paste" data-tags="paste" d="M394.402 745.067h-75.333c-65.867 0-119.2-53.333-119.2-119.2v-288.533c0-56.4 37.6-100.4 87.867-116v69.067c-15.733 9.467-25.067 25.067-25.067 47.067v288.4c0 31.333 25.067 56.4 56.4 56.4h131.733c0 0 0 0 3.2 3.2v0c0 31.333-28.267 59.6-59.6 59.6zM704.802 635.2c0 0-28.267 0-40.8 0-12.533 34.533-43.867 59.6-84.667 59.6s-69.067-25.067-81.6-59.6c-12.533 0-40.8 0-40.8 0-65.867 0-119.2-53.333-119.2-119.2v-288.533c0-65.867 53.333-119.2 119.2-119.2h247.867c65.867 0 119.2 53.333 119.2 119.2v285.467c3.2 65.867-53.2 122.267-119.2 122.267zM582.535 647.867c22 0 40.8-18.8 40.8-40.8s-18.8-40.8-40.8-40.8c-22 0-40.8 18.8-40.8 40.8s15.733 40.8 40.8 40.8zM764.402 224.4c0-31.333-25.067-56.4-56.4-56.4h-250.933c-31.333 0-56.4 25.067-56.4 56.4v288.533c0 18.8 9.467 37.6 25.067 47.067v0c0-43.867 34.533-78.4 78.4-78.4h160c43.867 0 78.4 34.533 78.4 78.4v0c12.533-9.467 22-28.267 22-47.067v-288.533z" />
|
||||
<glyph unicode="" glyph-name="reuse" data-tags="reuse" d="M734.974 624.751c-54.605 61.619-134.123 100.573-222.977 100.573-164.936 0-298.661-133.724-298.661-298.661h74.667c0 123.721 100.272 223.993 223.993 223.993 68.214 0 128.747-30.96 169.766-79.119l-70.213-70.213h199.109v199.109l-75.689-75.689zM511.999 202.671c-68.214 0-128.747 30.96-169.766 79.119l70.213 70.213h-199.109v-199.109l75.689 75.689c54.605-61.619 134.123-100.573 222.977-100.573 164.936 0 298.661 133.724 298.661 298.661h-74.667c0-123.721-100.272-223.993-223.993-223.993z" />
|
||||
<glyph unicode="" glyph-name="info-outlined" data-tags="info-outlined" d="M467.199 181.336h89.599v268.8h-89.599v-268.8zM512 853.335c-247.296 0-448.001-200.705-448.001-448.001s200.705-448.001 448.001-448.001 448.001 200.705 448.001 448.001-200.705 448.001-448.001 448.001zM512 46.936c-197.568 0-358.398 160.83-358.398 358.398s160.83 358.398 358.398 358.398 358.398-160.83 358.398-358.398-160.83-358.398-358.398-358.398zM467.199 539.734h89.599v89.599h-89.599v-89.599z" />
|
||||
<glyph unicode="" glyph-name="spinner" data-tags="spinner" d="M600 808.001c0-48.602-39.398-88-88-88s-88 39.398-88 88 39.398 88 88 88 88-39.398 88-88zM512 133.333c-48.602 0-88-39.398-88-88s39.398-88 88-88 88 39.398 88 88-39.398 88-88 88zM893.334 514.667c-48.602 0-88-39.398-88-88s39.398-88 88-88 88 39.398 88 88-39.398 88-88 88zM218.666 426.667c0 48.602-39.398 88-88 88s-88-39.398-88-88 39.398-88 88-88 88 39.398 88 88zM242.357 245.024c-48.602 0-88-39.398-88-88s39.398-88 88-88 88 39.398 88 88c0 48.6-39.4 88-88 88zM781.643 245.024c-48.602 0-88-39.398-88-88s39.398-88 88-88 88 39.398 88 88c0 48.6-39.398 88-88 88zM242.357 784.31c-48.602 0-88-39.398-88-88s39.398-88 88-88 88 39.398 88 88-39.4 88-88 88z" />
|
||||
|
||||
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
Binary file not shown.
Binary file not shown.
@@ -4279,7 +4279,7 @@ class H5PContentValidator {
|
||||
return '<';
|
||||
}
|
||||
|
||||
if (!preg_match('%^<\s*(/\s*)?([a-zA-Z0-9\-]+)([^>]*)>?|(<!--.*?-->)$%', $string, $matches)) {
|
||||
if (!preg_match('%^<\s*(/\s*)?([a-zA-Z0-9\-]+)\s*([^>]*)>?|(<!--.*?-->)$%', $string, $matches)) {
|
||||
// Seriously malformed.
|
||||
return '';
|
||||
}
|
||||
@@ -4341,7 +4341,13 @@ class H5PContentValidator {
|
||||
// Attribute name, href for instance.
|
||||
if (preg_match('/^([-a-zA-Z]+)/', $attr, $match)) {
|
||||
$attrName = strtolower($match[1]);
|
||||
$skip = ($attrName == 'style' || substr($attrName, 0, 2) == 'on');
|
||||
$skip = (
|
||||
$attrName == 'style' ||
|
||||
substr($attrName, 0, 2) == 'on' ||
|
||||
substr($attrName, 0, 1) == '-' ||
|
||||
// Ignore long attributes to avoid unnecessary processing overhead.
|
||||
strlen($attrName) > 96
|
||||
);
|
||||
$working = $mode = 1;
|
||||
$attr = preg_replace('/^[-a-zA-Z]+/', '', $attr);
|
||||
}
|
||||
|
||||
+13
-3
@@ -1030,7 +1030,7 @@ H5P.t = function (key, vars, ns) {
|
||||
H5P.Dialog = function (name, title, content, $element) {
|
||||
/** @alias H5P.Dialog# */
|
||||
var self = this;
|
||||
var $dialog = H5P.jQuery('<div class="h5p-popup-dialog h5p-' + name + '-dialog">\
|
||||
var $dialog = H5P.jQuery('<div class="h5p-popup-dialog h5p-' + name + '-dialog" role="dialog" tabindex="-1">\
|
||||
<div class="h5p-inner">\
|
||||
<h2>' + title + '</h2>\
|
||||
<div class="h5p-scroll-content">' + content + '</div>\
|
||||
@@ -1053,6 +1053,12 @@ H5P.Dialog = function (name, title, content, $element) {
|
||||
.click(function () {
|
||||
self.close();
|
||||
})
|
||||
.keypress(function (e) {
|
||||
if (e.which === 13 || e.which === 32) {
|
||||
self.close();
|
||||
return false;
|
||||
}
|
||||
})
|
||||
.end()
|
||||
.find('a')
|
||||
.click(function (e) {
|
||||
@@ -1072,6 +1078,7 @@ H5P.Dialog = function (name, title, content, $element) {
|
||||
$dialog.addClass('h5p-open'); // Fade in
|
||||
// Triggering an event, in case something has to be done after dialog has been opened.
|
||||
H5P.jQuery(self).trigger('dialog-opened', [$dialog]);
|
||||
$dialog.focus();
|
||||
}, 1);
|
||||
};
|
||||
|
||||
@@ -1083,6 +1090,8 @@ H5P.Dialog = function (name, title, content, $element) {
|
||||
setTimeout(function () {
|
||||
$dialog.remove();
|
||||
H5P.jQuery(self).trigger('dialog-closed', [$dialog]);
|
||||
$element.attr('tabindex', '-1');
|
||||
$element.focus();
|
||||
}, 200);
|
||||
};
|
||||
};
|
||||
@@ -1363,11 +1372,11 @@ H5P.openEmbedDialog = function ($element, embedCode, resizeCode, size, instance)
|
||||
var $expander = H5P.jQuery(this);
|
||||
var $content = $expander.next();
|
||||
if ($content.is(':visible')) {
|
||||
$expander.removeClass('h5p-open').text(H5P.t('showAdvanced'));
|
||||
$expander.removeClass('h5p-open').text(H5P.t('showAdvanced')).attr('aria-expanded', 'true');
|
||||
$content.hide();
|
||||
}
|
||||
else {
|
||||
$expander.addClass('h5p-open').text(H5P.t('hideAdvanced'));
|
||||
$expander.addClass('h5p-open').text(H5P.t('hideAdvanced')).attr('aria-expanded', 'false');
|
||||
$content.show();
|
||||
}
|
||||
$dialog.find('.h5p-embed-code-container').each(function () {
|
||||
@@ -1378,6 +1387,7 @@ H5P.openEmbedDialog = function ($element, embedCode, resizeCode, size, instance)
|
||||
$dialog.find('.h5p-expander').click(expand).keypress(function (event) {
|
||||
if (event.keyCode === 32) {
|
||||
expand.apply(this);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}).on('dialog-closed', function () {
|
||||
|
||||
+11
-10
@@ -14,7 +14,7 @@ Removed:
|
||||
Added:
|
||||
* readme_moodle.txt
|
||||
|
||||
Downloaded version: 1.24 release
|
||||
Downloaded version: 1.24.2 release
|
||||
|
||||
Changes:
|
||||
1. In order to allow the dependency path to be overridden by child H5PCore classes, a couple of minor changes have been added to the
|
||||
@@ -41,23 +41,25 @@ Hopefully, when upgrading, these patch won't be needed because it will be includ
|
||||
2.2. Change all the mb_uses straight to the core_text() alternatives. Version 1.24 has 3 ocurrences in h5p.classes.php
|
||||
and 1 ocurrence in h5p-metadata.class.php.
|
||||
|
||||
3. Another PR has been sent to H5P library (https://github.com/h5p/h5p-php-library/pull/69) to fix some php74 minor problems. The same fix is being applied locally by MDL-67077. Once we import a new version, if it includes de fix, this won't be needed to reapply and can be removed.
|
||||
These points (2.1 and 2.2) won't be needed once the mbstring extension becomes mandatory in Moodle. A request was
|
||||
sent to MDL-65809 and it's required from Moodle 3.9 onwards.
|
||||
|
||||
|
||||
3. Replace the $_SESSION references to $SESSION. That implies that the information is saved to backends, so only the Moodle one
|
||||
should be used by core (core should be free from $_SESSION and always use $SESSION).
|
||||
|
||||
4. Replace the $_SESSION references to $SESSION. That implies that the information is saved to backends, so only the Moodle one should be used by core (core should be free from $_SESSION and always use $SESSION).
|
||||
h5p.classes.php file:
|
||||
- Into hashToken method:
|
||||
Declare the global $SESSION.
|
||||
Change all the $_SESSION by $SESSION.
|
||||
A script for testing this part can be found in MDL-68068
|
||||
|
||||
The point 2 from above won't be needed once the mbstring extension becomes mandatory in Moodle. A request has been
|
||||
sent to MDL-65809.
|
||||
|
||||
5. Upgrade and patch JQuery library.
|
||||
4. Upgrade and patch JQuery library.
|
||||
Once https://github.com/h5p/h5p-php-library/issues/83 gets integrated in
|
||||
H5P PHP Library (upgrading the JQuery version), this change won't be needed.
|
||||
|
||||
5.1. Prepare the patched JQuery 1.12.4 library following these steps:
|
||||
4.1. Prepare the patched JQuery 1.12.4 library following these steps:
|
||||
a) Download the uncompressed JQuery Core 1.12.4 from https://code.jquery.com/jquery-1.12.4.js
|
||||
b) Add the patch in https://snyk.io/vuln/SNYK-JS-JQUERY-174006 to the downloaded file.
|
||||
You'll need to replace this code (line 212):
|
||||
@@ -75,15 +77,14 @@ H5P PHP Library (upgrading the JQuery version), this change won't be needed.
|
||||
}
|
||||
c) Minify the patched jquery-1-12.4.js.
|
||||
|
||||
5.2. Edit h5p/h5plib/v124/joubel/core/js/jquery.js and replace the JQuery piece of code
|
||||
4.2. Edit h5p/h5plib/v124/joubel/core/js/jquery.js and replace the JQuery piece of code
|
||||
(at the beginning of the file, above the comment "// Snap this specific version of jQuery into H5P. jQuery.noConflict will")
|
||||
with the previous patched and minified JQuery version.
|
||||
|
||||
5.3. Remove the following comment in h5p/h5plib/v124/joubel/core/js/jquery.js:
|
||||
4.3. Remove the following comment in h5p/h5plib/v124/joubel/core/js/jquery.js:
|
||||
|
||||
/**
|
||||
* jQuery v1.9.1
|
||||
*
|
||||
* @member
|
||||
*/
|
||||
|
||||
|
||||
+26
-8
@@ -202,7 +202,7 @@ div.h5p-fullscreen {
|
||||
color: #999;
|
||||
text-decoration: none;
|
||||
outline: none;
|
||||
line-height: 23px;
|
||||
line-height: 22px;
|
||||
}
|
||||
.h5p-actions > .h5p-button:hover {
|
||||
color: #666;
|
||||
@@ -223,8 +223,8 @@ div.h5p-fullscreen {
|
||||
.h5p-actions > .h5p-button:before {
|
||||
font-family: 'H5P';
|
||||
font-size: 20px;
|
||||
line-height: 20px;
|
||||
vertical-align: top;
|
||||
line-height: 23px;
|
||||
vertical-align: bottom;
|
||||
padding-right: 0;
|
||||
}
|
||||
.h5p-actions > .h5p-button.h5p-export:before {
|
||||
@@ -367,10 +367,6 @@ div.h5p-fullscreen {
|
||||
}
|
||||
.h5p-popup-dialog .h5p-close {
|
||||
cursor: pointer;
|
||||
}
|
||||
.h5p-popup-dialog .h5p-close:after {
|
||||
font-family: 'H5P';
|
||||
content: "\e894";
|
||||
font-size: 2em;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
@@ -383,6 +379,10 @@ div.h5p-fullscreen {
|
||||
text-indent: -0.065em;
|
||||
z-index: 3
|
||||
}
|
||||
.h5p-popup-dialog .h5p-close:after {
|
||||
font-family: 'H5P';
|
||||
content: "\e894";
|
||||
}
|
||||
.h5p-popup-dialog .h5p-close:hover:after,
|
||||
.h5p-popup-dialog .h5p-close:focus:after {
|
||||
color: #454545;
|
||||
@@ -412,7 +412,6 @@ div.h5p-fullscreen {
|
||||
.h5p-expander {
|
||||
cursor: pointer;
|
||||
font-size: 1.125em;
|
||||
outline: none;
|
||||
margin: 0.5em 0 0;
|
||||
display: inline-block;
|
||||
}
|
||||
@@ -543,6 +542,25 @@ div.h5p-fullscreen {
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
}
|
||||
.h5p-content code,
|
||||
.h5peditor code {
|
||||
color: #3d3d3d;
|
||||
background: #e0e0e0;
|
||||
border-radius: 2px;
|
||||
padding: 0 5px;
|
||||
}
|
||||
.h5p-content pre > code,
|
||||
.h5peditor pre > code {
|
||||
background-color: #fafafa;
|
||||
padding: 5px;
|
||||
display: block;
|
||||
line-height: normal;
|
||||
border: 1px solid #c7c7c7;
|
||||
border-left-width: 4px;
|
||||
max-width: 100%;
|
||||
white-space: pre;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
|
||||
/* This is loaded as part of Core and not Editor since this needs to be outside the editor iframe */
|
||||
|
||||
@@ -995,7 +995,7 @@ EOF;
|
||||
// Using the spin method as we want a reduced timeout but there is no need for a 0.1 seconds interval
|
||||
// because in the optimistic case we will timeout.
|
||||
// If all goes good it will throw an ElementNotFoundExceptionn that we will catch.
|
||||
return $this->find($selectortype, $element, $exception, false, behat_base::get_reduced_timeout());
|
||||
$this->find($selectortype, $element, $exception, false, behat_base::get_reduced_timeout());
|
||||
} catch (ElementNotFoundException $e) {
|
||||
// We expect the element to not be found.
|
||||
return;
|
||||
|
||||
@@ -114,10 +114,12 @@ class core_completion_cron_task_testcase extends advanced_testcase {
|
||||
|
||||
// Get s1's completion record from c1.
|
||||
$s1c1 = $DB->get_record('course_completions', ['userid' => $s1->id, 'course' => $c1->id]);
|
||||
$this->assertEquals(userdate($now), userdate($s1c1->timeenrolled));
|
||||
$this->assertGreaterThanOrEqual($now, $s1c1->timeenrolled);
|
||||
$this->assertLessThanOrEqual(time(), $s1c1->timeenrolled);
|
||||
|
||||
// Get s2's completion record from c1.
|
||||
$s2c1 = $DB->get_record('course_completions', ['userid' => $s2->id, 'course' => $c1->id]);
|
||||
$this->assertEquals(userdate($now), userdate($s2c1->timeenrolled));
|
||||
$this->assertGreaterThanOrEqual($now, $s2c1->timeenrolled);
|
||||
$this->assertLessThanOrEqual(time(), $s2c1->timeenrolled);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1667,6 +1667,65 @@ EOF;
|
||||
$draftfiles = $fs->get_area_files($usercontext->id, 'user', 'draft', $file2->get_itemid(), 'itemid', 0);
|
||||
$this->assertCount(1, $draftfiles);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test file_is_draft_areas_limit_reached
|
||||
*/
|
||||
public function test_file_is_draft_areas_limit_reached() {
|
||||
global $CFG;
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
$capacity = $CFG->draft_area_bucket_capacity = 5;
|
||||
$leak = $CFG->draft_area_bucket_leak = 0.2; // Leaks every 5 seconds.
|
||||
|
||||
$generator = $this->getDataGenerator();
|
||||
$user = $generator->create_user();
|
||||
|
||||
$this->setUser($user);
|
||||
|
||||
$itemids = [];
|
||||
for ($i = 0; $i < $capacity; $i++) {
|
||||
$itemids[$i] = file_get_unused_draft_itemid();
|
||||
}
|
||||
|
||||
// This test highly depends on time. We try to make sure that the test starts at the early moments on the second.
|
||||
// This was not needed if MDL-37327 was implemented.
|
||||
$after = time();
|
||||
while (time() === $after) {
|
||||
usleep(100000);
|
||||
}
|
||||
|
||||
// Burst up to the capacity and make sure that the bucket allows it.
|
||||
for ($i = 0; $i < $capacity; $i++) {
|
||||
if ($i) {
|
||||
sleep(1); // A little delay so we have different timemodified value for files.
|
||||
}
|
||||
$this->assertFalse(file_is_draft_areas_limit_reached($user->id));
|
||||
self::create_draft_file([
|
||||
'filename' => 'file1.png',
|
||||
'itemid' => $itemids[$i],
|
||||
]);
|
||||
}
|
||||
|
||||
// The bucket should be full after bursting.
|
||||
$this->assertTrue(file_is_draft_areas_limit_reached($user->id));
|
||||
|
||||
// The bucket leaks so it shouldn't be full after a certain time.
|
||||
// Reiterating that this test could have been faster if MDL-37327 was implemented.
|
||||
sleep(ceil(1 / $leak) - ($capacity - 1));
|
||||
$this->assertFalse(file_is_draft_areas_limit_reached($user->id));
|
||||
|
||||
// Only one item was leaked from the bucket. So the bucket should become full again if we add a single item to it.
|
||||
self::create_draft_file([
|
||||
'filename' => 'file2.png',
|
||||
'itemid' => $itemids[0],
|
||||
]);
|
||||
$this->assertTrue(file_is_draft_areas_limit_reached($user->id));
|
||||
|
||||
// The bucket leaks at a constant rate. It doesn't matter if it is filled as the result of bursting or not.
|
||||
sleep(ceil(1 / $leak));
|
||||
$this->assertFalse(file_is_draft_areas_limit_reached($user->id));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -324,7 +324,7 @@
|
||||
<location>h5p</location>
|
||||
<name>h5p-php-library</name>
|
||||
<license>GPL-3.0</license>
|
||||
<version>1.24</version>
|
||||
<version>1.24.2</version>
|
||||
</library>
|
||||
<library>
|
||||
<location>mdn-polyfills</location>
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
This files describes API changes in core libraries and APIs,
|
||||
information provided here is intended especially for developers.
|
||||
|
||||
=== 3.8.9 ===
|
||||
* The third-party library h5p/h5plib/v124/core has been updated to version 1.24.2.
|
||||
|
||||
=== 3.8.6 ===
|
||||
* New DML function $DB->delete_records_subquery() to delete records based on a subquery in a way
|
||||
that will work across databases.
|
||||
|
||||
@@ -2735,3 +2735,27 @@ function upgrade_find_theme_location($themename) {
|
||||
|
||||
return $dir;
|
||||
}
|
||||
|
||||
/**
|
||||
* Environment check for the php setting max_input_vars
|
||||
*
|
||||
* @param environment_results $result
|
||||
* @return environment_results|null
|
||||
*/
|
||||
function check_max_input_vars(environment_results $result) {
|
||||
$max = (int)ini_get('max_input_vars');
|
||||
if ($max < 5000) {
|
||||
$result->setInfo('max_input_vars');
|
||||
$result->setStatus(false);
|
||||
if (PHP_VERSION_ID >= 80000) {
|
||||
// For PHP8 this check is required.
|
||||
$result->setLevel('required');
|
||||
$result->setFeedbackStr('settingmaxinputvarsrequired');
|
||||
} else {
|
||||
// For PHP7 this check is optional (recommended).
|
||||
$result->setFeedbackStr('settingmaxinputvars');
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -90,7 +90,6 @@ if ($form->is_cancelled()) {
|
||||
raise_memory_limit(MEMORY_HUGE);
|
||||
|
||||
$discussionvault = $vaultfactory->get_discussion_vault();
|
||||
$postvault = $vaultfactory->get_post_vault();
|
||||
if ($data->discussionids) {
|
||||
$discussionids = $data->discussionids;
|
||||
} else if (empty($discussionids)) {
|
||||
@@ -111,8 +110,13 @@ if ($form->is_cancelled()) {
|
||||
$filters['to'] = $data->to;
|
||||
}
|
||||
|
||||
// Retrieve posts based on the selected filters.
|
||||
$posts = $postvault->get_from_filters($USER, $filters, $capabilitymanager->can_view_any_private_reply($USER));
|
||||
// Retrieve posts based on the selected filters, note if forum has no discussions then there is nothing to export.
|
||||
if (!empty($filters['discussionids'])) {
|
||||
$postvault = $vaultfactory->get_post_vault();
|
||||
$posts = $postvault->get_from_filters($USER, $filters, $capabilitymanager->can_view_any_private_reply($USER));
|
||||
} else {
|
||||
$posts = [];
|
||||
}
|
||||
|
||||
$striphtml = !empty($data->striphtml);
|
||||
$humandates = !empty($data->humandates);
|
||||
|
||||
+8
-6
@@ -28,7 +28,7 @@ require_once($CFG->dirroot . '/mod/lti/locallib.php');
|
||||
$scope = optional_param('scope', '', PARAM_TEXT);
|
||||
$responsetype = optional_param('response_type', '', PARAM_TEXT);
|
||||
$clientid = optional_param('client_id', '', PARAM_TEXT);
|
||||
$redirecturi = optional_param('redirect_uri', '', PARAM_TEXT);
|
||||
$redirecturi = optional_param('redirect_uri', '', PARAM_URL);
|
||||
$loginhint = optional_param('login_hint', '', PARAM_TEXT);
|
||||
$ltimessagehint = optional_param('lti_message_hint', 0, PARAM_INT);
|
||||
$state = optional_param('state', '', PARAM_TEXT);
|
||||
@@ -68,12 +68,14 @@ if ($ok && ($loginhint !== $USER->id)) {
|
||||
$ok = false;
|
||||
$error = 'access_denied';
|
||||
}
|
||||
if ($ok) {
|
||||
|
||||
// If we're unable to load up config; we cannot trust the redirect uri for POSTing to.
|
||||
if (empty($config)) {
|
||||
throw new moodle_exception('invalidrequest', 'error');
|
||||
} else {
|
||||
$uris = array_map("trim", explode("\n", $config->lti_redirectionuris));
|
||||
$ok = in_array($redirecturi, $uris);
|
||||
if (!$ok) {
|
||||
$error = 'invalid_request';
|
||||
$desc = 'Unregistered redirect_uri ' . $redirecturi;
|
||||
if (!in_array($redirecturi, $uris)) {
|
||||
throw new moodle_exception('invalidrequest', 'error');
|
||||
}
|
||||
}
|
||||
if ($ok) {
|
||||
|
||||
@@ -521,7 +521,23 @@ class mod_quiz_external extends external_api {
|
||||
}
|
||||
|
||||
$result = array();
|
||||
$grade = quiz_get_best_grade($quiz, $user->id);
|
||||
|
||||
// This code was mostly copied from mod/quiz/view.php. We need to make the web service logic consistent.
|
||||
// Get this user's attempts.
|
||||
$attempts = quiz_get_user_attempts($quiz->id, $user->id, 'all');
|
||||
$canviewgrade = false;
|
||||
if ($attempts) {
|
||||
if ($USER->id != $user->id) {
|
||||
// No need to check the permission here. We did it at by require_capability('mod/quiz:viewreports', $context).
|
||||
$canviewgrade = true;
|
||||
} else {
|
||||
// Work out which columns we need, taking account what data is available in each attempt.
|
||||
[$notused, $alloptions] = quiz_get_combined_reviewoptions($quiz, $attempts);
|
||||
$canviewgrade = $alloptions->marks >= question_display_options::MARK_AND_MAX;
|
||||
}
|
||||
}
|
||||
|
||||
$grade = $canviewgrade ? quiz_get_best_grade($quiz, $user->id) : null;
|
||||
|
||||
if ($grade === null) {
|
||||
$result['hasgrade'] = false;
|
||||
|
||||
+1
-1
@@ -1146,7 +1146,7 @@ function quiz_review_option_form_to_db($fromform, $field) {
|
||||
$review = 0;
|
||||
foreach ($times as $whenname => $when) {
|
||||
$fieldname = $field . $whenname;
|
||||
if (isset($fromform->$fieldname)) {
|
||||
if (!empty($fromform->$fieldname)) {
|
||||
$review |= $when;
|
||||
unset($fromform->$fieldname);
|
||||
}
|
||||
|
||||
@@ -588,7 +588,7 @@ class quiz_grading_report extends quiz_default_report {
|
||||
$a = new stdClass();
|
||||
$a->attempt = $attempt->attempt;
|
||||
$a->fullname = fullname($attempt);
|
||||
$a->idnumber = $attempt->idnumber;
|
||||
$a->idnumber = s($attempt->idnumber);
|
||||
|
||||
$showidnumbers = $showidnumbers && !empty($attempt->idnumber);
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@ class provider implements
|
||||
* @param int $userid The userid of the user whose data is to be exported.
|
||||
*/
|
||||
public static function export_user_preferences(int $userid) {
|
||||
$preference = get_user_preferences('quiz_overview_slotmarks', null);
|
||||
$preference = get_user_preferences('quiz_overview_slotmarks', null, $userid);
|
||||
if (null !== $preference) {
|
||||
if (empty($preference)) {
|
||||
$description = get_string('privacy:preference:slotmarks:no', 'quiz_overview');
|
||||
|
||||
@@ -55,14 +55,19 @@ class quiz_overview_privacy_provider_testcase extends \core_privacy\tests\provid
|
||||
* Preference does exist.
|
||||
*/
|
||||
public function test_preference_yes() {
|
||||
global $USER;
|
||||
|
||||
$this->resetAfterTest();
|
||||
|
||||
// Create test user, add some preferences.
|
||||
$user = $this->getDataGenerator()->create_user();
|
||||
$this->setUser($user);
|
||||
|
||||
set_user_preference('quiz_overview_slotmarks', 1, $user);
|
||||
|
||||
// Switch to admin user (so we can validate preferences of the correct user are being exported).
|
||||
$this->setAdminUser();
|
||||
|
||||
set_user_preference('quiz_overview_slotmarks', 1);
|
||||
|
||||
provider::export_user_preferences($USER->id);
|
||||
// Export test users preferences.
|
||||
provider::export_user_preferences($user->id);
|
||||
|
||||
$writer = writer::with_context(\context_system::instance());
|
||||
$this->assertTrue($writer->has_any_data());
|
||||
@@ -78,14 +83,19 @@ class quiz_overview_privacy_provider_testcase extends \core_privacy\tests\provid
|
||||
* Preference does exist and is no.
|
||||
*/
|
||||
public function test_preference_no() {
|
||||
global $USER;
|
||||
|
||||
$this->resetAfterTest();
|
||||
$this->setAdminUser();
|
||||
|
||||
// Create test user, add some preferences.
|
||||
$user = $this->getDataGenerator()->create_user();
|
||||
$this->setUser($user);
|
||||
|
||||
set_user_preference('quiz_overview_slotmarks', 0);
|
||||
|
||||
provider::export_user_preferences($USER->id);
|
||||
// Switch to admin user (so we can validate preferences of the correct user are being exported).
|
||||
$this->setAdminUser();
|
||||
|
||||
// Export test users preferences.
|
||||
provider::export_user_preferences($user->id);
|
||||
|
||||
$writer = writer::with_context(\context_system::instance());
|
||||
$this->assertTrue($writer->has_any_data());
|
||||
|
||||
@@ -456,37 +456,101 @@ class mod_quiz_external_testcase extends externallib_advanced_testcase {
|
||||
* Test get_user_best_grade
|
||||
*/
|
||||
public function test_get_user_best_grade() {
|
||||
global $DB;
|
||||
$quizgenerator = $this->getDataGenerator()->get_plugin_generator('mod_quiz');
|
||||
$questiongenerator = $this->getDataGenerator()->get_plugin_generator('core_question');
|
||||
$questioncat = $questiongenerator->create_question_category();
|
||||
|
||||
// Create a new quiz.
|
||||
$quizapi1 = $quizgenerator->create_instance([
|
||||
'name' => 'Test Quiz API 1',
|
||||
'course' => $this->course->id,
|
||||
'sumgrades' => 1
|
||||
]);
|
||||
$quizapi2 = $quizgenerator->create_instance([
|
||||
'name' => 'Test Quiz API 2',
|
||||
'course' => $this->course->id,
|
||||
'sumgrades' => 1,
|
||||
'marksduring' => 0,
|
||||
'marksimmediately' => 0,
|
||||
'marksopen' => 0,
|
||||
'marksclosed' => 0
|
||||
]);
|
||||
|
||||
// Create a question.
|
||||
$question = $questiongenerator->create_question('numerical', null, ['category' => $questioncat->id]);
|
||||
|
||||
// Add question to the quizzes.
|
||||
quiz_add_quiz_question($question->id, $quizapi1);
|
||||
quiz_add_quiz_question($question->id, $quizapi2);
|
||||
|
||||
// Create quiz object.
|
||||
$quizapiobj1 = quiz::create($quizapi1->id, $this->student->id);
|
||||
$quizapiobj2 = quiz::create($quizapi2->id, $this->student->id);
|
||||
|
||||
// Set grade to pass.
|
||||
$item = grade_item::fetch([
|
||||
'courseid' => $this->course->id,
|
||||
'itemtype' => 'mod',
|
||||
'itemmodule' => 'quiz',
|
||||
'iteminstance' => $quizapi1->id,
|
||||
'outcomeid' => null
|
||||
]);
|
||||
$item->gradepass = 80;
|
||||
$item->update();
|
||||
|
||||
$item = grade_item::fetch([
|
||||
'courseid' => $this->course->id,
|
||||
'itemtype' => 'mod',
|
||||
'itemmodule' => 'quiz',
|
||||
'iteminstance' => $quizapi2->id,
|
||||
'outcomeid' => null
|
||||
]);
|
||||
$item->gradepass = 80;
|
||||
$item->update();
|
||||
|
||||
// Start the passing attempt.
|
||||
$quba1 = question_engine::make_questions_usage_by_activity('mod_quiz', $quizapiobj1->get_context());
|
||||
$quba1->set_preferred_behaviour($quizapiobj1->get_quiz()->preferredbehaviour);
|
||||
|
||||
$quba2 = question_engine::make_questions_usage_by_activity('mod_quiz', $quizapiobj2->get_context());
|
||||
$quba2->set_preferred_behaviour($quizapiobj2->get_quiz()->preferredbehaviour);
|
||||
|
||||
// Start the testing for quizapi1 that allow the student to view the grade.
|
||||
|
||||
$this->setUser($this->student);
|
||||
|
||||
$result = mod_quiz_external::get_user_best_grade($this->quiz->id);
|
||||
$result = mod_quiz_external::get_user_best_grade($quizapi1->id);
|
||||
$result = external_api::clean_returnvalue(mod_quiz_external::get_user_best_grade_returns(), $result);
|
||||
|
||||
// No grades yet.
|
||||
$this->assertFalse($result['hasgrade']);
|
||||
$this->assertTrue(!isset($result['grade']));
|
||||
|
||||
$grade = new stdClass();
|
||||
$grade->quiz = $this->quiz->id;
|
||||
$grade->userid = $this->student->id;
|
||||
$grade->grade = 8.9;
|
||||
$grade->timemodified = time();
|
||||
$grade->id = $DB->insert_record('quiz_grades', $grade);
|
||||
// Start the attempt.
|
||||
$timenow = time();
|
||||
$attempt = quiz_create_attempt($quizapiobj1, 1, false, $timenow, false, $this->student->id);
|
||||
quiz_start_new_attempt($quizapiobj1, $quba1, $attempt, 1, $timenow);
|
||||
quiz_attempt_save_started($quizapiobj1, $quba1, $attempt);
|
||||
|
||||
$result = mod_quiz_external::get_user_best_grade($this->quiz->id);
|
||||
// Process some responses from the student.
|
||||
$attemptobj = quiz_attempt::create($attempt->id);
|
||||
$attemptobj->process_submitted_actions($timenow, false, [1 => ['answer' => '3.14']]);
|
||||
|
||||
// Finish the attempt.
|
||||
$attemptobj->process_finish($timenow, false);
|
||||
|
||||
$result = mod_quiz_external::get_user_best_grade($quizapi1->id);
|
||||
$result = external_api::clean_returnvalue(mod_quiz_external::get_user_best_grade_returns(), $result);
|
||||
|
||||
// Now I have grades.
|
||||
$this->assertTrue($result['hasgrade']);
|
||||
$this->assertEquals(8.9, $result['grade']);
|
||||
$this->assertEquals(100.0, $result['grade']);
|
||||
|
||||
// We should not see other users grades.
|
||||
$anotherstudent = self::getDataGenerator()->create_user();
|
||||
$this->getDataGenerator()->enrol_user($anotherstudent->id, $this->course->id, $this->studentrole->id, 'manual');
|
||||
|
||||
try {
|
||||
mod_quiz_external::get_user_best_grade($this->quiz->id, $anotherstudent->id);
|
||||
mod_quiz_external::get_user_best_grade($quizapi1->id, $anotherstudent->id);
|
||||
$this->fail('Exception expected due to missing capability.');
|
||||
} catch (required_capability_exception $e) {
|
||||
$this->assertEquals('nopermissions', $e->errorcode);
|
||||
@@ -495,11 +559,11 @@ class mod_quiz_external_testcase extends externallib_advanced_testcase {
|
||||
// Teacher must be able to see student grades.
|
||||
$this->setUser($this->teacher);
|
||||
|
||||
$result = mod_quiz_external::get_user_best_grade($this->quiz->id, $this->student->id);
|
||||
$result = mod_quiz_external::get_user_best_grade($quizapi1->id, $this->student->id);
|
||||
$result = external_api::clean_returnvalue(mod_quiz_external::get_user_best_grade_returns(), $result);
|
||||
|
||||
$this->assertTrue($result['hasgrade']);
|
||||
$this->assertEquals(8.9, $result['grade']);
|
||||
$this->assertEquals(100.0, $result['grade']);
|
||||
|
||||
// Invalid user.
|
||||
try {
|
||||
@@ -509,8 +573,48 @@ class mod_quiz_external_testcase extends externallib_advanced_testcase {
|
||||
$this->assertEquals('invaliduser', $e->errorcode);
|
||||
}
|
||||
|
||||
// Remove the created data.
|
||||
$DB->delete_records('quiz_grades', array('id' => $grade->id));
|
||||
// End the testing for quizapi1 that allow the student to view the grade.
|
||||
|
||||
// Start the testing for quizapi2 that do not allow the student to view the grade.
|
||||
|
||||
$this->setUser($this->student);
|
||||
$result = mod_quiz_external::get_user_best_grade($quizapi2->id);
|
||||
$result = external_api::clean_returnvalue(mod_quiz_external::get_user_best_grade_returns(), $result);
|
||||
|
||||
// No grades yet.
|
||||
$this->assertFalse($result['hasgrade']);
|
||||
$this->assertTrue(!isset($result['grade']));
|
||||
|
||||
// Start the attempt.
|
||||
$timenow = time();
|
||||
$attempt = quiz_create_attempt($quizapiobj2, 1, false, $timenow, false, $this->student->id);
|
||||
quiz_start_new_attempt($quizapiobj2, $quba2, $attempt, 1, $timenow);
|
||||
quiz_attempt_save_started($quizapiobj2, $quba2, $attempt);
|
||||
|
||||
// Process some responses from the student.
|
||||
$attemptobj = quiz_attempt::create($attempt->id);
|
||||
$attemptobj->process_submitted_actions($timenow, false, [1 => ['answer' => '3.14']]);
|
||||
|
||||
// Finish the attempt.
|
||||
$attemptobj->process_finish($timenow, false);
|
||||
|
||||
$result = mod_quiz_external::get_user_best_grade($quizapi2->id);
|
||||
$result = external_api::clean_returnvalue(mod_quiz_external::get_user_best_grade_returns(), $result);
|
||||
|
||||
// Now I have grades but I will not be allowed to see it.
|
||||
$this->assertFalse($result['hasgrade']);
|
||||
$this->assertTrue(!isset($result['grade']));
|
||||
|
||||
// Teacher must be able to see student grades.
|
||||
$this->setUser($this->teacher);
|
||||
|
||||
$result = mod_quiz_external::get_user_best_grade($quizapi2->id, $this->student->id);
|
||||
$result = external_api::clean_returnvalue(mod_quiz_external::get_user_best_grade_returns(), $result);
|
||||
|
||||
$this->assertTrue($result['hasgrade']);
|
||||
$this->assertEquals(100.0, $result['grade']);
|
||||
|
||||
// End the testing for quizapi2 that do not allow the student to view the grade.
|
||||
|
||||
}
|
||||
/**
|
||||
|
||||
@@ -334,6 +334,11 @@ case 'download':
|
||||
unlink($thefile['path']);
|
||||
print_error('maxareabytes');
|
||||
}
|
||||
// Ensure the user does not upload too many draft files in a short period.
|
||||
if (file_is_draft_areas_limit_reached($USER->id)) {
|
||||
unlink($thefile['path']);
|
||||
print_error('maxdraftitemids');
|
||||
}
|
||||
try {
|
||||
$info = repository::move_to_filepool($thefile['path'], $record);
|
||||
redirect($home_url, get_string('downloadsucc', 'repository'));
|
||||
|
||||
@@ -309,6 +309,10 @@ switch ($action) {
|
||||
if (file_is_draft_area_limit_reached($itemid, $areamaxbytes, filesize($downloadedfile['path']))) {
|
||||
throw new file_exception('maxareabytes');
|
||||
}
|
||||
// Ensure the user does not upload too many draft files in a short period.
|
||||
if (file_is_draft_areas_limit_reached($USER->id)) {
|
||||
throw new file_exception('maxdraftitemids');
|
||||
}
|
||||
|
||||
$info = repository::move_to_filepool($downloadedfile['path'], $record);
|
||||
if (empty($info)) {
|
||||
|
||||
@@ -199,6 +199,10 @@ class repository_upload extends repository {
|
||||
if (file_is_draft_area_limit_reached($record->itemid, $areamaxbytes, filesize($_FILES[$elname]['tmp_name']))) {
|
||||
throw new file_exception('maxareabytes');
|
||||
}
|
||||
// Ensure the user does not upload too many draft files in a short period.
|
||||
if (file_is_draft_areas_limit_reached($USER->id)) {
|
||||
throw new file_exception('maxdraftitemids');
|
||||
}
|
||||
|
||||
$record->contextid = $context->id;
|
||||
$record->userid = $USER->id;
|
||||
|
||||
+2
-2
@@ -29,9 +29,9 @@
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$version = 2019111808.00; // 20191118 = branching date YYYYMMDD - do not modify!
|
||||
$version = 2019111809.00; // 20191118 = branching date YYYYMMDD - do not modify!
|
||||
// RR = release increments - 00 in DEV branches.
|
||||
// .XX = incremental changes.
|
||||
$release = '3.8.8 (Build: 20210308)'; // Human-friendly version name
|
||||
$release = '3.8.9 (Build: 20210510)'; // Human-friendly version name
|
||||
$branch = '38'; // This version's branch.
|
||||
$maturity = MATURITY_STABLE; // This version's maturity level.
|
||||
|
||||
Reference in New Issue
Block a user