def print_view(entity, act_str, page, prompt_pk_only, display_errors): viewtext = "" from germ.lib.misc import txt_lang report = txt_lang(entity.action_report(act_str)) if len(report) > 0: viewtext += "%s.<BR />\n<BR />\n" % report from attr_act_view import attr_act_view act_view = attr_act_view() viewtext += "<TABLE>\n" from germ.attr.dummy import dummy for attr in entity.attr_iter("view"): if isinstance(attr, dummy): continue viewtext += '<TR><TH align="left">%s:</TH>' % attr.label() viewtext += get_cell(attr, act_view) viewtext += "</TR>\n" viewtext += "</TABLE>" return (viewtext, "")
def txt(self, lang=None): from germ.lib import misc msg = isinstance(self.__msg, dict) and misc.txt_lang(self.__msg, lang) or self.__msg if self.__add_info is None: add_info = "" else: add_info = " (%s)" % self.__add_info return "%s%s" % (msg, add_info)
def visit_choice(self, attr): from germ.lib import misc self._text = '<SELECT name="%s"%s>\n' % (self.__parm_name, \ self.__lock_str(attr.is_locked())) for i, choice in attr.get_options(): self._text += '\t<OPTION value="%s"%s>%s</OPTION>\n' % \ (i, i == attr.get() and ' selected' or '', misc.txt_lang(choice)) self._text += "</SELECT>"
def parse_item(self): if self._hide > 0: self._data = '' return if len(self.__item_stack) == 0: return item = self.__item_stack[-1] attrs, entity, act_str = item import re import cf from germ.lib.misc import txt_lang self._data = re.sub('\$text\$', '<A href="%s?%s">%s</A>' % ( cf.ht_index, '&'.join(['%s=%s' % attr for attr in attrs]), txt_lang(entity.item_txt(act_str))), self._data)
def print_form(entity, act_str, page, prompt_pk_only, display_errors): import cf formtext = '<FORM method="GET" action="%s" autocomplete="off">\n' % cf.ht_index # Give form again until user has seen all the fields, except for a view. if not prompt_pk_only or act_str == "view": formtext += '<INPUT type="hidden" name="do_exec">\n' formtext += '<INPUT type="hidden" name="entity" value="%s">\n' % entity.get_name() formtext += '<INPUT type="hidden" name="action" value="%s">\n' % act_str if page is not None: formtext += '<INPUT type="hidden" name="page" value="%s">\n' % page formtext += "<TABLE>\n" error_vec = [] from attr_act_form_field import attr_act_form_field act_form_field = attr_act_form_field() from attr_act_form_key import attr_act_form_key act_form_key = attr_act_form_key() attr_vec = entity.get_attr_vec(act_str) pk_set = entity.get_pk_set() prev_was_key = False prev_group = None cnt = 0 while len(attr_vec) > 0: group = entity.get_ref_group(attr_vec[0]) from germ.error.error import error error(error.debug, "printing attribute", "aid: %s, group: %s" % (attr_vec[0], group)) if group is None: aid = attr_vec.pop(0) if prompt_pk_only: continue prev_was_key = False attr = entity.get_attr_nocheck(aid) formtext += '<TR><TD colspan="2">%s:</TD><TD>' % attr.label() # This can happen if the attribute is already locked for the first # request. if attr.is_locked(): formtext += '<INPUT type="hidden" name="lock" ' 'value="%s">' % aid parm_name = cf.ht_parm_prefix_attr + aid act_form_field.set_parm_name(parm_name) attr.accept(act_form_field) formtext += act_form_field.get_text() if display_errors: formtext += get_error(attr, error_vec) formtext += "</TD></TR>\n" else: cnt += 1 j = 0 first = True # Also display remaining attributes of the same reference group. while j < len(attr_vec): if not group.has_key(attr_vec[j]): j += 1 continue aid = attr_vec.pop(j) attr = entity.get_attr_nocheck(aid) if prompt_pk_only and aid not in pk_set: continue if prev_group != group and prev_was_key: formtext += '<TR><TD colspan="2"></TD><TD><HR></TD></TR>\n' prev_group = group prev_was_key = True from sets import Set as set keyset = group.has_fk(aid) and set(group.get_keys(aid)) or set() locked = attr.is_locked() lock = locked or len(keyset) == 1 formtext += ( '<TR><TD>%s:</TD><TD align="right"><INPUT ' 'type="radio" name="to_lock%u" ' 'value="%s"%s%s></TD><TD>' % (attr.label(), cnt, aid, (lock) and " disabled" or "", (not lock and first) and " checked" or "") ) if lock: formtext += '<INPUT type="hidden" name="lock" ' 'value="%s">' % aid elif first: first = False parm_name = cf.ht_parm_prefix_attr + aid change_handler = ( "var radios = this.form.elements['to_lock%u']; " "for (var i = 0; i < radios.length; i++) {" " if (radios[i].value == '%s') {" " radios[i].checked = true; " " break; " " }" "}" % (cnt, aid) ) if group.has_fk(aid): formtext += '<SELECT name="%s" onchange="%s"%s>' % ( parm_name, change_handler, locked and " disabled" or "", ) if attr.is_set(): cur_key = attr.sql_str() else: cur_key = None tmp_attr = attr.copy() prev_key = None for key in keyset: formtext += '\t<OPTION value="%s"%s>' % (key, key == cur_key and " selected" or "") tmp_attr.set_sql(key) tmp_attr.accept(act_form_key) formtext += act_form_key.get_text() formtext += "</OPTION>\n" prev_key = key formtext += "</SELECT>" if attr.is_locked(): formtext += '<INPUT type="hidden" name="%s" ' 'value="%s">' % (parm_name, attr.get()) else: act_form_field.set_parm_name(parm_name) act_form_field.set_handler("change", change_handler) attr.accept(act_form_field) formtext += act_form_field.get_text() if display_errors: formtext += get_error(attr, error_vec) formtext += "</TD></TR>\n" from germ.lib.misc import txt_lang formtext += ( '<TR><TD colspan="2"></TD>' '<TD><INPUT type="submit" value="%s"></TD>' "</TR>\n" % txt_lang(entity.action_txt(act_str)) ) formtext += "</TABLE>\n</FORM>" from germ.txt import errmsg errortext = len(error_vec) > 0 and txt_lang(errmsg.attr_error) + ":<BR />\n" or "" for i, e_vec in enumerate(error_vec): err_str = "" for e in e_vec: err_str += "%s<BR />\n" % e errortext += '<SPAN style="color: red">%s</SPAN>: %s' % (i + 1, err_str) errortext += len(error_vec) > 0 and "<BR />\n" or "" return (formtext, errortext)
def __str__(self): from germ.lib import misc return misc.txt_lang(self.__options[self.get()])
def lvl_txt(level, lang=None): from germ.txt.errmsg import error_lvl from germ.lib import misc return misc.txt_lang(error_lvl[level], lang)
def label(self): from germ.lib import misc return misc.txt_lang(self.__label)