MDL-52167 admin: display dependencies in search results

This commit is contained in:
Davo Smith 2019-02-19 12:44:18 +00:00 committed by Sara Arjona
parent d940855f92
commit 08163b2067
6 changed files with 47 additions and 1 deletions

View File

@ -29,6 +29,7 @@
* element - The Element HTML
* forceltr - Force this element to be displayed LTR
* default - Default value
* dependenton - optional message listing the settings this one is dependent on
Example context (json):
{
@ -68,5 +69,6 @@
<div class="form-defaultinfo text-muted {{#forceltr}}text-ltr{{/forceltr}}">{{{default}}}</div>
{{/default}}
<div class="form-description mt-3">{{{description}}}</div>
{{#dependenton}}<div class="form-dependenton mt-3 text-muted">{{{.}}}</div>{{/dependenton}}
</div>
</div>

View File

@ -1103,6 +1103,7 @@ $string['sessioncookiedomain'] = 'Cookie domain';
$string['sessioncookiepath'] = 'Cookie path';
$string['sessionhandling'] = 'Session handling';
$string['sessiontimeout'] = 'Timeout';
$string['settingdependenton'] = 'This setting may be hidden, based on the value of <strong>{$a}</strong>';
$string['settingfileuploads'] = 'File uploading is required for normal operation, please enable it in PHP configuration.';
$string['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.';

View File

@ -1554,6 +1554,17 @@ class admin_settingpage implements part_of_admin_tree {
*/
public function hide_if($settingname, $dependenton, $condition = 'notchecked', $value = '1') {
$this->dependencies[] = new admin_settingdependency($settingname, $dependenton, $condition, $value);
// Reformat the dependency name to the plugin | name format used in the display.
$dependenton = str_replace('/', ' | ', $dependenton);
// Let the setting know, so it can be displayed underneath.
$findname = str_replace('/', '', $settingname);
foreach ($this->settings as $name => $setting) {
if ($name === $findname) {
$setting->add_dependent_on($dependenton);
}
}
}
/**
@ -1663,6 +1674,8 @@ abstract class admin_setting {
private $flags = array();
/** @var bool Whether this field must be forced LTR. */
private $forceltr = null;
/** @var array list of other settings that may cause this setting to be hidden */
private $dependenton = [];
/**
* Constructor
@ -2032,6 +2045,22 @@ abstract class admin_setting {
public function set_force_ltr($value) {
$this->forceltr = $value;
}
/**
* Add a setting to the list of those that could cause this one to be hidden
* @param string $dependenton
*/
public function add_dependent_on($dependenton) {
$this->dependenton[] = $dependenton;
}
/**
* Get a list of the settings that could cause this one to be hidden.
* @return array
*/
public function get_dependent_on() {
return $this->dependenton;
}
}
/**
@ -8683,6 +8712,10 @@ function format_admin_setting($setting, $title='', $form='', $description='', $l
$context->error = $adminroot->errors[$context->fullname]->error;
}
if ($dependenton = $setting->get_dependent_on()) {
$context->dependenton = get_string('settingdependenton', 'admin', implode(', ', $dependenton));
}
$context->id = 'admin-' . $setting->name;
$context->title = highlightfast($query, $title);
$context->name = highlightfast($query, $context->name);

View File

@ -1 +1 @@
define(["jquery"],function(a){function b(a){return a.is("input[type=hidden]")&&a.siblings('input[type=checkbox][name="'+a.attr("name")+'"]').length}function c(a,b){return a.is("input[type=radio]")&&a.attr("value")!==b}function d(a,d){return!b(a)&&!c(a,d)}function e(a){return a.is("input[type=radio]")&&!a.prop("checked")}function f(a){return a.is("input[type=checkbox]")&&!a.prop("checked")}function g(a){return a.is("select")&&a.prop("multiple")}function h(a,b){var c=a.val()||[];if(!b.length)return!1;if(c.length!==b.length)return!1;for(var d in c)if(c.hasOwnProperty(d)&&b.indexOf(c[d])===-1)return!1;return!0}function i(b){return a('[name="'+b+'"],[name="'+b+'[]"]')}function j(b){return a(b).attr("name").replace(/\[]/,"")}function k(b,c,d){return a.isFunction(o[c])?o[c](b,d):o.defaultCondition(b,d)}function l(b,c){c=c||j(b.currentTarget);var d=i(c);if(n.hasOwnProperty(c)){var e={};a.each(n[c],function(b,c){a.each(c,function(c,f){var g=k(d,b,c);a.each(f,function(a,b){e.hasOwnProperty(b)?e[b]=e[b]||g:e[b]=g})})}),a.each(e,function(b,c){i(b).each(function(b,d){var e=a(d).closest(".form-item");e.length&&(c?e.hide():e.show())})})}}function m(){a.each(n,function(a){var b=i(a);b.length&&(b.on("change",l),l(null,a))})}var n,o={notchecked:function(b,c){var e=!1;return c=String(c),b.each(function(b,f){var g=a(f);d(g,c)&&(e=e||!g.prop("checked"))}),e},checked:function(b,c){var e=!1;return c=String(c),b.each(function(b,f){var g=a(f);d(g,c)&&(e=e||g.prop("checked"))}),e},noitemselected:function(b){var c=!1;return b.each(function(b,d){var e=a(d);c=c||e.prop("selectedIndex")===-1}),c},eq:function(c,d){var i=!1,j=!1;return d=String(d),c.each(function(c,k){var l=a(k);if(!e(l)){if(b(l))return void(j=l.val()===d);if(f(l))return void(i=i||j);if(g(l)){var m=d.split("|");return void(i=h(l,m))}i=i||l.val()===d}}),i},"in":function(c,d){var i=!1,j=!1,k=d.split("|");return c.each(function(c,d){var l=a(d);if(!e(l))return b(l)?void(j=k.indexOf(l.val())>-1):f(l)?void(i=i||j):g(l)?void(i=h(l,k)):void(i=i||k.indexOf(l.val())>-1)}),i},defaultCondition:function(c,d){var i=!1,j=!1;return d=String(d),c.each(function(c,k){var l=a(k);if(!e(l)){if(b(l))return void(j=l.val()!==d);if(f(l))return void(i=i||j);if(g(l)){var m=d.split("|");return void(i=!h(l,m))}i=i||l.val()!==d}}),i}};return{init:function(a){n=a.dependencies,m()}}});
define(["jquery"],function(a){function b(a){return a.is("input[type=hidden]")&&a.siblings('input[type=checkbox][name="'+a.attr("name")+'"]').length}function c(a,b){return a.is("input[type=radio]")&&a.attr("value")!==b}function d(a,d){return!b(a)&&!c(a,d)}function e(a){return a.is("input[type=radio]")&&!a.prop("checked")}function f(a){return a.is("input[type=checkbox]")&&!a.prop("checked")}function g(a){return a.is("select")&&a.prop("multiple")}function h(a,b){var c=a.val()||[];if(!b.length)return!1;if(c.length!==b.length)return!1;for(var d in c)if(c.hasOwnProperty(d)&&b.indexOf(c[d])===-1)return!1;return!0}function i(b){return a('[name="'+b+'"],[name="'+b+'[]"]')}function j(b){return a(b).attr("name").replace(/\[]/,"")}function k(b,c,d){return a.isFunction(p[c])?p[c](b,d):p.defaultCondition(b,d)}function l(b,c){c=c||j(b.currentTarget);var d=i(c);if(o.hasOwnProperty(c)){var e={};a.each(o[c],function(b,c){a.each(c,function(c,f){var g=k(d,b,c);a.each(f,function(a,b){e.hasOwnProperty(b)?e[b]=e[b]||g:e[b]=g})})}),a.each(e,function(b,c){i(b).each(function(b,d){var e=a(d).closest(".form-item");e.length&&(c?e.hide():e.show())})})}}function m(){a.each(o,function(a){var b=i(a);b.length&&(b.on("change",l),l(null,a))})}function n(){a(".form-dependenton").hide()}var o,p={notchecked:function(b,c){var e=!1;return c=String(c),b.each(function(b,f){var g=a(f);d(g,c)&&(e=e||!g.prop("checked"))}),e},checked:function(b,c){var e=!1;return c=String(c),b.each(function(b,f){var g=a(f);d(g,c)&&(e=e||g.prop("checked"))}),e},noitemselected:function(b){var c=!1;return b.each(function(b,d){var e=a(d);c=c||e.prop("selectedIndex")===-1}),c},eq:function(c,d){var i=!1,j=!1;return d=String(d),c.each(function(c,k){var l=a(k);if(!e(l)){if(b(l))return void(j=l.val()===d);if(f(l))return void(i=i||j);if(g(l)){var m=d.split("|");return void(i=h(l,m))}i=i||l.val()===d}}),i},"in":function(c,d){var i=!1,j=!1,k=d.split("|");return c.each(function(c,d){var l=a(d);if(!e(l))return b(l)?void(j=k.indexOf(l.val())>-1):f(l)?void(i=i||j):g(l)?void(i=h(l,k)):void(i=i||k.indexOf(l.val())>-1)}),i},defaultCondition:function(c,d){var i=!1,j=!1;return d=String(d),c.each(function(c,k){var l=a(k);if(!e(l)){if(b(l))return void(j=l.val()!==d);if(f(l))return void(i=i||j);if(g(l)){var m=d.split("|");return void(i=!h(l,m))}i=i||l.val()!==d}}),i}};return{init:function(a){o=a.dependencies,m(),n()}}});

View File

@ -328,10 +328,18 @@ define(['jquery'], function($) {
});
}
/**
* Hide the 'this setting may be hidden' messages.
*/
function hideDependencyInfo() {
$('.form-dependenton').hide();
}
return {
init: function(opts) {
dependencies = opts.dependencies;
initHandlers();
hideDependencyInfo();
}
};
});

View File

@ -29,6 +29,7 @@
* element - The Element HTML
* forceltr - Force this element to be displayed LTR
* default - Default value
* dependenton - optional message listing the settings this one is dependent on
Example context (json):
{
@ -66,4 +67,5 @@
{{/default}}
</div>
<div class="form-description">{{{description}}}</div>
{{#dependenton}}<div class="form-dependenton">{{{.}}}</div>{{/dependenton}}
</div>