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 ""
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:
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 ""
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 ""
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 ""
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 ""