new permissions:

* list members may be nominated as moderators by admin
* admin may allow moderators to nominate more moderators
* admin may set allowed senders to one of the following:
    * owners and mods
    * all subscribers
    * everyone
* moderators are now able to remove members from list
This commit is contained in:
2022-04-22 12:35:16 +02:00
parent 7bf492e469
commit b9b3196ae6
9 changed files with 305 additions and 36 deletions

View File

@@ -49,11 +49,15 @@
</label>
</fieldset>
<fieldset>
<legend>Archive options</legend>
<legend>Other options</legend>
<label>
<input type="checkbox" name="archive">
Collect messages in public archive
</label>
<label>
<input type="checkbox" name="edit_mods">
Moderators may edit list of moderators
</label>
</fieldset>
<button type="submit">Save</button>
</fieldset>

View File

@@ -1,3 +1,7 @@
function addMod(userEmail,listEmail){
$.post('/api/list/add_mod',{list:listEmail,email:userEmail},reload,'json');
}
function addPermission(userEmail,permission){
if (confirm("Really give permission to "+userEmail+"?")){
$.post('/api/user/addpermission',{email:userEmail,permissions:permission},reload,'json');
@@ -12,6 +16,15 @@ function dropList(listEmail){
console.log('dopList('+listEmail+')');
}
function dropMember(userEmail,listEmail){
$.post('/api/list/drop_member',{list:listEmail,email:userEmail},reload,'json');
}
function dropMod(userEmail,listEmail){
$.post('/api/list/drop_mod',{list:listEmail,email:userEmail},reload,'json');
}
function dropPermission(userEmail,permission){
if (confirm("Really withdraw permission from "+userEmail+"?")){
$.post('/api/user/droppermission',{email:userEmail,permissions:permission},reload,'json');
@@ -36,8 +49,8 @@ function loadListDetail(listEmail){
$.post('/api/list/detail',{list:listEmail},showListDetail,'json');
}
function loadListOfEditableLists(){
$.getJSON('/api/list/editable', showListOfEditableLists);
function loadListOfModeratedLists(){
$.getJSON('/api/list/moderated', showListOfModeratedLists);
}
function loadListOfSubscribableLists(){
@@ -74,14 +87,14 @@ function showListArchive(data){
}
function showListDetail(data){
var options = ['forward_from','forward_attached','hide_receivers','reply_to_list','open_for_guests','open_for_subscribers','archive'];
var options = ['forward_from','forward_attached','hide_receivers','reply_to_list','open_for_guests','open_for_subscribers','archive','edit_mods'];
options.forEach(function(option,index,array){
console.log(option,'→',data[option]);
if (data[option]) $('input[name="'+option+'"]').prop('checked',true);
});
}
function showListOfEditableLists(data){
function showListOfModeratedLists(data){
for (let i in data.lists){
let list = data.lists[i];
let row = $('<tr/>');
@@ -161,12 +174,20 @@ function showListResult(result){
}
function showMembers(data){
var list_mail = data.list.email.prefix+'@'+data.list.email.domain;
for (let i in data.members){
let member = data.members[i];
let row = $('<tr/>');
$('<td/>').text(member.name).appendTo(row);
$('<td/>').text(member.email).appendTo(row);
$('<td/>').text(member.state).appendTo(row);
let col = $('<td/>');
console.log("data",data);
if (member.state.includes("moderator")) {
if (!member.state.includes("owner")) $('<button/>',{onclick:'dropMod("'+member.email+'","'+list_mail+'")'}).text("- moderator").appendTo(col);
} else $('<button/>',{onclick:'addMod("'+member.email+'","'+list_mail+'")'}).text("+ moderator").appendTo(col);
if (!member.state.includes("owner")) $('<button/>',{onclick:'dropMember("'+member.email+'","'+list_mail+'")'}).text("remove").appendTo(col);
col.appendTo(row);
row.appendTo('#memberlist');
}

View File

@@ -22,6 +22,6 @@
</table>
<a href="add_list">Add new mailing list</a>
<script type="text/javascript">
loadListOfEditableLists();
loadListOfModeratedLists();
</script>
</fieldset>

View File

@@ -5,6 +5,7 @@
<th>Name</th>
<th>Email</th>
<th>State</th>
<th>Actions</th>
</tr>
</table>
<script type="text/javascript">