Skip to content

Instantly share code, notes, and snippets.

@webketje
Last active February 10, 2017 23:19
Show Gist options
  • Save webketje/219205fed6283548e8c0c0cbbcad5171 to your computer and use it in GitHub Desktop.
Save webketje/219205fed6283548e8c0c0cbbcad5171 to your computer and use it in GitHub Desktop.
GS UsrMgr - plugin permissions
<?php
if (myself(false) === 'load.php' && @$_GET['id'] === 'i18n_base') {
add_action('page-access', 'i18n_base_pages_access');
}
add_filter('permissions-css', 'i18n_base_permissions_css');
function i18n_base_pages_access() {
$usermgr = usermgr();
$current_user = current_user();
if ($current_user->cannot('access_pages')) {
$usermgr->restrict_access();
}
}
function i18n_base_permissions_css($style) {
$usermgr = usermgr();
$current_user = current_user();
return pages_page_access($current_user, $style) . ($current_user->cannot('access_pages') ? '#nav_pages { display: none; }' : '');
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.3/FileSaver.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script>
<style>
body { font: 16px normal Arial, Helvetica, sans-serif; line-height: 1em; }
#plugin-perms { max-width: 600px; overflow: auto; }
#plugin-perms label { display: block; float: left; width: 199px; }
#plugin-perms input { float: right; }
button#dl { border: 1px solid #aaa; padding: 3px 5px; background-color: #ccc; font-weight: bold; }
</style>
</head>
<body>
<h1>GS UserMgr - Plugin permissions collection</h1>
<hr>
<div id="plugin-perms"></div>
<hr>
<button type="button" id="dl">Download ZIP</button>
<script>
var perms = [
{ name: 'i18n_base.php', label: 'I18n base', url: 'https://gist.githubusercontent.com/webketje/219205fed6283548e8c0c0cbbcad5171/raw/i18n_base.php' }
];
perms.root = document.getElementById('plugin-perms');
perms.get = function(name) {
return perms.filter(function(p) {
return p.name === name;
})[0];
};
perms.load = function(e) {
var perm = perms.get(e.target.value),
req = new XMLHttpRequest();
req.onload = function() { perm.contents = this.responseText; };
req.open("GET", perm.url);
req.send();
};
perms.render = function() {
for (var i = 0, l = perms.length; i < l; i++) {
chk = document.createElement('input');
chk.type = 'checkbox';
chk.value = perms[i].name;
chk.className = 'perm';
chk.id = 'chk-' + perms[i].name.slice(0, -3);
lbl = document.createElement('label');
lbl.setAttribute('for', 'chk-' + perms[i].name.slice(0, -3));
lbl.appendChild(document.createTextNode(perms[i].label));
lbl.appendChild(chk);
perms.root.appendChild(lbl);
}
};
perms.download = function() {
var elems = perms.root.getElementsByClassName('perm'),
zip = new JSZip(), perm,
folder = zip.folder('usermgr').folder('permissions');
for (var i = 0, l = elems.length; i < l; i++) {
if (elems[i].checked) {
perm = perms.get(elems[i].value);
if (perm.contents)
folder.file(perm.name, perm.contents);
}
}
zip.generateAsync({type:"blob"}).then(function (blob) {
saveAs(blob, "usermgr_plugin_permissions.zip");
});
};
perms.render();
document.getElementById('dl').addEventListener('click', perms.download, false);
perms.root.addEventListener('change', perms.load, false);
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment