mirror of
https://github.com/moodle/moodle.git
synced 2025-06-01 21:55:12 +02:00
MDL-52167 admin: display dependencies in search results
This commit is contained in:
parent
d940855f92
commit
08163b2067
@ -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>
|
||||
|
@ -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.';
|
||||
|
@ -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);
|
||||
|
2
lib/amd/build/showhidesettings.min.js
vendored
2
lib/amd/build/showhidesettings.min.js
vendored
@ -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()}}});
|
@ -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();
|
||||
}
|
||||
};
|
||||
});
|
@ -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>
|
||||
|
Loading…
x
Reference in New Issue
Block a user