Added admin groups and delete users events. Also fixed missing creation of /admin group in nextcloud.
parent
90ef56bbdf
commit
cc1d33efef
|
@ -114,50 +114,56 @@ class Admin():
|
||||||
|
|
||||||
try:
|
try:
|
||||||
log.warning('MOODLE: Adding default group admin')
|
log.warning('MOODLE: Adding default group admin')
|
||||||
self.moodle.add_system_cohort('admin','system admins')
|
self.moodle.add_system_cohort('/admin','system admins')
|
||||||
log.warning('MOODLE: OK')
|
log.warning('MOODLE: OK')
|
||||||
except:
|
except:
|
||||||
log.warning('MOODLE: Seems to be there already')
|
log.warning('MOODLE: Seems to be there already')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
log.warning('MOODLE: Adding default group manager')
|
log.warning('MOODLE: Adding default group manager')
|
||||||
self.moodle.add_system_cohort('manager','system managers')
|
self.moodle.add_system_cohort('/manager','system managers')
|
||||||
log.warning('MOODLE: OK')
|
log.warning('MOODLE: OK')
|
||||||
except:
|
except:
|
||||||
log.warning('MOODLE: Seems to be there already')
|
log.warning('MOODLE: Seems to be there already')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
log.warning('MOODLE: Adding default group teacher')
|
log.warning('MOODLE: Adding default group teacher')
|
||||||
self.moodle.add_system_cohort('teacher','system teacher')
|
self.moodle.add_system_cohort('/teacher','system teacher')
|
||||||
log.warning('MOODLE: OK')
|
log.warning('MOODLE: OK')
|
||||||
except:
|
except:
|
||||||
log.warning('MOODLE: Seems to be there already')
|
log.warning('MOODLE: Seems to be there already')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
log.warning('MOODLE: Adding default group student')
|
log.warning('MOODLE: Adding default group student')
|
||||||
self.moodle.add_system_cohort('student','system student')
|
self.moodle.add_system_cohort('/student','system student')
|
||||||
log.warning('MOODLE: OK')
|
log.warning('MOODLE: OK')
|
||||||
except:
|
except:
|
||||||
log.warning('MOODLE: Seems to be there already')
|
log.warning('MOODLE: Seems to be there already')
|
||||||
|
|
||||||
|
try:
|
||||||
|
log.warning('NEXTCLOUD: Adding default group admin')
|
||||||
|
self.nextcloud.add_group('/admin')
|
||||||
|
log.warning('NEXTCLOUD: OK')
|
||||||
|
except ProviderItemExists:
|
||||||
|
log.warning('NEXTCLOUD: Seems to be there already')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
log.warning('NEXTCLOUD: Adding default group manager')
|
log.warning('NEXTCLOUD: Adding default group manager')
|
||||||
self.nextcloud.add_group('manager')
|
self.nextcloud.add_group('/manager')
|
||||||
log.warning('NEXTCLOUD: OK')
|
log.warning('NEXTCLOUD: OK')
|
||||||
except ProviderItemExists:
|
except ProviderItemExists:
|
||||||
log.warning('NEXTCLOUD: Seems to be there already')
|
log.warning('NEXTCLOUD: Seems to be there already')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
log.warning('NEXTCLOUD: Adding default group teacher')
|
log.warning('NEXTCLOUD: Adding default group teacher')
|
||||||
self.nextcloud.add_group('teacher')
|
self.nextcloud.add_group('/teacher')
|
||||||
log.warning('NEXTCLOUD: OK')
|
log.warning('NEXTCLOUD: OK')
|
||||||
except ProviderItemExists:
|
except ProviderItemExists:
|
||||||
log.warning('NEXTCLOUD: Seems to be there already')
|
log.warning('NEXTCLOUD: Seems to be there already')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
log.warning('NEXTCLOUD: Adding default group student')
|
log.warning('NEXTCLOUD: Adding default group student')
|
||||||
self.nextcloud.add_group('student')
|
self.nextcloud.add_group('/student')
|
||||||
log.warning('NEXTCLOUD: OK')
|
log.warning('NEXTCLOUD: OK')
|
||||||
except ProviderItemExists:
|
except ProviderItemExists:
|
||||||
log.warning('NEXTCLOUD: Seems to be there already')
|
log.warning('NEXTCLOUD: Seems to be there already')
|
||||||
|
@ -200,7 +206,7 @@ class Admin():
|
||||||
|
|
||||||
try:
|
try:
|
||||||
log.warning('NEXTCLOUD: Adding user ddadmin and adding to group admin')
|
log.warning('NEXTCLOUD: Adding user ddadmin and adding to group admin')
|
||||||
self.nextcloud.add_user(dduser,ddpassword,group='admin',email=ddmail,displayname='DD Admin')
|
self.nextcloud.add_user(dduser,ddpassword,group='/admin',email=ddmail,displayname='DD Admin')
|
||||||
log.warning('NEXTCLOUD: OK')
|
log.warning('NEXTCLOUD: OK')
|
||||||
except ProviderItemExists:
|
except ProviderItemExists:
|
||||||
log.warning('NEXTCLOUD: Seems to be there already')
|
log.warning('NEXTCLOUD: Seems to be there already')
|
||||||
|
@ -360,7 +366,7 @@ class Admin():
|
||||||
mgroups=[] if mgroups is None else mgroups
|
mgroups=[] if mgroups is None else mgroups
|
||||||
ngroups=[] if ngroups is None else ngroups
|
ngroups=[] if ngroups is None else ngroups
|
||||||
|
|
||||||
kgroups_names=[g['name'] for g in kgroups]
|
kgroups_names=[g['path'] for g in kgroups]
|
||||||
mgroups_names=[g['name'] for g in mgroups]
|
mgroups_names=[g['name'] for g in mgroups]
|
||||||
ngroups_names=ngroups
|
ngroups_names=ngroups
|
||||||
|
|
||||||
|
@ -369,7 +375,7 @@ class Admin():
|
||||||
groups=[]
|
groups=[]
|
||||||
for name in all_groups_names:
|
for name in all_groups_names:
|
||||||
thegroup={}
|
thegroup={}
|
||||||
keycloak_exists=[g for g in kgroups if g['name'] == name]
|
keycloak_exists=[g for g in kgroups if g['path'] == name]
|
||||||
if len(keycloak_exists):
|
if len(keycloak_exists):
|
||||||
thegroup=keycloak_exists[0]
|
thegroup=keycloak_exists[0]
|
||||||
thegroup['keycloak']=True
|
thegroup['keycloak']=True
|
||||||
|
@ -784,10 +790,15 @@ class Admin():
|
||||||
|
|
||||||
def delete_user(self,userid):
|
def delete_user(self,userid):
|
||||||
log.warning('deleting user moodle, nextcloud keycloak')
|
log.warning('deleting user moodle, nextcloud keycloak')
|
||||||
|
ev=Events('Deleting user','Deleting from moodle')
|
||||||
self.delete_moodle_user(userid)
|
self.delete_moodle_user(userid)
|
||||||
|
ev.update_text('Deleting from nextcloud')
|
||||||
self.delete_nextcloud_user(userid)
|
self.delete_nextcloud_user(userid)
|
||||||
|
ev.update_text('Deleting from keycloak')
|
||||||
self.delete_keycloak_user(userid)
|
self.delete_keycloak_user(userid)
|
||||||
|
ev.update_text('Syncing data from applications...')
|
||||||
self.resync_data()
|
self.resync_data()
|
||||||
|
ev.update_text('User deleted')
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def get_user(self,userid):
|
def get_user(self,userid):
|
||||||
|
|
|
@ -90,41 +90,10 @@ $(document).ready(function() {
|
||||||
"width": "10px",
|
"width": "10px",
|
||||||
"defaultContent": '<button class="btn btn-xs btn-info" type="button" data-placement="top" ><i class="fa fa-plus"></i></button>'
|
"defaultContent": '<button class="btn btn-xs btn-info" type="button" data-placement="top" ><i class="fa fa-plus"></i></button>'
|
||||||
},
|
},
|
||||||
{ "data": "id", "width": "10px" },
|
|
||||||
{ "data": "keycloak", "width": "10px" },
|
|
||||||
{ "data": "moodle", "width": "10px" },
|
|
||||||
{ "data": "nextcloud", "width": "10px" },
|
|
||||||
{ "data": "name", "width": "10px" },
|
{ "data": "name", "width": "10px" },
|
||||||
{ "data": "path", "width": "10px" },
|
{ "data": "path", "width": "10px" },
|
||||||
],
|
],
|
||||||
"order": [[3, 'asc']],
|
"order": [[2, 'asc']],
|
||||||
"columnDefs": [ {
|
// "columnDefs": [ ]
|
||||||
"targets": 2,
|
|
||||||
"render": function ( data, type, full, meta ) {
|
|
||||||
if(full.keycloak){
|
|
||||||
return '<i class="fa fa-check" style="color:lightgreen"></i>'
|
|
||||||
}else{
|
|
||||||
return '<i class="fa fa-close" style="color:darkred"></i>'
|
|
||||||
};
|
|
||||||
}},
|
|
||||||
{
|
|
||||||
"targets": 3,
|
|
||||||
"render": function ( data, type, full, meta ) {
|
|
||||||
if(full.moodle){
|
|
||||||
return '<i class="fa fa-check" style="color:lightgreen"></i>'
|
|
||||||
}else{
|
|
||||||
return '<i class="fa fa-close" style="color:darkred"></i>'
|
|
||||||
};
|
|
||||||
}},
|
|
||||||
{
|
|
||||||
"targets": 4,
|
|
||||||
"render": function ( data, type, full, meta ) {
|
|
||||||
if(full.nextcloud){
|
|
||||||
return '<i class="fa fa-check" style="color:lightgreen"></i>'
|
|
||||||
}else{
|
|
||||||
return '<i class="fa fa-close" style="color:darkred"></i>'
|
|
||||||
};
|
|
||||||
}},
|
|
||||||
]
|
|
||||||
} );
|
} );
|
||||||
})
|
})
|
|
@ -0,0 +1,130 @@
|
||||||
|
|
||||||
|
$(document).on('shown.bs.modal', '#modalAddDesktop', function () {
|
||||||
|
modal_add_desktops.columns.adjust().draw();
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
|
||||||
|
$('.btn-global-resync').on('click', function () {
|
||||||
|
$.ajax({
|
||||||
|
type: "GET",
|
||||||
|
url:"api/resync",
|
||||||
|
success: function(data)
|
||||||
|
{
|
||||||
|
table.ajax.reload();
|
||||||
|
// $("#modalImport").modal('hide');
|
||||||
|
// users_table.ajax.reload();
|
||||||
|
// groups_table.ajax.reload();
|
||||||
|
},
|
||||||
|
error: function(data)
|
||||||
|
{
|
||||||
|
alert('Something went wrong on our side...')
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Open new group modal
|
||||||
|
$('.btn-new').on('click', function () {
|
||||||
|
$('#modalAddGroup').modal({
|
||||||
|
backdrop: 'static',
|
||||||
|
keyboard: false
|
||||||
|
}).modal('show');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Send new group form
|
||||||
|
$('#modalAddGroup #send').on('click', function () {
|
||||||
|
var form = $('#modalAddGroupForm');
|
||||||
|
formdata = form.serializeObject()
|
||||||
|
console.log('NEW GROUP')
|
||||||
|
console.log(formdata)
|
||||||
|
// $.ajax({
|
||||||
|
// type: "POST",
|
||||||
|
// "url": "/groups_list",
|
||||||
|
// success: function(data)
|
||||||
|
// {
|
||||||
|
// console.log('SUCCESS')
|
||||||
|
// // $("#modalAddGroup").modal('hide');
|
||||||
|
// },
|
||||||
|
// error: function(data)
|
||||||
|
// {
|
||||||
|
// alert('Something went wrong on our side...')
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
});
|
||||||
|
|
||||||
|
$('.btn-delete_keycloak').on('click', function () {
|
||||||
|
$.ajax({
|
||||||
|
type: "DELETE",
|
||||||
|
url:"/api/groups/keycloak",
|
||||||
|
success: function(data)
|
||||||
|
{
|
||||||
|
console.log('SUCCESS')
|
||||||
|
// $("#modalImport").modal('hide');
|
||||||
|
// users_table.ajax.reload();
|
||||||
|
// groups_table.ajax.reload();
|
||||||
|
},
|
||||||
|
error: function(data)
|
||||||
|
{
|
||||||
|
alert('Something went wrong on our side...')
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
//DataTable Main renderer
|
||||||
|
var table = $('#groups').DataTable({
|
||||||
|
"ajax": {
|
||||||
|
"url": "/api/groups",
|
||||||
|
"dataSrc": ""
|
||||||
|
},
|
||||||
|
"language": {
|
||||||
|
"loadingRecords": '<i class="fa fa-spinner fa-pulse fa-3x fa-fw"></i><span class="sr-only">Loading...</span>',
|
||||||
|
"emptyTable": "<h1>You don't have any group created yet.</h1><br><h2>Create one using the +Add new button on top right of this page.</h2>"
|
||||||
|
},
|
||||||
|
"rowId": "id",
|
||||||
|
"deferRender": true,
|
||||||
|
"columns": [
|
||||||
|
{
|
||||||
|
"className": 'details-control',
|
||||||
|
"orderable": false,
|
||||||
|
"data": null,
|
||||||
|
"width": "10px",
|
||||||
|
"defaultContent": '<button class="btn btn-xs btn-info" type="button" data-placement="top" ><i class="fa fa-plus"></i></button>'
|
||||||
|
},
|
||||||
|
{ "data": "id", "width": "10px" },
|
||||||
|
{ "data": "keycloak", "width": "10px" },
|
||||||
|
{ "data": "moodle", "width": "10px" },
|
||||||
|
{ "data": "nextcloud", "width": "10px" },
|
||||||
|
{ "data": "name", "width": "10px" },
|
||||||
|
{ "data": "path", "width": "10px" },
|
||||||
|
],
|
||||||
|
"order": [[3, 'asc']],
|
||||||
|
"columnDefs": [ {
|
||||||
|
"targets": 2,
|
||||||
|
"render": function ( data, type, full, meta ) {
|
||||||
|
if(full.keycloak){
|
||||||
|
return '<i class="fa fa-check" style="color:lightgreen"></i>'
|
||||||
|
}else{
|
||||||
|
return '<i class="fa fa-close" style="color:darkred"></i>'
|
||||||
|
};
|
||||||
|
}},
|
||||||
|
{
|
||||||
|
"targets": 3,
|
||||||
|
"render": function ( data, type, full, meta ) {
|
||||||
|
if(full.moodle){
|
||||||
|
return '<i class="fa fa-check" style="color:lightgreen"></i>'
|
||||||
|
}else{
|
||||||
|
return '<i class="fa fa-close" style="color:darkred"></i>'
|
||||||
|
};
|
||||||
|
}},
|
||||||
|
{
|
||||||
|
"targets": 4,
|
||||||
|
"render": function ( data, type, full, meta ) {
|
||||||
|
if(full.nextcloud){
|
||||||
|
return '<i class="fa fa-check" style="color:lightgreen"></i>'
|
||||||
|
}else{
|
||||||
|
return '<i class="fa fa-close" style="color:darkred"></i>'
|
||||||
|
};
|
||||||
|
}},
|
||||||
|
]
|
||||||
|
} );
|
||||||
|
})
|
|
@ -222,7 +222,7 @@ $(document).ready(function() {
|
||||||
"columnDefs": [ {
|
"columnDefs": [ {
|
||||||
"targets": 1,
|
"targets": 1,
|
||||||
"render": function ( data, type, full, meta ) {
|
"render": function ( data, type, full, meta ) {
|
||||||
return '<object data="/static/img/missing.jpg" type="image/jpg" width="25" height="25"><img src="/avatar/'+full.id+'" title="'+full.id+'" width="25" height="25"></object>'
|
return '<img src="/avatar/'+full.id+'" title="'+full.id+'" width="25" height="25">'
|
||||||
}},
|
}},
|
||||||
{
|
{
|
||||||
"targets": 6,
|
"targets": 6,
|
||||||
|
|
|
@ -27,10 +27,6 @@
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th></th>
|
<th></th>
|
||||||
<th>Id</th>
|
|
||||||
<th>Keycloak</th>
|
|
||||||
<th>Moodle</th>
|
|
||||||
<th>Nextcloud</th>
|
|
||||||
<th>Name</th>
|
<th>Name</th>
|
||||||
<th>Path</th>
|
<th>Path</th>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
<!-- extend base layout -->
|
||||||
|
{% extends "base.html" %}
|
||||||
|
{% block css %}
|
||||||
|
<!-- Ion.RangeSlider -->
|
||||||
|
<link href="/vendors/normalize-css/normalize.css" rel="stylesheet">
|
||||||
|
<!-- Switchery -->
|
||||||
|
<link href="/vendors/switchery/dist/switchery.min.css" rel="stylesheet">
|
||||||
|
{% endblock %}
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12 col-sm-12 col-xs-12">
|
||||||
|
<div class="x_panel">
|
||||||
|
<div class="x_title">
|
||||||
|
<h3><i class="fa fa-users"></i> Groups</h3>
|
||||||
|
<ul class="nav navbar-right panel_toolbox">
|
||||||
|
<li>
|
||||||
|
<a class="btn-new"><span style="color: #5499c7; "><i class="fa fa-plus"></i> Add new</span></a>
|
||||||
|
<!-- <a class="btn-delete_keycloak"><span style="color: #c75454; "><i class="fa fa-cross"></i> Delete all keycloak</span></a> -->
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div class="clearfix"></div>
|
||||||
|
</div>
|
||||||
|
<div class="x_content">
|
||||||
|
<p class="text-muted font-13 m-b-30"></p>
|
||||||
|
<table id="groups" class="table" width="100%">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th></th>
|
||||||
|
<th>Id</th>
|
||||||
|
<th>Keycloak</th>
|
||||||
|
<th>Moodle</th>
|
||||||
|
<th>Nextcloud</th>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Path</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% include 'pages/modals/groups_modals.html' %}
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block pagescript %}
|
||||||
|
<!-- Ion.RangeSlider -->
|
||||||
|
<script src="/vendors/ion.rangeSlider/js/ion.rangeSlider.min.js"></script>
|
||||||
|
<!-- iCheck -->
|
||||||
|
<script src="/vendors/iCheck/icheck.min.js"></script>
|
||||||
|
<!-- Switchery -->
|
||||||
|
<script src="/vendors/switchery/dist/switchery.min.js"></script>
|
||||||
|
<!-- Desktops sse & modals -->
|
||||||
|
<script src="/static/js/sysadmin/groups.js"></script>
|
||||||
|
{% endblock %}
|
|
@ -21,6 +21,7 @@
|
||||||
<h3>System Admin</h3>
|
<h3>System Admin</h3>
|
||||||
<div class="clearfix"></div>
|
<div class="clearfix"></div>
|
||||||
<li><a href="/sysadmin/users"><i class="fa fa-user"></i> SysAdminUsers</span></a></li>
|
<li><a href="/sysadmin/users"><i class="fa fa-user"></i> SysAdminUsers</span></a></li>
|
||||||
|
<li><a href="/sysadmin/groups"><i class="fa fa-user"></i> SysAdminGroups</span></a></li>
|
||||||
<li><a href="/sysadmin/external"><i class="fa fa-external-link"></i> External</a></li>
|
<li><a href="/sysadmin/external"><i class="fa fa-external-link"></i> External</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
@ -73,6 +73,12 @@ def avatar(userid):
|
||||||
def web_sysadmin_users():
|
def web_sysadmin_users():
|
||||||
return render_template('pages/sysadmin/users.html', title="SysAdmin Users", nav="SysAdminUsers")
|
return render_template('pages/sysadmin/users.html', title="SysAdmin Users", nav="SysAdminUsers")
|
||||||
|
|
||||||
|
@app.route('/sysadmin/groups')
|
||||||
|
@login_required
|
||||||
|
def web_sysadmin_groups():
|
||||||
|
return render_template('pages/sysadmin/groups.html', title="SysAdmin Groups", nav="SysAdminGroups")
|
||||||
|
|
||||||
|
|
||||||
@app.route('/sysadmin/external')
|
@app.route('/sysadmin/external')
|
||||||
@login_required
|
@login_required
|
||||||
## SysAdmin role
|
## SysAdmin role
|
||||||
|
|
Loading…
Reference in New Issue