Example #1
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 = 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")
Example #2
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 = 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")
Example #3
0
def showEditor(req):
    path = req.path[1:].split("/")
    mtype = getMetaType(path[1])
    editor = mtype.getMask(path[2])

    req.params["metadatatype"] = mtype
    for key in req.params.keys():
        if req.params.get("op", "") == "cancel":
            if "savedetail" in req.params.keys():
                del req.params["savedetail"]
            break

        if key.startswith("up_"):
            changeOrder(
                q(Node).get(key[3:-2]).parents[0],
                q(Node).get(key[3:-2]).orderpos, -1)
            break

        if key.startswith("down_"):
            changeOrder(
                q(Node).get(key[5:-2]).parents[0], -1,
                q(Node).get(key[5:-2]).orderpos)
            break

        if key.startswith("delete_"):
            editor.deleteMaskitem(key[7:-2])
            break

        if key.startswith("edit_"):
            op = key[5:-2]
            req.params["edit"] = op
            req.params["op"] = "edit"
            break

        if key.startswith("new_"):
            req.params["edit"] = " "
            break

        if key.startswith("newdetail_"):
            req.params["pid"] = key[10:-2]
            req.params["op"] = "newdetail"
            req.params["edit"] = " "
            if req.params.get("type") in ("vgroup", "hgroup"):
                req.params["type"] = "field"
                req.params["op"] = "new"
            if "savedetail" in req.params.keys():
                del req.params["savedetail"]
            break

    if req.params.get("op", "") == "group":
        # create new group for selected objects
        req.params["op"] = "new"
        req.params["edit"] = " "
        req.params["type"] = req.params.get("group_type")
        req.params["pid"] = q(Node).get(
            req.params.get("sel_id").split(";")[0]).parents[0].id

    if "saveedit" in req.params.keys() and req.params.get("op",
                                                          "") != "cancel":
        # update node
        label = req.params.get("label", "-new-")
        if req.params.get("op", "") == "edit":
            item = q(Node).get(req.params.get("id"))
            item.setLabel(req.params.get("label", ""))
            db.session.commit()
            if "mappingfield" in req.params.keys():
                # field of export mask
                item.set("attribute", req.params.get("attribute"))
                item.set("fieldtype", req.params.get("fieldtype"))
                mf = req.params.get("mappingfield").split(";")
                if req.params.get(
                        "fieldtype"
                ) == "mapping":  # mapping field of mapping definition selected
                    item.set("mappingfield", mf[0])
                else:  # attribute name as object name
                    item.set("mappingfield", ";".join(mf[1:]))
                db.session.commit()
            else:
                f = q(Node).get(long(req.params.get("field")))

            field = item.children
            try:
                field = list(field)[0]
                if ustr(field.id) != req.params.get("field"):
                    item.children.remove(field)
                    item.children.append(f)
                field.setValues(
                    req.params.get(u"{}_value".format(field.get("type")), u""))
                db.session.commit()
            except:
                logg.exception("exception in showEditor / saveedit, ignore")
                pass

        elif req.params.get("op", "") == "new":
            if req.params.get("fieldtype",
                              "") == "common" and req.params.get("field"):
                # existing field used
                fieldid = long(req.params.get("field"))
            elif "mappingfield" in req.params.keys():
                # new mapping field
                fieldid = ""  # long(req.params.get("mappingfield"))
                label = "mapping"

            else:
                # create new metaattribute
                parent = req.params.get("metadatatype").getName()
                fieldvalue = req.params.get(
                    req.params.get("newfieldtype", "") + '_value', "")

                if req.params.get("type") == "label":
                    # new label
                    fieldid = ""
                else:
                    # normal field
                    updateMetaField(parent,
                                    req.params.get("fieldname"),
                                    label,
                                    0,
                                    req.params.get("newfieldtype"),
                                    option="",
                                    description=req.params.get(
                                        "description", ""),
                                    fieldvalues=fieldvalue,
                                    fieldvaluenum="",
                                    fieldid="")
                    fieldid = ustr(
                        getMetaField(parent, req.params.get("fieldname")).id)

            item = editor.addMaskitem(label, req.params.get("type"), fieldid,
                                      req.params.get("pid", "0"))

            if "mappingfield" in req.params.keys():
                item.set("attribute", req.params.get("attribute"))
                item.set("fieldtype", req.params.get("fieldtype"))
                mf = req.params.get("mappingfield").split(";")
                if req.params.get(
                        "fieldtype"
                ) == "mapping":  # mapping field of mapping definition selected
                    item.set("mappingfield", mf[0])
                else:  # attribute name as object name
                    item.set("mappingfield", ";".join(mf[1:]))
                db.session.commit()

            position = req.params.get("insertposition", "end")
            if position == "end":
                # insert at the end of existing mask
                item.orderpos = len(
                    q(Node).get(req.params.get("pid")).children) - 1
                db.session.commit()
            else:
                # insert at special position
                fields = editor.getMaskFields()
                fields.all().sort(lambda x, y: cmp(x.orderpos, y.orderpos))
                for f in fields:
                    if f.orderpos >= q(Node).get(
                            position).orderpos and f.id != item.id:
                        f.orderpos = f.orderpos + 1
                item.orderpos = q(Node).get(position).orderpos - 1
                db.session.commit()

        item.setWidth(req.params.get("width", u'400'))
        item.setUnit(req.params.get("unit", u""))
        item.setDefault(req.params.get("default", u""))
        item.setFormat(req.params.get("format", u""))
        item.setSeparator(req.params.get("separator", u""))
        item.setDescription(req.params.get("description", u""))
        item.setTestNodes(req.params.get("testnodes", u""))
        item.setMultilang(req.params.get("multilang", u""))
        db.session.commit()

        if "required" in req.params.keys():
            item.setRequired(unicode(1))
        else:
            item.setRequired(unicode(0))
        db.session.commit()

    if "savedetail" in req.params.keys():
        label = req.params.get("label", "-new-")
        # save details (used for hgroup)
        if req.params.get("op", "") == "edit":
            item = q(Node).get(req.params.get("id"))
            item.setLabel(req.params.get("label", ""))
        elif req.params.get("op", "") == "new":
            if req.params.get("sel_id", "") != "":
                item = editor.addMaskitem(label, req.params.get("type"),
                                          req.params.get("sel_id", "")[:-1],
                                          long(req.params.get("pid", "0")))
            else:
                item = editor.addMaskitem(label, req.params.get("type"), 0,
                                          long(req.params.get("pid", "0")))
        db.session.commit()

        # move selected elementd to new item-container
        if req.params.get("sel_id", "") != "":
            pos = 0
            for i in req.params.get("sel_id")[:-1].split(";"):
                n = q(Node).get(i)  # node to move
                n.setOrderPos(pos)
                p = q(Node).get(n.parents()[0].id)  # parentnode
                p.children.remove(n)
                item.children.append(n)  # new group
                pos += 1
            db.session.commit()

        # position:
        position = req.params.get("insertposition", "end")
        if position == "end":
            # insert at the end of existing mask
            item.setOrderPos(
                len(q(Node).get(req.params.get("pid")).children) - 1)
            db.session.commit()
        else:
            # insert at special position
            fields = []
            pidnode = q(Node).get(req.params.get("pid"))
            for field in pidnode.getChildren():
                if field.getType().getName(
                ) == "maskitem" and field.id != pidnode.id:
                    fields.append(field)
            fields.sort(lambda x, y: cmp(x.orderpos, y.orderpos))
            for f in fields:
                if f.orderpos >= q(Node).get(
                        position).orderpos and f.id != item.id:
                    f.orderpos = f.orderpos + 1
            item.orderpos = q(Node).get(position).orderpos - 1
            db.session.commit()

        if "edit" not in req.params.keys():
            item.set("type", req.params.get("type", u""))
        item.setWidth(req.params.get("width", u'400'))
        item.setUnit(req.params.get("unit", u""))
        item.setDefault(req.params.get("default", u""))
        item.setFormat(req.params.get("format", u""))
        item.setSeparator(req.params.get("separator", u""))
        item.setDescription(req.params.get("description", u""))
        if "required" in req.params.keys():
            item.setRequired(unicode(1))
        else:
            item.setRequired(unicode(0))
        db.session.commit()

    v = {}
    v["edit"] = req.params.get("edit", "")
    if req.params.get("edit", "") != "":
        v["editor"] = editor.editItem(req)
    else:
        # show metaEditor
        v["editor"] = ""
        try:
            v["editor"] = req.getTALstr(editor.getMetaMask(req), {})
        except:
            logg.exception("exception in showEditor")
            v["editor"] = editor.getMetaMask(req)

    v["title"] = editor.name
    v["csrf"] = req.csrf_token.current_token
    return req.getTAL("web/admin/modules/metatype.html",
                      v,
                      macro="editor_popup")
Example #4
0
def showEditor(req):
    path = req.path[1:].split("/")
    mtype = getMetaType(path[1])
    editor = mtype.getMask(path[2])

    req.params["metadatatype"] = mtype
    for key in req.params.keys():
        if req.params.get("op", "") == "cancel":
            if "savedetail" in req.params.keys():
                del req.params["savedetail"]
            break

        if key.startswith("up_"):
            changeOrder(q(Node).get(key[3:-2]).parents[0], q(Node).get(key[3:-2]).orderpos, -1)
            break

        if key.startswith("down_"):
            changeOrder(q(Node).get(key[5:-2]).parents[0], -1, q(Node).get(key[5:-2]).orderpos)
            break

        if key.startswith("delete_"):
            editor.deleteMaskitem(key[7:-2])
            break

        if key.startswith("edit_"):
            op = key[5:-2]
            req.params["edit"] = op
            req.params["op"] = "edit"
            break

        if key.startswith("new_"):
            req.params["edit"] = " "
            break

        if key.startswith("newdetail_"):
            req.params["pid"] = key[10:-2]
            req.params["op"] = "newdetail"
            req.params["edit"] = " "
            if req.params.get("type")in("vgroup", "hgroup"):
                req.params["type"] = "field"
                req.params["op"] = "new"
            if "savedetail" in req.params.keys():
                del req.params["savedetail"]
            break

    if req.params.get("op", "") == "group":
        # create new group for selected objects
        req.params["op"] = "new"
        req.params["edit"] = " "
        req.params["type"] = req.params.get("group_type")
        req.params["pid"] = q(Node).get(req.params.get("sel_id").split(";")[0]).parents[0].id

    if "saveedit" in req.params.keys() and req.params.get("op", "") != "cancel":
        # update node
        label = req.params.get("label", "-new-")
        if req.params.get("op", "") == "edit":
            item = q(Node).get(req.params.get("id"))
            item.setLabel(req.params.get("label", ""))
            db.session.commit()
            if "mappingfield" in req.params.keys():
                # field of export mask
                item.set("attribute", req.params.get("attribute"))
                item.set("fieldtype", req.params.get("fieldtype"))
                mf = req.params.get("mappingfield").split(";")
                if req.params.get("fieldtype") == "mapping":  # mapping field of mapping definition selected
                    item.set("mappingfield", mf[0])
                else:  # attribute name as object name
                    item.set("mappingfield", ";".join(mf[1:]))
                db.session.commit()
            else:
                f = q(Node).get(long(req.params.get("field")))

            field = item.children
            try:
                field = list(field)[0]
                if ustr(field.id) != req.params.get("field"):
                    item.children.remove(field)
                    item.children.append(f)
                field.setValues(req.params.get(u"{}_value".format(field.get("type")), u""))
                db.session.commit()
            except:
                logg.exception("exception in showEditor / saveedit, ignore")
                pass

        elif req.params.get("op", "") == "new":
            if req.params.get("fieldtype", "") == "common" and req.params.get("field"):
                # existing field used
                fieldid = long(req.params.get("field"))
            elif "mappingfield" in req.params.keys():
                # new mapping field
                fieldid = ""  # long(req.params.get("mappingfield"))
                label = "mapping"

            else:
                # create new metaattribute
                parent = req.params.get("metadatatype").getName()
                fieldvalue = req.params.get(req.params.get("newfieldtype", "") + '_value', "")

                if req.params.get("type") == "label":
                    # new label
                    fieldid = ""
                else:
                    # normal field
                    updateMetaField(parent, req.params.get("fieldname"), label, 0,
                                    req.params.get("newfieldtype"), option="", description=req.params.get("description", ""),
                                    fieldvalues=fieldvalue, fieldvaluenum="", fieldid="")
                    fieldid = ustr(getMetaField(parent, req.params.get("fieldname")).id)

            item = editor.addMaskitem(label, req.params.get("type"), fieldid, req.params.get("pid", "0"))

            if "mappingfield" in req.params.keys():
                item.set("attribute", req.params.get("attribute"))
                item.set("fieldtype", req.params.get("fieldtype"))
                mf = req.params.get("mappingfield").split(";")
                if req.params.get("fieldtype") == "mapping":  # mapping field of mapping definition selected
                    item.set("mappingfield", mf[0])
                else:  # attribute name as object name
                    item.set("mappingfield", ";".join(mf[1:]))
                db.session.commit()

            position = req.params.get("insertposition", "end")
            if position == "end":
                # insert at the end of existing mask
                item.orderpos = len(q(Node).get(req.params.get("pid")).children) - 1
                db.session.commit()
            else:
                # insert at special position
                fields = editor.getMaskFields()
                fields.all().sort(lambda x, y: cmp(x.orderpos, y.orderpos))
                for f in fields:
                    if f.orderpos >= q(Node).get(position).orderpos and f.id != item.id:
                        f.orderpos = f.orderpos + 1
                item.orderpos = q(Node).get(position).orderpos - 1
                db.session.commit()

        item.setWidth(req.params.get("width", u'400'))
        item.setUnit(req.params.get("unit", u""))
        item.setDefault(req.params.get("default", u""))
        item.setFormat(req.params.get("format", u""))
        item.setSeparator(req.params.get("separator", u""))
        item.setDescription(req.params.get("description", u""))
        item.setTestNodes(req.params.get("testnodes", u""))
        item.setMultilang(req.params.get("multilang", u""))
        db.session.commit()

        if "required" in req.params.keys():
            item.setRequired(unicode(1))
        else:
            item.setRequired(unicode(0))
        db.session.commit()

    if "savedetail" in req.params.keys():
        label = req.params.get("label", "-new-")
        # save details (used for hgroup)
        if req.params.get("op", "") == "edit":
            item = q(Node).get(req.params.get("id"))
            item.setLabel(req.params.get("label", ""))
        elif req.params.get("op", "") == "new":
            if req.params.get("sel_id", "") != "":
                item = editor.addMaskitem(label, req.params.get("type"), req.params.get(
                    "sel_id", "")[:-1], long(req.params.get("pid", "0")))
            else:
                item = editor.addMaskitem(label, req.params.get("type"), 0, long(req.params.get("pid", "0")))
        db.session.commit()

        # move selected elementd to new item-container
        if req.params.get("sel_id", "") != "":
            pos = 0
            for i in req.params.get("sel_id")[:-1].split(";"):
                n = q(Node).get(i)  # node to move
                n.setOrderPos(pos)
                p = q(Node).get(n.parents()[0].id)  # parentnode
                p.children.remove(n)
                item.children.append(n)  # new group
                pos += 1
            db.session.commit()

        # position:
        position = req.params.get("insertposition", "end")
        if position == "end":
            # insert at the end of existing mask
            item.setOrderPos(len(q(Node).get(req.params.get("pid")).children) - 1)
            db.session.commit()
        else:
            # insert at special position
            fields = []
            pidnode = q(Node).get(req.params.get("pid"))
            for field in pidnode.getChildren():
                if field.getType().getName() == "maskitem" and field.id != pidnode.id:
                    fields.append(field)
            fields.sort(lambda x, y: cmp(x.orderpos, y.orderpos))
            for f in fields:
                if f.orderpos >= q(Node).get(position).orderpos and f.id != item.id:
                    f.orderpos = f.orderpos + 1
            item.orderpos = q(Node).get(position).orderpos - 1
            db.session.commit()

        if "edit" not in req.params.keys():
            item.set("type", req.params.get("type", u""))
        item.setWidth(req.params.get("width", u'400'))
        item.setUnit(req.params.get("unit", u""))
        item.setDefault(req.params.get("default", u""))
        item.setFormat(req.params.get("format", u""))
        item.setSeparator(req.params.get("separator", u""))
        item.setDescription(req.params.get("description", u""))
        if "required" in req.params.keys():
            item.setRequired(unicode(1))
        else:
            item.setRequired(unicode(0))
        db.session.commit()

    v = {}
    v["edit"] = req.params.get("edit", "")
    if req.params.get("edit", "") != "":
        v["editor"] = editor.editItem(req)
    else:
        # show metaEditor
        v["editor"] = ""
        try:
            v["editor"] = req.getTALstr(editor.getMetaMask(req), {})
        except:
            logg.exception("exception in showEditor")
            v["editor"] = editor.getMetaMask(req)

    v["title"] = editor.name
    v["csrf"] = req.csrf_token.current_token
    return req.getTAL("web/admin/modules/metatype.html", v, macro="editor_popup")