Example #1
0
def getContent(req, ids):
    class SortChoice:
        def __init__(self, label, value):
            self.label = label
            self.value = value

    def getSchemes(_req):
        return filter(lambda x: x.isActive(), acl.AccessData(_req).filter(loadTypesFromDB()))

    def getDatatypes(_req, _schemes):
        _dtypes = []
        datatypes = loadAllDatatypes()
        for scheme in _schemes:
            for dtype in scheme.getDatatypes():
                if dtype not in _dtypes:
                    for _t in datatypes:
                        if _t.getName() == dtype and not elemInList(dtypes, _t.getName()):
                            dtypes.append(_t)
        _dtypes.sort(
            lambda x, y: cmp(
                translate(x.getLongName(), request=_req).lower(), translate(y.getLongName(), request=req).lower()
            )
        )
        return _dtypes

    node = tree.getNode(ids[0])

    if "action" in req.params:
        if req.params.get("action") == "resort":
            _dir = "up"
            field = req.params.get("value", "").strip()
            nl = list(node.getChildren())
            if field:
                if field[0] == "-":
                    field = field[1:]
                    _dir = "down"
                nl.sort(lambda x, y: cmp(x.get(field).lower(), y.get(field).lower()))
                if _dir == "down":
                    nl.reverse()
            req.write(json.dumps({"state": "ok", "values": showdir(req, node, nodes=nl, sortfield_from_req=field)}))
            return None

        elif req.params.get("action") == "save":  # save selection for collection
            field = req.params.get("value")
            if field.strip() == "":
                node.removeAttribute("sortfield")
            else:
                node.set("sortfield", field)
            req.write(json.dumps({"state": "ok", "message": translate("edit_content_save_order", request=req)}))
        return None

    if node.isContainer():
        schemes = []
        dtypes = []

        v = {"operations": showoperations(req, node), "items": showdir(req, node)}
        access = acl.AccessData(req)
        if access.hasWriteAccess(node):
            schemes = getSchemes(req)
            dtypes = getDatatypes(req, schemes)

        col = node
        if "globalsort" in req.params:
            col.set("sortfield", req.params.get("globalsort"))
        v["collection_sortfield"] = col.get("sortfield")
        sortfields = [SortChoice(t(req, "off"), "")]
        if col.type not in ["root", "collections", "home"]:
            try:
                for ntype, num in col.getAllOccurences(acl.AccessData(req)).items():
                    if ntype.getSortFields():
                        for sortfield in ntype.getSortFields():
                            sortfields += [SortChoice(sortfield.getLabel(), sortfield.getName())]
                            sortfields += [
                                SortChoice(sortfield.getLabel() + t(req, "descending"), "-" + sortfield.getName())
                            ]
                        break
            except TypeError:
                pass
        v["sortchoices"] = sortfields
        v["types"] = dtypes
        v["schemes"] = schemes
        v["id"] = ids[0]
        v["count"] = len(node.getContentChildren())
        v["language"] = lang(req)
        v["t"] = t
        return req.getTAL("web/edit/modules/content.html", v, macro="edit_content")
    if hasattr(node, "editContentDefault"):
        return node.editContentDefault(req)
    return ""
Example #2
0
                    for sortfield in ntype.getSortFields():
                        sortfields += [SortChoice(sortfield.getLabel(), sortfield.getName())]
                        sortfields += [SortChoice(sortfield.getLabel() + translation_t(req, "descending"), "-" + sortfield.getName())]
                    break
        v['sortchoices'] = sortfields
        v['count'] = len(node.getContentChildren())
        v['language'] = lang(req)
        v['t'] = translation_t

    v.update({
        "id": req.params.get("id"),
        "sid": req.session.id,
        "datatypes": getDatatypes(req, schemes),
        "schemes": schemes,
        "uploadstate": req.params.get("upload"),
        "operations": showoperations(req, node),
        "nodelist": showdir(req, node),
    })
    return req.getTAL("web/edit/modules/upload.html", v, macro="upload_form")


# differs from os.path.split in that it handles windows as well as unix
# filenames
FNAMESPLIT = re.compile(r'(([^/\\]*[/\\])*)([^/\\]*)')


def mybasename(filename):
    g = FNAMESPLIT.match(filename)
    if g:
        basename =  g.group(3)
    else:
Example #3
0
def getContent(req, ids):
    def getDatatypes(_req, _schemes):
        _dtypes = []
        datatypes = Data.get_all_datatypes()
        for scheme in _schemes:
            for dtype in scheme.getDatatypes():
                if dtype not in _dtypes:
                    for _t in datatypes:
                        #                         if _t.getName() == dtype and not elemInList(dtypes, _t.getName()):
                        dtypes.append(_t)
        _dtypes.sort(lambda x, y: cmp(
            translate(x.getLongName(), request=_req).lower(),
            translate(y.getLongName(), request=req).lower()))
        return _dtypes

    def get_ids_from_query():
        ids = get_ids_from_req(req)
        return ",".join(ids)

    node = q(Data).get(long(ids[0]))

    if "action" in req.params:
        if req.params.get('action') == "resort":
            field = req.params.get('value', '').strip()
            res = showdir(req, node, sortfield=field)
            res = json.dumps({
                'state': 'ok',
                'values': res
            },
                             ensure_ascii=False)
            req.write(res)
            return None

        elif req.params.get(
                'action') == "save":  # save selection for collection
            field = req.params.get('value')
            if field.strip() == "" or field.strip() == "off":
                if node.get('sortfield'):
                    node.removeAttribute('sortfield')
            else:
                node.set('sortfield', field)
            nodes_per_page = req.params.get('nodes_per_page')
            if nodes_per_page.strip() == "":
                if node.get('nodes_per_page'):
                    node.removeAttribute('nodes_per_page')
            else:
                node.set('nodes_per_page', nodes_per_page)
            req.write(json.dumps({'state': 'ok'}))
            db.session.commit()
        return None

    if node.isContainer():
        schemes = []
        dtypes = []

        item_count = []
        items = showdir(req, node, item_count=item_count)
        nav = shownav(req, node)
        v = {
            "operations": showoperations(req, node),
            "items": items,
            "nav": nav
        }
        if node.has_write_access():
            schemes = get_permitted_schemas()
            dtypes = getDatatypes(req, schemes)

        if "globalsort" in req.params:
            node.set("sortfield", req.params.get("globalsort"))
        if req.params.get("sortfield", "") != "":
            v['collection_sortfield'] = req.params.get("sortfield")
        else:
            v['collection_sortfield'] = node.get("sortfield")

        if req.params.get("nodes_per_page"):
            v['npp_field'] = req.params.get("nodes_per_page",
                                            default_edit_nodes_per_page)
        else:
            v['npp_field'] = node.get("nodes_per_page")
        if not v['npp_field']:
            v['npp_field'] = default_edit_nodes_per_page

        search_html = render_edit_search_box(node, lang(req), req, edit=True)
        searchmode = req.params.get("searchmode")
        navigation_height = searchbox_navlist_height(req, item_count)
        if not isinstance(node, (Root, Collections, Home)):
            sortchoices = _sort.get_sort_choices(container=node,
                                                 off="off",
                                                 t_off=t(req, "off"),
                                                 t_desc=t(req, "descending"))
        else:
            sortchoices = ()

        count = item_count[0] if item_count[0] == item_count[
            1] else "%d from %d" % (item_count[0], item_count[1])
        v['sortchoices'] = tuple(sortchoices)
        v['types'] = dtypes
        v['schemes'] = schemes
        v['id'] = ids[0]
        v['count'] = count
        v['language'] = lang(req)
        v['search'] = search_html
        v['navigation_height'] = navigation_height
        v['parent'] = node.id
        v['query'] = req.query.replace('id=', 'src=')
        searchparams = get_searchparams(req)
        searchparams = {
            k: unicode(v).encode("utf8")
            for k, v in searchparams.items()
        }
        v['searchparams'] = urllib.urlencode(searchparams)
        v['get_ids_from_query'] = get_ids_from_query
        v['edit_all_objects'] = t(lang(req),
                                  "edit_all_objects").format(item_count[1])
        v['t'] = t
        res = req.getTAL("web/edit/modules/content.html",
                         v,
                         macro="edit_content")
        delete_g_nodes_entry(req)
        return res
    if hasattr(node, "editContentDefault"):
        return node.editContentDefault(req)
    return ""
Example #4
0
def getContent(req, ids):
    class SortChoice:
        def __init__(self, label, value):
            self.label = label
            self.value = value

    def getSchemes(_req):
        return filter(lambda x: x.isActive(),
                      acl.AccessData(_req).filter(loadTypesFromDB()))

    def getDatatypes(_req, _schemes):
        _dtypes = []
        datatypes = loadAllDatatypes()
        for scheme in _schemes:
            for dtype in scheme.getDatatypes():
                if dtype not in _dtypes:
                    for _t in datatypes:
                        if _t.getName() == dtype and not elemInList(
                                dtypes, _t.getName()):
                            dtypes.append(_t)
        _dtypes.sort(lambda x, y: cmp(
            translate(x.getLongName(), request=_req).lower(),
            translate(y.getLongName(), request=req).lower()))
        return _dtypes

    node = tree.getNode(ids[0])

    if "action" in req.params:
        if req.params.get('action') == "resort":
            _dir = "up"
            field = req.params.get('value', '').strip()
            nl = list(node.getChildren())
            if field:
                if field[0] == "-":
                    field = field[1:]
                    _dir = "down"
                nl.sort(lambda x, y: cmp(
                    x.get(field).lower(),
                    y.get(field).lower()))
                if _dir == "down":
                    nl.reverse()
            req.write(
                json.dumps({
                    'state':
                    'ok',
                    'values':
                    showdir(req, node, nodes=nl, sortfield_from_req=field)
                }))
            return None

        elif req.params.get(
                'action') == "save":  # save selection for collection
            field = req.params.get('value')
            if field.strip() == "":
                node.removeAttribute('sortfield')
            else:
                node.set('sortfield', field)
            req.write(
                json.dumps({
                    'state':
                    'ok',
                    'message':
                    translate('edit_content_save_order', request=req)
                }))
        return None

    if node.isContainer():
        schemes = []
        dtypes = []

        v = {
            "operations": showoperations(req, node),
            "items": showdir(req, node)
        }
        access = acl.AccessData(req)
        if access.hasWriteAccess(node):
            schemes = getSchemes(req)
            dtypes = getDatatypes(req, schemes)

        col = node
        if "globalsort" in req.params:
            col.set("sortfield", req.params.get("globalsort"))
        v['collection_sortfield'] = col.get("sortfield")
        sortfields = [SortChoice(t(req, "off"), "")]
        if col.type not in ["root", "collections", "home"]:
            try:
                for ntype, num in col.getAllOccurences(
                        acl.AccessData(req)).items():
                    if ntype.getSortFields():
                        for sortfield in ntype.getSortFields():
                            sortfields += [
                                SortChoice(sortfield.getLabel(),
                                           sortfield.getName())
                            ]
                            sortfields += [
                                SortChoice(
                                    sortfield.getLabel() +
                                    t(req, "descending"),
                                    "-" + sortfield.getName())
                            ]
                        break
            except TypeError:
                pass
        v['sortchoices'] = sortfields
        v['types'] = dtypes
        v['schemes'] = schemes
        v['id'] = ids[0]
        v['count'] = len(node.getContentChildren())
        v['language'] = lang(req)
        v['t'] = t
        return req.getTAL("web/edit/modules/content.html",
                          v,
                          macro="edit_content")
    if hasattr(node, "editContentDefault"):
        return node.editContentDefault(req)
    return ""
Example #5
0
def getContent(req, ids):

    class SortChoice:
        def __init__(self, label, value):
            self.label = label
            self.value = value

    def getDatatypes(_req, _schemes):
        _dtypes = []
        datatypes = Data.get_all_datatypes()
        for scheme in _schemes:
            for dtype in scheme.getDatatypes():
                if dtype not in _dtypes:
                    for _t in datatypes:
#                         if _t.getName() == dtype and not elemInList(dtypes, _t.getName()):
                        dtypes.append(_t)
        _dtypes.sort(lambda x, y: cmp(translate(x.getLongName(), request=_req).lower(), translate(y.getLongName(), request=req).lower()))
        return _dtypes

    def get_ids_from_query():
        ids = get_ids_from_req(req)
        return ",".join(ids)

    node = q(Data).get(long(ids[0]))

    if "action" in req.params:
        if req.params.get('action') == "resort":
            field = req.params.get('value', '').strip()
            res = showdir(req, node, sortfield=field)
            res = json.dumps({'state': 'ok', 'values': res}, ensure_ascii=False)
            req.write(res)
            return None

        elif req.params.get('action') == "save":  # save selection for collection
            field = req.params.get('value')
            if field.strip() == "" or field.strip() == "off":
                if node.get('sortfield'):
                    node.removeAttribute('sortfield')
            else:
                node.set('sortfield', field)
            nodes_per_page = req.params.get('nodes_per_page')
            if nodes_per_page.strip() == "":
                if node.get('nodes_per_page'):
                    node.removeAttribute('nodes_per_page')
            else:
                node.set('nodes_per_page', nodes_per_page)
            req.write(json.dumps({'state': 'ok'}))
            db.session.commit()
        return None

    if node.isContainer():
        schemes = []
        dtypes = []

        item_count = []
        items = showdir(req, node, item_count=item_count)
        nav = shownav(req, node)
        v = {"operations": showoperations(req, node), "items": items, "nav": nav}
        if node.has_write_access():
            schemes = get_permitted_schemas()
            dtypes = getDatatypes(req, schemes)

        col = node
        if "globalsort" in req.params:
            col.set("sortfield", req.params.get("globalsort"))
        if req.params.get("sortfield", "") != "":
            v['collection_sortfield'] = req.params.get("sortfield")
        else:
            v['collection_sortfield'] = node.get("sortfield")
        if req.params.get("nodes_per_page"):
            v['npp_field'] = req.params.get("nodes_per_page", default_edit_nodes_per_page)
        else:
            v['npp_field'] = node.get("nodes_per_page")
        if not v['npp_field']:
            v['npp_field'] = default_edit_nodes_per_page
        sort_choices = [SortChoice(t(req, "off"), "off")]
        search_html = render_search_box(node, lang(req), req, edit=True)
        searchmode = req.params.get("searchmode")
        navigation_height = searchbox_navlist_height(req, item_count)
        if not isinstance(col, (Root, Collections, Home)):
            # for node in col.children:
            count = col.content_children_for_all_subcontainers.count()
            # the transformation of content_children_for_all_subcontainers in a list is very expensive if count is high
            # so try a limitation and if no sortfields found then increase limitation
            start_idx = 0
            end_idx = 10
            sortfields = None
            while start_idx < count:
                for node in col.content_children_for_all_subcontainers[start_idx:end_idx]:
                    # XXX: now without acl filtering, do we need this?
                    sortfields = node.getSortFields()
                    if sortfields:
                        for sortfield in sortfields:
                            sort_choices += [SortChoice(sortfield.getLabel(), sortfield.getName())]
                            sort_choices += [SortChoice(sortfield.getLabel() + t(req, "descending"), "-" + sortfield.getName())]
                        break
                if sortfields:
                    break
                start_idx = end_idx
                end_idx *= 10

        count = item_count[0] if item_count[0] == item_count[1] else "%d from %d" % (item_count[0], item_count[1])
        v['sortchoices'] = sort_choices
        v['npp_choices'] = [SortChoice(str(x), x) for x in edit_node_per_page_values]
        v['types'] = dtypes
        v['schemes'] = schemes
        v['id'] = ids[0]
        v['count'] = count
        v['language'] = lang(req)
        v['search'] = search_html
        v['navigation_height'] = navigation_height
        v['parent'] = col.id
        v['query'] = req.query.replace('id=','src=')
        searchparams = get_searchparams(req)
        searchparams = {k: unicode(v).encode("utf8") for k, v in searchparams.items()}
        v['searchparams'] = urllib.urlencode(searchparams)
        v['get_ids_from_query'] = get_ids_from_query
        v['edit_all_objects'] = t(lang(req), "edit_all_objects").format(item_count[1])
        v['t'] = t
        res = req.getTAL("web/edit/modules/content.html", v, macro="edit_content")
        delete_g_nodes_entry(req)
        return res
    if hasattr(node, "editContentDefault"):
        return node.editContentDefault(req)
    return ""
Example #6
0
def getContent(req, ids):
    class SortChoice:
        def __init__(self, label, value):
            self.label = label
            self.value = value

    def getDatatypes(_req, _schemes):
        _dtypes = []
        datatypes = Data.get_all_datatypes()
        for scheme in _schemes:
            for dtype in scheme.getDatatypes():
                if dtype not in _dtypes:
                    for _t in datatypes:
                        #                         if _t.getName() == dtype and not elemInList(dtypes, _t.getName()):
                        dtypes.append(_t)
        _dtypes.sort(lambda x, y: cmp(
            translate(x.getLongName(), request=_req).lower(),
            translate(y.getLongName(), request=req).lower()))
        return _dtypes

    def get_ids_from_query():
        ids = get_ids_from_req(req)
        return ",".join(ids)

    node = q(Data).get(long(ids[0]))

    if "action" in req.params:
        if req.params.get('action') == "resort":
            field = req.params.get('value', '').strip()
            res = showdir(req, node, sortfield=field)
            res = json.dumps({
                'state': 'ok',
                'values': res
            },
                             ensure_ascii=False)
            req.write(res)
            return None

        elif req.params.get(
                'action') == "save":  # save selection for collection
            field = req.params.get('value')
            if field.strip() == "" or field.strip() == "off":
                if node.get('sortfield'):
                    node.removeAttribute('sortfield')
            else:
                node.set('sortfield', field)
            nodes_per_page = req.params.get('nodes_per_page')
            if nodes_per_page.strip() == "":
                if node.get('nodes_per_page'):
                    node.removeAttribute('nodes_per_page')
            else:
                node.set('nodes_per_page', nodes_per_page)
            req.write(json.dumps({'state': 'ok'}))
            db.session.commit()
        return None

    if node.isContainer():
        schemes = []
        dtypes = []

        item_count = []
        items = showdir(req, node, item_count=item_count)
        nav = shownav(req, node)
        v = {
            "operations": showoperations(req, node),
            "items": items,
            "nav": nav
        }
        if node.has_write_access():
            schemes = get_permitted_schemas()
            dtypes = getDatatypes(req, schemes)

        col = node
        if "globalsort" in req.params:
            col.set("sortfield", req.params.get("globalsort"))
        if req.params.get("sortfield", "") != "":
            v['collection_sortfield'] = req.params.get("sortfield")
        else:
            v['collection_sortfield'] = node.get("sortfield")
        if req.params.get("nodes_per_page"):
            v['npp_field'] = req.params.get("nodes_per_page",
                                            default_edit_nodes_per_page)
        else:
            v['npp_field'] = node.get("nodes_per_page")
        if not v['npp_field']:
            v['npp_field'] = default_edit_nodes_per_page
        sort_choices = [SortChoice(t(req, "off"), "off")]
        search_html = render_search_box(node, lang(req), req, edit=True)
        searchmode = req.params.get("searchmode")
        navigation_height = searchbox_navlist_height(req, item_count)
        if not isinstance(col, (Root, Collections, Home)):
            # for node in col.children:
            count = col.content_children_for_all_subcontainers.count()
            # the transformation of content_children_for_all_subcontainers in a list is very expensive if count is high
            # so try a limitation and if no sortfields found then increase limitation
            start_idx = 0
            end_idx = 10
            sortfields = None
            while start_idx < count:
                for node in col.content_children_for_all_subcontainers[
                        start_idx:end_idx]:
                    # XXX: now without acl filtering, do we need this?
                    sortfields = node.getSortFields()
                    if sortfields:
                        for sortfield in sortfields:
                            sort_choices += [
                                SortChoice(sortfield.getLabel(),
                                           sortfield.getName())
                            ]
                            sort_choices += [
                                SortChoice(
                                    sortfield.getLabel() +
                                    t(req, "descending"),
                                    "-" + sortfield.getName())
                            ]
                        break
                if sortfields:
                    break
                start_idx = end_idx
                end_idx *= 10

        count = item_count[0] if item_count[0] == item_count[
            1] else "%d from %d" % (item_count[0], item_count[1])
        v['sortchoices'] = sort_choices
        v['npp_choices'] = [
            SortChoice(str(x), x) for x in edit_node_per_page_values
        ]
        v['types'] = dtypes
        v['schemes'] = schemes
        v['id'] = ids[0]
        v['count'] = count
        v['language'] = lang(req)
        v['search'] = search_html
        v['navigation_height'] = navigation_height
        v['parent'] = col.id
        v['query'] = req.query.replace('id=', 'src=')
        searchparams = get_searchparams(req)
        searchparams = {
            k: unicode(v).encode("utf8")
            for k, v in searchparams.items()
        }
        v['searchparams'] = urllib.urlencode(searchparams)
        v['get_ids_from_query'] = get_ids_from_query
        v['edit_all_objects'] = t(lang(req),
                                  "edit_all_objects").format(item_count[1])
        v['t'] = t
        res = req.getTAL("web/edit/modules/content.html",
                         v,
                         macro="edit_content")
        delete_g_nodes_entry(req)
        return res
    if hasattr(node, "editContentDefault"):
        return node.editContentDefault(req)
    return ""