mirror of
https://git.jabber.space/devs/cproof.git
synced 2026-07-22 09:36:21 +00:00
Implemented /room config submit for saving room configuration
This commit is contained in:
@@ -236,6 +236,86 @@ form_create(xmpp_stanza_t * const form_stanza)
|
||||
return form;
|
||||
}
|
||||
|
||||
xmpp_stanza_t *
|
||||
form_create_submission(DataForm *form)
|
||||
{
|
||||
xmpp_ctx_t *ctx = connection_get_ctx();
|
||||
|
||||
xmpp_stanza_t *x = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(x, STANZA_NAME_X);
|
||||
xmpp_stanza_set_ns(x, STANZA_NS_DATA);
|
||||
xmpp_stanza_set_type(x, "submit");
|
||||
|
||||
GSList *curr_field = form->fields;
|
||||
while (curr_field != NULL) {
|
||||
FormField *field = curr_field->data;
|
||||
|
||||
xmpp_stanza_t *field_stanza = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(field_stanza, "field");
|
||||
xmpp_stanza_set_attribute(field_stanza, "var", field->var);
|
||||
|
||||
xmpp_stanza_t *value_stanza = NULL;
|
||||
GSList *curr_value = NULL;
|
||||
|
||||
switch (field->type_t) {
|
||||
|
||||
case FIELD_HIDDEN:
|
||||
case FIELD_TEXT_SINGLE:
|
||||
case FIELD_TEXT_PRIVATE:
|
||||
case FIELD_BOOLEAN:
|
||||
case FIELD_LIST_SINGLE:
|
||||
case FIELD_JID_SINGLE:
|
||||
case FIELD_FIXED:
|
||||
value_stanza = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(value_stanza, "value");
|
||||
if (field->values != NULL) {
|
||||
if (field->values->data != NULL) {
|
||||
xmpp_stanza_t *text_stanza = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_text(text_stanza, field->values->data);
|
||||
xmpp_stanza_add_child(value_stanza, text_stanza);
|
||||
xmpp_stanza_release(text_stanza);
|
||||
}
|
||||
}
|
||||
xmpp_stanza_add_child(field_stanza, value_stanza);
|
||||
xmpp_stanza_release(value_stanza);
|
||||
|
||||
break;
|
||||
|
||||
case FIELD_TEXT_MULTI:
|
||||
case FIELD_LIST_MUTLI:
|
||||
case FIELD_JID_MULTI:
|
||||
curr_value = field->values;
|
||||
while (curr_value != NULL) {
|
||||
char *value = curr_value->data;
|
||||
|
||||
value_stanza = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(value_stanza, "value");
|
||||
if (value != NULL) {
|
||||
xmpp_stanza_t *text_stanza = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_text(text_stanza, value);
|
||||
xmpp_stanza_add_child(value_stanza, text_stanza);
|
||||
xmpp_stanza_release(text_stanza);
|
||||
}
|
||||
|
||||
xmpp_stanza_add_child(field_stanza, value_stanza);
|
||||
xmpp_stanza_release(value_stanza);
|
||||
|
||||
curr_value = g_slist_next(curr_value);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
xmpp_stanza_add_child(x, field_stanza);
|
||||
xmpp_stanza_release(field_stanza);
|
||||
|
||||
curr_field = g_slist_next(curr_field);
|
||||
}
|
||||
|
||||
return x;
|
||||
}
|
||||
|
||||
static void
|
||||
_free_option(FormOption *option)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user