コード例 #1
0
    def getViewHTML(self,
                    maskitem,
                    nodes,
                    flags,
                    language=None,
                    template_from_caller=None,
                    mask=None,
                    use_label=True):
        if flags & VIEW_DATA_ONLY:
            ret = []
            for item in maskitem.getChildren().sort_by_orderpos():
                f = getMetadataType(item.get("type"))
                ret.append(f.getViewHTML(item, nodes, flags,
                                         language=language))
            return ret
        else:
            if use_label:
                snippets = [
                    '<div class="mask_row hgroup hgroup-%s"><div class="mask_label">%s: </div><div class="mask_value">'
                    % (maskitem.id, maskitem.getLabel())
                ]
            else:
                snippets = [
                    '<div class="mask_row hgroup hgroup-%s"><div class="mask_value">'
                    % (maskitem.id)
                ]
            raw_values = ['&nbsp;']
            sep = ''
            has_raw_value = False  # skip group display if no item has raw_value
            items = maskitem.getChildren().sort_by_orderpos()
            for i, item in enumerate(items):
                f = getMetadataType(item.get("type"))
                raw_value = f.getViewHTML(item,
                                          nodes,
                                          flags | VIEW_SUB_ELEMENT,
                                          language=language)
                if raw_value.strip():
                    raw_values.append(raw_value)
                    if not raw_value == '&nbsp;':
                        has_raw_value = True
                    if sep:
                        snippets.append(sep)
                        sep = item.get('separator', '&nbsp;')
                    snippets.append('<span class="hgroup_item">%s</span>' %
                                    raw_value)
                else:
                    sep = ''  # no separator before or after empty sub element

            unit = maskitem.get('unit').strip()
            if not has_raw_value:
                snippets = []  # no value when all sub elements are empty
            elif raw_values and unit:
                snippets.append(
                    '&nbsp;<span class="hgroup_unit field_unit hgroup-%s">%s</span></div></div>'
                    % (maskitem.id, unit))
            elif raw_values:
                snippets.append('</div></div>')
            ret = ''.join(snippets)
            return ret
コード例 #2
0
    def getMetaEditor(self, item, req):
        """ editor mask for hgroup-field definition """
        fieldlist = getAllMetaFields()
        if len(item.getParents()) == 0:
            pid = req.params.get("pid", "")
        else:
            pid = item.getParents()[0].id

        if ustr(req.params.get("edit")) == ustr("None"):
            item = Maskitem(name="", type="maskitem")
            item.set("type", "hgroup")

        details = ""
        i = 0
        for field in item.getChildren().sort_by_orderpos():
            f = getMetadataType(field.get("type"))
            details += f.getMetaHTML(item, i, False, fieldlist=fieldlist)
            i += 1

        if req.params.get("sel_id", "") != "":
            i = 0
            for id in req.params.get("sel_id")[:-1].split(";"):
                f = getMetadataType(q(Node).get(id).get("type"))
                details += f.getMetaHTML(
                    item,
                    i,
                    False,
                    itemlist=req.params.get("sel_id")[:-1].split(";"),
                    ptype="hgroup",
                    fieldlist=fieldlist,
                    language=lang(req))
                i += 1

        fields = []
        metadatatype = req.params.get("metadatatype")

        if req.params.get("op", "") == "new":
            pidnode = q(Node).get(req.params.get("pid"))
            if pidnode.get("type") in ("vgroup", "hgroup"):
                for field in pidnode.all_children:
                    if field.getType().getName(
                    ) == "maskitem" and field.id != pidnode.id:
                        fields.append(field)
            else:
                for m in metadatatype.getMasks():
                    if ustr(m.id) == ustr(req.params.get("pid")):
                        for field in m.getChildren():
                            fields.append(field)
        fields.sort(lambda x, y: cmp(x.getOrderPos(), y.getOrderPos()))

        v = {}
        v["pid"] = pid
        v["item"] = item
        v["op"] = req.params.get("op", "")
        v["details"] = details
        v["fields"] = fields
        v["selid"] = req.params.get("sel_id", "")
        return req.getTAL("schema/mask/hgroup.html", v, macro="metaeditor")
コード例 #3
0
ファイル: vgroup.py プロジェクト: agromsl/mediatum
    def getMetaEditor(self, item, req):
        """ editor mask for vgroup-field definition """
        fieldlist = getAllMetaFields()
        if len(item.getParents()) == 0:
            pid = req.params.get("pid", "")
        else:
            pid = item.getParents()[0].id

        if str(req.params.get("edit")) == str("None"):
            item = Maskitem(name="", type="maskitem")
            item.set("type", "vgroup")

        details = ""
        i = 0
        for field in item.getChildren().sort_by_orderpos():
            f = getMetadataType(field.get("type"))
            details += f.getMetaHTML(item, i, False, fieldlist=fieldlist, language=lang(req))
            i += 1

        if req.params.get("sel_id", "") != "":
            i = 0
            for id in req.params.get("sel_id")[:-1].split(";"):
                f = getMetadataType(getNode(id).get("type"))
                try:
                    details += f.getMetaHTML(item, i, False, itemlist=req.params.get("sel_id")
                                             [:-1].split(";"), ptype="vgroup", fieldlist=fieldlist)
                except TypeError:
                    pass
                i += 1
        fields = []
        metadatatype = req.params.get("metadatatype")

        if req.params.get("op", "") == "new":
            pidnode = getNode(req.params.get("pid"))
            if pidnode.get("type") in ("vgroup", "hgroup"):
                for field in pidnode.getAllChildren():
                    if field.getType().getName() == "maskitem" and field.id != pidnode.id:
                        fields.append(field)
            else:
                for m in metadatatype.getMasks():
                    if str(m.id) == str(req.params.get("pid")):
                        for field in m.getChildren():
                            fields.append(field)
        fields.sort(lambda x, y: cmp(x.getOrderPos(), y.getOrderPos()))

        v = {}
        v["pid"] = pid
        v["item"] = item
        v["op"] = req.params.get("op", "")
        v["details"] = details
        v["fields"] = fields
        v["selid"] = req.params.get("sel_id", "")
        return req.getTAL("schema/mask/vgroup.html", v, macro="metaeditor")
コード例 #4
0
    def set_default_metadata(self, field, node):
        """
        create/set metadata of a document if the value is not set to a default value
        the default value is normally an empty string except the fieldtype has an attribute
        "formatValues" (fieldtypes: list, mlist, dlist) an defines an option list. In this case the first listelement is
        used as default value
        :param field: field of mask defining metadata
        :param node: document
        :return: None
        """
        element = field.getField()
        elementtype = element.get("type")
        key = element.getName()
        val = node.get_special(key)
        if val == "" and field.getDefault() != "":
            val = field.getDefault()

        if val == "":
            t = getMetadataType(elementtype)
            if hasattr(t, "formatValues"):
                context = Context(element,
                                  value=val,
                                  width=field.getWidth(),
                                  name=field.getName(),
                                  lock=0,
                                  language=None)
                valuelist = t.formatValues(context)
                if valuelist[0][0] in ('option', 'optionselected'):
                    node.set(key, valuelist[0][2])
            else:
                node.set(key, "")
        return None
コード例 #5
0
def handle_json_request(req):
    s = []
    if req.args.get("cmd") == "get_list_smi":
        searchmaskitem_id = req.params.get("searchmaskitem_id")
        f = None
        g = None
        if searchmaskitem_id and searchmaskitem_id != "full":
            f = q(Node).get(searchmaskitem_id).getFirstField()
        if not f:  # All Metadata
            f = g = getMetadataType("text")

        container_id = req.args.get("container_id")

        container = q(Container).get(container_id) if container_id else None

        if container is None or not container.has_read_access():
            container = get_collections_node()

        s = [
            f.getSearchHTML(
                Context(g,
                        value=req.args.get("query_field_value"),
                        width=174,
                        name="query" + str(req.args.get("fieldno")),
                        language=lang(req),
                        container=container,
                        user=current_user,
                        ip=req.ip))
        ]
    req.write(
        req.params.get("jsoncallback") + "(%s)" % json.dumps(s, indent=4))
コード例 #6
0
ファイル: main.py プロジェクト: mediatum/mediatum
def handle_json_request(req):
    s = []
    if req.args.get("cmd") == "get_list_smi":
        searchmaskitem_id = req.params.get("searchmaskitem_id")
        f = None
        g = None
        if searchmaskitem_id and searchmaskitem_id != "full":
            f = q(Node).get(searchmaskitem_id).getFirstField()
        if not f:  # All Metadata
            f = g = getMetadataType("text")

        container_id = req.args.get("container_id")

        container = q(Container).get(container_id) if container_id else None

        if container is None or not container.has_read_access():
            container = get_collections_node()

        s = [
            f.getSearchHTML(
                Context(
                    g,
                    value=req.args.get("query_field_value"),
                    width=174,
                    name="query" + str(req.args.get("fieldno")),
                    language=lang(req),
                    container=container,
                    user=current_user,
                    ip=req.ip))]
    req.write(req.params.get("jsoncallback") + "(%s)" % json.dumps(s, indent=4))
コード例 #7
0
ファイル: field.py プロジェクト: mediatum/mediatum
    def set_default_metadata(self, field, node):
        """
        create/set metadata of a document if the value is not set to a default value
        the default value is normally an empty string except the fieldtype has an attribute
        "formatValues" (fieldtypes: list, mlist, dlist) an defines an option list. In this case the first listelement is
        used as default value
        :param field: field of mask defining metadata
        :param node: document
        :return: None
        """
        element = field.getField()
        elementtype = element.get("type")
        key = element.getName()
        val = node.get_special(key)
        if val == "" and field.getDefault() != "":
            val = field.getDefault()

        if val == "":
            t = getMetadataType(elementtype)
            if hasattr(t, "formatValues"):
                context = Context(element, value=val, width=field.getWidth(), name=field.getName(), lock=0, language=None)
                valuelist = t.formatValues(context)
                if valuelist[0][0] in ('option', 'optionselected'):
                    node.set(key, valuelist[0][2])
            else:
                node.set(key, "")
        return None
コード例 #8
0
def handle_json_request(req):
    s = []
    if req.params.get("cmd") == "get_list_smi":
        searchmaskitem_id = req.params.get("searchmaskitem_id")
        f = None
        g = None
        if searchmaskitem_id and searchmaskitem_id != "full":
            f = tree.getNode(searchmaskitem_id).getFirstField()
        if not f:  # All Metadata
            f = g = getMetadataType("text")
        s = [
            f.getSearchHTML(
                Context(g,
                        value=req.params.get("query_field_value"),
                        width=174,
                        name="query" + str(req.params.get("fieldno")),
                        language=lang(req),
                        collection=tree.getNode(
                            req.params.get("collection_id")),
                        user=users.getUserFromRequest(req),
                        ip=req.ip))
        ]
    req.write(
        req.params.get("jsoncallback") + "(%s)" % json.dumps(s, indent=4))
    return
コード例 #9
0
    def getMetaHTML(self,
                    parent,
                    index,
                    sub=False,
                    language=None,
                    fieldlist={}):
        item = parent.getChildren().sort_by_orderpos()[index]
        ret = ''
        i = 0

        if not sub:
            ret += '<div id="{}" class="row metaeditor" onmouseover="pick(this)" onmouseout="unpick(this)" onclick="select(this)">'.format(
                item.id)

        ret += '<fieldset>'

        if item.getLabel() != "":
            ret += u'<legend>{}</legend>'.format(item.getLabel())

        ret += '<div id="editor_content">'
        for field in item.getChildren().sort_by_orderpos():
            f = getMetadataType(field.get("type"))
            ret += u'<div id="hitem">{}</div>'.format(
                f.getMetaHTML(item,
                              i,
                              True,
                              language=language,
                              fieldlist=fieldlist))
            i += 1

        if len(item.getChildren()) == 0:
            ret += '<span i18n:translate="mask_editor_no_fields">- keine Felder definiert -</span>'

        ret += '</fieldset>'

        if not sub:
            ret += '<div align="right" id="' + unicode(item.id) + \
                '_sub" style="display:none; clear:both"><small style="color:silver">(' + (item.get("type")) + ')</small>'
            if index > 0:
                ret += '<input type="image" src="/img/uparrow.png" name="up_' + \
                    unicode(item.id) + '" i18n:attributes="title mask_edit_up_title"/>'
            else:
                ret += '&nbsp;&nbsp;&nbsp;'
            if index < len(parent.getChildren()) - 1:
                ret += '<input type="image" src="/img/downarrow.png" name="down_' + \
                    unicode(item.id) + '" i18n:attributes="title mask_edit_down_title"/>'
            else:
                ret += '&nbsp;&nbsp;&nbsp;'
            ret += ' <input type="image" src="/img/edit.png" name="edit_' + unicode(
                item.id
            ) + '" i18n:attributes="title mask_edit_edit_row"/> <input type="image" src="/img/delete.png" name="delete_' + unicode(
                item.id
            ) + '" i18n:attributes="title mask_edit_delete_row" onClick="return questionDel()"/></div>'
            ret += '</div>'

        return ret
コード例 #10
0
    def getViewHTML(self, field, nodes, flags, language=None, template_from_caller=None, mask=None, use_label=True):
        if flags & VIEW_DATA_ONLY:
            ret = []
            for item in field.getChildren().sort_by_orderpos():
                f = getMetadataType(item.get("type"))
                ret.append(f.getViewHTML(item, nodes, flags, language=language))
            return ret
        else:
            # standard view

            ret = '<div class="mask_row"><fieldset>\n'
            if use_label:
                ret += '<legend>' + field.getLabel() + '</legend>'
            for item in field.getChildren().sort_by_orderpos():
                f = getMetadataType(item.get("type"))
                ret += '<div class="mask_row">' + f.getViewHTML(item, nodes, flags) + '</div>\n'
            ret += '</fieldset></div>\n'

        return ret
コード例 #11
0
ファイル: vgroup.py プロジェクト: agromsl/mediatum
    def getViewHTML(self, field, nodes, flags, language=None, template_from_caller=None, mask=None, use_label=True):
        if flags & VIEW_DATA_ONLY:
            ret = []
            for item in field.getChildren().sort_by_orderpos():
                f = getMetadataType(item.get("type"))
                ret.append(f.getViewHTML(item, nodes, flags, language=language))
            return ret
        else:
            # standard view

            ret = '<div class="mask_row"><fieldset>\n'
            if use_label:
                ret += '<legend>' + field.getLabel() + '</legend>'
            for item in field.getChildren().sort_by_orderpos():
                f = getMetadataType(item.get("type"))
                ret += '<div class="mask_row">' + f.getViewHTML(item, nodes, flags) + '</div>\n'
            ret += '</fieldset></div>\n'

        return ret
コード例 #12
0
ファイル: hgroup.py プロジェクト: agromsl/mediatum
    def getViewHTML(self, field, nodes, flags, language=None, template_from_caller=None, mask=None, use_label=True):
        if flags & VIEW_DATA_ONLY:
            ret = []
            for item in field.getChildren().sort_by_orderpos():
                f = getMetadataType(item.get("type"))
                ret.append(f.getViewHTML(item, nodes, flags, language=language))
            return ret
        else:
            if use_label:
                snippets = ['<div class="mask_row hgroup hgroup-%s"><div class="mask_label">%s: </div><div class="mask_value">' % (field.id, field.getLabel())]
            else:
                snippets = ['<div class="mask_row hgroup hgroup-%s"><div class="mask_value">' % (field.id)]
            raw_values = ['&nbsp;']
            sep = ''
            has_raw_value = False  # skip group display if no item has raw_value
            items = field.getChildren().sort_by_orderpos()
            len_items = len(items)
            for i, item in enumerate(items):
                f = getMetadataType(item.get("type"))
                raw_value = f.getViewHTML(item, nodes, flags | VIEW_SUB_ELEMENT, language=language)
                if raw_value.strip():
                    raw_values.append(raw_value)
                    if not raw_value == '&nbsp;':
                        has_raw_value = True
                    if sep:
                        snippets.append(sep)
                        sep = item.get('separator', '&nbsp;')
                    snippets.append('<span class="hgroup_item">%s</span>' % raw_value)
                else:
                    sep = ''  # no separator before or after empty sub element

            unit = field.get('unit').strip()
            if not has_raw_value:
                snippets = []  # no value when all sub elements are empty
            elif raw_values and unit:
                snippets.append('&nbsp;<span class="hgroup_unit field_unit hgroup-%s">%s</span></div></div>' % (field.id, unit))
            elif raw_values:
                snippets.append('</div></div>')
            ret = ''.join(snippets)
            return ret
コード例 #13
0
ファイル: vgroup.py プロジェクト: agromsl/mediatum
    def getFormHTML(self, field, nodes, req):
        ret = '<fieldset>'
        if field.getLabel() != "":
            ret += '<legend>' + field.getLabel() + '</legend>'

        for item in field.getChildren().sort_by_orderpos():
            if item.get("type") in ("hgroup", "vgroup", "field", "label"):
                f = getMetadataType(item.get("type"))
                ret += f.getFormHTML(item, nodes, req)
            else:
                print "...wrong field..."
        ret += '</fieldset>'
        return ret
コード例 #14
0
    def getFormHTML(self, field, nodes, req):
        ret = '<fieldset>'
        if field.getLabel() != "":
            ret += '<legend>' + field.getLabel() + '</legend>'

        for item in field.getChildren().sort_by_orderpos():
            if item.get("type") in ("hgroup", "vgroup", "field", "label"):
                f = getMetadataType(item.get("type"))
                ret += f.getFormHTML(item, nodes, req)
            else:
                print "...wrong field..."
        ret += '</fieldset>'
        return ret
コード例 #15
0
ファイル: field.py プロジェクト: mediatum/mediatum
    def getViewHTML(self, maskitem, nodes, flags, language=None, template_from_caller=None, mask=None):
        # XXX: this method claims to support multiple nodes. Unfortunately, this is not true at all...
        first_node = nodes[0]
        metafield = maskitem.metafield
        fieldtype = metafield.get("type")
        metatype = getMetadataType(fieldtype)

        if flags & VIEW_DATA_EXPORT:
            return metatype.getFormattedValue(metafield, maskitem, mask, first_node, language, html=0)
        
        value = metatype.getFormattedValue(metafield, maskitem, mask, first_node, language)[1]
        if not flags & VIEW_DATA_ONLY:
            if maskitem.getFormat() != "":
                value = maskitem.getFormat().replace("<value>", value)
            else:
                value = formatLongText(value, metafield)
        else:
            value = ensure_unicode(value)

        value = value.strip()

        if flags & VIEW_HIDE_EMPTY  and not flags & VIEW_DATA_ONLY and not value:
            # hide empty elements
            return u''

        unit = maskitem.getUnit()

        if value and unit:
            value += " " + unit

        if flags & VIEW_DATA_ONLY:
            # return a valuelist
            return [metafield.name, value, metafield.getLabel(), fieldtype]

        if flags & VIEW_SUB_ELEMENT:
            # metafield in hgroup
            # only using value omitting label, delimiter like '&nbsp;' may be inserted in hgroup.getViewHTML
            return value

        maskitem_label = maskitem.getLabel()
        if maskitem_label:
            label = maskitem_label + u":"
        else:
            label = u'&nbsp;'

        # render HTML
        ret = u'<div class="mask_row field-{}"><div>'.format(metafield.name)
        ret += u'<div class="mask_label">{}</div>\n<div class="mask_value">{}&nbsp;</div>\n'.format(label, value)
        ret += u'</div></div>'
        return ret
コード例 #16
0
ファイル: hgroup.py プロジェクト: anx-astocker/mediatum
    def getFormHTML(self, field, nodes, req):
        cls = "editorrow"
        for item in field.getChildren().sort_by_orderpos():
            if item.getField().id in req.params.get("errorlist", []):
                cls = "editorerror"
                break
        ret = '<div class="' + cls + '">'

        ret += '<div class="mask_label">' + field.getLabel() + '</div>'

        for item in field.getChildren().sort_by_orderpos():
            f = getMetadataType(item.get("type"))
            ret += f.getFormHTML(item, nodes, req, True)
        return ret + '</div>'
コード例 #17
0
    def getFormHTML(self, field, nodes, req):
        cls = "editorrow"
        for item in field.getChildren().sort_by_orderpos():
            if item.getField().id in req.params.get("errorlist", []):
                cls = "editorerror"
                break
        ret = '<div class="' + cls + '">'

        ret += '<div class="mask_label">' + field.getLabel() + '</div>'

        for item in field.getChildren().sort_by_orderpos():
            f = getMetadataType(item.get("type"))
            ret += f.getFormHTML(item, nodes, req, True)
        return ret + '</div>'
コード例 #18
0
 def getSearchField(self, i, width=174):
     try:
         f = None
         if self.names[i] and self.names[i] != "full":
             f = tree.getNode(self.names[i]).getFirstField()
         g = None
         if f is None:  # All Metadata
             # quick&dirty
             f = g = getMetadataType("text")
         return f.getSearchHTML(Context(g, value=self.values[i], width=width, name="query" + str(i),
                                        language=lang(self.req), collection=self.collection,
                                        user=users.getUserFromRequest(self.req), ip=self.req.ip))
     except:
         # workaround for unknown error
         logException("error during getSearchField(i)")
         return ""
コード例 #19
0
ファイル: hgroup.py プロジェクト: anx-astocker/mediatum
    def getMetaHTML(self, parent, index, sub=False, language=None, fieldlist={}):
        item = parent.getChildren().sort_by_orderpos()[index]
        ret = ''
        i = 0

        if not sub:
            ret += '<div id="{}" class="row metaeditor" onmouseover="pick(this)" onmouseout="unpick(this)" onclick="select(this)">'.format(item.id)

        ret += '<fieldset>'

        if item.getLabel() != "":
            ret += '<legend>{}</legend>'.format(item.getLabel())

        ret += '<div id="editor_content">'
        for field in item.getChildren().sort_by_orderpos():
            f = getMetadataType(field.get("type"))
            ret += '<div id="hitem">{}</div>'.format(f.getMetaHTML(item, i, True, language=language, fieldlist=fieldlist))
            i += 1

        if len(item.getChildren()) == 0:
            ret += '<span i18n:translate="mask_editor_no_fields">- keine Felder definiert -</span>'

        ret += '</fieldset>'

        if not sub:
            ret += '<div align="right" id="' + item.id + \
                '_sub" style="display:none; clear:both"><small style="color:silver">(' + (item.get("type")) + ')</small>'
            if index > 0:
                ret += '<input type="image" src="/img/uparrow.png" name="up_' + \
                    str(item.id) + '" i18n:attributes="title mask_edit_up_title"/>'
            else:
                ret += '&nbsp;&nbsp;&nbsp;'
            if index < len(parent.getChildren()) - 1:
                ret += '<input type="image" src="/img/downarrow.png" name="down_' + \
                    str(item.id) + '" i18n:attributes="title mask_edit_down_title"/>'
            else:
                ret += '&nbsp;&nbsp;&nbsp;'
            ret += ' <input type="image" src="/img/edit.png" name="edit_' + str(
                item.id) + '" i18n:attributes="title mask_edit_edit_row"/> <input type="image" src="/img/delete.png" name="delete_' + str(
                item.id) + '" i18n:attributes="title mask_edit_delete_row" onClick="return questionDel()"/></div>'
            ret += '</div>'

        return ret
コード例 #20
0
ファイル: frame.py プロジェクト: mediatum/mediatum
 def getSearchField(self, pos, width=174):
     try:
         searchmaskitem_id = self.searchmaskitem_ids[pos]
         searchmaskitem = self.searchmask.children.filter_by(id=searchmaskitem_id).scalar() if searchmaskitem_id else None
         field = searchmaskitem.children.first() if searchmaskitem else None
         g = None
         if field is None:  # All Metadata
             # quick&dirty
             field = getMetadataType("text")
         return field.getSearchHTML(Context(
             field,
             value=self.values[pos],
             width=width,
             name="query" + unicode(pos),
             language=self.lang,
             container=self.container,
             user=current_user,
             ip=self.ip))
     except:
         # workaround for unknown error
         logg.exception("exception in getSearchField, return empty string")
         return ""
コード例 #21
0
ファイル: frame.py プロジェクト: schnittstabil/mediatum
 def getSearchField(self, pos, width=174):
     try:
         searchmaskitem_id = self.searchmaskitem_ids[pos]
         searchmaskitem = self.searchmask.children.filter_by(
             id=searchmaskitem_id).scalar() if searchmaskitem_id else None
         field = searchmaskitem.children.first() if searchmaskitem else None
         g = None
         if field is None:  # All Metadata
             # quick&dirty
             field = getMetadataType("text")
         return field.getSearchHTML(
             Context(field,
                     value=self.values[pos],
                     width=width,
                     name="query" + unicode(pos),
                     language=self.lang,
                     container=self.container,
                     user=current_user,
                     ip=self.ip))
     except:
         # workaround for unknown error
         logg.exception("exception in getSearchField, return empty string")
         return ""
コード例 #22
0
ファイル: popups.py プロジェクト: mediatum/mediatum
def popup_metatype(req):
    mtype = getMetadataType(req.path.split("/")[-1])
    if mtype and hasattr(mtype, "getPopup"):
        mtype.getPopup(req)
    else:
        logg.error("error, no popup method found")
コード例 #23
0
    def getViewHTML(self,
                    maskitem,
                    nodes,
                    flags,
                    language=None,
                    template_from_caller=None,
                    mask=None):
        # XXX: this method claims to support multiple nodes. Unfortunately, this is not true at all...
        first_node = nodes[0]
        metafield = maskitem.metafield
        fieldtype = metafield.get("type")
        metatype = getMetadataType(fieldtype)

        if flags & VIEW_DATA_EXPORT:
            return metatype.getFormattedValue(metafield,
                                              maskitem,
                                              mask,
                                              first_node,
                                              language,
                                              html=0)

        value = metatype.getFormattedValue(metafield, maskitem, mask,
                                           first_node, language)[1]
        if not flags & VIEW_DATA_ONLY:
            if maskitem.getFormat() != "":
                value = maskitem.getFormat().replace("<value>", value)
            else:
                value = formatLongText(value, metafield)

        value = value.strip()

        if flags & VIEW_HIDE_EMPTY and not flags & VIEW_DATA_ONLY and not value:
            # hide empty elements
            return u''

        unit = maskitem.getUnit()

        if value and unit:
            value += " " + unit

        if flags & VIEW_DATA_ONLY:
            # return a valuelist
            return [metafield.name, value, metafield.getLabel(), fieldtype]

        if flags & VIEW_SUB_ELEMENT:
            # metafield in hgroup
            # only using value omitting label, delimiter like '&nbsp;' may be inserted in hgroup.getViewHTML
            return value

        maskitem_label = maskitem.getLabel()
        if maskitem_label:
            label = maskitem_label + u":"
        else:
            label = u'&nbsp;'

        # render HTML
        ret = u'<div class="mask_row field-{}"><div>'.format(metafield.name)
        ret += u'<div class="mask_label">{}</div>\n<div class="mask_value">{}&nbsp;</div>\n'.format(
            label, value)
        ret += u'</div></div>'
        return ret
コード例 #24
0
ファイル: field.py プロジェクト: anx-astocker/mediatum
    def getViewHTML(self, field, nodes, flags, language=None, template_from_caller=None, mask=None):
        element = field.getField()
        if not element:
            return []
        fieldtype = element.get("type")
        t = getMetadataType(element.get("type"))
        unit = ''
        if field.getUnit() != "":
            unit = ' ' + field.getUnit()

        if flags & VIEW_DATA_ONLY:
            if fieldtype in ['text']:
                value = u(t.getFormatedValue(element, nodes[0], language, template_from_caller=template_from_caller, mask=mask)[1])
            else:
                value = u(t.getFormatedValue(element, nodes[0], language)[1])
        else:
            if field.getFormat() != "":
                if fieldtype in ['text']:
                    value = t.getFormatedValue(element, nodes[0], language, template_from_caller=template_from_caller, mask=mask)[1]
                else:
                    value = t.getFormatedValue(element, nodes[0], language)[1]
                value = field.getFormat().replace("<value>", value)
            else:
                if fieldtype in ['text']:
                    if template_from_caller and template_from_caller[0]:  # checking template on test nodes: show full length
                        fieldvalue = nodes[0].get(element.name)
                        if fieldvalue.strip():  # field is filled for this node
                            value = str(t.getFormatedValue(element, nodes[0], language, template_from_caller=fieldvalue, mask=mask)[1])
                        else:  # use default
                            value = str(
                                t.getFormatedValue(element, nodes[0], language, template_from_caller=template_from_caller, mask=mask)[1])
                    else:  # cut long values
                        value = str(
                            formatLongText(
                                t.getFormatedValue(
                                    element,
                                    nodes[0],
                                    language,
                                    template_from_caller=template_from_caller,
                                    mask=mask)[1],
                                element))
                elif fieldtype in ['upload']:
                    # passing mask necessary for fieldtype='upload'
                    value = str(formatLongText(t.getFormatedValue(element, nodes[0], language, mask=mask)[1], element))
                else:
                    value = str(formatLongText(t.getFormatedValue(element, nodes[0], language)[1], element))

        if len(value.strip()) > 0:
            value += str(unit)

        label = '&nbsp;'
        if field.getLabel() != "":
            label = field.getLabel() + ': '

        if flags & VIEW_DATA_ONLY:
            # return a valuelist
            return [element.getName(), value, element.getLabel(), element.get("type")]

        elif flags & VIEW_SUB_ELEMENT:
            # element in hgroup
            # only using value omitting label, delimiter like '&nbsp;' may be inserted in hgroup.getViewHTML
            return value

        elif flags & VIEW_HIDE_EMPTY and value.strip() == "":
            # hide empty elements
            return ''
        elif flags & VIEW_DATA_EXPORT:
            if fieldtype in ['text']:
                return str(t.getFormatedValue(element, nodes[0], language, html=0, template_from_caller=template_from_caller, mask=mask)[1])
            else:
                return str(t.getFormatedValue(element, nodes[0], language, html=0)[1])
            # return element.get("type")
        else:
            # standard view
            ret = '<div class="mask_row field-' + element.getName() + '"><div>'
            ret += '<div class="mask_label">' + label + '</div>\n<div class="mask_value">' + value + '&nbsp;</div>\n'
            ret += '</div></div>'
            return ret
コード例 #25
0
        def render_mask_template(node,
                                 mfs,
                                 words=None,
                                 separator="",
                                 skip_empty_fields=True):
            """
               mfs: [mask] + list_of_maskfields
            """
            res = []
            exception_count = {}
            mask = mfs[0]
            for node_attribute, fd in mfs[1:]:
                metafield_type = fd['metafield_type']
                field_type = fd['field_type']
                if metafield_type in ['date', 'url', 'hlist']:
                    exception_count[
                        metafield_type] = exception_count.setdefault(
                            metafield_type, 0) + 1
                    value = node.get(node_attribute)
                    try:
                        value = fd['metadatatype'].getFormatedValue(
                            fd['element'], node, language=language,
                            mask=mask)[1]
                    except:
                        value = fd['metadatatype'].getFormatedValue(
                            fd['element'], node, language=language)[1]
                elif metafield_type in ['field']:
                    if field_type in ['hgroup', 'vgroup']:
                        _sep = ''
                        if field_type == 'hgroup':
                            fd['unit'] = ''  # unit will be taken from definition of the hgroup
                            use_label = False
                        else:
                            use_label = True
                        value = getMetadataType(field_type).getViewHTML(
                            fd['field'],  # field
                            [node],  # nodes
                            0,  # flags
                            language=language,
                            mask=mask,
                            use_label=use_label)
                else:
                    value = node.get(node_attribute)
                    metadatatype = fd['metadatatype']

                    if hasattr(metadatatype, "language_snipper"):
                        metafield = fd['element']
                        if (metafield.get("type") == "text" and metafield.get("valuelist") == "multilingual") \
                            or \
                           (metafield.get("type") in ['memo', 'htmlmemo'] and metafield.get("multilang") == '1'):
                            value = metadatatype.language_snipper(
                                value, language)

                    if value.find('&lt;') >= 0:
                        # replace variables
                        for var in re.findall(r'&lt;(.+?)&gt;', value):
                            if var == "att:id":
                                value = value.replace("&lt;" + var + "&gt;",
                                                      node.id)
                            elif var.startswith("att:"):
                                val = node.get(var[4:])
                                if val == "":
                                    val = "____"

                                value = value.replace("&lt;" + var + "&gt;",
                                                      val)
                        value = value.replace("&lt;", "<").replace("&gt;", ">")

                    if value.find('<') >= 0:
                        # replace variables
                        for var in re.findall(r'\<(.+?)\>', value):
                            if var == "att:id":
                                value = value.replace("<" + var + ">", node.id)
                            elif var.startswith("att:"):
                                val = node.get(var[4:])
                                if val == "":
                                    val = "____"

                                value = value.replace("&lt;" + var + "&gt;",
                                                      val)
                        value = value.replace("&lt;", "<").replace("&gt;", ">")

                    if value.find('tal:') >= 0:
                        context['node'] = node
                        value = runTALSnippet(value, context)

                    # don't escape before running TAL
                    if (not value) and fd['default']:
                        default = fd['default']
                        if fd['default_has_tal']:
                            context['node'] = node
                            value = runTALSnippet(default, context)
                        else:
                            value = default

                if skip_empty_fields and not value:
                    continue

                if fd["unit"]:
                    value = value + " " + fd["unit"]
                if fd["format"]:
                    value = fd["format"].replace("<value>", value)
                if words:
                    value = highlight(value, words, '<font class="hilite">',
                                      "</font>")
                res.append(fd["template"] % value)
            if exception_count and len(exception_count.keys()) > 1:
                pass
            return separator.join(res)
コード例 #26
0
ファイル: default.py プロジェクト: agromsl/mediatum
        def render_mask_template(node, mfs, words=None, separator="", skip_empty_fields=True):
            """
               mfs: [mask] + list_of_maskfields
            """
            res = []
            exception_count = {}
            mask = mfs[0]
            for node_attribute, fd in mfs[1:]:
                metafield_type = fd['metafield_type']
                field_type = fd['field_type']
                if metafield_type in ['date', 'url', 'hlist']:
                    exception_count[metafield_type] = exception_count.setdefault(metafield_type, 0) + 1
                    value = node.get(node_attribute)
                    try:
                        value = fd['metadatatype'].getFormatedValue(fd['element'], node, language=language, mask=mask)[1]
                    except:
                        value = fd['metadatatype'].getFormatedValue(fd['element'], node, language=language)[1]
                elif metafield_type in ['field']:
                    if field_type in ['hgroup', 'vgroup']:
                        _sep = ''
                        if field_type == 'hgroup':
                            fd['unit'] = ''  # unit will be taken from definition of the hgroup
                            use_label = False
                        else:
                            use_label = True
                        value = getMetadataType(field_type).getViewHTML(
                                                                         fd['field'],  # field
                                                                         [node],  # nodes
                                                                         0,  # flags
                                                                         language=language,
                                                                         mask=mask, use_label=use_label)
                else:
                    value = node.get(node_attribute)
                    metadatatype = fd['metadatatype']

                    if hasattr(metadatatype, "language_snipper"):
                        metafield = fd['element']
                        if (metafield.get("type") == "text" and metafield.get("valuelist") == "multilingual") \
                            or \
                           (metafield.get("type") in ['memo', 'htmlmemo'] and metafield.get("multilang") == '1'):
                            value = metadatatype.language_snipper(value, language)

                    if value.find('&lt;') >= 0:
                        # replace variables
                        for var in re.findall(r'&lt;(.+?)&gt;', value):
                            if var == "att:id":
                                value = value.replace("&lt;" + var + "&gt;", node.id)
                            elif var.startswith("att:"):
                                val = node.get(var[4:])
                                if val == "":
                                    val = "____"

                                value = value.replace("&lt;" + var + "&gt;", val)
                        value = value.replace("&lt;", "<").replace("&gt;", ">")

                    if value.find('<') >= 0:
                        # replace variables
                        for var in re.findall(r'\<(.+?)\>', value):
                            if var == "att:id":
                                value = value.replace("<" + var + ">", node.id)
                            elif var.startswith("att:"):
                                val = node.get(var[4:])
                                if val == "":
                                    val = "____"

                                value = value.replace("&lt;" + var + "&gt;", val)
                        value = value.replace("&lt;", "<").replace("&gt;", ">")

                    if value.find('tal:') >= 0:
                        context['node'] = node
                        value = runTALSnippet(value, context)

                    # don't escape before running TAL
                    if (not value) and fd['default']:
                        default = fd['default']
                        if fd['default_has_tal']:
                            context['node'] = node
                            value = runTALSnippet(default, context)
                        else:
                            value = default

                if skip_empty_fields and not value:
                    continue

                if fd["unit"]:
                    value = value + " " + fd["unit"]
                if fd["format"]:
                    value = fd["format"].replace("<value>", value)
                if words:
                    value = highlight(value, words, '<font class="hilite">', "</font>")
                res.append(fd["template"] % value)
            if exception_count and len(exception_count.keys()) > 1:
                pass
            return separator.join(res)
コード例 #27
0
ファイル: mappingfield.py プロジェクト: hibozzy/mediatum
    def replaceVars(self, s, node, attrnode=None, field_value="", options=[], mask=None, raw=0, default=""):
        # if attrnode and node:
        for var in re.findall(r"\[(.+?)\]", s):
            if var.startswith("att:field|replacestring"):
                s2 = self.replaceStr(attrnode.getName(), var[24:])
                s = s.replace("[" + var + "]", s2)

            elif var.startswith("att:field|substring"):
                s2 = self.subStr(attrnode.getName(), var[20:])
                s = s.replace("[" + var + "]", s2)

            elif var == "field":
                s = s.replace("[field]", field_value)

            elif var == ("cmd:getTAL"):
                s = exportutils.handleCommand("cmd:getTAL", var, s, node, attrnode, field_value, options, mask)

            elif var.startswith("value|formatdate"):
                date_from = format_date(parse_date(node.get(attrnode.getName())), var[18:-1])
                s = s.replace("[" + var + "]", date_from)

            elif var.startswith("value|replacestring"):
                s2 = self.replaceStr(node.get(attrnode.getName()), var[20:])
                s = s.replace("[" + var + "]", s2)

            elif var.startswith("value|substring"):
                s2 = self.subStr(node.get(attrnode.getName()), var[16:])
                s = s.replace("[" + var + "]", s2)

            elif var.startswith("value|nodename"):
                try:
                    s2 = tree.getNode(node.get(attrnode.getName())).getName()
                except:
                    s2 = node.getName()
                s = s.replace("[" + var + "]", s2)

            elif var == "value":
                v = getMetadataType(attrnode.getFieldtype()).getFormatedValue(attrnode, node)[1]
                if v == "":
                    v = node.get(attrnode.getName())
                if v == "" and default != "":
                    v = default
                if "t" in options and not v.isdigit():
                    v = '"' + v + '"'
                s = s.replace("[value]", v)

            elif var == "ns":
                ns = ""
                for mapping in attrnode.get("exportmapping").split(";"):
                    n = tree.getNode(mapping)
                    if n.getNamespace() != "" and n.getNamespaceUrl() != "":
                        ns += "xmlns:" + n.getNamespace() + '="' + n.getNamespaceUrl() + '" '
                s = s.replace("[" + var + "]", ns)

            for ext in self.extensions:
                s = ext.func(s, var, node, attrnode)
        if raw == 1:
            return s

        ret = ""
        for i in range(0, len(s)):
            if s[i - 1] == "\\":
                if s[i] == "r":
                    ret += "\r"
                elif s[i] == "n":
                    ret += "\n"
                elif s[i] == "t":
                    ret += "\t"
            elif s[i] == "\\":
                pass
            else:
                ret += s[i]
        return desc(ret)
コード例 #28
0
ファイル: field.py プロジェクト: mediatum/mediatum
    def getFormHTML(self, field, nodes, req, sub=False):
        """ create editor field (editarea)"""
        element = field.getField()
        ret = ''
        label = ''
        description = '<div id="div_description"></div>'
        unit = ''

        if not sub:
            label += '<div class="label">' + field.getLabel() + ':'
            if (int(field.getRequired()) > 0):
                label += ' <span class="required">*</span>'
            label += '</div>'
        else:
            if field.getLabel() != "":
                label += field.getLabel() + ': '
                if int(field.getRequired()) > 0:
                    label += '<span class="required">*</span> '

        if field.getDescription() != "":
            description = '<div id="div_description"><a href="#" onclick="openPopup(\'/popup_help?id=' + ustr(element.id) + \
                '&maskid=' + ustr(field.id) + '\', \'\', 400, 250)"><img src="/img/tooltip.png" border="0"/></a></div>'

        if not sub:
            if ustr(element.id) in req.params.get("errorlist", []):
                ret += '<div class="editorerror">'
            else:
                ret += '<div class="editorrow">'

        ret += label + description
        elementtype = element.get("type")

        val = nodes[0].get_special(element.getName())
        for node in nodes:
            elementname = node.get_special(element.getName())
            if elementname == "":
                val = ""
        valuelist = {}

        lock = 0
        differentvalues = 0
        containsemptystring = val == ""

        for node in nodes:
            newvalue = node.get_special(element.getName())
            containsemptystring = containsemptystring or newvalue == ""
            if newvalue not in valuelist:
                differentvalues += 1
                valuelist[newvalue] = 1

        if differentvalues == 2 and containsemptystring:
            for t in valuelist.keys():
                if t != "":
                    val = t
            lock = 1
        elif differentvalues >= 2:
            val = "? "
            lock = 1

        if val == "" and field.getDefault() != "":
            val = field.getDefault()

        t = getMetadataType(elementtype)

        if field.getUnit() != "":
            unit += field.getUnit()

        ret += '<div id="editor_content">' + \
            t.getEditorHTML(element,
                            value=val,
                            width=field.getWidth(),
                            lock=lock,
                            language=lang(req),
                            required=field.getRequired()) + unit + '</div>'
        if not sub:
            ret += '</div>'
        return ret
コード例 #29
0
def popup_metatype(req):
    mtype = getMetadataType(req.path.split("/")[-1])
    if mtype and hasattr(mtype, "getPopup"):
        mtype.getPopup(req)
    else:
        logg.error("error, no popup method found")
コード例 #30
0
ファイル: field.py プロジェクト: mediatum/mediatum
    def getMetaEditor(self, item, req):
        """ editor mask for field definition """
        attr = {}
        fields = []
        pidnode = None

        if "pid" not in req.params.keys():
            for p in item.getParents():
                try:
                    if p.getMasktype() == "export":
                        pidnode = p
                        break
                except:
                    continue

        metadatatype = req.params.get("metadatatype")
        for t in metadatatype.getDatatypes():
            content_class = Node.get_class_for_typestring(t)
            node = content_class(name=u'')
            attr.update(node.getTechnAttributes())

        if req.params.get("op", "") == "new":
            pidnode = q(Node).get(req.params.get("pid"))
            if hasattr(pidnode, 'getMasktype') and pidnode.getMasktype() in ("vgroup", "hgroup"):
                # XXX: getAllChildren does not exist anymore, is this dead code?
                for field in pidnode.getAllChildren():
                    if field.getType().getName() == "maskitem" and field.id != pidnode.id:
                        fields.append(field)
            else:
                for m in metadatatype.getMasks():
                    if ustr(m.id) == ustr(req.params.get("pid")):
                        for field in m.getChildren():
                            fields.append(field)

        fields.sort(lambda x, y: cmp(x.getOrderPos(), y.getOrderPos()))
        add_values = []
        val = u""
        if item.getField():
            val = item.getField().getValues()
            db.session.commit()

        for t in getMetaFieldTypeNames():
            f = getMetadataType(t)
            add_values.append(f.getMaskEditorHTML(val, metadatatype=metadatatype, language=lang(req)))

        metafields = metadatatype.getMetaFields()
        metafields.sort(lambda x, y: cmp(x.getName().lower(), y.getName().lower()))

        metafieldtypes = getMetaFieldTypes().values()
        metafieldtypes.sort(lambda x, y: cmp(translate(x.getName(), request=req).lower(), translate(y.getName(), request=req).lower()))

        add_descriptions = []
        for metafield in metafields:
            add_descriptions.append('<div style="display:none" id="div_%d" name="%s" description="%s"/>' %
                                    (metafield.id, metafield.name, metafield.getDescription()))

        v = {}
        v["op"] = req.params.get("op", "")
        v["pid"] = req.params.get("pid", "")
        v["item"] = item
        v["metafields"] = metafields
        v["fields"] = fields
        v["fieldtypes"] = metafieldtypes
        v["dateoption"] = dateoption
        v["t_attrs"] = attr
        v["icons"] = {"externer Link": "/img/extlink.png", "Email": "/img/email.png"}
        v["add_values"] = add_values
        v["add_descriptions"] = add_descriptions
        v["translate"] = translate
        v["language"] = lang(req)

        if pidnode and hasattr(pidnode, 'getMasktype') and pidnode.getMasktype() == "export":
            v["mappings"] = []
            for m in pidnode.getExportMapping():
                v["mappings"].append(q(Node).get(m))
            return req.getTAL("schema/mask/field.html", v, macro="metaeditor_" + pidnode.getMasktype())
        else:
            return req.getTAL("schema/mask/field.html", v, macro="metaeditor")
コード例 #31
0
def render_mask_template(node,
                         mask,
                         field_descriptors,
                         language,
                         words=None,
                         separator="",
                         skip_empty_fields=True):
    res = []

    for node_attribute, fd in field_descriptors:
        metafield_type = fd['metafield_type']
        maskitem = fd['maskitem']
        metafield = fd["metafield"]
        metatype = fd["metatype"]
        maskitem_type = fd["maskitem_type"]

        if metafield_type in ['date', 'url', 'hlist']:
            value = metatype.getFormattedValue(metafield, maskitem, mask, node,
                                               language)[1]

        elif metafield_type in ['field']:
            if maskitem_type in ['hgroup', 'vgroup']:
                _sep = ''
                if maskitem_type == 'hgroup':
                    fd['unit'] = ''  # unit will be taken from definition of the hgroup
                    use_label = False
                else:
                    use_label = True
                value = getMetadataType(maskitem_type).getViewHTML(
                    metafield,
                    [node],  # nodes
                    0,  # flags
                    language=language,
                    mask=mask,
                    use_label=use_label)
        else:
            value = node.get_special(node_attribute)

            if hasattr(metatype, "language_snipper"):
                if (metafield.get("type") == "text" and metafield.get("valuelist") == "multilingual") \
                    or \
                   (metafield.get("type") in ['memo', 'htmlmemo'] and metafield.get("multilang") == '1'):
                    value = metatype.language_snipper(value, language)

            if value.find('&lt;') >= 0:
                # replace variables
                value = replace_attribute_variables(value, node.id,
                                                    node.get_special,
                                                    r'&lt;(.+?)&gt;', "&lt;",
                                                    "&gt;")
                value = value.replace("&lt;", "<").replace("&gt;", ">")

            if value.find('<') >= 0:
                # replace variables
                value = replace_attribute_variables(value, node.id,
                                                    node.get_special,
                                                    r'\<(.+?)\>', "<", ">")
                value = value.replace("&lt;", "<").replace("&gt;", ">")

            default = fd['default']
            if not value and default:
                value = default

        if skip_empty_fields and not value:
            continue

        if fd["unit"]:
            value = value + " " + fd["unit"]
        if fd["format"]:
            value = fd["format"].replace("<value>", value)
        if words:
            value = highlight(value, words, '<font class="hilite">', "</font>")
        res.append(fd["template"] % value)

    return separator.join(res)
コード例 #32
0
ファイル: field.py プロジェクト: mediatum/mediatum
    def getMetaHTML(self, parent, index, sub=False, language=None, itemlist=[], ptype="", fieldlist={}):
        """ return formated row for metaeditor """
        if len(itemlist) > 0:
            # parent still not existing
            item = q(Node).get(itemlist[index])
            pitems = len(itemlist)
        else:
            item = parent.getChildren().sort_by_orderpos()[index]
            ptype = parent.get("type")
            pitems = len(parent.getChildren())

        field = item.getField()
        ret = ''
        label = ''
        description = ''

        if field:
            f = getMetadataType(field.get("type"))
            fieldstring = f.getEditorHTML(field, width=item.getWidth(), value=item.getDefault(), language=language) + ' ' + item.getUnit()
        else:  # node for export mask
            attribute = q(Node).get(item.get("attribute"))
            field = item
            fieldstring = getMetadataType("mappingfield").getEditorHTML(
                field, width=item.getWidth(), value=attribute.getName(), language=language) + ' ' + item.getUnit()

        if item.getDescription() != "":
            description = '<div id="div_description"><a href="#" onclick="openPopup(\'/popup_help?id=%s&maskid=%s\', \'\', 400, 250)"> <img src="/img/tooltip.png" border="0"/></a></div>' % (
                field.id, item.id)

        if len(item.getLabel()) > 0 and item.getLabel() != "mapping":
            label = item.getLabel() + ': '
            required = ""
            if item.getRequired():
                required = '<span class="required">*</span>'

            if ptype in("vgroup", "hgroup") or not sub:
                label = '<div class="label">%s %s</div>%s' % (label, required, description)
            else:
                label += required

        else:
            label = '<div class="label">&nbsp;</div>'
        if not sub:
            ret += '<div id="%s" class="row" onmouseover="pick(this)" onmouseout="unpick(this)" onclick="select(this)" style="position:relative;min-height:30px">' % (
                item.id)

        if len(label) > 0:
            ret += '%s<div id="editor_content">%s</div>' % (label, fieldstring)
        else:
            ret += fieldstring

        if not sub:
            # <small style="color:silver">('+(item.get("type"))+')</small>'
            ret += '<div align="right" id="%s_sub" style="display:none; position:absolute; right:1px; top:3px" class="edit_tools">' % (
                item.id)

            if index > 0:
                ret += '<input type="image" src="/img/uparrow.png" name="up_%s" i18n:attributes="title mask_edit_up_title"/>' % (item.id)
            else:
                ret += '&nbsp;&nbsp;&nbsp;'
            if index < pitems - 1:
                ret += '<input type="image" src="/img/downarrow.png" name="down_%s" i18n:attributes="title mask_edit_down_title"/>' % (
                    item.id)
            else:
                ret += '&nbsp;&nbsp;&nbsp;'

            if field.getName() in fieldlist.keys():
                if len(fieldlist[field.getName()]) > 1:
                    ret += '&nbsp;<img src="/img/attention.gif" title="%s ' % (translate("mask_edit_multi_label", language))
                    ret += ", ".join([schema.getName() for schema in fieldlist[field.getName()]]) + '"/>'

            ret += ' <input type="image" src="/img/edit.png" name="edit_%s" i18n:attributes="title mask_edit_edit_row"/> <input type="image" src="/img/delete.png" name="delete_%s" i18n:attributes="title mask_edit_delete_row" onClick="return questionDel()"/></div></div>' % (item.id,
                                                                                                                                                                                                                                                                                  item.id)
        return ret
コード例 #33
0
ファイル: data.py プロジェクト: mediatum/mediatum
    def show_node_text_deep(self, words=None, language=None, separator="", labels=0):

        if not separator:
            separator = u"<br/>"

        lookup_key = make_lookup_key(self, language, labels)

        # if the lookup_key is already in the cache dict: render the cached mask_template
        # else: build the mask_template

        if not 'maskcache' in request.app_cache:
            request.app_cache['maskcache'] = {}
            request.app_cache['maskcache_accesscount'] = {}

        if lookup_key in request.app_cache['maskcache']:
            mask, field_descriptors = request.app_cache['maskcache'][lookup_key]
            res = render_mask_template(self, mask, field_descriptors, language, words=words, separator=separator)
            request.app_cache['maskcache_accesscount'][lookup_key] = request.app_cache['maskcache_accesscount'].get(lookup_key, 0) + 1

        else:
            mask = self.metadatatype.get_mask(u"nodesmall")
            for m in self.metadatatype.filter_masks(u"shortview", language=language):
                mask = m

            if mask:
                fields = mask.getMaskFields(first_level_only=True)
                ordered_fields = sorted([(f.orderpos, f) for f in fields])
                field_descriptors = []

                for _, maskitem in ordered_fields:
                    fd = {}  # field descriptor
                    fd['maskitem_type'] = maskitem.get('type')
                    fd['format'] = maskitem.getFormat()
                    fd['unit'] = maskitem.getUnit()
                    fd['label'] = maskitem.getLabel()
                    fd['maskitem'] = maskitem

                    default = maskitem.getDefault()
                    fd['default'] = default

                    metafield = maskitem.metafield
                    metafield_type = metafield.get('type')
                    fd['metafield'] = metafield
                    fd['metafield_type'] = metafield_type

                    t = getMetadataType(metafield_type)
                    fd['metatype'] = t

                    def getNodeAttributeName(maskitem):
                        metafields = maskitem.children.filter_by(type=u"metafield").all()
                        if len(metafields) != 1:
                            # this can only happen in case of vgroup or hgroup
                            logg.error("maskitem %s has zero or multiple metafield child(s)", maskitem.id)
                            return maskitem.name
                        return metafields[0].name

                    node_attribute = getNodeAttributeName(maskitem)
                    fd['node_attribute'] = node_attribute

                    def build_field_template(field_descriptor):
                        if labels:
                            template = "<b>" + field_descriptor['label'] + ":</b> %s"
                        else:
                            if field_descriptor['node_attribute'].startswith("author"):
                                template = '<span class="author">%s</span>'
                            elif field_descriptor['node_attribute'].startswith("subject"):
                                template = '<b>%s</b>'
                            else:
                                template = "%s"
                        return template

                    template = build_field_template(fd)

                    fd['template'] = template
                    long_field_descriptor = (node_attribute, fd)
                    field_descriptors.append(long_field_descriptor)

                request.app_cache['maskcache'][lookup_key] = (mask, field_descriptors)
                request.app_cache['maskcache_accesscount'][lookup_key] = 0
                res = render_mask_template(self, mask, field_descriptors, language, words=words, separator=separator)

            else:
                res = '&lt;smallview mask not defined&gt;'

        return res
コード例 #34
0
ファイル: data.py プロジェクト: mediatum/mediatum
def render_mask_template(node, mask, field_descriptors, language, words=None, separator="", skip_empty_fields=True):
    res = []

    for node_attribute, fd in field_descriptors:
        metafield_type = fd['metafield_type']
        maskitem = fd['maskitem']
        metafield = fd["metafield"]
        metatype = fd["metatype"]
        maskitem_type = fd["maskitem_type"]

        if metafield_type in ['date', 'url', 'hlist']:
            value = metatype.getFormattedValue(metafield, maskitem, mask, node, language)[1]

        elif metafield_type in ['field']:
            if maskitem_type in ['hgroup', 'vgroup']:
                _sep = ''
                if maskitem_type == 'hgroup':
                    fd['unit'] = ''  # unit will be taken from definition of the hgroup
                    use_label = False
                else:
                    use_label = True
                value = getMetadataType(maskitem_type).getViewHTML(
                    metafield,
                    [node],  # nodes
                    0,  # flags
                    language=language,
                    mask=mask, use_label=use_label)
        else:
            value = node.get_special(node_attribute)

            if hasattr(metatype, "language_snipper"):
                if (metafield.get("type") == "text" and metafield.get("valuelist") == "multilingual") \
                    or \
                   (metafield.get("type") in ['memo', 'htmlmemo'] and metafield.get("multilang") == '1'):
                    value = metatype.language_snipper(value, language)

            if value.find('&lt;') >= 0:
                # replace variables
                value = replace_attribute_variables(value, node.id, node.get_special, r'&lt;(.+?)&gt;', "&lt;", "&gt;")
                value = value.replace("&lt;", "<").replace("&gt;", ">")

            if value.find('<') >= 0:
                # replace variables
                value = replace_attribute_variables(value, node.id, node.get_special, r'\<(.+?)\>', "<", ">")
                value = value.replace("&lt;", "<").replace("&gt;", ">")

            default = fd['default']
            if not value and default:
                value = default

        if skip_empty_fields and not value:
            continue

        if fd["unit"]:
            value = value + " " + fd["unit"]
        if fd["format"]:
            value = fd["format"].replace("<value>", value)
        if words:
            value = highlight(value, words, '<font class="hilite">', "</font>")
        res.append(fd["template"] % value)

    return separator.join(res)
コード例 #35
0
    def getMetaEditor(self, item, req):
        """ editor mask for field definition """
        attr = {}
        fields = []
        pidnode = None

        if "pid" not in req.params.keys():
            for p in item.getParents():
                try:
                    if p.getMasktype() == "export":
                        pidnode = p
                        break
                except:
                    continue

        metadatatype = req.params.get("metadatatype")
        for t in metadatatype.getDatatypes():
            content_class = Node.get_class_for_typestring(t)
            node = content_class(name=u'')
            attr.update(node.getTechnAttributes())

        if req.params.get("op", "") == "new":
            pidnode = q(Node).get(req.params.get("pid"))
            if hasattr(pidnode,
                       'getMasktype') and pidnode.getMasktype() in ("vgroup",
                                                                    "hgroup"):
                # XXX: getAllChildren does not exist anymore, is this dead code?
                for field in pidnode.getAllChildren():
                    if field.getType().getName(
                    ) == "maskitem" and field.id != pidnode.id:
                        fields.append(field)
            else:
                for m in metadatatype.getMasks():
                    if ustr(m.id) == ustr(req.params.get("pid")):
                        for field in m.getChildren():
                            fields.append(field)

        fields.sort(lambda x, y: cmp(x.getOrderPos(), y.getOrderPos()))
        add_values = []
        val = u""
        if item.getField():
            val = item.getField().getValues()
            db.session.commit()

        for t in getMetaFieldTypeNames():
            f = getMetadataType(t)
            add_values.append(
                f.getMaskEditorHTML(val,
                                    metadatatype=metadatatype,
                                    language=lang(req)))

        metafields = metadatatype.getMetaFields()
        metafields.sort(lambda x, y: cmp(x.getName().lower(),
                                         y.getName().lower()))

        metafieldtypes = getMetaFieldTypes().values()
        metafieldtypes.sort(lambda x, y: cmp(
            translate(x.getName(), request=req).lower(),
            translate(y.getName(), request=req).lower()))

        add_descriptions = []
        for metafield in metafields:
            add_descriptions.append(
                '<div style="display:none" id="div_%d" name="%s" description="%s"/>'
                % (metafield.id, metafield.name, metafield.getDescription()))

        v = {}
        v["op"] = req.params.get("op", "")
        v["pid"] = req.params.get("pid", "")
        v["item"] = item
        v["metafields"] = metafields
        v["fields"] = fields
        v["fieldtypes"] = metafieldtypes
        v["dateoption"] = dateoption
        v["t_attrs"] = attr
        v["icons"] = {
            "externer Link": "/img/extlink.png",
            "Email": "/img/email.png"
        }
        v["add_values"] = add_values
        v["add_descriptions"] = add_descriptions
        v["translate"] = translate
        v["language"] = lang(req)

        if pidnode and hasattr(
                pidnode, 'getMasktype') and pidnode.getMasktype() == "export":
            v["mappings"] = []
            for m in pidnode.getExportMapping():
                v["mappings"].append(q(Node).get(m))
            return req.getTAL("schema/mask/field.html",
                              v,
                              macro="metaeditor_" + pidnode.getMasktype())
        else:
            return req.getTAL("schema/mask/field.html", v, macro="metaeditor")
コード例 #36
0
    def show_node_text_deep(self,
                            words=None,
                            language=None,
                            separator="",
                            labels=0):

        if not separator:
            separator = u"<br/>"

        lookup_key = make_lookup_key(self, language, labels)

        # if the lookup_key is already in the cache dict: render the cached mask_template
        # else: build the mask_template

        if not 'maskcache' in request.app_cache:
            request.app_cache['maskcache'] = {}
            request.app_cache['maskcache_accesscount'] = {}

        if lookup_key in request.app_cache['maskcache']:
            mask, field_descriptors = request.app_cache['maskcache'][
                lookup_key]
            res = render_mask_template(self,
                                       mask,
                                       field_descriptors,
                                       language,
                                       words=words,
                                       separator=separator)
            request.app_cache['maskcache_accesscount'][
                lookup_key] = request.app_cache['maskcache_accesscount'].get(
                    lookup_key, 0) + 1

        else:
            mask = self.metadatatype.get_mask(u"nodesmall")
            for m in self.metadatatype.filter_masks(u"shortview",
                                                    language=language):
                mask = m

            if mask:
                fields = mask.getMaskFields(first_level_only=True)
                ordered_fields = sorted([(f.orderpos, f) for f in fields])
                field_descriptors = []

                for _, maskitem in ordered_fields:
                    fd = {}  # field descriptor
                    fd['maskitem_type'] = maskitem.get('type')
                    fd['format'] = maskitem.getFormat()
                    fd['unit'] = maskitem.getUnit()
                    fd['label'] = maskitem.getLabel()
                    fd['maskitem'] = maskitem

                    default = maskitem.getDefault()
                    fd['default'] = default

                    metafield = maskitem.metafield
                    metafield_type = metafield.get('type')
                    fd['metafield'] = metafield
                    fd['metafield_type'] = metafield_type

                    t = getMetadataType(metafield_type)
                    fd['metatype'] = t

                    def getNodeAttributeName(maskitem):
                        metafields = maskitem.children.filter_by(
                            type=u"metafield").all()
                        if len(metafields) != 1:
                            # this can only happen in case of vgroup or hgroup
                            logg.error(
                                "maskitem %s has zero or multiple metafield child(s)",
                                maskitem.id)
                            return maskitem.name
                        return metafields[0].name

                    node_attribute = getNodeAttributeName(maskitem)
                    fd['node_attribute'] = node_attribute

                    def build_field_template(field_descriptor):
                        if labels:
                            template = "<b>" + field_descriptor[
                                'label'] + ":</b> %s"
                        else:
                            if field_descriptor['node_attribute'].startswith(
                                    "author"):
                                template = '<span class="author">%s</span>'
                            elif field_descriptor['node_attribute'].startswith(
                                    "subject"):
                                template = '<b>%s</b>'
                            else:
                                template = "%s"
                        return template

                    template = build_field_template(fd)

                    fd['template'] = template
                    long_field_descriptor = (node_attribute, fd)
                    field_descriptors.append(long_field_descriptor)

                request.app_cache['maskcache'][lookup_key] = (
                    mask, field_descriptors)
                request.app_cache['maskcache_accesscount'][lookup_key] = 0
                res = render_mask_template(self,
                                           mask,
                                           field_descriptors,
                                           language,
                                           words=words,
                                           separator=separator)

            else:
                res = '&lt;smallview mask not defined&gt;'

        return res
コード例 #37
0
ファイル: metatype_field.py プロジェクト: agromsl/mediatum
def FieldDetail(req, pid, id, err=0):
    _option = ""
    for key in req.params.keys():
        if key.startswith("option_"):
            _option += key[7]

    if err == 0 and id == "":
        # new field
        field = tree.Node("", type="metafield")

    elif id != "":
        # edit field
        field = getMetaField(pid, id)

    else:
        # error filling values
        _fieldvalue = ""
        if req.params.get('mtype', '') + "_value" in req.params.keys():
            _fieldvalue = str(req.params[req.params.get('mtype', '') + "_value"])

        if (req.params.get("mname") == ""):
            field = tree.Node(req.params.get("orig_name"), type="metafield")
        else:
            field = tree.Node(req.params.get("mname"), type="metafield")
        field.setLabel(req.params.get("mlabel"))
        field.setOrderPos(req.params.get("orderpos"))
        field.setFieldtype(req.params.get("mtype"))
        field.setOption(_option)
        field.setValues(_fieldvalue)
        field.setDescription(req.params.get("mdescription"))

    attr = {}
    metadatatype = getMetaType(pid)
    for t in metadatatype.getDatatypes():
        node = tree.Node(type=t)
        try:
            attr.update(node.getTechnAttributes())
        except AttributeError:
            continue

    metafields = {}
    for fields in getFieldsForMeta(pid):
        if fields.getType() != "union":
            metafields[fields.getName()] = fields

    v = getAdminStdVars(req)
    v["metadatatype"] = metadatatype
    v["metafield"] = field
    v["error"] = err
    v["fieldtypes"] = getMetaFieldTypeNames()
    v["dateoptions"] = dateoption
    v["datatypes"] = attr
    v["requiredoptions"] = requiredoption
    v["fieldoptions"] = fieldoption
    v["metafields"] = metafields
    v["filtertype"] = req.params.get("filtertype", "")
    v["actpage"] = req.params.get("actpage")

    v["icons"] = {"externer Link": "/img/extlink.png", "Email": "/img/email.png"}
    v["url_targets"] = {"selbes Fenster": "same", "neues Fenster": "_blank"}
    v["valuelist"] = ("", "", "", "")
    if field.getFieldtype() == "url":
        v["valuelist"] = field.getValueList()
        while len(v["valuelist"]) != 4:
            v["valuelist"].append("")
    else:
        v["valuelist"] = field.getValueList()

    v["field"] = None
    if field.id:
        v["field"] = field

    v["adminfields"] = []
    for t in getMetaFieldTypeNames():
        f = getMetadataType(t)

        if 'attr_dict' in inspect.getargspec(f.getMaskEditorHTML).args:
            attr_dict = dict(field.items())
            v["adminfields"] .append(f.getMaskEditorHTML(v["field"], metadatatype=metadatatype, language=lang(req), attr_dict=attr_dict))
        else:
            v["adminfields"] .append(f.getMaskEditorHTML(v["field"], metadatatype=metadatatype, language=lang(req)))

    return req.getTAL("web/admin/modules/metatype_field.html", v, macro="modify_field")
コード例 #38
0
    def getViewHTML(self,
                    field,
                    nodes,
                    flags,
                    language=None,
                    template_from_caller=None,
                    mask=None):
        element = field.getField()
        if not element:
            return []
        fieldtype = element.get("type")
        t = getMetadataType(element.get("type"))
        unit = ''
        if field.getUnit() != "":
            unit = ' ' + field.getUnit()

        if flags & VIEW_DATA_ONLY:
            if fieldtype in ['text']:
                value = u(
                    t.getFormatedValue(
                        element,
                        nodes[0],
                        language,
                        template_from_caller=template_from_caller,
                        mask=mask)[1])
            else:
                value = u(t.getFormatedValue(element, nodes[0], language)[1])
        else:
            if field.getFormat() != "":
                if fieldtype in ['text']:
                    value = t.getFormatedValue(
                        element,
                        nodes[0],
                        language,
                        template_from_caller=template_from_caller,
                        mask=mask)[1]
                else:
                    value = t.getFormatedValue(element, nodes[0], language)[1]
                value = field.getFormat().replace("<value>", value)
            else:
                if fieldtype in ['text']:
                    if template_from_caller and template_from_caller[
                            0]:  # checking template on test nodes: show full length
                        fieldvalue = nodes[0].get(element.name)
                        if fieldvalue.strip():  # field is filled for this node
                            value = str(
                                t.getFormatedValue(
                                    element,
                                    nodes[0],
                                    language,
                                    template_from_caller=fieldvalue,
                                    mask=mask)[1])
                        else:  # use default
                            value = str(
                                t.getFormatedValue(
                                    element,
                                    nodes[0],
                                    language,
                                    template_from_caller=template_from_caller,
                                    mask=mask)[1])
                    else:  # cut long values
                        value = str(
                            formatLongText(
                                t.getFormatedValue(
                                    element,
                                    nodes[0],
                                    language,
                                    template_from_caller=template_from_caller,
                                    mask=mask)[1], element))
                elif fieldtype in ['upload']:
                    # passing mask necessary for fieldtype='upload'
                    value = str(
                        formatLongText(
                            t.getFormatedValue(element,
                                               nodes[0],
                                               language,
                                               mask=mask)[1], element))
                else:
                    value = str(
                        formatLongText(
                            t.getFormatedValue(element, nodes[0], language)[1],
                            element))

        if len(value.strip()) > 0:
            value += str(unit)

        label = '&nbsp;'
        if field.getLabel() != "":
            label = field.getLabel() + ': '

        if flags & VIEW_DATA_ONLY:
            # return a valuelist
            return [
                element.getName(), value,
                element.getLabel(),
                element.get("type")
            ]

        elif flags & VIEW_SUB_ELEMENT:
            # element in hgroup
            # only using value omitting label, delimiter like '&nbsp;' may be inserted in hgroup.getViewHTML
            return value

        elif flags & VIEW_HIDE_EMPTY and value.strip() == "":
            # hide empty elements
            return ''
        elif flags & VIEW_DATA_EXPORT:
            if fieldtype in ['text']:
                return str(
                    t.getFormatedValue(
                        element,
                        nodes[0],
                        language,
                        html=0,
                        template_from_caller=template_from_caller,
                        mask=mask)[1])
            else:
                return str(
                    t.getFormatedValue(element, nodes[0], language, html=0)[1])
            # return element.get("type")
        else:
            # standard view
            ret = '<div class="mask_row field-' + element.getName() + '"><div>'
            ret += '<div class="mask_label">' + label + '</div>\n<div class="mask_value">' + value + '&nbsp;</div>\n'
            ret += '</div></div>'
            return ret
コード例 #39
0
def FieldDetail(req, pid, id, err=0):
    _option = ""
    for key in req.params.keys():
        if key.startswith("option_"):
            _option += key[7]

    if err == 0 and id == "":
        # new field
        field = Metafield(u"")
        db.session.commit()

    elif id != "":
        # edit field
        field = q(Metadatatype).get(pid).children.filter_by(name=id, type=u'metafield').scalar()

    else:
        # error filling values
        _fieldvalue = ""
        if req.params.get('mtype', '') + "_value" in req.params.keys():
            _fieldvalue = ustr(req.params[req.params.get('mtype', '') + "_value"])

        if (req.params.get("mname") == ""):
            field = Metafield(req.params.get("orig_name"))
        else:
            field = Metafield(req.params.get("mname"))
        field.setLabel(req.params.get("mlabel"))
        field.setOrderPos(req.params.get("orderpos"))
        field.setFieldtype(req.params.get("mtype"))
        field.setOption(_option)
        field.setValues(_fieldvalue)
        field.setDescription(req.params.get("mdescription"))
        db.session.commit()

    attr = {}
    metadatatype = getMetaType(pid)
    for t in metadatatype.getDatatypes():
        content_class = Node.get_class_for_typestring(t)
        node = content_class(name=u'')
        try:
            attr.update(node.getTechnAttributes())
        except AttributeError:
            logg.exception("attribute error in FieldDetail, continue")
            continue

    metafields = {}
    for fields in getFieldsForMeta(pid):
        if fields.getType() != "union":
            metafields[fields.name] = fields

    v = getAdminStdVars(req)
    v["metadatatype"] = metadatatype
    v["metafield"] = field
    v["error"] = err
    v["fieldtypes"] = getMetaFieldTypeNames()
    v["dateoptions"] = dateoption
    v["datatypes"] = attr
    v["requiredoptions"] = requiredoption
    v["fieldoptions"] = fieldoption
    v["metafields"] = metafields
    v["filtertype"] = req.params.get("filtertype", "")
    v["actpage"] = req.params.get("actpage")

    v["icons"] = {"externer Link": "/img/extlink.png", "Email": "/img/email.png"}
    v["url_targets"] = {"selbes Fenster": "same", "neues Fenster": "_blank"}
    v["valuelist"] = ("", "", "", "")
    if field.getFieldtype() == "url":
        v["valuelist"] = field.getValueList()
        while len(v["valuelist"]) != 4:
            v["valuelist"].append("")
    else:
        v["valuelist"] = field.getValueList()

    v["field"] = None
    if field.id:
        v["field"] = field

    v["adminfields"] = []
    for t in getMetaFieldTypeNames():
        f = getMetadataType(t)

        if 'attr_dict' in inspect.getargspec(f.getMaskEditorHTML).args:
            attr_dict = dict(field.attrs.items())
            v["adminfields"] .append(f.getMaskEditorHTML(v["field"], metadatatype=metadatatype, language=lang(req), attr_dict=attr_dict))
        else:
            v["adminfields"] .append(f.getMaskEditorHTML(v["field"], metadatatype=metadatatype, language=lang(req)))
    db.session.commit()
    return req.getTAL("web/admin/modules/metatype_field.html", v, macro="modify_field")
コード例 #40
0
    def getFormHTML(self, field, nodes, req, sub=False):
        """ create editor field (editarea)"""
        element = field.getField()
        ret = ''
        label = ''
        description = '<div id="div_description"></div>'
        unit = ''

        if not sub:
            label += '<div class="label">' + field.getLabel() + ':'
            if (int(field.getRequired()) > 0):
                label += ' <span class="required">*</span>'
            label += '</div>'
        else:
            if field.getLabel() != "":
                label += field.getLabel() + ': '
                if int(field.getRequired()) > 0:
                    label += '<span class="required">*</span> '

        if field.getDescription() != "":
            description = '<div id="div_description"><a href="#" onclick="openPopup(\'/popup_help?id=' + element.id + \
                '&maskid=' + field.id + '\', \'\', 400, 250)"><img src="/img/tooltip.png" border="0"/></a></div>'

        if not sub:
            if str(element.id) in req.params.get("errorlist", []):
                ret += '<div class="editorerror">'
            else:
                ret += '<div class="editorrow">'

        ret += label + description
        elementtype = element.get("type")

        val = nodes[0].get(element.getName())
        for node in nodes:
            elementname = node.get(element.getName())
            if elementname == "":
                val = ""
        valuelist = {}

        lock = 0
        differentvalues = 0
        containsemptystring = val == ""

        for node in nodes:
            newvalue = node.get(element.getName())
            containsemptystring = containsemptystring or newvalue == ""
            if newvalue not in valuelist:
                differentvalues += 1
                valuelist[newvalue] = 1

        if differentvalues == 2 and containsemptystring:
            for t in valuelist.keys():
                if t != "":
                    val = t
            lock = 1
        elif differentvalues >= 2:
            val = "? "
            lock = 1

        if val == "" and field.getDefault() != "":
            val = field.getDefault()

        t = getMetadataType(elementtype)

        if field.getUnit() != "":
            unit += field.getUnit()

        ret += '<div id="editor_content">' + \
            t.getEditorHTML(element,
                            value=val,
                            width=field.getWidth(),
                            lock=lock,
                            language=lang(req),
                            required=field.getRequired()) + unit + '</div>'
        if not sub:
            ret += '</div>'
        return ret
コード例 #41
0
ファイル: default.py プロジェクト: agromsl/mediatum
    def show_node_text_deep(self, words=None, language=None, separator="", labels=0):

        def render_mask_template(node, mfs, words=None, separator="", skip_empty_fields=True):
            """
               mfs: [mask] + list_of_maskfields
            """
            res = []
            exception_count = {}
            mask = mfs[0]
            for node_attribute, fd in mfs[1:]:
                metafield_type = fd['metafield_type']
                field_type = fd['field_type']
                if metafield_type in ['date', 'url', 'hlist']:
                    exception_count[metafield_type] = exception_count.setdefault(metafield_type, 0) + 1
                    value = node.get(node_attribute)
                    try:
                        value = fd['metadatatype'].getFormatedValue(fd['element'], node, language=language, mask=mask)[1]
                    except:
                        value = fd['metadatatype'].getFormatedValue(fd['element'], node, language=language)[1]
                elif metafield_type in ['field']:
                    if field_type in ['hgroup', 'vgroup']:
                        _sep = ''
                        if field_type == 'hgroup':
                            fd['unit'] = ''  # unit will be taken from definition of the hgroup
                            use_label = False
                        else:
                            use_label = True
                        value = getMetadataType(field_type).getViewHTML(
                                                                         fd['field'],  # field
                                                                         [node],  # nodes
                                                                         0,  # flags
                                                                         language=language,
                                                                         mask=mask, use_label=use_label)
                else:
                    value = node.get(node_attribute)
                    metadatatype = fd['metadatatype']

                    if hasattr(metadatatype, "language_snipper"):
                        metafield = fd['element']
                        if (metafield.get("type") == "text" and metafield.get("valuelist") == "multilingual") \
                            or \
                           (metafield.get("type") in ['memo', 'htmlmemo'] and metafield.get("multilang") == '1'):
                            value = metadatatype.language_snipper(value, language)

                    if value.find('&lt;') >= 0:
                        # replace variables
                        for var in re.findall(r'&lt;(.+?)&gt;', value):
                            if var == "att:id":
                                value = value.replace("&lt;" + var + "&gt;", node.id)
                            elif var.startswith("att:"):
                                val = node.get(var[4:])
                                if val == "":
                                    val = "____"

                                value = value.replace("&lt;" + var + "&gt;", val)
                        value = value.replace("&lt;", "<").replace("&gt;", ">")

                    if value.find('<') >= 0:
                        # replace variables
                        for var in re.findall(r'\<(.+?)\>', value):
                            if var == "att:id":
                                value = value.replace("<" + var + ">", node.id)
                            elif var.startswith("att:"):
                                val = node.get(var[4:])
                                if val == "":
                                    val = "____"

                                value = value.replace("&lt;" + var + "&gt;", val)
                        value = value.replace("&lt;", "<").replace("&gt;", ">")

                    if value.find('tal:') >= 0:
                        context['node'] = node
                        value = runTALSnippet(value, context)

                    # don't escape before running TAL
                    if (not value) and fd['default']:
                        default = fd['default']
                        if fd['default_has_tal']:
                            context['node'] = node
                            value = runTALSnippet(default, context)
                        else:
                            value = default

                if skip_empty_fields and not value:
                    continue

                if fd["unit"]:
                    value = value + " " + fd["unit"]
                if fd["format"]:
                    value = fd["format"].replace("<value>", value)
                if words:
                    value = highlight(value, words, '<font class="hilite">', "</font>")
                res.append(fd["template"] % value)
            if exception_count and len(exception_count.keys()) > 1:
                pass
            return separator.join(res)

        if not separator:
            separator = "<br/>"

        lookup_key = make_lookup_key(self, language, labels)

        # if the lookup_key is already in the cache dict: render the cached mask_template
        # else: build the mask_template

        if lookup_key in maskcache:
            mfs = maskcache[lookup_key]
            res = render_mask_template(self, mfs, words=words, separator=separator)
            maskcache_accesscount[lookup_key] += 1
        else:
            mask = self.getMask("nodesmall")
            for m in self.getMasks("shortview", language=language):
                mask = m

            if mask:
                mfs = [mask]  # mask fields
                values = []
                fields = mask.getMaskFields(first_level_only=True)
                ordered_fields = sorted([(f.orderpos, f) for f in fields])
                for orderpos, field in ordered_fields:
                    fd = {}  # field descriptor
                    fd['field'] = field
                    element = field.getField()
                    element_type = element.get('type')
                    field_type = field.get('type')

                    t = getMetadataType(element.get("type"))

                    fd['format'] = field.getFormat()
                    fd['unit'] = field.getUnit()
                    label = field.getLabel()
                    fd['label'] = label
                    default = field.getDefault()
                    fd['default'] = default
                    fd['default_has_tal'] = (default.find('tal:') >= 0)

                    fd['metadatatype'] = t
                    fd['metafield_type'] = element_type
                    fd['element'] = element
                    fd['field_type'] = field_type

                    def getNodeAttributeName(field):
                        metafields = [x for x in field.getChildren() if x.type == 'metafield']
                        if len(metafields) != 1:
                            # this can only happen in case of vgroup or hgroup
                            logging.getLogger("error").error("maskfield %s zero or multiple metafield child(s)" % field.id)
                            return field.name
                        return metafields[0].name

                    node_attribute = getNodeAttributeName(field)
                    fd['node_attribute'] = node_attribute

                    def build_field_template(field_descriptor):
                        if labels:
                            template = "<b>" + field_descriptor['label'] + ":</b> %s"
                        else:
                            if field_descriptor['node_attribute'].startswith("author"):
                                template = '<span class="author">%s</span>'
                            elif field_descriptor['node_attribute'].startswith("subject"):
                                template = '<b>%s</b>'
                            else:
                                template = "%s"
                        return template

                    template = build_field_template(fd)

                    fd['template'] = template
                    long_field_descriptor = [node_attribute, fd]
                    mfs = mfs + [long_field_descriptor]

                maskcache[lookup_key] = mfs
                maskcache_accesscount[lookup_key] = 0
                res = render_mask_template(self, mfs, words=words, separator=separator)

            else:
                res = '&lt;smallview mask not defined&gt;'

            if element_type == 'date':
                comp = res.split(separator)
                pre = comp[0].split('(')[-1].strip(')')

                print comp, pre
        return res
コード例 #42
0
ファイル: field.py プロジェクト: anx-astocker/mediatum
    def getMetaEditor(self, item, req):
        """ editor mask for field definition """
        attr = {}
        fields = []
        pidnode = None

        if "pid" not in req.params.keys():
            for p in item.getParents():
                try:
                    if p.getMasktype() == "export":
                        pidnode = p
                        break
                except:
                    continue

        metadatatype = req.params.get("metadatatype")
        for t in metadatatype.getDatatypes():
            node = tree.Node(type=t)
            attr.update(node.getTechnAttributes())

        if req.params.get("op", "") == "new":
            pidnode = tree.getNode(req.params.get("pid"))
            if hasattr(pidnode, 'getMasktype') and pidnode.getMasktype() in ("vgroup", "hgroup"):
                for field in pidnode.getAllChildren():
                    if field.getType().getName() == "maskitem" and field.id != pidnode.id:
                        fields.append(field)
            else:
                for m in metadatatype.getMasks():
                    if str(m.id) == str(req.params.get("pid")):
                        for field in m.getChildren():
                            fields.append(field)

        fields.sort(lambda x, y: cmp(x.getOrderPos(), y.getOrderPos()))
        add_values = []
        val = ""
        if item.getField():
            val = item.getField().getValues()

        for t in getMetaFieldTypeNames():
            f = getMetadataType(t)
            add_values.append(f.getMaskEditorHTML(val, metadatatype=metadatatype, language=lang(req)))

        metafields = metadatatype.getMetaFields()
        metafields.sort(lambda x, y: cmp(x.getName().lower(), y.getName().lower()))

        metafieldtypes = getMetaFieldTypes().values()
        metafieldtypes.sort(lambda x, y: cmp(translate(x.getName(), request=req).lower(), translate(y.getName(), request=req).lower()))

        v = {}
        v["op"] = req.params.get("op", "")
        v["pid"] = req.params.get("pid", "")
        v["item"] = item
        v["metafields"] = metafields
        v["fields"] = fields
        v["fieldtypes"] = metafieldtypes
        v["dateoption"] = dateoption
        v["t_attrs"] = attr
        v["icons"] = {"externer Link": "/img/extlink.png", "Email": "/img/email.png"}
        v["add_values"] = add_values
        v["translate"] = translate
        v["language"] = lang(req)

        if pidnode and hasattr(pidnode, 'getMasktype') and pidnode.getMasktype() == "export":
            v["mappings"] = []
            for m in pidnode.getExportMapping():
                v["mappings"].append(tree.getNode(m))
            return req.getTAL("schema/mask/field.html", v, macro="metaeditor_" + pidnode.getMasktype())
        else:
            return req.getTAL("schema/mask/field.html", v, macro="metaeditor")
コード例 #43
0
    def getMetaHTML(self,
                    parent,
                    index,
                    sub=False,
                    language=None,
                    itemlist=[],
                    ptype="",
                    fieldlist={}):
        """ return formated row for metaeditor """
        if len(itemlist) > 0:
            # parent still not existing
            item = getNode(itemlist[index])
            pitems = len(itemlist)
        else:
            item = parent.getChildren().sort_by_orderpos()[index]
            ptype = parent.get("type")
            pitems = len(parent.getChildren())

        field = item.getField()
        ret = ''
        label = ''
        description = ''

        if field:
            f = getMetadataType(field.get("type"))
            fieldstring = f.getEditorHTML(
                field,
                width=item.getWidth(),
                value=item.getDefault(),
                language=language) + ' ' + item.getUnit()
        else:  # node for export mask
            attribute = tree.getNode(item.get("attribute"))
            field = item
            fieldstring = getMetadataType("mappingfield").getEditorHTML(
                field,
                width=item.getWidth(),
                value=attribute.getName(),
                language=language) + ' ' + item.getUnit()

        if item.getDescription() != "":
            description = '<div id="div_description"><a href="#" onclick="openPopup(\'/popup_help?id=%s&maskid=%s\', \'\', 400, 250)"> <img src="/img/tooltip.png" border="0"/></a></div>' % (
                field.id, item.id)

        if len(item.getLabel()) > 0 and item.getLabel() != "mapping":
            label = item.getLabel() + ': '
            required = ""
            if item.getRequired():
                required = '<span class="required">*</span>'

            if ptype in ("vgroup", "hgroup") or not sub:
                label = '<div class="label">%s %s</div>%s' % (label, required,
                                                              description)
            else:
                label += required

        else:
            label = '<div class="label">&nbsp;</div>'
        if not sub:
            ret += '<div id="%s" class="row" onmouseover="pick(this)" onmouseout="unpick(this)" onclick="select(this)" style="position:relative;min-height:30px">' % (
                item.id)

        if len(label) > 0:
            ret += '%s<div id="editor_content">%s</div>' % (label, fieldstring)
        else:
            ret += fieldstring

        if not sub:
            # <small style="color:silver">('+(item.get("type"))+')</small>'
            ret += '<div align="right" id="%s_sub" style="display:none; position:absolute; right:1px; top:3px" class="edit_tools">' % (
                item.id)

            if index > 0:
                ret += '<input type="image" src="/img/uparrow.png" name="up_%s" i18n:attributes="title mask_edit_up_title"/>' % (
                    item.id)
            else:
                ret += '&nbsp;&nbsp;&nbsp;'
            if index < pitems - 1:
                ret += '<input type="image" src="/img/downarrow.png" name="down_%s" i18n:attributes="title mask_edit_down_title"/>' % (
                    item.id)
            else:
                ret += '&nbsp;&nbsp;&nbsp;'

            if field.getName() in fieldlist.keys():
                if len(fieldlist[field.getName()]) > 1:
                    ret += '&nbsp;<img src="/img/attention.gif" title="%s ' % (
                        translate("mask_edit_multi_label", language))
                    ret += ", ".join([
                        schema.getName()
                        for schema in fieldlist[field.getName()]
                    ]) + '"/>'

            ret += ' <input type="image" src="/img/edit.png" name="edit_%s" i18n:attributes="title mask_edit_edit_row"/> <input type="image" src="/img/delete.png" name="delete_%s" i18n:attributes="title mask_edit_delete_row" onClick="return questionDel()"/></div></div>' % (
                item.id, item.id)
        return ret
コード例 #44
0
    def replaceVars(self,
                    s,
                    node,
                    attrnode=None,
                    field_value="",
                    options=[],
                    mask=None,
                    raw=0,
                    default=""):
        # if attrnode and node:
        for var in re.findall(r'\[(.+?)\]', s):
            if var.startswith("att:field|replacestring"):
                s2 = self.replaceStr(attrnode.getName(), var[24:])
                s = s.replace("[" + var + "]", s2)

            elif var.startswith("att:field|substring"):
                s2 = self.subStr(attrnode.getName(), var[20:])
                s = s.replace("[" + var + "]", s2)

            elif var == "field":
                s = s.replace("[field]", field_value)

            elif var == ("cmd:getTAL"):
                s = exportutils.handleCommand('cmd:getTAL', var, s, node,
                                              attrnode, field_value, options,
                                              mask)

            elif var.startswith("value|formatdate"):
                date_from = format_date(
                    parse_date(node.get(attrnode.getName())), var[18:-1])
                s = s.replace("[" + var + "]", date_from)

            elif var.startswith("value|replacestring"):
                s2 = self.replaceStr(node.get(attrnode.getName()), var[20:])
                s = s.replace("[" + var + "]", s2)

            elif var.startswith("value|substring"):
                s2 = self.subStr(node.get(attrnode.getName()), var[16:])
                s = s.replace("[" + var + "]", s2)

            elif var.startswith("value|nodename"):
                try:
                    s2 = tree.getNode(node.get(attrnode.getName())).getName()
                except:
                    s2 = node.getName()
                s = s.replace("[" + var + "]", s2)

            elif var == "value":
                v = getMetadataType(attrnode.getFieldtype()).getFormatedValue(
                    attrnode, node)[1]
                if v == "":
                    v = node.get(attrnode.getName())
                if v == "" and default != "":
                    v = default
                if "t" in options and not v.isdigit():
                    v = '"' + v + '"'
                s = s.replace("[value]", v)

            elif var == "ns":
                ns = ""
                for mapping in attrnode.get("exportmapping").split(";"):
                    n = tree.getNode(mapping)
                    if n.getNamespace() != "" and n.getNamespaceUrl() != "":
                        ns += 'xmlns:' + n.getNamespace(
                        ) + '="' + n.getNamespaceUrl() + '" '
                s = s.replace("[" + var + "]", ns)

            for ext in self.extensions:
                s = ext.func(s, var, node, attrnode)
        if raw == 1:
            return s

        ret = ""
        for i in range(0, len(s)):
            if s[i - 1] == '\\':
                if s[i] == 'r':
                    ret += "\r"
                elif s[i] == 'n':
                    ret += "\n"
                elif s[i] == 't':
                    ret += "\t"
            elif s[i] == '\\':
                pass
            else:
                ret += s[i]
        return desc(ret)
コード例 #45
0
    def getMetaEditor(self, item, req):
        """ editor mask for field definition """
        attr = {}
        fields = []
        pidnode = None

        if "pid" not in req.params.keys():
            for p in item.getParents():
                try:
                    if p.getMasktype() == "export":
                        pidnode = p
                        break
                except:
                    continue

        metadatatype = req.params.get("metadatatype")
        for t in metadatatype.getDatatypes():
            node = tree.Node(type=t)
            attr.update(node.getTechnAttributes())

        if req.params.get("op", "") == "new":
            pidnode = tree.getNode(req.params.get("pid"))
            if hasattr(pidnode,
                       'getMasktype') and pidnode.getMasktype() in ("vgroup",
                                                                    "hgroup"):
                for field in pidnode.getAllChildren():
                    if field.getType().getName(
                    ) == "maskitem" and field.id != pidnode.id:
                        fields.append(field)
            else:
                for m in metadatatype.getMasks():
                    if str(m.id) == str(req.params.get("pid")):
                        for field in m.getChildren():
                            fields.append(field)

        fields.sort(lambda x, y: cmp(x.getOrderPos(), y.getOrderPos()))
        add_values = []
        val = ""
        if item.getField():
            val = item.getField().getValues()

        for t in getMetaFieldTypeNames():
            f = getMetadataType(t)
            add_values.append(
                f.getMaskEditorHTML(val,
                                    metadatatype=metadatatype,
                                    language=lang(req)))

        metafields = metadatatype.getMetaFields()
        metafields.sort(lambda x, y: cmp(x.getName().lower(),
                                         y.getName().lower()))

        metafieldtypes = getMetaFieldTypes().values()
        metafieldtypes.sort(lambda x, y: cmp(
            translate(x.getName(), request=req).lower(),
            translate(y.getName(), request=req).lower()))

        v = {}
        v["op"] = req.params.get("op", "")
        v["pid"] = req.params.get("pid", "")
        v["item"] = item
        v["metafields"] = metafields
        v["fields"] = fields
        v["fieldtypes"] = metafieldtypes
        v["dateoption"] = dateoption
        v["t_attrs"] = attr
        v["icons"] = {
            "externer Link": "/img/extlink.png",
            "Email": "/img/email.png"
        }
        v["add_values"] = add_values
        v["translate"] = translate
        v["language"] = lang(req)

        if pidnode and hasattr(
                pidnode, 'getMasktype') and pidnode.getMasktype() == "export":
            v["mappings"] = []
            for m in pidnode.getExportMapping():
                v["mappings"].append(tree.getNode(m))
            return req.getTAL("schema/mask/field.html",
                              v,
                              macro="metaeditor_" + pidnode.getMasktype())
        else:
            return req.getTAL("schema/mask/field.html", v, macro="metaeditor")
コード例 #46
0
    def show_node_text_deep(self,
                            words=None,
                            language=None,
                            separator="",
                            labels=0):
        def render_mask_template(node,
                                 mfs,
                                 words=None,
                                 separator="",
                                 skip_empty_fields=True):
            """
               mfs: [mask] + list_of_maskfields
            """
            res = []
            exception_count = {}
            mask = mfs[0]
            for node_attribute, fd in mfs[1:]:
                metafield_type = fd['metafield_type']
                field_type = fd['field_type']
                if metafield_type in ['date', 'url', 'hlist']:
                    exception_count[
                        metafield_type] = exception_count.setdefault(
                            metafield_type, 0) + 1
                    value = node.get(node_attribute)
                    try:
                        value = fd['metadatatype'].getFormatedValue(
                            fd['element'], node, language=language,
                            mask=mask)[1]
                    except:
                        value = fd['metadatatype'].getFormatedValue(
                            fd['element'], node, language=language)[1]
                elif metafield_type in ['field']:
                    if field_type in ['hgroup', 'vgroup']:
                        _sep = ''
                        if field_type == 'hgroup':
                            fd['unit'] = ''  # unit will be taken from definition of the hgroup
                            use_label = False
                        else:
                            use_label = True
                        value = getMetadataType(field_type).getViewHTML(
                            fd['field'],  # field
                            [node],  # nodes
                            0,  # flags
                            language=language,
                            mask=mask,
                            use_label=use_label)
                else:
                    value = node.get(node_attribute)
                    metadatatype = fd['metadatatype']

                    if hasattr(metadatatype, "language_snipper"):
                        metafield = fd['element']
                        if (metafield.get("type") == "text" and metafield.get("valuelist") == "multilingual") \
                            or \
                           (metafield.get("type") in ['memo', 'htmlmemo'] and metafield.get("multilang") == '1'):
                            value = metadatatype.language_snipper(
                                value, language)

                    if value.find('&lt;') >= 0:
                        # replace variables
                        for var in re.findall(r'&lt;(.+?)&gt;', value):
                            if var == "att:id":
                                value = value.replace("&lt;" + var + "&gt;",
                                                      node.id)
                            elif var.startswith("att:"):
                                val = node.get(var[4:])
                                if val == "":
                                    val = "____"

                                value = value.replace("&lt;" + var + "&gt;",
                                                      val)
                        value = value.replace("&lt;", "<").replace("&gt;", ">")

                    if value.find('<') >= 0:
                        # replace variables
                        for var in re.findall(r'\<(.+?)\>', value):
                            if var == "att:id":
                                value = value.replace("<" + var + ">", node.id)
                            elif var.startswith("att:"):
                                val = node.get(var[4:])
                                if val == "":
                                    val = "____"

                                value = value.replace("&lt;" + var + "&gt;",
                                                      val)
                        value = value.replace("&lt;", "<").replace("&gt;", ">")

                    if value.find('tal:') >= 0:
                        context['node'] = node
                        value = runTALSnippet(value, context)

                    # don't escape before running TAL
                    if (not value) and fd['default']:
                        default = fd['default']
                        if fd['default_has_tal']:
                            context['node'] = node
                            value = runTALSnippet(default, context)
                        else:
                            value = default

                if skip_empty_fields and not value:
                    continue

                if fd["unit"]:
                    value = value + " " + fd["unit"]
                if fd["format"]:
                    value = fd["format"].replace("<value>", value)
                if words:
                    value = highlight(value, words, '<font class="hilite">',
                                      "</font>")
                res.append(fd["template"] % value)
            if exception_count and len(exception_count.keys()) > 1:
                pass
            return separator.join(res)

        if not separator:
            separator = "<br/>"

        lookup_key = make_lookup_key(self, language, labels)

        # if the lookup_key is already in the cache dict: render the cached mask_template
        # else: build the mask_template

        if lookup_key in maskcache:
            mfs = maskcache[lookup_key]
            res = render_mask_template(self,
                                       mfs,
                                       words=words,
                                       separator=separator)
            maskcache_accesscount[lookup_key] += 1
        else:
            mask = self.getMask("nodesmall")
            for m in self.getMasks("shortview", language=language):
                mask = m

            if mask:
                mfs = [mask]  # mask fields
                values = []
                fields = mask.getMaskFields(first_level_only=True)
                ordered_fields = sorted([(f.orderpos, f) for f in fields])
                for orderpos, field in ordered_fields:
                    fd = {}  # field descriptor
                    fd['field'] = field
                    element = field.getField()
                    element_type = element.get('type')
                    field_type = field.get('type')

                    t = getMetadataType(element.get("type"))

                    fd['format'] = field.getFormat()
                    fd['unit'] = field.getUnit()
                    label = field.getLabel()
                    fd['label'] = label
                    default = field.getDefault()
                    fd['default'] = default
                    fd['default_has_tal'] = (default.find('tal:') >= 0)

                    fd['metadatatype'] = t
                    fd['metafield_type'] = element_type
                    fd['element'] = element
                    fd['field_type'] = field_type

                    def getNodeAttributeName(field):
                        metafields = [
                            x for x in field.getChildren()
                            if x.type == 'metafield'
                        ]
                        if len(metafields) != 1:
                            # this can only happen in case of vgroup or hgroup
                            logging.getLogger("error").error(
                                "maskfield %s zero or multiple metafield child(s)"
                                % field.id)
                            return field.name
                        return metafields[0].name

                    node_attribute = getNodeAttributeName(field)
                    fd['node_attribute'] = node_attribute

                    def build_field_template(field_descriptor):
                        if labels:
                            template = "<b>" + field_descriptor[
                                'label'] + ":</b> %s"
                        else:
                            if field_descriptor['node_attribute'].startswith(
                                    "author"):
                                template = '<span class="author">%s</span>'
                            elif field_descriptor['node_attribute'].startswith(
                                    "subject"):
                                template = '<b>%s</b>'
                            else:
                                template = "%s"
                        return template

                    template = build_field_template(fd)

                    fd['template'] = template
                    long_field_descriptor = [node_attribute, fd]
                    mfs = mfs + [long_field_descriptor]

                maskcache[lookup_key] = mfs
                maskcache_accesscount[lookup_key] = 0
                res = render_mask_template(self,
                                           mfs,
                                           words=words,
                                           separator=separator)

            else:
                res = '&lt;smallview mask not defined&gt;'

        return res