chg: Made the role add/edit forms a bit more sane

- allow for some permissions to be given out to read only users
- hide the permissions that can't be selected for the given access level
pull/2002/head
iglocska 2017-02-20 13:26:49 +01:00
parent 3c558c653d
commit 65e0a31f61
4 changed files with 48 additions and 92 deletions

View File

@ -46,7 +46,7 @@ class AppController extends Controller {
public $helpers = array('Utility');
private $__jsVersion = '2.4.66';
private $__jsVersion = '2.4.67';
public $pyMispVersion = '2.4.65';
public $phpmin = '5.6.5';
public $phprec = '7.0.0';

View File

@ -8,11 +8,17 @@
<div class = 'input clear'></div>
<?php
$counter = 1;
foreach ($permFlags as $k => $flag) {
echo $this->Form->input($k, array('type' => 'checkbox', 'checked' => false));
if ($counter%3 == 0) echo "<div class = 'input clear'></div>";
$counter++;
}
foreach ($permFlags as $k => $flag):
?>
<div class="permFlags<?php echo ' ' . ($flag['readonlyenabled'] ? 'readonlyenabled' : 'readonlydisabled'); ?>">
<?php
echo $this->Form->input($k, array('type' => 'checkbox', 'class' => 'checkbox ' . ($flag['readonlyenabled'] ? 'readonlyenabled' : 'readonlydisabled'), 'checked' => false));
if ($counter%3 == 0) echo "<div class = 'input clear'></div>";
$counter++;
?>
</div>
<?php
endforeach;
?>
</fieldset>
<?php
@ -22,48 +28,14 @@ echo $this->Form->end();
</div>
<?php
echo $this->element('side_menu', array('menuList' => 'admin', 'menuItem' => 'addRole'));
$this->Js->get('#RolePermission')->event('change', 'deactivateActions()');
foreach ($permFlags as $k => $flag) {
if ($k !== 'perm_site_admin') $this->Js->get('#' . $flag['id'])->event('change', 'checkPerms("' . $flag['id'] . '")');
else $this->Js->get('#RolePermSiteAdmin')->event('change', 'checkPerms("RolePermSiteAdmin");activateAll();');
}
?>
<script type="text/javascript">
// only be able to tick perm_sync if manage org events and above.
function deactivateActions() {
var e = document.getElementById("RolePermission");
if (e.options[e.selectedIndex].value == '0' || e.options[e.selectedIndex].value == '1') {
<?php
foreach ($permFlags as $k => $flag):
?>
document.getElementById("<?php echo $flag['id']; ?>").checked = false;
<?php
endforeach;
?>
}
}
function activateAll() {
if (document.getElementById("RolePermSiteAdmin").checked) {
<?php
foreach ($permFlags as $k => $flag):
if ($k !== 'perm_site_admin'):
?>
document.getElementById("<?php echo $flag['id']; ?>").checked = true;
<?php
endif;
endforeach;
?>
}
}
function checkPerms(id) {
var e = document.getElementById("RolePermission");
if (e.options[e.selectedIndex].value == '0' || e.options[e.selectedIndex].value == '1') {
document.getElementById(id).checked = false;
}
}
$(document).ready(function() {
checkRolePerms();
$(".checkbox, #RolePermission").change(function() {
checkRolePerms();
});
});
</script>
<?php echo $this->Js->writeBuffer();

View File

@ -8,11 +8,17 @@
<div class = 'input clear'></div>
<?php
$counter = 1;
foreach ($permFlags as $k => $flag) {
echo $this->Form->input($k, array('type' => 'checkbox'));
if ($counter%3 == 0) echo "<div class = 'input clear'></div>";
$counter++;
}
foreach ($permFlags as $k => $flag):
?>
<div class="permFlags<?php echo ' ' . ($flag['readonlyenabled'] ? 'readonlyenabled' : 'readonlydisabled'); ?>">
<?php
echo $this->Form->input($k, array('type' => 'checkbox', 'class' => 'checkbox ' . ($flag['readonlyenabled'] ? 'readonlyenabled' : 'readonlydisabled')));
if ($counter%3 == 0) echo "<div class = 'input clear'></div>";
$counter++;
?>
</div>
<?php
endforeach;
?>
</fieldset>
<?php
@ -22,49 +28,14 @@
</div>
<?php
echo $this->element('side_menu', array('menuList' => 'admin', 'menuItem' => 'editRole'));
$this->Js->get('#RolePermission')->event('change', 'deactivateActions()');
foreach ($permFlags as $k => $flag) {
if ($k !== 'perm_site_admin') $this->Js->get('#' . $flag['id'])->event('change', 'checkPerms("' . $flag['id'] . '")');
else $this->Js->get('#RolePermSiteAdmin')->event('change', 'checkPerms("RolePermSiteAdmin");activateAll();');
}
?>
<script type="text/javascript">
// only be able to tick perm_sync if manage org events and above.
// only be able to tick perm_sync if manage org events and above.
function deactivateActions() {
var e = document.getElementById("RolePermission");
if (e.options[e.selectedIndex].value == '0' || e.options[e.selectedIndex].value == '1') {
<?php
foreach ($permFlags as $k => $flag):
?>
document.getElementById("<?php echo $flag['id']; ?>").checked = false;
<?php
endforeach;
?>
}
}
function activateAll() {
if (document.getElementById("RolePermSiteAdmin").checked) {
<?php
foreach ($permFlags as $k => $flag):
if ($k !== 'perm_site_admin'):
?>
document.getElementById("<?php echo $flag['id']; ?>").checked = true;
<?php
endif;
endforeach;
?>
}
}
function checkPerms(id) {
var e = document.getElementById("RolePermission");
if (e.options[e.selectedIndex].value == '0' || e.options[e.selectedIndex].value == '1') {
document.getElementById(id).checked = false;
}
}
$(document).ready(function() {
checkRolePerms();
$(".checkbox, #RolePermission").change(function() {
checkRolePerms();
});
});
</script>
<?php echo $this->Js->writeBuffer();

View File

@ -2937,3 +2937,16 @@ function loadSightingGraph(id, scope) {
$("#sightingsData").html(data);
});
}
function checkRolePerms() {
if ($("#RolePermission").val() == '0' || $("#RolePermission").val() == '1') {
$('.readonlydisabled').prop('checked', false);
$('.readonlydisabled').hide();
} else {
$('.readonlydisabled').show();
$('.permFlags').show();
}
if ($("#RolePermSiteAdmin").prop('checked')) {
$('.checkbox').prop('checked', true);
}
}