Compare commits
80 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 22984eaecc | |||
| ed00c49c6f | |||
| 7a4476b834 | |||
| cd827ebe23 | |||
| b76287f846 | |||
| 2231902a45 | |||
| 01403722a8 | |||
| e1c1dfc748 | |||
| 32ded92858 | |||
| 14d9570a54 | |||
| 821ee3f6d3 | |||
| b3261d7e47 | |||
| ac7c3878f6 | |||
| acf717ab77 | |||
| ddd7021adb | |||
| 05b03a44f4 | |||
| ab62531857 | |||
| a33058ebb3 | |||
| dea05d9284 | |||
| 821342fac5 | |||
| b73d600ac5 | |||
| 5b401c9055 | |||
| 79a4c28dd5 | |||
| 25c337f3d8 | |||
| a3af71d840 | |||
| 993674fd6f | |||
| 84ac02e9f3 | |||
| d42e0c1b05 | |||
| 6ba2b1502b | |||
| 225873e47e | |||
| 758823c80e | |||
| 5185c03fa7 | |||
| 79d4f46efd | |||
| 290e0f7de5 | |||
| d49ba78dbd | |||
| b891579e99 | |||
| e43abfe8b8 | |||
| efd261ab7d | |||
| ee02ba0623 | |||
| 54f6d895a8 | |||
| 1a0c9fd279 | |||
| 82066dbce7 | |||
| 9aca8183fe | |||
| 5a1b6a9d50 | |||
| c252deeda9 | |||
| d640a60f96 | |||
| cf6c8a5acd | |||
| cddd41f5fd | |||
| 98aa5b1ac3 | |||
| bb2179cbb7 | |||
| 96006635fc | |||
| 75b5b6d5b9 | |||
| d54ab79285 | |||
| 21f1221056 | |||
| 551680435a | |||
| dbab6200d5 | |||
| a2267a3c5b | |||
| c13f7f9a6b | |||
| acfb9efa25 | |||
| 420983c00d | |||
| 4414c75992 | |||
| fd29b873cb | |||
| 61bc167f53 | |||
| 1ca90a1695 | |||
| 8e2798ff18 | |||
| 0ac84efc5a | |||
| a39608dd0d | |||
| df9a771afd | |||
| 01ab57bd28 | |||
| cec29305f2 | |||
| 85477f7928 | |||
| 8ead95fabe | |||
| 176eb618fc | |||
| 5c4359353f | |||
| 468ee496ca | |||
| 82990d7a3f | |||
| 6804470b3f | |||
| 413b603923 | |||
| 6c557376fc | |||
| 5060d6edc2 |
+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.
|
||||
|
||||
|
||||
@@ -2815,6 +2815,7 @@
|
||||
<VENDOR name="oracle" version="11.2" />
|
||||
</DATABASE>
|
||||
<PHP version="7.1.0" level="required">
|
||||
<RESTRICT function="restrict_php_version_80" message="unsupportedphpversion80" />
|
||||
</PHP>
|
||||
<PCREUNICODE level="optional">
|
||||
<FEEDBACK>
|
||||
@@ -2996,6 +2997,7 @@
|
||||
<VENDOR name="oracle" version="11.2" />
|
||||
</DATABASE>
|
||||
<PHP version="7.2.0" level="required">
|
||||
<RESTRICT function="restrict_php_version_80" message="unsupportedphpversion80" />
|
||||
</PHP>
|
||||
<PCREUNICODE level="optional">
|
||||
<FEEDBACK>
|
||||
@@ -3177,6 +3179,7 @@
|
||||
<VENDOR name="oracle" version="11.2" />
|
||||
</DATABASE>
|
||||
<PHP version="7.2.0" level="required">
|
||||
<RESTRICT function="restrict_php_version_80" message="unsupportedphpversion80" />
|
||||
</PHP>
|
||||
<PCREUNICODE level="optional">
|
||||
<FEEDBACK>
|
||||
@@ -3444,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">
|
||||
@@ -3524,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>
|
||||
|
||||
@@ -87,7 +87,7 @@ Feature: Data export from the privacy API
|
||||
And I reload the page
|
||||
And I should see "Download ready" in the "Export all of my personal data" "table_row"
|
||||
And I open the action menu in "Victim User 1" "table_row"
|
||||
And following "Download" should download between "1" and "130000" bytes
|
||||
And following "Download" should download between "1" and "144000" bytes
|
||||
|
||||
And the following config values are set as admin:
|
||||
| privacyrequestexpiry | 1 | tool_dataprivacy |
|
||||
|
||||
@@ -1 +1 @@
|
||||
define(["jquery","core/ajax","core/notification"],function(a,b,c){return{list:function(b,c){var d=[],e=a(b),f=a(b).data("originaloptionsjson"),g=e.val();a.each(f,function(b,e){return""!==a.trim(c)&&e.label.toLocaleLowerCase().indexOf(c.toLocaleLowerCase())===-1||(a.inArray(e.value,g)>-1||(d.push(e),!0))});var h=new a.Deferred;return h.resolve(d),h.promise()},processResults:function(b,c){var d=[];return a.each(c,function(a,b){d.push({value:b.value,label:b.label})}),d},transport:function(a,b,d){this.list(a,b).then(d)["catch"](c.exception)}}});
|
||||
define(["jquery","core/ajax","core/notification"],function(a,b,c){return{list:function(b,c){var d=[],e=a(b),f=a(b).data("originaloptionsjson"),g=e.val();a.each(f,function(b,e){return""!==c.trim()&&e.label.toLocaleLowerCase().indexOf(c.toLocaleLowerCase())===-1||(a.inArray(e.value,g)>-1||(d.push(e),!0))});var h=new a.Deferred;return h.resolve(d),h.promise()},processResults:function(b,c){var d=[];return a.each(c,function(a,b){d.push({value:b.value,label:b.label})}),d},transport:function(a,b,d){this.list(a,b).then(d)["catch"](c.exception)}}});
|
||||
@@ -41,7 +41,7 @@ define(['jquery', 'core/ajax', 'core/notification'], function($, Ajax, Notificat
|
||||
var selectedFilters = el.val();
|
||||
$.each(originalOptions, function(index, option) {
|
||||
// Skip option if it does not contain the query string.
|
||||
if ($.trim(query) !== '' && option.label.toLocaleLowerCase().indexOf(query.toLocaleLowerCase()) === -1) {
|
||||
if (query.trim() !== '' && option.label.toLocaleLowerCase().indexOf(query.toLocaleLowerCase()) === -1) {
|
||||
return true;
|
||||
}
|
||||
// Skip filters that have already been selected.
|
||||
|
||||
@@ -643,6 +643,6 @@ class acceptances_table extends \table_sql {
|
||||
}
|
||||
return ''; // User agreed by themselves.
|
||||
}
|
||||
return null;
|
||||
return parent::other_cols($column, $row);
|
||||
}
|
||||
}
|
||||
@@ -283,7 +283,7 @@ class admin_uploaduser_form2 extends moodleform {
|
||||
$mform->setAdvanced('url');
|
||||
|
||||
$mform->addElement('text', 'idnumber', get_string('idnumber'), 'maxlength="255" size="25"');
|
||||
$mform->setType('idnumber', PARAM_NOTAGS);
|
||||
$mform->setType('idnumber', core_user::get_property_type('idnumber'));
|
||||
$mform->setForceLtr('idnumber');
|
||||
|
||||
$mform->addElement('text', 'institution', get_string('institution'), 'maxlength="255" size="25"');
|
||||
|
||||
+1
-1
@@ -374,7 +374,7 @@
|
||||
$row = array ();
|
||||
$row[] = "<a href=\"../user/view.php?id=$user->id&course=$site->id\">$fullname</a>";
|
||||
foreach ($extracolumns as $field) {
|
||||
$row[] = $user->{$field};
|
||||
$row[] = s($user->{$field});
|
||||
}
|
||||
$row[] = $user->city;
|
||||
$row[] = $user->country;
|
||||
|
||||
+2
-4
@@ -178,10 +178,10 @@ class auth_plugin_email extends auth_plugin_base {
|
||||
if ($user->auth != $this->authtype) {
|
||||
return AUTH_CONFIRM_ERROR;
|
||||
|
||||
} else if ($user->secret == $confirmsecret && $user->confirmed) {
|
||||
} else if ($user->secret === $confirmsecret && $user->confirmed) {
|
||||
return AUTH_CONFIRM_ALREADY;
|
||||
|
||||
} else if ($user->secret == $confirmsecret) { // They have provided the secret key to get in
|
||||
} else if ($user->secret === $confirmsecret) { // They have provided the secret key to get in
|
||||
$DB->set_field("user", "confirmed", 1, array("id"=>$user->id));
|
||||
|
||||
if ($wantsurl = get_user_preferences('auth_email_wantsurl', false, $user)) {
|
||||
@@ -257,5 +257,3 @@ class auth_plugin_email extends auth_plugin_base {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
+2
-2
@@ -598,10 +598,10 @@ class auth_plugin_ldap extends auth_plugin_base {
|
||||
if ($user->auth != $this->authtype) {
|
||||
return AUTH_CONFIRM_ERROR;
|
||||
|
||||
} else if ($user->secret == $confirmsecret && $user->confirmed) {
|
||||
} else if ($user->secret === $confirmsecret && $user->confirmed) {
|
||||
return AUTH_CONFIRM_ALREADY;
|
||||
|
||||
} else if ($user->secret == $confirmsecret) { // They have provided the secret key to get in
|
||||
} else if ($user->secret === $confirmsecret) { // They have provided the secret key to get in
|
||||
if (!$this->user_activate($username)) {
|
||||
return AUTH_CONFIRM_FAIL;
|
||||
}
|
||||
|
||||
+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:
|
||||
|
||||
@@ -314,10 +314,10 @@ class auth extends \auth_plugin_base {
|
||||
if ($user->auth != $this->authtype) {
|
||||
return AUTH_CONFIRM_ERROR;
|
||||
|
||||
} else if ($user->secret == $confirmsecret && $user->confirmed) {
|
||||
} else if ($user->secret === $confirmsecret && $user->confirmed) {
|
||||
return AUTH_CONFIRM_ALREADY;
|
||||
|
||||
} else if ($user->secret == $confirmsecret) { // They have provided the secret key to get in.
|
||||
} else if ($user->secret === $confirmsecret) { // They have provided the secret key to get in.
|
||||
$DB->set_field("user", "confirmed", 1, array("id" => $user->id));
|
||||
return AUTH_CONFIRM_OK;
|
||||
}
|
||||
|
||||
@@ -512,6 +512,10 @@ class block_activity_results extends block_base {
|
||||
$fields = implode(',', $fields);
|
||||
$users = $DB->get_records_list('user', 'id', $userids, '', $fields);
|
||||
|
||||
// If configured to view user idnumber, ensure current user can see it.
|
||||
$extrafields = get_extra_user_fields($this->context);
|
||||
$canviewidnumber = (array_search('idnumber', $extrafields) !== false);
|
||||
|
||||
// Ready for output!
|
||||
if ($activity->gradetype == GRADE_TYPE_SCALE) {
|
||||
// We must display the results using scales.
|
||||
@@ -537,10 +541,14 @@ class block_activity_results extends block_base {
|
||||
}
|
||||
$this->content->text .= '</caption><colgroup class="number" />';
|
||||
$this->content->text .= '<colgroup class="name" /><colgroup class="grade" /><tbody>';
|
||||
|
||||
foreach ($best as $userid => $gradeid) {
|
||||
switch ($nameformat) {
|
||||
case B_ACTIVITYRESULTS_NAME_FORMAT_ID:
|
||||
$thisname = get_string('user').' '.$users[$userid]->idnumber;
|
||||
$thisname = get_string('user');
|
||||
if ($canviewidnumber) {
|
||||
$thisname .= ' ' . s($users[$userid]->idnumber);
|
||||
}
|
||||
break;
|
||||
case B_ACTIVITYRESULTS_NAME_FORMAT_ANON:
|
||||
$thisname = get_string('user');
|
||||
@@ -603,7 +611,10 @@ class block_activity_results extends block_base {
|
||||
foreach ($worst as $userid => $gradeid) {
|
||||
switch ($nameformat) {
|
||||
case B_ACTIVITYRESULTS_NAME_FORMAT_ID:
|
||||
$thisname = get_string('user').' '.$users[$userid]->idnumber;
|
||||
$thisname = get_string('user');
|
||||
if ($canviewidnumber) {
|
||||
$thisname .= ' ' . s($users[$userid]->idnumber);
|
||||
};
|
||||
break;
|
||||
case B_ACTIVITYRESULTS_NAME_FORMAT_ANON:
|
||||
$thisname = get_string('user');
|
||||
|
||||
@@ -139,7 +139,9 @@ Feature: The activity results block displays student high scores
|
||||
And I should see "70.00" in the "Activity results" "block"
|
||||
|
||||
Scenario: Try to configure the block on the course page to show multiple high scores using ID numbers
|
||||
Given I add the "Activity results" block
|
||||
Given the following config values are set as admin:
|
||||
| showuseridentity | idnumber,email |
|
||||
And I add the "Activity results" block
|
||||
When I configure the "Activity results" block
|
||||
And I set the following fields to these values:
|
||||
| id_config_showbest | 3 |
|
||||
|
||||
@@ -78,7 +78,9 @@ Feature: The activity results block displays students high scores in group as sc
|
||||
And I should see "Good" in the "Activity results" "block"
|
||||
|
||||
Scenario: Try to configure the block on the course page to show multiple high scores using ID numbers
|
||||
Given I add the "Activity results" block
|
||||
Given the following config values are set as admin:
|
||||
| showuseridentity | idnumber,email |
|
||||
And I add the "Activity results" block
|
||||
When I configure the "Activity results" block
|
||||
And I set the following fields to these values:
|
||||
| id_config_showbest | 3 |
|
||||
|
||||
@@ -110,7 +110,9 @@ Feature: The activity results block displays student in group high scores as sca
|
||||
And I should see "Good" in the "Activity results" "block"
|
||||
|
||||
Scenario: Try to configure the block on the course page to show multiple high scores using ID numbers
|
||||
Given I add the "Activity results" block
|
||||
Given the following config values are set as admin:
|
||||
| showuseridentity | idnumber,email |
|
||||
And I add the "Activity results" block
|
||||
When I configure the "Activity results" block
|
||||
And I set the following fields to these values:
|
||||
| id_config_showbest | 3 |
|
||||
@@ -123,11 +125,13 @@ Feature: The activity results block displays student in group high scores as sca
|
||||
And I should see "Very good" in the "Activity results" "block"
|
||||
And I should see "Good" in the "Activity results" "block"
|
||||
And I log out
|
||||
# Students cannot see user identity fields.
|
||||
And I log in as "student1"
|
||||
And I am on "Course 1" course homepage
|
||||
And I should see "User S1" in the "Activity results" "block"
|
||||
And I should see "User" in the "Activity results" "block"
|
||||
And I should not see "User S1" in the "Activity results" "block"
|
||||
And I should see "Excellent!" in the "Activity results" "block"
|
||||
And I should see "User S2" in the "Activity results" "block"
|
||||
And I should not see "User S2" in the "Activity results" "block"
|
||||
And I should see "Very good" in the "Activity results" "block"
|
||||
|
||||
Scenario: Try to configure the block on the course page to show multiple high scores using anonymous names
|
||||
|
||||
@@ -184,7 +184,9 @@ Feature: The activity results block displays student in separate groups scores
|
||||
And I should see "90.00" in the "Activity results" "block"
|
||||
|
||||
Scenario: Try to configure the block on the course page to show multiple high scores using ID numbers
|
||||
Given I add the "Activity results" block
|
||||
Given the following config values are set as admin:
|
||||
| showuseridentity | idnumber,email |
|
||||
And I add the "Activity results" block
|
||||
When I configure the "Activity results" block
|
||||
And I set the following fields to these values:
|
||||
| id_config_showbest | 3 |
|
||||
@@ -198,11 +200,13 @@ Feature: The activity results block displays student in separate groups scores
|
||||
And I should see "85.00%" in the "Activity results" "block"
|
||||
And I should see "75.00%" in the "Activity results" "block"
|
||||
And I log out
|
||||
# Students cannot see user identity fields.
|
||||
And I log in as "student1"
|
||||
And I am on "Course 1" course homepage
|
||||
And I should see "User S1" in the "Activity results" "block"
|
||||
And I should see "User" in the "Activity results" "block"
|
||||
And I should not see "User S1" in the "Activity results" "block"
|
||||
And I should see "100.00%" in the "Activity results" "block"
|
||||
And I should see "User S2" in the "Activity results" "block"
|
||||
And I should not see "User S2" in the "Activity results" "block"
|
||||
And I should see "90.00%" in the "Activity results" "block"
|
||||
|
||||
Scenario: Try to configure the block on the course page to show multiple high scores using anonymous names
|
||||
|
||||
@@ -168,7 +168,9 @@ Feature: The activity results block displays student in visible groups scores
|
||||
And I should see "75.00" in the "Activity results" "block"
|
||||
|
||||
Scenario: Try to configure the block on the course page to show multiple high scores using ID numbers
|
||||
Given I add the "Activity results" block
|
||||
Given the following config values are set as admin:
|
||||
| showuseridentity | idnumber,email |
|
||||
And I add the "Activity results" block
|
||||
When I configure the "Activity results" block
|
||||
And I set the following fields to these values:
|
||||
| id_config_showbest | 3 |
|
||||
|
||||
@@ -128,7 +128,9 @@ Feature: The activity results block displays student low scores
|
||||
And I should see "70.00" in the "Activity results" "block"
|
||||
|
||||
Scenario: Try to configure the block on the course page to show multiple low scores using ID numbers
|
||||
Given I add the "Activity results" block
|
||||
Given the following config values are set as admin:
|
||||
| showuseridentity | idnumber,email |
|
||||
And I add the "Activity results" block
|
||||
When I configure the "Activity results" block
|
||||
And I set the following fields to these values:
|
||||
| id_config_showbest | 0 |
|
||||
|
||||
@@ -79,7 +79,9 @@ Feature: The activity results block displays student low scores as scales
|
||||
And I should see "Good" in the "Activity results" "block"
|
||||
|
||||
Scenario: Try to configure the block on the course page to show multiple low scores using ID numbers
|
||||
Given I add the "Activity results" block
|
||||
Given the following config values are set as admin:
|
||||
| showuseridentity | idnumber,email |
|
||||
And I add the "Activity results" block
|
||||
When I configure the "Activity results" block
|
||||
And I set the following fields to these values:
|
||||
| id_config_showbest | 0 |
|
||||
|
||||
@@ -108,7 +108,9 @@ Feature: The activity results block displays students in groups low scores as sc
|
||||
And I should see "Good" in the "Activity results" "block"
|
||||
|
||||
Scenario: Try to configure the block on the course page to show multiple high scores using ID numbers
|
||||
Given I add the "Activity results" block
|
||||
Given the following config values are set as admin:
|
||||
| showuseridentity | idnumber,email |
|
||||
And I add the "Activity results" block
|
||||
When I configure the "Activity results" block
|
||||
And I set the following fields to these values:
|
||||
| id_config_showbest | 0 |
|
||||
@@ -120,11 +122,13 @@ Feature: The activity results block displays students in groups low scores as sc
|
||||
And I should see "Very good" in the "Activity results" "block"
|
||||
And I should see "Good" in the "Activity results" "block"
|
||||
And I log out
|
||||
# Students cannot see user identity fields.
|
||||
And I log in as "student5"
|
||||
And I am on "Course 1" course homepage
|
||||
And I should see "User S5" in the "Activity results" "block"
|
||||
And I should see "User" in the "Activity results" "block"
|
||||
And I should not see "User S5" in the "Activity results" "block"
|
||||
And I should see "Good" in the "Activity results" "block"
|
||||
And I should see "User S6" in the "Activity results" "block"
|
||||
And I should not see "User S6" in the "Activity results" "block"
|
||||
And I should see "Average" in the "Activity results" "block"
|
||||
|
||||
Scenario: Try to configure the block on the course page to show multiple high scores using anonymous names
|
||||
|
||||
@@ -178,7 +178,9 @@ Feature: The activity results block displays students in separate groups scores
|
||||
And I should see "70.00" in the "Activity results" "block"
|
||||
|
||||
Scenario: Try to configure the block on the course page to show multiple low scores using ID numbers
|
||||
Given I add the "Activity results" block
|
||||
Given the following config values are set as admin:
|
||||
| showuseridentity | idnumber,email |
|
||||
And I add the "Activity results" block
|
||||
When I configure the "Activity results" block
|
||||
And I set the following fields to these values:
|
||||
| id_config_showbest | 0 |
|
||||
@@ -191,11 +193,13 @@ Feature: The activity results block displays students in separate groups scores
|
||||
And I should see "85.00%" in the "Activity results" "block"
|
||||
And I should see "75.00%" in the "Activity results" "block"
|
||||
And I log out
|
||||
# Students cannot see user identity fields.
|
||||
And I log in as "student1"
|
||||
And I am on "Course 1" course homepage
|
||||
And I should see "User S1" in the "Activity results" "block"
|
||||
And I should see "User" in the "Activity results" "block"
|
||||
And I should not see "User S1" in the "Activity results" "block"
|
||||
And I should see "100.00%" in the "Activity results" "block"
|
||||
And I should see "User S2" in the "Activity results" "block"
|
||||
And I should not see "User S2" in the "Activity results" "block"
|
||||
And I should see "90.00%" in the "Activity results" "block"
|
||||
|
||||
Scenario: Try to configure the block on the course page to show multiple low scores using anonymous names
|
||||
|
||||
@@ -166,7 +166,9 @@ Feature: The activity results block displays student in visible groups low score
|
||||
And I should see "75.00" in the "Activity results" "block"
|
||||
|
||||
Scenario: Try to configure the block on the course page to show multiple low scores using ID numbers
|
||||
Given I add the "Activity results" block
|
||||
Given the following config values are set as admin:
|
||||
| showuseridentity | idnumber,email |
|
||||
And I add the "Activity results" block
|
||||
When I configure the "Activity results" block
|
||||
And I set the following fields to these values:
|
||||
| id_config_showbest | 0 |
|
||||
|
||||
@@ -88,14 +88,23 @@ class block_online_users extends block_base {
|
||||
|
||||
$this->content->text = '<div class="info">'.$usercount.' ('.$periodminutes.')</div>';
|
||||
|
||||
// Verify if we can see the list of users, if not just print number of users
|
||||
if (!has_capability('block/online_users:viewlist', $this->page->context)) {
|
||||
// Verify if we can see the list of users, if not just print number of users.
|
||||
// If the current user is not logged in OR it's a guest then don't show any users.
|
||||
if (!has_capability('block/online_users:viewlist', $this->page->context)
|
||||
|| isguestuser() || !isloggedin()) {
|
||||
return $this->content;
|
||||
}
|
||||
|
||||
$userlimit = 50; // We'll just take the most recent 50 maximum.
|
||||
$initialcount = 0;
|
||||
if ($users = $onlineusers->get_users($userlimit)) {
|
||||
require_once($CFG->dirroot . '/user/lib.php');
|
||||
$initialcount = count($users);
|
||||
foreach ($users as $user) {
|
||||
if (!user_can_view_profile($user)) {
|
||||
unset($users[$user->id]);
|
||||
continue;
|
||||
}
|
||||
$users[$user->id]->fullname = fullname($user);
|
||||
}
|
||||
} else {
|
||||
@@ -137,6 +146,14 @@ class block_online_users extends block_base {
|
||||
}
|
||||
$this->content->text .= "</li>\n";
|
||||
}
|
||||
if ($initialcount - count($users) > 0) {
|
||||
$this->content->text .= '<li class="listentry"><div class="otherusers">';
|
||||
$this->content->text .= html_writer::span(
|
||||
get_string('otherusers', 'block_online_users', $initialcount - count($users))
|
||||
);
|
||||
$this->content->text .= "</div>";
|
||||
$this->content->text .= "</li>\n";
|
||||
}
|
||||
$this->content->text .= '</ul><div class="clearer"><!-- --></div>';
|
||||
}
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ class fetcher {
|
||||
$timeaccess = ", ul.timeaccess AS lastaccess";
|
||||
$params = array();
|
||||
|
||||
$userfields = \user_picture::fields('u', array('username'));
|
||||
$userfields = \user_picture::fields('u', array('username', 'deleted'));
|
||||
|
||||
// Add this to the SQL to show only group users.
|
||||
if ($currentgroup !== null) {
|
||||
|
||||
@@ -55,7 +55,7 @@ $capabilities = array(
|
||||
'contextlevel' => CONTEXT_BLOCK,
|
||||
'archetypes' => array(
|
||||
'user' => CAP_ALLOW,
|
||||
'guest' => CAP_ALLOW,
|
||||
'guest' => CAP_PREVENT,
|
||||
'student' => CAP_ALLOW,
|
||||
'teacher' => CAP_ALLOW,
|
||||
'editingteacher' => CAP_ALLOW,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
$string['otherusers'] = 'Other Users ({$a})';
|
||||
$string['configtimetosee'] = 'Number of minutes determining the period of inactivity after which a user is no longer considered to be online.';
|
||||
$string['nouser'] = 'No online users';
|
||||
$string['numuser'] = '{$a} online user';
|
||||
|
||||
@@ -7,6 +7,10 @@
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.block_online_users .content .list li.listentry .otherusers {
|
||||
margin-left: 1.5rem;
|
||||
}
|
||||
|
||||
.block_online_users .content .list li.listentry .user .userpicture {
|
||||
vertical-align: text-bottom;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
@block @block_online_users
|
||||
Feature: The online users block allow you to see who is currently online on dashboard
|
||||
There should be some commonality for the users to show up
|
||||
In order to use the online users block on the dashboard
|
||||
As a user
|
||||
I can view the online users block on my dashboard
|
||||
@@ -10,6 +11,14 @@ Feature: The online users block allow you to see who is currently online on dash
|
||||
| teacher1 | Teacher | 1 | teacher1@example.com |
|
||||
| student1 | Student | 1 | student1@example.com |
|
||||
| student2 | Student | 2 | student2@example.com |
|
||||
And the following "courses" exist:
|
||||
| fullname | shortname | category |
|
||||
| Course 1 | C1 | 0 |
|
||||
And the following "course enrolments" exist:
|
||||
| user | course | role |
|
||||
| teacher1 | C1 | editingteacher |
|
||||
| student1 | C1 | student |
|
||||
| student2 | C1 | student |
|
||||
|
||||
Scenario: View the online users block on the dashboard and see myself
|
||||
Given I log in as "teacher1"
|
||||
|
||||
@@ -1,14 +1,22 @@
|
||||
@block @block_online_users
|
||||
Feature: The online users block allow you to see who is currently online on frontpage
|
||||
In order to enable the online users block on the front page page
|
||||
There should be some commonality for the users to show up
|
||||
In order to enable the online users block on the frontpage
|
||||
As an admin
|
||||
I can add the online users block to the front page page
|
||||
I can add the online users block to the frontpage
|
||||
|
||||
Background:
|
||||
Given the following "users" exist:
|
||||
| username | firstname | lastname | email |
|
||||
| student1 | Student | 1 | student1@example.com |
|
||||
| student2 | Student | 2 | student2@example.com |
|
||||
And the following "courses" exist:
|
||||
| fullname | shortname | category |
|
||||
| Course 1 | C1 | 0 |
|
||||
And the following "course enrolments" exist:
|
||||
| user | course | role |
|
||||
| student1 | C1 | student |
|
||||
| student2 | C1 | student |
|
||||
|
||||
Scenario: View the online users block on the front page and see myself
|
||||
Given I log in as "admin"
|
||||
@@ -28,7 +36,8 @@ Feature: The online users block allow you to see who is currently online on fron
|
||||
And I log out
|
||||
When I log in as "student1"
|
||||
And I am on site homepage
|
||||
Then I should see "Admin User" in the "Online users" "block"
|
||||
Then I should not see "Admin User" in the "Online users" "block"
|
||||
And I should see "Other Users (1)" in the "Online users" "block"
|
||||
And I should see "Student 1" in the "Online users" "block"
|
||||
And I should see "Student 2" in the "Online users" "block"
|
||||
And I should see "3 online users" in the "Online users" "block"
|
||||
@@ -45,7 +54,7 @@ Feature: The online users block allow you to see who is currently online on fron
|
||||
And I log out
|
||||
When I log in as "guest"
|
||||
And I am on site homepage
|
||||
Then I should see "Admin User" in the "Online users" "block"
|
||||
And I should see "Student 1" in the "Online users" "block"
|
||||
And I should see "Student 2" in the "Online users" "block"
|
||||
Then I should not see "Admin User" in the "Online users" "block"
|
||||
And I should not see "Student 1" in the "Online users" "block"
|
||||
And I should not see "Student 2" in the "Online users" "block"
|
||||
And I should see "3 online users" in the "Online users" "block"
|
||||
|
||||
@@ -24,6 +24,6 @@
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
|
||||
$plugin->version = 2018051401; // The current plugin version (Date: YYYYMMDDXX)
|
||||
$plugin->requires = 2018050800; // Requires this Moodle version
|
||||
$plugin->component = 'block_online_users'; // Full name of the plugin (used for diagnostics)
|
||||
|
||||
@@ -295,11 +295,15 @@ class core_enrol_external extends external_api {
|
||||
global $CFG, $USER, $DB;
|
||||
|
||||
require_once($CFG->dirroot . '/course/lib.php');
|
||||
require_once($CFG->dirroot . '/user/lib.php');
|
||||
|
||||
// Do basic automatic PARAM checks on incoming data, using params description
|
||||
// If any problems are found then exceptions are thrown with helpful error messages
|
||||
$params = self::validate_parameters(self::get_users_courses_parameters(), array('userid'=>$userid));
|
||||
$userid = $params['userid'];
|
||||
|
||||
// Get user data including last access to courses.
|
||||
$user = get_complete_user_data('id', $userid);
|
||||
$sameuser = $USER->id == $userid;
|
||||
|
||||
$courses = enrol_get_users_courses($params['userid'], true, 'id, shortname, fullname, idnumber, visible,
|
||||
@@ -315,8 +319,8 @@ class core_enrol_external extends external_api {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!$sameuser and !course_can_view_participants($context)) {
|
||||
// we need capability to view participants
|
||||
// If viewing details of another user, then we must be able to view participants as well as profile of that user.
|
||||
if (!$sameuser && (!course_can_view_participants($context) || !user_can_view_profile($user, $course))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -1150,7 +1150,7 @@ class course_enrolment_manager {
|
||||
);
|
||||
|
||||
foreach ($extrafields as $field) {
|
||||
$details[$field] = $user->{$field};
|
||||
$details[$field] = s($user->{$field});
|
||||
}
|
||||
|
||||
// Last time user has accessed the site.
|
||||
|
||||
@@ -464,6 +464,81 @@ class core_enrol_externallib_testcase extends externallib_advanced_testcase {
|
||||
$this->assertEquals(null, $enrolledincourses[0]['progress']); // I can't see this, private.
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that get_users_courses respects the capability to view participants when viewing courses of other user
|
||||
*/
|
||||
public function test_get_users_courses_can_view_participants() {
|
||||
global $DB;
|
||||
|
||||
$this->resetAfterTest();
|
||||
|
||||
$course = $this->getDataGenerator()->create_course();
|
||||
$context = context_course::instance($course->id);
|
||||
|
||||
$user1 = $this->getDataGenerator()->create_and_enrol($course, 'student');
|
||||
$user2 = $this->getDataGenerator()->create_and_enrol($course, 'student');
|
||||
|
||||
$this->setUser($user1);
|
||||
|
||||
$courses = core_enrol_external::clean_returnvalue(
|
||||
core_enrol_external::get_users_courses_returns(),
|
||||
core_enrol_external::get_users_courses($user2->id, false)
|
||||
);
|
||||
|
||||
$this->assertCount(1, $courses);
|
||||
$this->assertEquals($course->id, reset($courses)['id']);
|
||||
|
||||
// Prohibit the capability for viewing course participants.
|
||||
$studentrole = $DB->get_field('role', 'id', ['shortname' => 'student']);
|
||||
assign_capability('moodle/course:viewparticipants', CAP_PROHIBIT, $studentrole, $context->id);
|
||||
|
||||
$courses = core_enrol_external::clean_returnvalue(
|
||||
core_enrol_external::get_users_courses_returns(),
|
||||
core_enrol_external::get_users_courses($user2->id, false)
|
||||
);
|
||||
$this->assertEmpty($courses);
|
||||
}
|
||||
|
||||
/*
|
||||
* Test that get_users_courses respects the capability to view a users profile when viewing courses of other user
|
||||
*/
|
||||
public function test_get_users_courses_can_view_profile() {
|
||||
$this->resetAfterTest();
|
||||
|
||||
$course = $this->getDataGenerator()->create_course([
|
||||
'groupmode' => VISIBLEGROUPS,
|
||||
]);
|
||||
|
||||
$user1 = $this->getDataGenerator()->create_and_enrol($course, 'student');
|
||||
$user2 = $this->getDataGenerator()->create_and_enrol($course, 'student');
|
||||
|
||||
// Create separate groups for each of our students.
|
||||
$group1 = $this->getDataGenerator()->create_group(['courseid' => $course->id]);
|
||||
groups_add_member($group1, $user1);
|
||||
$group2 = $this->getDataGenerator()->create_group(['courseid' => $course->id]);
|
||||
groups_add_member($group2, $user2);
|
||||
|
||||
$this->setUser($user1);
|
||||
|
||||
$courses = core_enrol_external::clean_returnvalue(
|
||||
core_enrol_external::get_users_courses_returns(),
|
||||
core_enrol_external::get_users_courses($user2->id, false)
|
||||
);
|
||||
|
||||
$this->assertCount(1, $courses);
|
||||
$this->assertEquals($course->id, reset($courses)['id']);
|
||||
|
||||
// Change to separate groups mode, so students can't view information about each other in different groups.
|
||||
$course->groupmode = SEPARATEGROUPS;
|
||||
update_course($course);
|
||||
|
||||
$courses = core_enrol_external::clean_returnvalue(
|
||||
core_enrol_external::get_users_courses_returns(),
|
||||
core_enrol_external::get_users_courses($user2->id, false)
|
||||
);
|
||||
$this->assertEmpty($courses);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test get_course_enrolment_methods
|
||||
*/
|
||||
|
||||
@@ -1 +1 @@
|
||||
define(["jquery","core/templates","core/notification","core/yui"],function(a,b,c){return{initialise:function(d,e,f,g){function h(b,c){var e="<label>"+M.util.get_string("insertcomment","gradingform_guide")+"</label>",g="comment-chooser-"+d+"-cancel",h='<button id="'+g+'">'+M.util.get_string("cancel","moodle")+"</button>",i=new M.core.dialogue({modal:!0,headerContent:e,bodyContent:b,footerContent:h,focusAfterHide:"#"+f,id:"comments-chooser-dialog-"+d});a("#"+g).click(function(){i.hide()}),a.each(c,function(b,c){var e="#comment-option-"+d+"-"+c.id;a(e).click(function(){var b=a("#"+f),d=b.val();""!==a.trim(d)&&(d+="\n"),d+=c.description,b.val(d),i.hide()}),a(document).off("keypress",e).on("keypress",e,function(){var b=event.which||event.keyCode;13!=b&&32!=b||a(e).click()})}),i.after("visibleChange",function(a){a.prevVal&&!a.newVal&&this.destroy()},i),i.show()}function i(){var a={criterionId:d,comments:g};b.render("gradingform_guide/comment_chooser",a).done(function(a){h(a,g)}).fail(c.exception)}a("#"+e).click(function(a){a.preventDefault(),i()})}}});
|
||||
define(["jquery","core/templates","core/notification","core/yui"],function(a,b,c){return{initialise:function(d,e,f,g){function h(b,c){var e="<label>"+M.util.get_string("insertcomment","gradingform_guide")+"</label>",g="comment-chooser-"+d+"-cancel",h='<button id="'+g+'">'+M.util.get_string("cancel","moodle")+"</button>",i=new M.core.dialogue({modal:!0,headerContent:e,bodyContent:b,footerContent:h,focusAfterHide:"#"+f,id:"comments-chooser-dialog-"+d});a("#"+g).click(function(){i.hide()}),a.each(c,function(b,c){var e="#comment-option-"+d+"-"+c.id;a(e).click(function(){var b=a("#"+f),d=b.val();""!==d.trim()&&(d+="\n"),d+=c.description,b.val(d),i.hide()}),a(document).off("keypress",e).on("keypress",e,function(){var b=event.which||event.keyCode;13!=b&&32!=b||a(e).click()})}),i.after("visibleChange",function(a){a.prevVal&&!a.newVal&&this.destroy()},i),i.show()}function i(){var a={criterionId:d,comments:g};b.render("gradingform_guide/comment_chooser",a).done(function(a){h(a,g)}).fail(c.exception)}a("#"+e).click(function(a){a.preventDefault(),i()})}}});
|
||||
@@ -77,7 +77,7 @@ define(['jquery', 'core/templates', 'core/notification', 'core/yui'], function($
|
||||
var remarkText = remarkTextArea.val();
|
||||
|
||||
// Add line break if the current value of the remark text is not empty.
|
||||
if ($.trim(remarkText) !== '') {
|
||||
if (remarkText.trim() !== '') {
|
||||
remarkText += '\n';
|
||||
}
|
||||
remarkText += comment.description;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -767,7 +767,7 @@ class grade_report_grader extends grade_report {
|
||||
$fieldcell = new html_table_cell();
|
||||
$fieldcell->attributes['class'] = 'userfield user' . $field;
|
||||
$fieldcell->header = false;
|
||||
$fieldcell->text = $user->{$field};
|
||||
$fieldcell->text = s($user->{$field});
|
||||
$userrow->cells[] = $fieldcell;
|
||||
}
|
||||
|
||||
|
||||
@@ -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,15 +30,15 @@
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$string['clianswerno'] = 'n';
|
||||
$string['cliansweryes'] = 'y';
|
||||
$string['cliansweryes'] = 'j';
|
||||
$string['cliincorrectvalueerror'] = 'Fout, verkeerde waarde "{$a->value}" vir "{$a->option}"';
|
||||
$string['cliincorrectvalueretry'] = 'Verkeerde waarde, probeer weer';
|
||||
$string['clitypevalue'] = 'tipe waarde';
|
||||
$string['clitypevaluedefault'] = 'tipe waarde, druk Enter om die standaard waarde te gebruik ({$a})';
|
||||
$string['cliunknowoption'] = 'Nie-erkende opsies:
|
||||
$string['clitypevaluedefault'] = 'tipe waarde, druk Enter om die verstekwaarde te gebruik ({$a})';
|
||||
$string['cliunknowoption'] = 'Onerkende opsies:
|
||||
{$a}
|
||||
Gebruik die --help opsie.';
|
||||
$string['cliyesnoprompt'] = 'Tik y (beteken ja) of n (beteken nee)';
|
||||
$string['environmentrequireinstall'] = 'moet geïnstalleer en geaktiveer wees';
|
||||
$string['environmentrequireversion'] = 'weergawe {$a->needed} word benodig en jy het tans {$a->current}';
|
||||
$string['upgradekeyset'] = 'Opgradering sleutel (los skoon om nie te stel nie)';
|
||||
Gebruik asseblief die --help opsie.';
|
||||
$string['cliyesnoprompt'] = 'Tik j (beteken ja) of n (beteken nee)';
|
||||
$string['environmentrequireinstall'] = 'moet geïnstalleer en ontsper wees';
|
||||
$string['environmentrequireversion'] = 'weergawe {$a->needed} word benodig en jy hardloop tans {$a->current}';
|
||||
$string['upgradekeyset'] = 'Opgradering sleutel (los oop om nie in te stel nie)';
|
||||
|
||||
@@ -45,3 +45,8 @@ $string['dmlexceptiononinstall'] = '<p>\'n Databasisfout het opgeduik [{$a->erro
|
||||
$string['downloadedfilecheckfailed'] = 'Kontrolering van afgelaaide lêer het misluk';
|
||||
$string['invalidmd5'] = 'Die kontroleveranderlike was verkeerd - probeer weer';
|
||||
$string['missingrequiredfield'] = 'Een of ander verlangde veld ontbreek';
|
||||
$string['remotedownloaderror'] = '<p>Die aflaai van die komponent na jou bediener het misluk. Verifieer asseblief instaanbediener se instellings; die uitbreiding PHP cURL word hoogs aanbeveel.</p>
|
||||
<p>Jy moet die <a href="{$a->url}">{$a->url}</a>-lêer handmatig aflaai, dit na "{$a->dest}" in jou bediener kopieer en dit daar uitpak.</p>';
|
||||
$string['wrongdestpath'] = 'Verkeerde bestemmingsroete';
|
||||
$string['wrongsourcebase'] = 'Verkeerde bron vir URL-basis';
|
||||
$string['wrongzipfilename'] = 'Verkeerde ZIP-lêernaam';
|
||||
|
||||
@@ -29,4 +29,66 @@
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$string['availablelangs'] = 'Beskikbare taal pakkette';
|
||||
$string['admindirname'] = 'Admingids';
|
||||
$string['availablelangs'] = 'Beskikbare taalpakkette';
|
||||
$string['chooselanguagehead'] = 'Kies \'n taal';
|
||||
$string['chooselanguagesub'] = 'Kies asseblief \'n taal vir die installasie. Hierdie taal sal ook as die verstektaal vir die webwerf gebruik word, alhoewel dit later verander kan word.';
|
||||
$string['clialreadyconfigured'] = 'Die konfigurasielêer config.php bestaan reeds. Gebruik admin/cli/install_database.php asseblief om Moodle vir hierdie webwerf te installeer.';
|
||||
$string['clialreadyinstalled'] = 'Die konfigurasielêer config.php bestaan reeds. Gebruik admin/cli/install_database.php asseblief om Moodle vir hierdie webwerf by te werk.';
|
||||
$string['cliinstallheader'] = 'Installasieprogram vir Moodle-{$a}-opdraglyn';
|
||||
$string['databasehost'] = 'Databasisgasheer';
|
||||
$string['databasename'] = 'Databasisnaam';
|
||||
$string['databasetypehead'] = 'Kies databasisdrywer';
|
||||
$string['dataroot'] = 'Datagids';
|
||||
$string['datarootpermission'] = 'Datagidstoestemming';
|
||||
$string['dbprefix'] = 'Tabelvoorvoegsel';
|
||||
$string['dirroot'] = 'Moodle-gids';
|
||||
$string['environmenthead'] = 'Gaan tans jou omgewing na ...';
|
||||
$string['environmentsub2'] = 'Elke Moodle-vrystelling het \'n paar minimumvereistes vir PHP-weergawes en \'n aantal verpligte PHP-uitbreidings.
|
||||
Volledige omgewingskontrole word vóór elke installasie en opgradering gedoen. Kontak bedieneradministrateur asseblief as jy nie weet hoe om nuwe weergawe te installeer of PHP-uitbreidings te ontsper nie.';
|
||||
$string['errorsinenvironment'] = 'Omgewingskontrole het misluk!';
|
||||
$string['installation'] = 'Installasie';
|
||||
$string['langdownloaderror'] = 'Jammer, die taal "{$a}" kon nie afgelaai word nie. Die installasieproses sal in Engels voortgesit word.';
|
||||
$string['memorylimithelp'] = '<p>Die PHP-geheueperk vir jou bediener is tans op {$a} gestel.</p>
|
||||
|
||||
<p>Dit kan veroorsaak dat Moodle mettertyd geheueprobleme ervaar, veral as baie modules aangeskakel en/of daar baie gebruikers is.</p>
|
||||
|
||||
<p>Ons beveel aan dat jy, indien moontlik, PHP herkonfigureer met \'n hoër perk, soos 40M.
|
||||
Jy kan verskeie maniere probeer om dit te doen:</p>
|
||||
<ol>
|
||||
<li>As jy kan, herkompileer PHP met <i>--enable-memory-limit</i>.
|
||||
Dit sal Moodle in staat stel om self die geheueperk te stel.</li>
|
||||
<li>As jy toegang tot jou php.ini-lêer het, kan jy die <b>memory_limit</b>-instelling daarin verander tot iets soos 40M. As jy nie toegang het nie, kan jy dalk jou administrateur vra om dit vir jou te doen.</li>
|
||||
<li>Op sommige PHP-bedieners kan jy \'n .htaccess-lêer in die Moodle-gids skep wat hierdie lyn bevat:
|
||||
<blockquote><div>php_value memory_limit 40M</div></blockquote>
|
||||
<p>Op sommige bedieners kan dit egter verhoed dat <b>alle</b> PHP-blaaie werk (jy sal foute sien wanneer jy na die blaaie kyk), en daarom sal jy die .htaccess-lêer moet verwyder.</p></li>
|
||||
</ol>';
|
||||
$string['paths'] = 'Roetes';
|
||||
$string['pathserrcreatedataroot'] = 'Datagids ({$a->dataroot}) kan nie deur installeerder geskep word nie.';
|
||||
$string['pathshead'] = 'Bevestig roetes';
|
||||
$string['pathsrodataroot'] = 'Datastamgids is nie skryfbaar nie.';
|
||||
$string['pathsroparentdataroot'] = 'Moedergids ({$a->parent}) is nie skryfbaar nie. Datagids ({$a->dataroot}) kan nie deur installeerder geskep word nie.';
|
||||
$string['pathssubadmindir'] = 'Slegs \'n paar webgashere gebruik /admin \'n spesiale URL sodat jy toegang tot \'n kontrolepaneel of iets dergliks kan verkry. Ongelukkig bots dit met die standaardligging vir die Moodle-adminblaaie. Jy kan dit regstel deur die admingids in jou installasie te herbenaam, en daardie nuwe naam hier aan te bring. Byvoorbeeld: <em>moodleadmin</em>. Dit sal die adminskakels in Moodle regstel.';
|
||||
$string['pathssubdataroot'] = '<p>\'n Gids waar Moodle alle lêerinhoud wat deur gebruikers opgelaai is, sal stoor.</p>
|
||||
<p>Hierdie gids moet vir die gebruiker van die webbediener (gewoonlik \'www-data\', \'niemand\' of \'apache\') leesbaar en skryfbaar wees.</p>
|
||||
</p>Dit moet nie regstreeks via die web toeganklik wees nie.</p>
|
||||
<p>As die gids nie tans bestaan nie, sal die installasieproses probeer om dit te skep.</p>';
|
||||
$string['pathssubdirroot'] = '<p>Die volledige roete na die gids wat die Moodle-kode bevat.</p>';
|
||||
$string['pathssubwwwroot'] = '<p>Die volledige adres waar toegang tot Moodle verkry sal word, d.w.s. die adres wat gebruikers in die adresbalk van hul blaaier sal intik om toegang tot Moodle te verkry.</p>
|
||||
<p>Dit is nie moontlik om toegang tot Moodle te verkry deur van veelvoudige adresse gebruik te maak nie. As jou webwerf via veelvoudige adresse toeganklik is, kies dan die maklikste een en stel \'n permanente heradressering vir elk van die ander adresse op.</p>
|
||||
<p>As jou webwerf beide via die Internet en \'n interne netwerk (soms bekend as \'n Intranet) toeganklik is, gebruik dan die publieke adres hier.</p>
|
||||
<p>As die huidige adres nie korrek is nie, verander asseblief die URL in jou blaaier se adresbalk en herbegin die installasie.</p>';
|
||||
$string['pathsunsecuredataroot'] = 'Ligging van datastam is nie veilig nie';
|
||||
$string['pathswrongadmindir'] = 'Admingids bestaan nie';
|
||||
$string['phpextension'] = '{$a} PHP-uitbreiding';
|
||||
$string['phpversion'] = 'PHP-weergawe';
|
||||
$string['phpversionhelp'] = '<p>Moodle vereis \'n PHP-weergawe van ten minste 5.6.5 of 7.1 (7.0.x het \'n paar enjinbeperkings).</p>
|
||||
<p>Jy gebruik tans weergawe {$a}.</p>
|
||||
<p>Jy moet PHP opgradeer of na \'n gasheer met \'n nuwer weergawe van PHP verskuif.</p>';
|
||||
$string['welcomep10'] = '{$a->installername} ({$a->installerversion})';
|
||||
$string['welcomep20'] = 'Jy sien hierdie blad omdat jy die <strong>{$a->packname} {$a->packversion}</strong>-pakket suksesvol geïnstalleer en op jou rekenaar laat loop het. Baie geluk!';
|
||||
$string['welcomep30'] = 'Hierdie vrystelling van die <strong>{$a->installername}</strong> sluit die toepassings in om \'n omgewing te skep waarbinne <strong>Moodle</strong> gaan funksioneer, naamlik:';
|
||||
$string['welcomep40'] = 'Die pakket sluit ook <strong>Moodle {$a->moodlerelease} ({$a->moodleversion})</strong> in.';
|
||||
$string['welcomep60'] = 'Die volgende blaaie gaan jou deur \'n paar maklik volgbare stappe lei om <strong>Moodle</strong> op jou rekenaar te konfigureer en op te stel. Jy kan die verstekinstellings aanvaar of, opsioneel, hulle wysig om by jou eie behoeftes te pas.';
|
||||
$string['welcomep70'] = 'Klik die "Volgende"-knoppie hieronder om voort te gaan met die opstelling van <strong>Moodle</strong>.';
|
||||
$string['wwwroot'] = 'Webadres';
|
||||
|
||||
@@ -29,4 +29,5 @@
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$string['thisdirection'] = 'ltr';
|
||||
$string['thislanguage'] = 'Afrikaans';
|
||||
|
||||
@@ -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';
|
||||
@@ -33,7 +33,7 @@ $string['cannotcreatedboninstall'] = '<p>Die Datenbank konnte nicht angelegt wer
|
||||
$string['cannotcreatelangdir'] = 'Das Verzeichnis \'lang\' wurde nicht angelegt.';
|
||||
$string['cannotcreatetempdir'] = 'Das Verzeichnis \'temp\' wurde nicht angelegt.';
|
||||
$string['cannotdownloadcomponents'] = 'Einige Komponenten können nicht geladen werden.';
|
||||
$string['cannotdownloadzipfile'] = 'ZIP-Datei kann nicht heruntergeladen werden.';
|
||||
$string['cannotdownloadzipfile'] = 'Die ZIP-Datei kann nicht heruntergeladen werden';
|
||||
$string['cannotfindcomponent'] = 'Die Komponente kann nicht gefunden werden.';
|
||||
$string['cannotsavemd5file'] = 'Die md5-Datei wurde nicht gespeichert.';
|
||||
$string['cannotsavezipfile'] = 'Die ZIP-Datei wurde nicht gespeichert.';
|
||||
|
||||
@@ -73,7 +73,7 @@ $string['pathswrongadmindir'] = 'Das Admin-Verzeichnis existiert nicht';
|
||||
$string['phpextension'] = 'PHP-Extension {$a}';
|
||||
$string['phpversion'] = 'PHP-Version';
|
||||
$string['phpversionhelp'] = '<p>Moodle benötigt mindestens die PHP-Version 5.6.5. oder 7.1 (7.0.x weist einige Einschränkungen auf).</p>
|
||||
<p>Sie nutzen im Moment die Version {$a}.</p>
|
||||
<p>Sie verwenden im Moment die Version {$a}.</p>
|
||||
<p>Sie müssen Ihre PHP-Version aktualisieren oder auf einen Server mit einer neueren PHP-Version wechseln.<br />';
|
||||
$string['welcomep10'] = '{$a->installername} ({$a->installerversion})';
|
||||
$string['welcomep20'] = 'Sie haben das Paket <strong>{$a->packname} {$a->packversion}</strong> erfolgreich auf Ihrem Computer installiert.';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
<?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['thislanguage'] = 'ᐃᓄᒃᑎᑐᑦ';
|
||||
@@ -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';
|
||||
|
||||
@@ -38,5 +38,6 @@ $string['clitypevaluedefault'] = 'Vložte hodnotu a stlačte klávesu Enter pre
|
||||
$string['cliunknowoption'] = 'Nerozoznané voľby: {$a}
|
||||
Prosím, použite možnosť --help.';
|
||||
$string['cliyesnoprompt'] = 'Zvolte A (Áno) alebo N (Nie)';
|
||||
$string['environmentrequireinstall'] = 'vyžadovaný komponent';
|
||||
$string['environmentrequireinstall'] = 'musí by byť nainštalované a povolené';
|
||||
$string['environmentrequireversion'] = 'vyžadovaná je verzia {$a->needed}, teraz používate verziu {$a->current}';
|
||||
$string['upgradekeyset'] = 'Kľúč pre aktualizáciu (nechajte prázdne, ak nechcete nastaviť)';
|
||||
|
||||
@@ -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,11 +75,11 @@ $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 верзија';
|
||||
$string['phpversionhelp'] = '<p>Moodle захтева најмање PHP верзију 5.6.5 или 7.1 (7.0.x има нека ограничења).</p>
|
||||
$string['phpversionhelp'] = '<p>Moodle захтева PHP верзију барем 5.6.5 или 7.1 (7.0.x има нека ограничења).</p>
|
||||
<p>Тренутно користите верзију {$a}</p>
|
||||
<p>Морате да надоградите PHP или да преместити Moodle на веб сервер са новијом верзијом PHP-a.</p>';
|
||||
$string['welcomep10'] = '{$a->installername} ({$a->installerversion})';
|
||||
|
||||
@@ -72,11 +72,11 @@ $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';
|
||||
$string['phpversionhelp'] = '<p>Moodle zahteva najmanje PHP verziju 5.6.5 ili 7.1 (7.0.x ima neka ograničenja).</p>
|
||||
$string['phpversionhelp'] = '<p>Moodle zahteva PHP verziju barem 5.6.5 ili 7.1 (7.0.x ima neka ograničenja).</p>
|
||||
<p>Trenutno koristite verziju {$a}</p>
|
||||
<p>Morate da nadogradite PHP ili da premestiti Moodle na veb server sa novijom verzijom PHP-a.</p>';
|
||||
$string['welcomep10'] = '{$a->installername} ({$a->installerversion})';
|
||||
|
||||
@@ -33,9 +33,12 @@ $string['clianswerno'] = 'n';
|
||||
$string['cliansweryes'] = 'y';
|
||||
$string['cliincorrectvalueerror'] = 'Fel, värdet "{$a->value}" för "{$a->option}" är inte korrekt.';
|
||||
$string['cliincorrectvalueretry'] = 'Felaktigt värde, var snäll och försök igen';
|
||||
$string['clitypevalue'] = 'Värde för typ';
|
||||
$string['clitypevaluedefault'] = 'skriv in värdet, klicka på "Enter" om du vill använda standardvärdet ({$a})';
|
||||
$string['cliunknowoption'] = 'Ej identifierade alternativ: {$a} Var snäll och använd alternativet Hjälp.';
|
||||
$string['cliyesnoprompt'] = 'skriv in y (betyder ja) eller n (betyder nej)';
|
||||
$string['clitypevalue'] = 'ange värde';
|
||||
$string['clitypevaluedefault'] = 'ange värde. Tryck på <em>Enter</em> för att använda standardvärdet ({$a})';
|
||||
$string['cliunknowoption'] = 'Okända alternativ:
|
||||
{$a}
|
||||
Vänligen använd <code>--help</code> för hjälp med möjliga alternativ.';
|
||||
$string['cliyesnoprompt'] = 'ange <em>y</em> (betyder ja) eller <em>n</em> (betyder nej)';
|
||||
$string['environmentrequireinstall'] = 'måste vara installerat och aktiverat';
|
||||
$string['environmentrequireversion'] = 'version {$a->needed} krävs och du använder {$a->current}';
|
||||
$string['upgradekeyset'] = 'Uppgraderingsnyckel (lämna tom för att inte ange någon)';
|
||||
|
||||
@@ -36,16 +36,16 @@ $string['cannotcreatelangdir'] = 'Det går inte att skapa lang-katalogen';
|
||||
$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'] = 'Det går inte att hitta komponent';
|
||||
$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['componentisuptodate'] = 'Komponenten är av en aktuell version';
|
||||
$string['cannotfindcomponent'] = 'Hittar inte komponenten';
|
||||
$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'] = 'Det gick inte att kontrollera den nedladdade filen';
|
||||
$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';
|
||||
|
||||
+52
-28
@@ -29,48 +29,72 @@
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$string['admindirname'] = 'Katalog/mapp för administration';
|
||||
$string['admindirname'] = 'Admin-katalog';
|
||||
$string['availablelangs'] = 'Tillgängliga språkpaket';
|
||||
$string['chooselanguagehead'] = 'Välj ett språk';
|
||||
$string['chooselanguagesub'] = 'Vänligen välj ett språk för installationen. Du kommer att ha möjlighet att välja språk för webbplatsen och användarna på en senare skärm.';
|
||||
$string['clialreadyconfigured'] = 'Filen <em>config.php</em> finns redan. Använd <code>admin/cli/install_database.php</code> för att installera Moodle på denna server.';
|
||||
$string['clialreadyinstalled'] = 'Filen config.php finns redan. Vänligen använd admin/cli/upgrade.php om Du vill uppgradera Din webbplats.';
|
||||
$string['cliinstallheader'] = 'Installationsprogram av typ kommandorad {$a} för Moodle ';
|
||||
$string['databasehost'] = 'Värd för databas';
|
||||
$string['cliinstallheader'] = 'Kommandoradsbaserat installationsprogram för Moodle {$a}';
|
||||
$string['databasehost'] = 'Databasserver';
|
||||
$string['databasename'] = 'Namn på databas';
|
||||
$string['databasetypehead'] = 'Välj drivrutin för databasen';
|
||||
$string['dataroot'] = 'katalog för data';
|
||||
$string['dataroot'] = 'Datakatalog';
|
||||
$string['datarootpermission'] = 'Behörigheter för datakataloger';
|
||||
$string['dbprefix'] = 'Prefix för tabeller';
|
||||
$string['dirroot'] = 'Katalogen för Moodle';
|
||||
$string['environmenthead'] = 'Undersöker din miljö...';
|
||||
$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.';
|
||||
$string['memorylimithelp'] = '<p>Den aktuella minnesbegränsningen för PHP på din server är inställt till {$a}.</p>
|
||||
<p>Detta kan förorsaka att Moodle får minnesproblem senare, särskilt om du har aktiverat många moduler och/eller har många användare.</p>
|
||||
<p>Vi rekommenderar att du konfigurerar PHP med en högre begränsning, som t ex 16M. Det finns flera sätt att göra detta som du kan pröva med:</p> <ol>
|
||||
<li>Om du har möjlighet till det så kan du kompilera om PHP med<i>--enable-memory-limit </i>Detta gör det möjligt för Moodle att ställa in minnesbegränsningen själv. </li>
|
||||
<li>Om du har tillgång till din php.ini-fil så kan du ändra inställningen för <b>memory limit</b> till något i stil med 16M. Om du inte har tillgång själv så kan du kanske be din systemadministratör att göra detta åt dig.</li>
|
||||
<li>På en del PHP-servrar kan du skapa en .htaccess-fil i Moodle-katalogen som innehåller den här raden: <blockquote>php_value memory_limit 16M</blockquote>.<br />Detta kan dock på en del servrar leda till att <b>inga</b> PHP-sidor fungerar. (Du får Error-sidor istället för de riktiga) så då får du ta bort .htaccess-filen.</li>
|
||||
$string['memorylimithelp'] = '<p>PHP-minnesgränsen för servern är för närvarande inställd på {$a}.</p>
|
||||
|
||||
<p>Detta kan leda till att Moodle får minnesproblem senare, särskilt om du har många moduler aktiverade och/eller många användare.</p>
|
||||
|
||||
<p>Vi rekommenderar att du konfigurerar PHP med en högre gräns om möjligt, till exempel 40M.
|
||||
Det finns flera sätt som du kan prova att göra detta på:</p>
|
||||
<ol>
|
||||
<li>Om du kan, kompilera om PHP med <code>--enable-memory-limit</code>.
|
||||
Detta gör det möjligt för Moodle att själv ställa in minnesgränsen.</li>
|
||||
<li>Om du har tillgång till din php.ini fil kan du ändra <code>memory_limit</code>
|
||||
inställningen till t.ex. 40M. Om du inte har åtkomst kan du be administratören göra detta åt dig.</li>
|
||||
<li>På vissa PHP-servrar kan du skapa en HTACCESS-fil i Moodle-katalogen
|
||||
som innehåller denna rad:
|
||||
<blockquote><div>php_value memory_limit 40M</div></blockquote>
|
||||
<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'] = 'Vägar';
|
||||
$string['pathserrcreatedataroot'] = 'Datakatalogen ({$a->dataroot}) går inte att skapa med hjälp av installeraren.';
|
||||
$string['pathshead'] = 'Bekräfta vägar';
|
||||
$string['pathsrodataroot'] = 'Det går inte att skriva till katalogen för dataroot';
|
||||
$string['pathsroparentdataroot'] = 'Det går inte att skriva till föräldrakatalogen ({$a->parent}). Det går inte att installera datakatalogen ({$a->dataroot}) med hjälp av installeraren. ';
|
||||
$string['pathssubdirroot'] = 'Full sökväg till installationen av Moodle.';
|
||||
$string['pathsunsecuredataroot'] = 'Placeringen av dataroot är inte säker';
|
||||
$string['pathswrongadmindir'] = 'Katalogen för admin saknas';
|
||||
$string['phpextension'] = '{$a} PHP tillägg';
|
||||
$string['paths'] = 'Sökvägar';
|
||||
$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';
|
||||
$string['phpversion'] = 'PHP-version';
|
||||
$string['phpversionhelp'] = '<p>Moodle kräver minst PHP 4.3.0 eller 5.1.0 (det finns ett antal kända problem med 5.0.x)</p>
|
||||
<p>Du använder f n version {$a}</p>
|
||||
<p>Du måste uppgradera PHP eller flytta till en värd som har en nyare version av PHP! Om Du har 5.0.x så bör Du nedgradera till 4.4.x.</p>';
|
||||
$string['phpversionhelp'] = '<p>Moodle kräver minst PHP-version 5.6.5 eller 7.1 (7.0.x har vissa motorbegränsningar).</p>
|
||||
<p>Du använder för närvarande version {$a}.</p>
|
||||
<p>Du måste uppgradera PHP eller flytta till en server med en nyare version av PHP.</p>';
|
||||
$string['welcomep10'] = '{$a->installername} ({$a->installerversion})';
|
||||
$string['welcomep20'] = 'Du ser detta eftersom du framgångsrikt har installerat och börjat använda språkpaketet <strong>{$a->packname} {$a->packversion}</strong> på din dator. Gratulerar!';
|
||||
$string['welcomep30'] = 'I den här versionen av <strong>{$a->installername}</strong> ingår de applikationer som kan skapa en miljö som <strong>Moodle</strong> kan fungera i, nämligen:';
|
||||
$string['welcomep20'] = 'Du ser denna sida eftersom installationen av <strong>{$a->packname} {$a->packversion}</strong>-paketet lyckades.';
|
||||
$string['welcomep30'] = 'Den här versionen av <strong>{$a->installername}</strong> innehåller program för att skapa en miljö där <strong>Moodle</strong> kommer att fungera, nämligen:';
|
||||
$string['welcomep40'] = 'I paketet ingår även <strong>Moodle {$a->moodlerelease} ({$a->moodleversion})</strong>.';
|
||||
$string['welcomep50'] = 'Användningen av alla applikationerna i det här paketet regleras av deras respektive licenser. Det kompletta paketet <strong>{$a->installername}</strong> är <a href="http://www.opensource.org/docs/definition_plain.html">Öppen källkod </a> och distribueras
|
||||
under <a href="http://www.gnu.org/copyleft/gpl.html">GPL</a> licensen.';
|
||||
$string['welcomep60'] = 'De följande sidorna leder dig genom några enkla steg för att konfigurera och installera <strong>Moodle</strong> på din dator, du kan acceptera standardinställningarna eller, alternativt, modifiera dem som det passar dina egna behov.';
|
||||
$string['welcomep70'] = 'Klicka på knappen "Nästa" här nedan för att fortsätta installationen av <strong>Moodle</strong>';
|
||||
$string['welcomep60'] = 'Följande sidor leder dig genom några enkla steg för att konfigurera och installera <strong>Moodle</strong> på din dator. Du kan acceptera standardinställningarna eller, alternativt, modifiera dem för att passa dina egna behov.';
|
||||
$string['welcomep70'] = 'Klicka på "Nästa" här nedan för att fortsätta installationen av <strong>Moodle</strong>.';
|
||||
$string['wwwroot'] = 'Webbadress';
|
||||
|
||||
@@ -29,5 +29,6 @@
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$string['parentlanguage'] = '';
|
||||
$string['thisdirection'] = 'ltr';
|
||||
$string['thislanguage'] = 'Svenska';
|
||||
|
||||
@@ -32,5 +32,5 @@ defined('MOODLE_INTERNAL') || die();
|
||||
$string['language'] = 'Språk';
|
||||
$string['moodlelogo'] = 'Moodie-logotyp';
|
||||
$string['next'] = 'Nästa';
|
||||
$string['previous'] = 'Tidigare';
|
||||
$string['previous'] = 'Föregående';
|
||||
$string['reload'] = 'Uppdatera';
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
<?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['thislanguage'] = 'Tetun Dili';
|
||||
@@ -0,0 +1,35 @@
|
||||
<?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['language'] = 'Tokples';
|
||||
$string['moodlelogo'] = 'Moodle logo';
|
||||
$string['next'] = 'Narap\'la';
|
||||
$string['previous'] = 'Bipo';
|
||||
@@ -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';
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
<?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['thislanguage'] = 'Yorùbá';
|
||||
@@ -1050,6 +1050,8 @@ $string['sessioncookiepath'] = 'Cookie path';
|
||||
$string['sessionhandling'] = 'Session handling';
|
||||
$string['sessiontimeout'] = 'Timeout';
|
||||
$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';
|
||||
@@ -1201,6 +1203,7 @@ $string['unsupportedphpversion71'] = 'PHP version 7.1 is not supported.';
|
||||
$string['unsupportedphpversion72'] = 'PHP version 7.2 is not supported.';
|
||||
$string['unsupportedphpversion73'] = 'PHP version 7.3 is not supported.';
|
||||
$string['unsupportedphpversion74'] = 'PHP version 7.4 is not supported.';
|
||||
$string['unsupportedphpversion80'] = 'PHP version 8.0 is not supported.';
|
||||
$string['unsuspenduser'] = 'Activate user account';
|
||||
$string['updateaccounts'] = 'Update existing accounts';
|
||||
$string['updatecomponent'] = 'Update component';
|
||||
|
||||
@@ -382,6 +382,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['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="http://www.forkosh.com/mimetex.zip">http://www.forkosh.com/mimetex.zip</a>, compile it and put the executable into your moodle/filter/tex/ directory.';
|
||||
$string['mimetexnotexecutable'] = 'Custom mimetex is not executable!';
|
||||
|
||||
+1
-1
@@ -147,7 +147,7 @@ $string['search'] = 'Search';
|
||||
$string['sendingcourse'] = 'Sending course';
|
||||
$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['share'] = 'Share this course for people to download';
|
||||
$string['shared'] = 'For people to download';
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
||||
define(["jquery","core/config","core/notification","core/templates","core/yui"],function(a,b,c,d,e){var f,g,h,i,j={ADDROLE:"a.allowlink, a.prohibitlink",REMOVEROLE:"a.preventlink, a.unprohibitlink",UNPROHIBIT:"a.unprohibitlink"},k=a.Event("rolesloaded"),l=null,m=function(){var d={contextid:f,getroles:1,sesskey:b.sesskey};a.post(h+"roles/ajax.php",d,null,"json").done(function(b){try{i=b,m=function(){a("body").trigger(k)},m()}catch(d){c.exception(d)}}).fail(function(a,b,d){c.exception(d)})},n=function(b,e,g){var j={contextid:f,roleid:e,sesskey:M.cfg.sesskey,action:g,capability:b.data("name")};a.post(h+"roles/ajax.php",j,null,"json").done(function(f){var g=f;try{var j={rolename:i[e],roleid:e,adminurl:h,imageurl:M.util.image_url("t/delete","moodle")};switch(g){case"allow":j.spanclass="allowed",j.linkclass="preventlink",j.action="prevent",j.icon="t/delete";break;case"prohibit":j.spanclass="forbidden",j.linkclass="unprohibitlink",j.action="unprohibit",j.icon="t/delete";break;case"prevent":return void b.find('a[data-role-id="'+e+'"]').first().closest(".allowed").remove();case"unprohibit":return void b.find('a[data-role-id="'+e+'"]').first().closest(".forbidden").remove();default:return}d.render("core/permissionmanager_role",j).done(function(c){if("allow"==g)a(c).insertBefore(b.find(".allowmore:first"));else if("prohibit"==g){a(c).insertBefore(b.find(".prohibitmore:first"));var d=b.find(".allowedroles").first().find('a[data-role-id="'+e+'"]');d&&d.first().closest(".allowed").remove()}l.hide()}).fail(c.exception)}catch(k){c.exception(k)}}).fail(function(a,b,d){c.exception(d)})},o=function(b){b.preventDefault(),e.use("moodle-core-notification-dialogue",function(){a("body").one("rolesloaded",function(){var e=a(b.currentTarget),f=e.data("action"),h=e.closest("tr.rolecap"),k={cap:h.data("humanname"),context:g},m=M.util.get_string("role"+f+"info","core_role",k);null===l&&(l=new M.core.dialogue({draggable:!0,modal:!0,closeButton:!0,width:"450px"})),l.set("headerContent",M.util.get_string("role"+f+"header","core_role"));var o,p,q=[];switch(f){case"allow":p=h.find(j.REMOVEROLE);break;case"prohibit":p=h.find(j.UNPROHIBIT)}for(o in i){var r="",s=p.filter("[data-role-id='"+o+"']").length;s&&(r="disabled");var t={roleid:o,rolename:i[o],disabled:r};q.push(t)}d.render("core/permissionmanager_panelcontent",{message:m,roles:q}).done(function(b){l.set("bodyContent",b),l.show(),a("div.role_buttons").delegate("input","click",function(b){var c=a(b.currentTarget).data("role-id");n(h,c,f)})}).fail(c.exception)})}),m()},p=function(b){b.preventDefault(),a("body").one("rolesloaded",function(){var d=a(b.currentTarget),e=d.data("action"),f=d.data("role-id"),h=d.closest("tr.rolecap"),j={role:i[f],cap:h.data("humanname"),context:g};c.confirm(M.util.get_string("confirmunassigntitle","core_role"),M.util.get_string("confirmrole"+e,"core_role",j),M.util.get_string("confirmunassignyes","core_role"),M.util.get_string("confirmunassignno","core_role"),function(){n(h,f,e)})}),m()};return{initialize:function(b){f=b.contextid,g=b.contextname,h=b.adminurl;var c=a("body");c.delegate(j.ADDROLE,"click",o),c.delegate(j.REMOVEROLE,"click",p)}}});
|
||||
define(["jquery","core/config","core/notification","core/templates","core/yui"],function(a,b,c,d,e){var f,g,h,i,j={ADDROLE:"a.allowlink, a.prohibitlink",REMOVEROLE:"a.preventlink, a.unprohibitlink",UNPROHIBIT:"a.unprohibitlink"},k=a.Event("rolesloaded"),l=null,m=function(){var d={contextid:f,getroles:1,sesskey:b.sesskey};a.post(h+"roles/ajax.php",d,null,"json").done(function(b){try{i=b,m=function(){a("body").trigger(k)},m()}catch(d){c.exception(d)}}).fail(function(a,b,d){c.exception(d)})},n=function(b,e,g){var j={contextid:f,roleid:e,sesskey:M.cfg.sesskey,action:g,capability:b.data("name")};a.post(h+"roles/ajax.php",j,null,"json").done(function(f){var g=f;try{var j={rolename:i[e],roleid:e,adminurl:h,imageurl:M.util.image_url("t/delete","moodle")};switch(g){case"allow":j.spanclass="allowed",j.linkclass="preventlink",j.action="prevent",j.icon="t/delete";break;case"prohibit":j.spanclass="forbidden",j.linkclass="unprohibitlink",j.action="unprohibit",j.icon="t/delete";break;case"prevent":return void b.find('a[data-role-id="'+e+'"]').first().closest(".allowed").remove();case"unprohibit":return void b.find('a[data-role-id="'+e+'"]').first().closest(".forbidden").remove();default:return}d.render("core/permissionmanager_role",j).done(function(c){if("allow"==g)a(c).insertBefore(b.find(".allowmore").first());else if("prohibit"==g){a(c).insertBefore(b.find(".prohibitmore").first());var d=b.find(".allowedroles").first().find('a[data-role-id="'+e+'"]');d&&d.first().closest(".allowed").remove()}l.hide()}).fail(c.exception)}catch(k){c.exception(k)}}).fail(function(a,b,d){c.exception(d)})},o=function(b){b.preventDefault(),e.use("moodle-core-notification-dialogue",function(){a("body").one("rolesloaded",function(){var e=a(b.currentTarget),f=e.data("action"),h=e.closest("tr.rolecap"),k={cap:h.data("humanname"),context:g},m=M.util.get_string("role"+f+"info","core_role",k);null===l&&(l=new M.core.dialogue({draggable:!0,modal:!0,closeButton:!0,width:"450px"})),l.set("headerContent",M.util.get_string("role"+f+"header","core_role"));var o,p,q=[];switch(f){case"allow":p=h.find(j.REMOVEROLE);break;case"prohibit":p=h.find(j.UNPROHIBIT)}for(o in i){var r="",s=p.filter("[data-role-id='"+o+"']").length;s&&(r="disabled");var t={roleid:o,rolename:i[o],disabled:r};q.push(t)}d.render("core/permissionmanager_panelcontent",{message:m,roles:q}).done(function(b){l.set("bodyContent",b),l.show(),a("div.role_buttons").delegate("input","click",function(b){var c=a(b.currentTarget).data("role-id");n(h,c,f)})}).fail(c.exception)})}),m()},p=function(b){b.preventDefault(),a("body").one("rolesloaded",function(){var d=a(b.currentTarget),e=d.data("action"),f=d.data("role-id"),h=d.closest("tr.rolecap"),j={role:i[f],cap:h.data("humanname"),context:g};c.confirm(M.util.get_string("confirmunassigntitle","core_role"),M.util.get_string("confirmrole"+e,"core_role",j),M.util.get_string("confirmunassignyes","core_role"),M.util.get_string("confirmunassignno","core_role"),function(){n(h,f,e)})}),m()};return{initialize:function(b){f=b.contextid,g=b.contextname,h=b.adminurl;var c=a("body");c.delegate(j.ADDROLE,"click",o),c.delegate(j.REMOVEROLE,"click",p)}}});
|
||||
Vendored
+1
-1
@@ -1 +1 @@
|
||||
define(["jquery"],function(a){var b=/(\s*\S+|\s)$/,c=/^(\S*)/,d=/\s/,e=function(a,b){if(null==this)throw TypeError();var c=String(a),d=c.length,e=b?Number(b):0;if(e!=e&&(e=0),e<=-1||e>=d)return"";e=0|e;var f,g=c.charCodeAt(e),h=e+1,i=1;return g>=55296&&g<=56319&&d>h&&(f=c.charCodeAt(h),f>=56320&&f<=57343&&(i=2)),i},f=function(a){for(var b=0,c=0;c<a.length;c+=e(a,c))b++;return b},g=function(a,b){if(!a.length)return 0;var c=0,d=0;do c+=e(a,c),d++;while(c<a.length&&d<b);return c};return a.truncate=function(b,c){return a("<div></div>").append(b).truncate(c).html()},a.fn.truncate=function(e){a.isNumeric(e)&&(e={length:e});var h=a.extend({},a.truncate.defaults,e);return this.each(function(){var e=a(this);h.noBreaks&&e.find("br").replaceWith(" ");var i=h.ellipsis.length,j=e.text(),k=f(j),l=k-h.length+i;if(!(k<h.length)){if(h.stripTags&&e.text(j),h.words&&l>0){var m=j.slice(0,g(j,h.length-i)+1),n=m.replace(b,""),o=f(n),p=!m.match(d);l=h.keepFirstWord&&0===o?k-f(c.exec(j)[0])-i:p&&0===o?k-h.length+i:k-o-1}l>k&&(l=k-h.length),l<0||!l&&!h.truncated||a.each(e.contents().get().reverse(),function(b,c){var d=a(c),e=d.text(),j=f(e);if(j<=l)return h.truncated=!0,l-=j,void d.remove();if(3===c.nodeType){var k=j-l;return k=k>=0?g(e,k):0,a(c.splitText(k)).replaceWith(h.ellipsis),!1}return d.truncate(a.extend(h,{length:j-l+i})),!1})}})},a.truncate.defaults={stripTags:!1,words:!1,keepFirstWord:!1,noBreaks:!1,length:1/0,ellipsis:"…"},{truncate:a.truncate}});
|
||||
define(["jquery"],function(a){var b=/(\s*\S+|\s)$/,c=/^(\S*)/,d=/\s/,e=function(a,b){if(null==this)throw TypeError();var c=String(a),d=c.length,e=b?Number(b):0;if(e!=e&&(e=0),e<=-1||e>=d)return"";e=0|e;var f,g=c.charCodeAt(e),h=e+1,i=1;return g>=55296&&g<=56319&&d>h&&(f=c.charCodeAt(h),f>=56320&&f<=57343&&(i=2)),i},f=function(a){for(var b=0,c=0;c<a.length;c+=e(a,c))b++;return b},g=function(a,b){if(!a.length)return 0;var c=0,d=0;do c+=e(a,c),d++;while(c<a.length&&d<b);return c};return a.truncate=function(b,c){return a("<div></div>").append(b).truncate(c).html()},a.fn.truncate=function(e){isNaN(parseFloat(e))||(e={length:e});var h=a.extend({},a.truncate.defaults,e);return this.each(function(){var e=a(this);h.noBreaks&&e.find("br").replaceWith(" ");var i=h.ellipsis.length,j=e.text(),k=f(j),l=k-h.length+i;if(!(k<h.length)){if(h.stripTags&&e.text(j),h.words&&l>0){var m=j.slice(0,g(j,h.length-i)+1),n=m.replace(b,""),o=f(n),p=!m.match(d);l=h.keepFirstWord&&0===o?k-f(c.exec(j)[0])-i:p&&0===o?k-h.length+i:k-o-1}l>k&&(l=k-h.length),l<0||!l&&!h.truncated||a.each(e.contents().get().reverse(),function(b,c){var d=a(c),e=d.text(),j=f(e);if(j<=l)return h.truncated=!0,l-=j,void d.remove();if(3===c.nodeType){var k=j-l;return k=k>=0?g(e,k):0,a(c.splitText(k)).replaceWith(h.ellipsis),!1}return d.truncate(a.extend(h,{length:j-l+i})),!1})}})},a.truncate.defaults={stripTags:!1,words:!1,keepFirstWord:!1,noBreaks:!1,length:1/0,ellipsis:"…"},{truncate:a.truncate}});
|
||||
@@ -37,7 +37,7 @@ define(['jquery', 'core/log', 'core/str', 'core/templates', 'core/notification']
|
||||
UP: 38
|
||||
};
|
||||
|
||||
var uniqueId = $.now();
|
||||
var uniqueId = Date.now();
|
||||
|
||||
/**
|
||||
* Make an item in the selection list "active".
|
||||
|
||||
@@ -124,9 +124,9 @@ define(['jquery', 'core/config', 'core/notification', 'core/templates', 'core/yu
|
||||
templates.render('core/permissionmanager_role', templatedata)
|
||||
.done(function(content) {
|
||||
if (action == 'allow') {
|
||||
$(content).insertBefore(row.find('.allowmore:first'));
|
||||
$(content).insertBefore(row.find('.allowmore').first());
|
||||
} else if (action == 'prohibit') {
|
||||
$(content).insertBefore(row.find('.prohibitmore:first'));
|
||||
$(content).insertBefore(row.find('.prohibitmore').first());
|
||||
// Remove allowed link
|
||||
var allowedLink = row.find('.allowedroles').first().find('a[data-role-id="' + roleid + '"]');
|
||||
if (allowedLink) {
|
||||
|
||||
@@ -118,7 +118,7 @@ define(['jquery'], function($) {
|
||||
|
||||
// Truncate the contents of an element in place.
|
||||
$.fn.truncate = function(options) {
|
||||
if ($.isNumeric(options)) options = {length: options};
|
||||
if (!isNaN(parseFloat(options))) options = {length: options};
|
||||
var o = $.extend({}, $.truncate.defaults, options);
|
||||
|
||||
return this.each(function() {
|
||||
|
||||
@@ -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,39 @@ 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('static', $elementname . 'sep', '', '<br/>'),
|
||||
$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
|
||||
*
|
||||
|
||||
@@ -700,7 +700,7 @@ class core_user {
|
||||
$fields['lastlogin'] = array('type' => PARAM_INT, 'null' => NULL_NOT_ALLOWED);
|
||||
$fields['currentlogin'] = array('type' => PARAM_INT, 'null' => NULL_NOT_ALLOWED);
|
||||
$fields['lastip'] = array('type' => PARAM_NOTAGS, 'null' => NULL_NOT_ALLOWED);
|
||||
$fields['secret'] = array('type' => PARAM_RAW, 'null' => NULL_NOT_ALLOWED);
|
||||
$fields['secret'] = array('type' => PARAM_ALPHANUM, 'null' => NULL_NOT_ALLOWED);
|
||||
$fields['picture'] = array('type' => PARAM_INT, 'null' => NULL_NOT_ALLOWED);
|
||||
$fields['url'] = array('type' => PARAM_URL, 'null' => NULL_NOT_ALLOWED);
|
||||
$fields['description'] = array('type' => PARAM_RAW, 'null' => NULL_ALLOWED);
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -1639,3 +1639,14 @@ function restrict_php_version_73(&$result) {
|
||||
function restrict_php_version_74(&$result) {
|
||||
return restrict_php_version($result, '7.4');
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the current PHP version is greater than or equal to
|
||||
* PHP version 8.0
|
||||
*
|
||||
* @param object $result an environment_results instance
|
||||
* @return bool result of version check
|
||||
*/
|
||||
function restrict_php_version_80($result) {
|
||||
return restrict_php_version($result, '8.0');
|
||||
}
|
||||
|
||||
+60
-1
@@ -34,6 +34,16 @@ define('BYTESERVING_BOUNDARY', 's1k2o3d4a5k6s7');
|
||||
*/
|
||||
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");
|
||||
@@ -384,7 +394,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'])) {
|
||||
@@ -587,6 +597,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
|
||||
|
||||
@@ -661,6 +661,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
|
||||
*
|
||||
|
||||
Vendored
+1
-1
@@ -1 +1 @@
|
||||
define(["jquery","core/log","core/str","core/modal_factory","core/modal_events","core/ajax","core/templates","core/tree"],function(a,b,c,d,e,f,g,h){"use strict";var i=function(c,d,e,f){if(this.elementId=c,this.elementLabel=d,this.onlyTypes=e,this.allowAll=f,this.inputField=a("#"+c),this.wrapperBrowserTrigger=a('[data-filetypesbrowser="'+c+'"]'),this.wrapperDescriptions=a('[data-filetypesdescriptions="'+c+'"]'),this.wrapperBrowserTrigger.length)return this.inputField.length&&this.wrapperDescriptions.length?void this.prepareBrowserTrigger().then(function(){return this.prepareBrowserModal()}.bind(this)).then(function(){return this.prepareBrowserTree()}.bind(this)):void b.error("core_form/filetypes: Unexpected DOM structure, unable to enhance filetypes field "+c)};return i.prototype.prepareBrowserTrigger=function(){return g.render("core_form/filetypes-trigger",{}).then(function(a){this.wrapperBrowserTrigger.html(a),this.browserTrigger=this.wrapperBrowserTrigger.find('[data-filetypeswidget="browsertrigger"]')}.bind(this))},i.prototype.prepareBrowserModal=function(){return d.create({type:d.types.SAVE_CANCEL,title:this.elementLabel}).then(function(a){this.browserModal=a}.bind(this)).then(function(){this.browserModal.getRoot().on(e.hidden,function(){this.browserTrigger.focus()}.bind(this)),this.browserModal.getRoot().on(e.save,function(){this.saveBrowserModal()}.bind(this))}.bind(this))},i.prototype.prepareBrowserTree=function(){return this.browserTrigger.on("click",function(b){if(b.preventDefault(),!this.inputField.is("[disabled]")){var c=this.loadBrowserModalBody();c.then(function(){this.browserTree=new h(this.browserModal.getBody()),this.browserTree.handleKeyDown=function(a,b){b.keyCode==this.browserTree.keys.enter||b.keyCode==this.browserTree.keys.space?(b.preventDefault(),b.stopPropagation(),this.toggleCheckbox(a.attr("data-filetypesbrowserkey"))):h.prototype.handleKeyDown.call(this.browserTree,a,b)}.bind(this),this.allowAll&&(this.hideOrShowItemsDependingOnAllowAll(this.browserModal.getRoot().find('input[type="checkbox"][data-filetypesbrowserkey="*"]:first')),this.browserModal.getRoot().on("change",'input[type="checkbox"][data-filetypesbrowserkey="*"]',function(b){this.hideOrShowItemsDependingOnAllowAll(a(b.currentTarget))}.bind(this))),this.browserModal.getRoot().on("change",'input[type="checkbox"][data-filetypesbrowserkey]',function(b){var c=a(b.currentTarget),d=c.attr("data-filetypesbrowserkey");this.browserModal.getRoot().find('input[type="checkbox"][data-filetypesbrowserkey="'+d+'"]').prop("checked",c.prop("checked"))}.bind(this))}.bind(this)).then(function(){this.browserModal.show()}.bind(this)),this.browserModal.setBody(c)}}.bind(this)),a.when()},i.prototype.loadBrowserModalBody=function(){var a={onlytypes:this.onlyTypes.join(),allowall:this.allowAll,current:this.inputField.val()};return f.call([{methodname:"core_form_get_filetypes_browser_data",args:a}])[0].then(function(a){return g.render("core_form/filetypes-browser",{elementid:this.elementId,groups:a.groups})}.bind(this))},i.prototype.toggleCheckbox=function(a){var b=this.browserModal.getRoot().find('input[type="checkbox"][data-filetypesbrowserkey="'+a+'"]:first');b.prop("checked",!b.prop("checked"))},i.prototype.saveBrowserModal=function(){if(this.allowAll){var b=this.browserModal.getRoot().find('input[type="checkbox"][data-filetypesbrowserkey="*"]');if(b.length&&b.prop("checked"))return this.inputField.val("*"),void this.updateDescriptions(["*"])}var c=[];this.browserModal.getRoot().find('input[type="checkbox"]').each(function(){var b=a(this),d=b.attr("data-filetypesbrowserkey");b.prop("checked")&&c.push(d)}),c=c.filter(function(a,b,c){return c.indexOf(a)==b}),this.inputField.val(c.join(" ")),this.updateDescriptions(c)},i.prototype.updateDescriptions=function(a){var b=[];a.forEach(function(a){b.push({description:this.browserModal.getRoot().find('[data-filetypesname="'+a+'"]:first').text().trim(),extensions:this.browserModal.getRoot().find('[data-filetypesextensions="'+a+'"]:first').text().trim()})}.bind(this));var c={hasdescriptions:b.length>0,descriptions:b};return g.render("core_form/filetypes-descriptions",c).then(function(a){this.wrapperDescriptions.html(a)}.bind(this))},i.prototype.hideOrShowItemsDependingOnAllowAll=function(a){var b=this.browserModal.getRoot().find('[role="treeitem"][data-filetypesbrowserkey!="*"]');a.prop("checked")?b.hide():b.show()},{init:function(a,b,c,d){new i(a,b,c,d)}}});
|
||||
define(["jquery","core/log","core/str","core/modal_factory","core/modal_events","core/ajax","core/templates","core/tree"],function(a,b,c,d,e,f,g,h){"use strict";var i=function(c,d,e,f){if(this.elementId=c,this.elementLabel=d,this.onlyTypes=e,this.allowAll=f,this.inputField=a("#"+c),this.wrapperBrowserTrigger=a('[data-filetypesbrowser="'+c+'"]'),this.wrapperDescriptions=a('[data-filetypesdescriptions="'+c+'"]'),this.wrapperBrowserTrigger.length)return this.inputField.length&&this.wrapperDescriptions.length?void this.prepareBrowserTrigger().then(function(){return this.prepareBrowserModal()}.bind(this)).then(function(){return this.prepareBrowserTree()}.bind(this)):void b.error("core_form/filetypes: Unexpected DOM structure, unable to enhance filetypes field "+c)};return i.prototype.prepareBrowserTrigger=function(){return g.render("core_form/filetypes-trigger",{}).then(function(a){this.wrapperBrowserTrigger.html(a),this.browserTrigger=this.wrapperBrowserTrigger.find('[data-filetypeswidget="browsertrigger"]')}.bind(this))},i.prototype.prepareBrowserModal=function(){return d.create({type:d.types.SAVE_CANCEL,title:this.elementLabel}).then(function(a){this.browserModal=a}.bind(this)).then(function(){this.browserModal.getRoot().on(e.hidden,function(){this.browserTrigger.focus()}.bind(this)),this.browserModal.getRoot().on(e.save,function(){this.saveBrowserModal()}.bind(this))}.bind(this))},i.prototype.prepareBrowserTree=function(){return this.browserTrigger.on("click",function(b){if(b.preventDefault(),!this.inputField.is("[disabled]")){var c=this.loadBrowserModalBody();c.then(function(){this.browserTree=new h(this.browserModal.getBody()),this.browserTree.handleKeyDown=function(a,b){b.keyCode==this.browserTree.keys.enter||b.keyCode==this.browserTree.keys.space?(b.preventDefault(),b.stopPropagation(),this.toggleCheckbox(a.attr("data-filetypesbrowserkey"))):h.prototype.handleKeyDown.call(this.browserTree,a,b)}.bind(this),this.allowAll&&(this.hideOrShowItemsDependingOnAllowAll(this.browserModal.getRoot().find('input[type="checkbox"][data-filetypesbrowserkey="*"]').first()),this.browserModal.getRoot().on("change",'input[type="checkbox"][data-filetypesbrowserkey="*"]',function(b){this.hideOrShowItemsDependingOnAllowAll(a(b.currentTarget))}.bind(this))),this.browserModal.getRoot().on("change",'input[type="checkbox"][data-filetypesbrowserkey]',function(b){var c=a(b.currentTarget),d=c.attr("data-filetypesbrowserkey");this.browserModal.getRoot().find('input[type="checkbox"][data-filetypesbrowserkey="'+d+'"]').prop("checked",c.prop("checked"))}.bind(this))}.bind(this)).then(function(){this.browserModal.show()}.bind(this)),this.browserModal.setBody(c)}}.bind(this)),a.when()},i.prototype.loadBrowserModalBody=function(){var a={onlytypes:this.onlyTypes.join(),allowall:this.allowAll,current:this.inputField.val()};return f.call([{methodname:"core_form_get_filetypes_browser_data",args:a}])[0].then(function(a){return g.render("core_form/filetypes-browser",{elementid:this.elementId,groups:a.groups})}.bind(this))},i.prototype.toggleCheckbox=function(a){var b=this.browserModal.getRoot().find('input[type="checkbox"][data-filetypesbrowserkey="'+a+'"]').first();b.prop("checked",!b.prop("checked"))},i.prototype.saveBrowserModal=function(){if(this.allowAll){var b=this.browserModal.getRoot().find('input[type="checkbox"][data-filetypesbrowserkey="*"]');if(b.length&&b.prop("checked"))return this.inputField.val("*"),void this.updateDescriptions(["*"])}var c=[];this.browserModal.getRoot().find('input[type="checkbox"]').each(function(){var b=a(this),d=b.attr("data-filetypesbrowserkey");b.prop("checked")&&c.push(d)}),c=c.filter(function(a,b,c){return c.indexOf(a)==b}),this.inputField.val(c.join(" ")),this.updateDescriptions(c)},i.prototype.updateDescriptions=function(a){var b=[];a.forEach(function(a){b.push({description:this.browserModal.getRoot().find('[data-filetypesname="'+a+'"]').first().text().trim(),extensions:this.browserModal.getRoot().find('[data-filetypesextensions="'+a+'"]').first().text().trim()})}.bind(this));var c={hasdescriptions:b.length>0,descriptions:b};return g.render("core_form/filetypes-descriptions",c).then(function(a){this.wrapperDescriptions.html(a)}.bind(this))},i.prototype.hideOrShowItemsDependingOnAllowAll=function(a){var b=this.browserModal.getRoot().find('[role="treeitem"][data-filetypesbrowserkey!="*"]');a.prop("checked")?b.hide():b.show()},{init:function(a,b,c,d){new i(a,b,c,d)}}});
|
||||
@@ -151,7 +151,7 @@ define(['jquery', 'core/log', 'core/str', 'core/modal_factory', 'core/modal_even
|
||||
if (this.allowAll) {
|
||||
// Hide all other items if "All file types" is enabled.
|
||||
this.hideOrShowItemsDependingOnAllowAll(this.browserModal.getRoot()
|
||||
.find('input[type="checkbox"][data-filetypesbrowserkey="*"]:first'));
|
||||
.find('input[type="checkbox"][data-filetypesbrowserkey="*"]').first());
|
||||
// And do the same whenever we click that checkbox.
|
||||
this.browserModal.getRoot().on('change', 'input[type="checkbox"][data-filetypesbrowserkey="*"]', function(e) {
|
||||
this.hideOrShowItemsDependingOnAllowAll($(e.currentTarget));
|
||||
@@ -213,7 +213,7 @@ define(['jquery', 'core/log', 'core/str', 'core/modal_factory', 'core/modal_even
|
||||
*/
|
||||
FileTypes.prototype.toggleCheckbox = function(key) {
|
||||
|
||||
var checkbox = this.browserModal.getRoot().find('input[type="checkbox"][data-filetypesbrowserkey="' + key + '"]:first');
|
||||
var checkbox = this.browserModal.getRoot().find('input[type="checkbox"][data-filetypesbrowserkey="' + key + '"]').first();
|
||||
|
||||
checkbox.prop('checked', !checkbox.prop('checked'));
|
||||
};
|
||||
@@ -268,8 +268,8 @@ define(['jquery', 'core/log', 'core/str', 'core/modal_factory', 'core/modal_even
|
||||
|
||||
keys.forEach(function(key) {
|
||||
descriptions.push({
|
||||
description: this.browserModal.getRoot().find('[data-filetypesname="' + key + '"]:first').text().trim(),
|
||||
extensions: this.browserModal.getRoot().find('[data-filetypesextensions="' + key + '"]:first').text().trim()
|
||||
description: this.browserModal.getRoot().find('[data-filetypesname="' + key + '"]').first().text().trim(),
|
||||
extensions: this.browserModal.getRoot().find('[data-filetypesextensions="' + key + '"]').first().text().trim()
|
||||
});
|
||||
}.bind(this));
|
||||
|
||||
|
||||
@@ -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');
|
||||
|
||||
Vendored
-4
File diff suppressed because one or more lines are too long
+1559
-940
File diff suppressed because it is too large
Load Diff
Vendored
+2
File diff suppressed because one or more lines are too long
@@ -36,7 +36,7 @@
|
||||
*/
|
||||
|
||||
$plugins = array(
|
||||
'jquery' => array('files' => array('jquery-3.2.1.min.js')),
|
||||
'jquery' => array('files' => array('jquery-3.5.1.min.js')),
|
||||
'ui' => array('files' => array('ui-1.12.1/jquery-ui.min.js')),
|
||||
'ui-css' => array('files' => array('ui-1.12.1/theme/smoothness/jquery-ui.min.css')),
|
||||
);
|
||||
|
||||
@@ -16,3 +16,8 @@ Description of import of various jQuery libraries into Moodle:
|
||||
6/ Update the version of jquery in core_privacy\local\request\moodle_content_writer::write_html_data()
|
||||
|
||||
Petr Skoda
|
||||
|
||||
Note: jQuery.trim(), jQuery.isFunction(), jQuery.isNumeric(), jQuery.type(), jQuery.now() functions
|
||||
and :first pseudo-class are deprecated. We use String.prototype.trim() and .first()
|
||||
in Moodle code instead. Please note that in third party libraries there are still usages of jQuery.trim
|
||||
for example xhprof and jQuery UI.
|
||||
@@ -205,7 +205,7 @@ function core_myprofile_navigation(core_user\output\myprofile\tree $tree, $user,
|
||||
|
||||
if (isset($identityfields['idnumber']) && $user->idnumber) {
|
||||
$node = new core_user\output\myprofile\node('contact', 'idnumber', get_string('idnumber'), null, null,
|
||||
$user->idnumber);
|
||||
s($user->idnumber));
|
||||
$tree->add_node($node);
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ var require = {
|
||||
waitSeconds : 0,
|
||||
|
||||
paths: {
|
||||
jquery: '[JSURL]lib/jquery/jquery-3.2.1.min[JSEXT]',
|
||||
jquery: '[JSURL]lib/jquery/jquery-3.5.1.min[JSEXT]',
|
||||
jqueryui: '[JSURL]lib/jquery/ui-1.12.1/jquery-ui.min[JSEXT]',
|
||||
jqueryprivate: '[JSURL]lib/requirejs/jquery-private[JSEXT]'
|
||||
},
|
||||
|
||||
@@ -865,6 +865,11 @@ class flexible_table {
|
||||
* build_table which calls this method.
|
||||
*/
|
||||
function other_cols($column, $row) {
|
||||
if (isset($row->$column) && ($column === 'email' || $column === 'idnumber') && !$this->is_downloading()) {
|
||||
// Columns email and idnumber may potentially contain malicious characters, escape them by default.
|
||||
// This function will not be executed if the child class implements col_email() or col_idnumber().
|
||||
return s($row->$column);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -967,7 +967,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;
|
||||
|
||||
@@ -1473,6 +1473,65 @@ EOF;
|
||||
$this->assertEquals($fourthrecord['filename'], $allfiles[3]->filename);
|
||||
$this->assertEquals($fifthrecord['filename'], $allfiles[4]->filename);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -158,7 +158,7 @@
|
||||
<location>jquery</location>
|
||||
<name>jQuery</name>
|
||||
<license>MIT</license>
|
||||
<version>3.2.1</version>
|
||||
<version>3.5.1</version>
|
||||
<licenseversion></licenseversion>
|
||||
</library>
|
||||
<library>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user