mirror of
https://forge.fsky.io/lda/Parsee.git
synced 2026-03-13 16:45:10 +00:00
[MOD] Multiple-option choices for lists.
You can now mass-remove admins!
This commit is contained in:
parent
0cb19a15d8
commit
308dfd500d
3 changed files with 59 additions and 16 deletions
|
|
@ -160,7 +160,12 @@ XMPPOptionToXML(XMPPOption *opt)
|
||||||
case XMPP_OPTION_BOOL: XMLAddAttr(elem, "type", "boolean"); break;
|
case XMPP_OPTION_BOOL: XMLAddAttr(elem, "type", "boolean"); break;
|
||||||
|
|
||||||
/* TODO */
|
/* TODO */
|
||||||
case XMPP_OPTION_LIST: XMLAddAttr(elem, "type", "list-single"); break;
|
case XMPP_OPTION_LIST:
|
||||||
|
XMLAddAttr(elem,
|
||||||
|
"type",
|
||||||
|
opt->data.as_arr.single ? "list-single" : "list-multi"
|
||||||
|
);
|
||||||
|
break;
|
||||||
case XMPP_OPTION_FIXED: XMLAddAttr(elem, "type", "fixed"); break;
|
case XMPP_OPTION_FIXED: XMLAddAttr(elem, "type", "fixed"); break;
|
||||||
}
|
}
|
||||||
XMLAddAttr(elem, "var", opt->id);
|
XMLAddAttr(elem, "var", opt->id);
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,25 @@
|
||||||
#include <XMPP.h>
|
#include <XMPP.h>
|
||||||
#include <XML.h>
|
#include <XML.h>
|
||||||
|
|
||||||
|
/* Removes one admin user */
|
||||||
|
static bool
|
||||||
|
DelAdmin(Array *admin_list, char *glob)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
bool removed = false;
|
||||||
|
for (i = 0; i < ArraySize(admin_list); i++)
|
||||||
|
{
|
||||||
|
char *admin = JsonValueAsString(ArrayGet(admin_list, i));
|
||||||
|
if (StrEquals(admin, glob))
|
||||||
|
{
|
||||||
|
removed = true;
|
||||||
|
JsonValueFree(ArrayDelete(admin_list, i));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return removed;
|
||||||
|
}
|
||||||
void
|
void
|
||||||
DelAdminCallback(XMPPCommandManager *m, char *from, XMLElement *form, XMLElement *out)
|
DelAdminCallback(XMPPCommandManager *m, char *from, XMLElement *form, XMLElement *out)
|
||||||
{
|
{
|
||||||
|
|
@ -20,10 +39,10 @@ DelAdminCallback(XMPPCommandManager *m, char *from, XMLElement *form, XMLElement
|
||||||
|
|
||||||
DbRef *admins;
|
DbRef *admins;
|
||||||
Array *admin_list;
|
Array *admin_list;
|
||||||
size_t i;
|
size_t i, globs;
|
||||||
bool removed = false;
|
bool removed = true;
|
||||||
|
|
||||||
GetFieldValue(glob, "glob", form);
|
GFVCount(globs, "glob", form);
|
||||||
|
|
||||||
if (!ParseeIsAdmin(data, trimmed))
|
if (!ParseeIsAdmin(data, trimmed))
|
||||||
{
|
{
|
||||||
|
|
@ -32,26 +51,26 @@ DelAdminCallback(XMPPCommandManager *m, char *from, XMLElement *form, XMLElement
|
||||||
Free(trimmed);
|
Free(trimmed);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!glob)
|
if (!globs)
|
||||||
{
|
{
|
||||||
SetNote("error", "No glob found.");
|
SetNote("error", "No glob found.");
|
||||||
Free(trimmed);
|
Free(trimmed);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Log(LOG_INFO, "glob=%s", glob);
|
|
||||||
admins = DbLock(data->db, 1, "admins");
|
admins = DbLock(data->db, 1, "admins");
|
||||||
admin_list = GrabArray(DbJson(admins), 1, "admins");
|
admin_list = GrabArray(DbJson(admins), 1, "admins");
|
||||||
|
|
||||||
for (i = 0; i < ArraySize(admin_list); i++)
|
for (i = 0; i < globs; i++)
|
||||||
{
|
{
|
||||||
char *admin = JsonValueAsString(ArrayGet(admin_list, i));
|
GFVMulti(glob, "glob", form, i);
|
||||||
if (StrEquals(admin, glob))
|
if (!glob)
|
||||||
{
|
{
|
||||||
SetNote("info", "Admin sucessfully removed.");
|
continue;
|
||||||
removed = true;
|
}
|
||||||
JsonValueFree(ArrayDelete(admin_list, i));
|
if (!DelAdmin(admin_list, glob))
|
||||||
break;
|
{
|
||||||
|
removed = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -60,8 +79,10 @@ DelAdminCallback(XMPPCommandManager *m, char *from, XMLElement *form, XMLElement
|
||||||
|
|
||||||
if (!removed)
|
if (!removed)
|
||||||
{
|
{
|
||||||
SetNote("warn", "Glob wasn't in list.");
|
SetNote("warn", "Couldn't remove some globrules.");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
SetNote("info", "Sucessfully removed admins");
|
||||||
/* TODO */
|
/* TODO */
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
|
|
@ -77,13 +98,13 @@ FormDelAdminCallback(XMPPCommandManager *m, XMPPCommand *cmd, char *from)
|
||||||
if (!ParseeIsAdmin(data, trimmed))
|
if (!ParseeIsAdmin(data, trimmed))
|
||||||
{
|
{
|
||||||
Free(trimmed);
|
Free(trimmed);
|
||||||
admin_opt = XMPPCreateList(true, true, "glob", "[NOT AUTHORIZED!]");
|
admin_opt = XMPPCreateList(true, false, "glob", "[NOT AUTHORIZED!]");
|
||||||
XMPPAddOption(cmd, admin_opt);
|
XMPPAddOption(cmd, admin_opt);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Free(trimmed);
|
Free(trimmed);
|
||||||
|
|
||||||
admin_opt = XMPPCreateList(true, true, "glob", "[NVM!]");
|
admin_opt = XMPPCreateList(true, false, "glob", "[NVM!]");
|
||||||
|
|
||||||
admins = DbLock(data->db, 1, "admins");
|
admins = DbLock(data->db, 1, "admins");
|
||||||
admin_list = GrabArray(DbJson(admins), 1, "admins");
|
admin_list = GrabArray(DbJson(admins), 1, "admins");
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,23 @@
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
while(0)
|
while(0)
|
||||||
|
#define GFVMulti(to,id,form,n) do \
|
||||||
|
{ \
|
||||||
|
XMLElement *field_content = XMLookForTKV(form, "field", "var", id); \
|
||||||
|
XMLElement *value = field_content ? ArrayGet(field_content->children, n) : NULL; \
|
||||||
|
XMLElement *val_data = value ? ArrayGet(value->children, 0) : NULL; \
|
||||||
|
if (val_data && val_data->data) \
|
||||||
|
{ \
|
||||||
|
to = val_data->data; \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
while(0)
|
||||||
|
#define GFVCount(to,id,form) do \
|
||||||
|
{ \
|
||||||
|
XMLElement *field_content = XMLookForTKV(form, "field", "var", id); \
|
||||||
|
to = field_content ? ArraySize(field_content->children) : 0; \
|
||||||
|
} \
|
||||||
|
while(0)
|
||||||
|
|
||||||
#define SetNote(type, text) do \
|
#define SetNote(type, text) do \
|
||||||
{ \
|
{ \
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue