Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/adhoc_commands.py7
-rw-r--r--src/common/dataforms.py53
2 files changed, 54 insertions, 6 deletions
diff --git a/src/adhoc_commands.py b/src/adhoc_commands.py
index 5add272fe..69d3568db 100644
--- a/src/adhoc_commands.py
+++ b/src/adhoc_commands.py
@@ -331,7 +331,14 @@ class CommandWindow:
def stage3_submit_form(self, action='execute'):
self.data_form_widget.set_sensitive(False)
+
if self.data_form_widget.get_data_form():
+ df = self.data_form_widget.get_data_form()
+ if not df.is_valid():
+ dialogs.ErrorDialog(_('Invalid Form'),
+ _('The form is not filled correctly.'))
+ self.data_form_widget.set_sensitive(True)
+ return
self.data_form_widget.data_form.type = 'submit'
else:
self.data_form_widget.hide()
diff --git a/src/common/dataforms.py b/src/common/dataforms.py
index fea7187ea..6d9b46f9c 100644
--- a/src/common/dataforms.py
+++ b/src/common/dataforms.py
@@ -27,6 +27,7 @@ information how to use them, read documentation
"""
import xmpp
+import helpers
# exceptions used in this module
# base class
@@ -65,8 +66,8 @@ def Field(typ, **attrs):
'hidden': StringField,
'text-private': StringField,
'text-single': StringField,
- 'jid-multi': ListMultiField,
- 'jid-single': ListSingleField,
+ 'jid-multi': JidMultiField,
+ 'jid-single': JidSingleField,
'list-multi': ListMultiField,
'list-single': ListSingleField,
'text-multi': TextMultiField,
@@ -87,8 +88,8 @@ def ExtendField(node):
'hidden': StringField,
'text-private': StringField,
'text-single': StringField,
- 'jid-multi': ListMultiField,
- 'jid-single': ListSingleField,
+ 'jid-multi': JidMultiField,
+ 'jid-single': JidSingleField,
'list-multi': ListMultiField,
'list-single': ListSingleField,
'text-multi': TextMultiField,
@@ -247,6 +248,9 @@ class DataField(ExtendedNode):
self.delChild(t)
return locals()
+
+ def is_valid(self):
+ return True
class Uri(xmpp.Node):
def __init__(self, uri_tag):
@@ -405,13 +409,28 @@ class ListField(DataField):
class ListSingleField(ListField, StringField):
"""
- Covers list-single and jid-single fields
+ Covers list-single field
"""
pass
+class JidSingleField(ListSingleField):
+ """
+ Covers jid-single fields
+ """
+ def is_valid(self):
+ if self.value:
+ try:
+ helpers.parse_jid(self.value)
+ return True
+ except:
+ return False
+ if self.required:
+ return False
+ return True
+
class ListMultiField(ListField):
"""
- Covers list-multi and jid-multi fields
+ Covers list-multi fields
"""
@nested_property
@@ -440,6 +459,22 @@ class ListMultiField(ListField):
for element in self.getTags('value'):
yield element.getData()
+class JidMultiField(ListMultiField):
+ """
+ Covers jid-multi fields
+ """
+ def is_valid(self):
+ if len(self.values):
+ for value in self.values:
+ try:
+ helpers.parse_jid(self.value)
+ except:
+ return False
+ return True
+ if self.required:
+ return False
+ return True
+
class TextMultiField(DataField):
@nested_property
def value():
@@ -530,6 +565,12 @@ class DataRecord(ExtendedNode):
def __getitem__(self, item):
return self.vars[item]
+
+ def is_valid(self):
+ for f in self.iter_fields():
+ if not f.is_valid():
+ return False
+ return True
class DataForm(ExtendedNode):
def __init__(self, type_=None, title=None, instructions=None, extend=None):