def getSchemesforType(access, datatype): schemes = access.filter(loadTypesFromDB()) ret = [] for scheme in filter(lambda x: x.isActive(), schemes): if datatype in scheme.getDatatypes(): ret.append(scheme) return ret
def adduseropts(user): ret = [] dtypes = {} for scheme in filter(lambda x: x.isActive(), acl.AccessData(user=user).filter(loadTypesFromDB())): for dtype in scheme.getDatatypes(): if dtype not in dtypes.keys(): dtypes[dtype] = [] if scheme not in dtypes[dtype]: dtypes[dtype].append(scheme) i = [x.getLongName() for x in dtypes["image"]] i.sort() field = tree.Node("ftp.type_image", "metafield") field.set("label", "ftp_image_schema") field.set("type", "list") field.set("valuelist", "\r\n".join(i)) ret.append(field) d = [x.getLongName() for x in dtypes["document"]] d.sort() field = tree.Node("ftp.type_document", "metafield") field.set("label", "ftp_document_schema") field.set("type", "list") field.set("valuelist", "\r\n".join(d)) ret.append(field) return ret
def _makeMetadataNumbers(): print "Making Metadatafield-Index" import schema.schema as schema m = schema.loadTypesFromDB() for metatype in m: for field in metatype.getMetaFields(): if field.getFieldtype() in ["list", "mlist"] and field.Searchfield(): # print metatype.getName(),"->",field.getName() nstr = "" for v in field.getValueList(): v = UTF8ToLatin(v) num = 0 for collection in tree.getRoot("collections").getChildren(): if collection.type == "collection": try: query = "%s=%s and schema=%s" % (field.getName(), v, metatype.getName()) n = len(collection.search(query)) except: n = 0 num += n # print "\t", collection.name, field.getName(), v,"->",n if len(nstr): nstr += ";" nstr += str(num) field.setFieldValueNum(nstr)
def _makeMetadataNumbers(): print "Making Metadatafield-Index" import schema.schema as schema m = schema.loadTypesFromDB() for metatype in m: for field in metatype.getMetaFields(): if field.getFieldtype() in ["list", "mlist" ] and field.Searchfield(): # print metatype.getName(),"->",field.getName() nstr = "" for v in field.getValueList(): v = UTF8ToLatin(v) num = 0 for collection in tree.getRoot( "collections").getChildren(): if collection.type == "collection": try: query = "%s=%s and schema=%s" % ( field.getName(), v, metatype.getName()) n = len(collection.search(query)) except: n = 0 num += n # print "\t", collection.name, field.getName(), v,"->",n if len(nstr): nstr += ";" nstr += str(num) field.setFieldValueNum(nstr)
def adduseropts(user): ret = [] dtypes = {} for scheme in filter(lambda x: x.isActive(), acl.AccessData(user=user).filter(loadTypesFromDB())): for dtype in scheme.getDatatypes(): if dtype not in dtypes.keys(): dtypes[dtype] = [] if scheme not in dtypes[dtype]: dtypes[dtype].append(scheme) i = [x.getLongName() for x in dtypes['image']] i.sort() field = tree.Node("ftp.type_image", "metafield") field.set("label", "ftp_image_schema") field.set("type", "list") field.set("valuelist", "\r\n".join(i)) ret.append(field) d = [x.getLongName() for x in dtypes['document']] d.sort() field = tree.Node("ftp.type_document", "metafield") field.set("label", "ftp_document_schema") field.set("type", "list") field.set("valuelist", "\r\n".join(d)) ret.append(field) return ret
def getSchemas(self): schemas = filter(lambda x: x.isActive(), loadTypesFromDB()) schemalist = {} for user in self.getChildren(): try: for schema in AccessData(user=user).filter(schemas): schemalist[schema.getName()] = "." except: pass schemalist = sorted(schemalist.keys()) return schemalist
def getSchemes(req): schemes = AccessData(req).filter(loadTypesFromDB()) return filter(lambda x: x.isActive(), schemes)
def getContent(req, ids): user = users.getUserFromRequest(req) node = tree.getNode(ids[0]) access = AccessData(req) if not access.hasWriteAccess( node) or "searchmask" in users.getHideMenusForUser(user): req.setStatus(httpstatus.HTTP_FORBIDDEN) return req.getTAL("web/edit/edit.html", {}, macro="access_error") p2 = {} for k, v in req.params.items(): if k.endswith(".x") or k.endswith(".y"): p2[k[:-2]] = v else: p2[k] = v req.params = p2 openfield = None delfield = None delsubfield = None for k, v in req.params.items(): if k.startswith("open_"): openfield = k[5:] if k.startswith("del_"): delfield = k[4:] if k.startswith("delsub_"): delsubfield = k[7:] try: root = tree.getRoot("searchmasks") except tree.NoSuchNodeError: root = tree.Node("searchmasks", type="searchmasks") tree.getRoot().addChild(root) searchtype = req.params.get("searchtype", None) if not searchtype: searchtype = node.get("searchtype") if not searchtype: searchtype = "none" # if a parent has a search mask, use 'inherit' n = node while len(n.getParents()): n = n.getParents()[0] if n.get("searchtype") == "own": searchtype = "parent" node.set("searchtype", searchtype) try: myschema = tree.getNode(req.params.get("schema", None)) except tree.NoSuchNodeError: if req.params.get("schema", None) and req.params.get("schema").endswith(";"): myschema = tree.getNode(req.params.get("schema")[:-1]) else: myschema = None try: schemafield = tree.getNode(req.params.get("schemafield", None)) except tree.NoSuchNodeError: if req.params.get( "schemafield", None) and req.params.get("schemafield").endswith(";"): schemafield = tree.getNode(req.params.get("schemafield")[:-1]) else: schemafield = None if myschema and schemafield and schemafield not in myschema.getChildren(): schemafield = None if schemafield and schemafield.type != "metafield": schemafield = None fields = None selectedfield = None isnewfield = False createsub = False closefield = False if searchtype == "own": maskname = node.get("searchmaskname") if not maskname or root.hasChild(maskname) == 0: mask = searchmask.generateMask(node) else: mask = root.getChild(maskname) selectedfieldid = req.params.get("selectedfield", None) if selectedfieldid: # edit selectedfield = tree.getNode(selectedfieldid) assert selectedfield in mask.getChildren() selectedfield.setName(req.params["fieldname"]) if "createsub" in req.params and schemafield: createsub = True selectedfield.addChild(schemafield) if delsubfield: selectedfield.removeChild(tree.getNode(delsubfield)) if req.params.get("isnewfield", "") == "yes": # create a new field isnewfield = True l = mask.getNumChildren() mask.addChild(tree.Node("Suchfeld %s" % l, type="searchmaskitem")) elif delfield: # del a field delfield = tree.getNode(delfield) assert delfield in mask.getChildren() mask.removeChild(delfield) elif openfield: # unfold a new field selectedfieldid = openfield elif "close" in req.params: # fold a field closefield = True selectedfieldid = None if selectedfieldid: selectedfield = tree.getNode(selectedfieldid) if selectedfield not in mask.getChildren( ): # this usually happens if the field was just deleted selectedfield = None else: selectedfield = None if mask is None: print "no parent searchmask found, empty mask created" mask = tree.Node(name=maskname, type="searchmask") fields = mask.getChildren() data = { "idstr": ",".join(ids), "node": node, "searchtype": searchtype, "schemas": schema.loadTypesFromDB(), "searchfields": fields, "selectedfield": selectedfield, "newfieldlink": "edit_content?id=%s&tab=searchmask" % node.id, "defaultschemaid": None, "defaultfieldid": None, "id": req.params.get("id") } if myschema: data["defaultschemaid"] = myschema.id if schemafield: data["defaultfieldid"] = schemafield.id data["schema"] = myschema def display(schemafield): if not schemafield or schemafield.type != 'metafield': return 0 if not schemafield.Searchfield(): return 0 if schemafield.get('type') == 'union': return 0 return 1 data["display"] = display searchtypechanged = False if req.params.get("searchtypechanged", "") == "true": searchtypechanged = True if any([ openfield, isnewfield, delfield, delsubfield, createsub, myschema, searchtypechanged, closefield ]): content = req.getTAL("web/edit/modules/searchmask.html", data, macro="edit_search") s = json.dumps({'content': content}) req.write(s) return None return req.getTAL("web/edit/modules/searchmask.html", data, macro="edit_search")
def getContent(req, ids): user = users.getUserFromRequest(req) if "ftp" in users.getHideMenusForUser(user): req.setStatus(httpstatus.HTTP_FORBIDDEN) return req.getTAL("web/edit/edit.html", {}, macro="access_error") ids = ids[0] # use only first selected node node = tree.getNode(ids) error = "" def processFile(node, file, ftype): nname = file.retrieveFile().split("/") nname = "/".join(nname[:-1]) + "/" + nname[-1][4:] try: os.rename(file.retrieveFile(), nname) except: nname = file.retrieveFile() fnode = tree.Node(nname.split("/")[-1], ftype) node.removeFile(file) file._path = file._path.replace(config.get("paths.datadir"), "") file._path = "/".join(file._path.split("/")[:-1]) + "/" + fnode.getName() fnode.addFile(file) fnode.event_files_changed() node.addChild(fnode) return fnode for key in req.params.keys(): if key.startswith("process|"): # process selected file (single) fname = key[:-2].split("|")[-1] ftype = req.params.get("schema").replace(";", "") if ftype != "": for f in node.getFiles(): if f.getName() == fname: processFile(node, f, ftype) break break else: error = "edit_ftp_error1" elif key.startswith("del|"): for f in node.getFiles(): if f.getName() == key[4:-2]: node.removeFile(f) break break elif key.startswith("delall"): # delete all selected files delfiles = [f.split("|")[-1] for f in req.params.get("selfiles").split(";")] for f in node.getFiles(): if f.getName() in delfiles: node.removeFile(f) break elif key.startswith("processall"): # process all selected files for file in req.params.get("selfiles", "").split(";"): if file: ftype, fname = file.split("|") if "multschema|" + ftype in req.params and req.params.get("multschema|" + ftype) != "": for f in node.getFiles(): if f.getName() == fname: print "use", ftype + "/" + req.params.get("multschema|" + ftype) processFile(node, f, ftype + "/" + req.params.get("multschema|" + ftype)) break else: error = "edit_ftp_error2" break break files = filter(lambda x: x.getName().startswith("ftp_"), node.getFiles()) types = [] for f in files: if f.getType() not in types: if f.getType() != "other": types.append(f.getType()) dtypes = {} for scheme in filter(lambda x: x.isActive(), acl.AccessData(req).filter(loadTypesFromDB())): for dtype in scheme.getDatatypes(): if dtype not in dtypes.keys(): dtypes[dtype] = [] if scheme not in dtypes[dtype]: dtypes[dtype].append(scheme) for t in dtypes: dtypes[t].sort( lambda x, y: cmp( translate(x.getLongName(), request=req).lower(), translate(y.getLongName(), request=req).lower() ) ) access = acl.AccessData(req) if not access.hasWriteAccess(node): req.setStatus(httpstatus.HTTP_FORBIDDEN) return req.getTAL("web/edit/edit.html", {}, macro="access_error") v = {} v["error"] = error v["files"] = files v["node"] = node v["schemes"] = dtypes # schemes v["usedtypes"] = types v["tab"] = req.params.get("tab", "") v["ids"] = ids v["script"] = "<script> parent.reloadTree('" + req.params.get("id") + "');</script>" return req.getTAL("web/edit/modules/ftp.html", v, macro="edit_ftp")
def getContent(req, ids): user = users.getUserFromRequest(req) node = tree.getNode(ids[0]) access = AccessData(req) if not access.hasWriteAccess(node) or "searchmask" in users.getHideMenusForUser(user): req.setStatus(httpstatus.HTTP_FORBIDDEN) return req.getTAL("web/edit/edit.html", {}, macro="access_error") p2 = {} for k, v in req.params.items(): if k.endswith(".x") or k.endswith(".y"): p2[k[:-2]] = v else: p2[k] = v req.params = p2 openfield = None delfield = None delsubfield = None for k, v in req.params.items(): if k.startswith("open_"): openfield = k[5:] if k.startswith("del_"): delfield = k[4:] if k.startswith("delsub_"): delsubfield = k[7:] try: root = tree.getRoot("searchmasks") except tree.NoSuchNodeError: root = tree.Node("searchmasks", type="searchmasks") tree.getRoot().addChild(root) searchtype = req.params.get("searchtype", None) if not searchtype: searchtype = node.get("searchtype") if not searchtype: searchtype = "none" # if a parent has a search mask, use 'inherit' n = node while len(n.getParents()): n = n.getParents()[0] if n.get("searchtype") == "own": searchtype = "parent" node.set("searchtype", searchtype) try: myschema = tree.getNode(req.params.get("schema", None)) except tree.NoSuchNodeError: if req.params.get("schema", None) and req.params.get("schema").endswith(";"): myschema = tree.getNode(req.params.get("schema")[:-1]) else: myschema = None try: schemafield = tree.getNode(req.params.get("schemafield", None)) except tree.NoSuchNodeError: if req.params.get("schemafield", None) and req.params.get("schemafield").endswith(";"): schemafield = tree.getNode(req.params.get("schemafield")[:-1]) else: schemafield = None if myschema and schemafield and schemafield not in myschema.getChildren(): schemafield = None if schemafield and schemafield.type != "metafield": schemafield = None fields = None selectedfield = None isnewfield = False createsub = False closefield = False if searchtype == "own": maskname = node.get("searchmaskname") if not maskname or root.hasChild(maskname) == 0: mask = searchmask.generateMask(node) else: mask = root.getChild(maskname) selectedfieldid = req.params.get("selectedfield", None) if selectedfieldid: # edit selectedfield = tree.getNode(selectedfieldid) assert selectedfield in mask.getChildren() selectedfield.setName(req.params["fieldname"]) if "createsub" in req.params and schemafield: createsub = True selectedfield.addChild(schemafield) if delsubfield: selectedfield.removeChild(tree.getNode(delsubfield)) if req.params.get("isnewfield", "") == "yes": # create a new field isnewfield = True l = mask.getNumChildren() mask.addChild(tree.Node("Suchfeld %s" % l, type="searchmaskitem")) elif delfield: # del a field delfield = tree.getNode(delfield) assert delfield in mask.getChildren() mask.removeChild(delfield) elif openfield: # unfold a new field selectedfieldid = openfield elif "close" in req.params: # fold a field closefield = True selectedfieldid = None if selectedfieldid: selectedfield = tree.getNode(selectedfieldid) if selectedfield not in mask.getChildren(): # this usually happens if the field was just deleted selectedfield = None else: selectedfield = None if mask is None: print "no parent searchmask found, empty mask created" mask = tree.Node(name=maskname, type="searchmask") fields = mask.getChildren() data = {"idstr": ",".join(ids), "node": node, "searchtype": searchtype, "schemas": schema.loadTypesFromDB(), "searchfields": fields, "selectedfield": selectedfield, "newfieldlink": "edit_content?id=%s&tab=searchmask" % node.id, "defaultschemaid": None, "defaultfieldid": None, "id": req.params.get("id")} if myschema: data["defaultschemaid"] = myschema.id if schemafield: data["defaultfieldid"] = schemafield.id data["schema"] = myschema def display(schemafield): if not schemafield or schemafield.type != 'metafield': return 0 if not schemafield.Searchfield(): return 0 if schemafield.get('type') == 'union': return 0 return 1 data["display"] = display searchtypechanged = False if req.params.get("searchtypechanged", "") == "true": searchtypechanged = True if any([openfield, isnewfield, delfield, delsubfield, createsub, myschema, searchtypechanged, closefield]): content = req.getTAL("web/edit/modules/searchmask.html", data, macro="edit_search") s = json.dumps({'content': content}) req.write(s) return None return req.getTAL("web/edit/modules/searchmask.html", data, macro="edit_search")
def getContent(req, ids): user = users.getUserFromRequest(req) node = tree.getNode(ids[0]) access = acl.AccessData(req) if not access.hasWriteAccess(node) or "changeschema" in users.getHideMenusForUser(user): req.setStatus(httpstatus.HTTP_FORBIDDEN) return req.getTAL("web/edit/edit.html", {}, macro="access_error") error = req.params.get("error") currentContentType = node.getContentType() try: currentSchema = node.type.split("/")[1] # string except: currentSchema = "" currentCategoryName = node.getCategoryName() currentTypeAlias = node.getTypeAlias() schemes = AccessData(req).filter(loadTypesFromDB()) _schemes = [] for scheme in schemes: if scheme.isActive(): _schemes.append(scheme) schemes = _schemes schemeNames2LongNames = {"": ""} for s in schemes: schemeNames2LongNames[s.getName()] = s.getLongName() try: currentSchemaLongName = schemeNames2LongNames[currentSchema] except KeyError: currentSchemaLongName = "" # find out which schema allows which datatype, and hence, # which overall data types we should display 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() ) ) admissible_objtypes = getTypes(datatypes) admissible_datatypes = [ n for n in admissible_objtypes if tree.Node("", n.name).getCategoryName() in ["document", "image", "video", "audio"] ] admissible_containers = [n for n in admissible_objtypes if tree.Node("", n.name).getCategoryName() in ["container"]] admissible_objtypes.sort( lambda x, y: cmp( translate(x.getLongName(), request=req).lower(), translate(y.getLongName(), request=req).lower() ) ) admissible_datatypes.sort( lambda x, y: cmp( translate(x.getLongName(), request=req).lower(), translate(y.getLongName(), request=req).lower() ) ) admissible_containers.sort( lambda x, y: cmp( translate(x.getLongName(), request=req).lower(), translate(y.getLongName(), request=req).lower() ) ) available_schemes = [s for s in schemes if currentContentType in s.getDatatypes()] # filter schemes for special datatypes if req.params.get("objtype", "") != "": _schemes = [] for scheme in schemes: if req.params.get("objtype", "") in scheme.getDatatypes(): _schemes.append(scheme) schemes = _schemes schemes.sort( lambda x, y: cmp( translate(x.getLongName(), request=req).lower(), translate(y.getLongName(), request=req).lower() ) ) newObjectType = req.params.get("objtype") newSchema = req.params.get("schema") if not newSchema: newSchema = "" newType = newObjectType if newSchema: newType += "/" + newSchema oldType = currentContentType if currentSchema: oldType = oldType + "/" + currentSchema if newType != oldType: node.setTypeName(newType) msg = "%s changed node schema for node %s '%s' from '%s' to '%s'" % ( user.name, node.id, node.name, oldType, newType, ) logger.info(msg) logging.getLogger("usertracing").info(msg) node.setDirty() # cache clean / reload because object type changed tree.remove_from_nodecaches(node) node = tree.getNode(node.id) currentContentType = node.getContentType() currentSchema = newSchema currentSchemaLongName = schemeNames2LongNames[currentSchema] currentCategoryName = node.getCategoryName() currentTypeAlias = node.getTypeAlias() available_schemes = [s for s in schemes if newObjectType in s.getDatatypes()] isContainer = False if hasattr(node, "isContainer"): isContainer = node.isContainer() if "action" in req.params.keys(): if req.params.get("action").startswith("get_schemes_for_"): newObjectType = req.params.get("action").replace("get_schemes_for_", "") available_schemes = [s for s in schemes if newObjectType in s.getDatatypes()] req.writeTAL( "web/edit/modules/changeschema.html", {"schemes": available_schemes, "currentSchema": currentSchema}, macro="changeschema_selectscheme", ) return "" containers = getContainers(datatypes) d = {"id": req.params.get("id"), "error": error, "node": node} d["currentContentType"] = currentContentType d["currentSchema"] = currentSchema d["currentSchemaLongName"] = currentSchemaLongName d["currentCategoryName"] = currentCategoryName d["currentTypeAlias"] = currentTypeAlias d["isContainer"] = int(isContainer) d["nodes"] = [node] if currentContentType in [dtype.name for dtype in containers]: d["schemes"] = [] d["datatypes"] = admissible_containers # containers else: d["schemes"] = available_schemes d["datatypes"] = admissible_datatypes # dtypes return req.getTAL("web/edit/modules/changeschema.html", d, macro="changeschema_popup")
def getDatatypes(req): dtypes = [] for scheme in AccessData(req).filter(loadTypesFromDB()): dtypes += scheme.getDatatypes() return set(dtypes)
def getSchemes(_req): return filter(lambda x: x.isActive(), acl.AccessData(_req).filter(loadTypesFromDB()))
def getContent(req, ids): user = users.getUserFromRequest(req) node = tree.getNode(ids[0]) access = acl.AccessData(req) if not access.hasWriteAccess( node) or "changeschema" in users.getHideMenusForUser(user): req.setStatus(httpstatus.HTTP_FORBIDDEN) return req.getTAL("web/edit/edit.html", {}, macro="access_error") error = req.params.get("error") currentContentType = node.getContentType() try: currentSchema = node.type.split('/')[1] # string except: currentSchema = '' currentCategoryName = node.getCategoryName() currentTypeAlias = node.getTypeAlias() schemes = AccessData(req).filter(loadTypesFromDB()) _schemes = [] for scheme in schemes: if scheme.isActive(): _schemes.append(scheme) schemes = _schemes schemeNames2LongNames = {'': ''} for s in schemes: schemeNames2LongNames[s.getName()] = s.getLongName() try: currentSchemaLongName = schemeNames2LongNames[currentSchema] except KeyError: currentSchemaLongName = '' # find out which schema allows which datatype, and hence, # which overall data types we should display 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())) admissible_objtypes = getTypes(datatypes) admissible_datatypes = [ n for n in admissible_objtypes if tree.Node('', n.name).getCategoryName() in ['document', 'image', 'video', 'audio'] ] admissible_containers = [ n for n in admissible_objtypes if tree.Node('', n.name).getCategoryName() in ['container'] ] admissible_objtypes.sort(lambda x, y: cmp( translate(x.getLongName(), request=req).lower(), translate(y.getLongName(), request=req).lower())) admissible_datatypes.sort(lambda x, y: cmp( translate(x.getLongName(), request=req).lower(), translate(y.getLongName(), request=req).lower())) admissible_containers.sort(lambda x, y: cmp( translate(x.getLongName(), request=req).lower(), translate(y.getLongName(), request=req).lower())) available_schemes = [ s for s in schemes if currentContentType in s.getDatatypes() ] # filter schemes for special datatypes if req.params.get("objtype", "") != "": _schemes = [] for scheme in schemes: if req.params.get("objtype", "") in scheme.getDatatypes(): _schemes.append(scheme) schemes = _schemes schemes.sort(lambda x, y: cmp( translate(x.getLongName(), request=req).lower(), translate(y.getLongName(), request=req).lower())) newObjectType = req.params.get("objtype") newSchema = req.params.get("schema") if not newSchema: newSchema = '' newType = newObjectType if newSchema: newType += '/' + newSchema oldType = currentContentType if currentSchema: oldType = oldType + '/' + currentSchema if newType != oldType: node.setTypeName(newType) msg = "%s changed node schema for node %s '%s' from '%s' to '%s'" % ( user.name, node.id, node.name, oldType, newType) logger.info(msg) logging.getLogger('usertracing').info(msg) node.setDirty() # cache clean / reload because object type changed tree.remove_from_nodecaches(node) node = tree.getNode(node.id) currentContentType = node.getContentType() currentSchema = newSchema currentSchemaLongName = schemeNames2LongNames[currentSchema] currentCategoryName = node.getCategoryName() currentTypeAlias = node.getTypeAlias() available_schemes = [ s for s in schemes if newObjectType in s.getDatatypes() ] isContainer = False if hasattr(node, "isContainer"): isContainer = node.isContainer() if "action" in req.params.keys(): if req.params.get("action").startswith("get_schemes_for_"): newObjectType = req.params.get("action").replace( "get_schemes_for_", "") available_schemes = [ s for s in schemes if newObjectType in s.getDatatypes() ] req.writeTAL("web/edit/modules/changeschema.html", { 'schemes': available_schemes, 'currentSchema': currentSchema }, macro="changeschema_selectscheme") return "" containers = getContainers(datatypes) d = {"id": req.params.get("id"), "error": error, "node": node} d['currentContentType'] = currentContentType d['currentSchema'] = currentSchema d['currentSchemaLongName'] = currentSchemaLongName d['currentCategoryName'] = currentCategoryName d['currentTypeAlias'] = currentTypeAlias d['isContainer'] = int(isContainer) d['nodes'] = [node] if currentContentType in [dtype.name for dtype in containers]: d['schemes'] = [] d['datatypes'] = admissible_containers # containers else: d['schemes'] = available_schemes d['datatypes'] = admissible_datatypes # dtypes return req.getTAL("web/edit/modules/changeschema.html", d, macro="changeschema_popup")
def getContent(req, ids): user = users.getUserFromRequest(req) if "ftp" in users.getHideMenusForUser(user): req.setStatus(httpstatus.HTTP_FORBIDDEN) return req.getTAL("web/edit/edit.html", {}, macro="access_error") ids = ids[0] # use only first selected node node = tree.getNode(ids) error = "" def processFile(node, file, ftype): nname = file.retrieveFile().split("/") nname = "/".join(nname[:-1]) + "/" + nname[-1][4:] try: os.rename(file.retrieveFile(), nname) except: nname = file.retrieveFile() fnode = tree.Node(nname.split("/")[-1], ftype) node.removeFile(file) file._path = file._path.replace(config.get("paths.datadir"), "") file._path = "/".join( file._path.split("/")[:-1]) + "/" + fnode.getName() fnode.addFile(file) fnode.event_files_changed() node.addChild(fnode) return fnode for key in req.params.keys(): if key.startswith("process|"): # process selected file (single) fname = key[:-2].split("|")[-1] ftype = req.params.get("schema").replace(";", "") if ftype != "": for f in node.getFiles(): if f.getName() == fname: processFile(node, f, ftype) break break else: error = "edit_ftp_error1" elif key.startswith("del|"): for f in node.getFiles(): if f.getName() == key[4:-2]: node.removeFile(f) break break elif key.startswith("delall"): # delete all selected files delfiles = [ f.split("|")[-1] for f in req.params.get("selfiles").split(";") ] for f in node.getFiles(): if f.getName() in delfiles: node.removeFile(f) break elif key.startswith("processall"): # process all selected files for file in req.params.get("selfiles", "").split(";"): if file: ftype, fname = file.split("|") if "multschema|" + ftype in req.params and req.params.get( "multschema|" + ftype) != "": for f in node.getFiles(): if f.getName() == fname: print "use", ftype + "/" + req.params.get( "multschema|" + ftype) processFile( node, f, ftype + "/" + req.params.get("multschema|" + ftype)) break else: error = "edit_ftp_error2" break break files = filter(lambda x: x.getName().startswith("ftp_"), node.getFiles()) types = [] for f in files: if f.getType() not in types: if f.getType() != "other": types.append(f.getType()) dtypes = {} for scheme in filter(lambda x: x.isActive(), acl.AccessData(req).filter(loadTypesFromDB())): for dtype in scheme.getDatatypes(): if dtype not in dtypes.keys(): dtypes[dtype] = [] if scheme not in dtypes[dtype]: dtypes[dtype].append(scheme) for t in dtypes: dtypes[t].sort(lambda x, y: cmp( translate(x.getLongName(), request=req).lower(), translate(y.getLongName(), request=req).lower())) access = acl.AccessData(req) if not access.hasWriteAccess(node): req.setStatus(httpstatus.HTTP_FORBIDDEN) return req.getTAL("web/edit/edit.html", {}, macro="access_error") v = {} v['error'] = error v['files'] = files v['node'] = node v['schemes'] = dtypes # schemes v['usedtypes'] = types v['tab'] = req.params.get("tab", "") v['ids'] = ids v["script"] = "<script> parent.reloadTree('" + req.params.get( "id") + "');</script>" return req.getTAL("web/edit/modules/ftp.html", v, macro="edit_ftp")
def view(req): mtypes = loadTypesFromDB() actfilter = getFilter(req) # filter if actfilter != "": if actfilter in ("all", "*", t(lang(req), "admin_filter_all")): None # all users elif actfilter == "0-9": num = re.compile(r'([0-9])') if req.params.get("filtertype", "") == "id": mtypes = filter(lambda x: num.match(x.getName()), mtypes) else: mtypes = filter(lambda x: num.match(x.getLongName()), mtypes) elif actfilter == "else" or actfilter == t(lang(req), "admin_filter_else"): all = re.compile(r'([a-z]|[A-Z]|[0-9]|\.)') if req.params.get("filtertype", "") == "id": mtypes = filter(lambda x: not all.match(x.getName()), mtypes) else: mtypes = filter(lambda x: not all.match(x.getLongName()), mtypes) else: if req.params.get("filtertype", "") == "id": mtypes = filter(lambda x: x.getName().lower().startswith(actfilter), mtypes) else: mtypes = filter(lambda x: x.getLongName().lower().startswith(actfilter), mtypes) pages = Overview(req, mtypes) order = getSortCol(req) # sorting if order != "": if int(order[0:1]) == 0: mtypes.sort(lambda x, y: cmp(x.getName().lower(), y.getName().lower())) elif int(order[0:1]) == 1: mtypes.sort(lambda x, y: cmp(x.getLongName().lower(), y.getLongName().lower())) elif int(order[0:1]) == 2: mtypes.sort(lambda x, y: cmp(x.getDescription().lower(), y.getDescription().lower())) elif int(order[0:1]) == 3: mtypes.sort(lambda x, y: cmp(x.getActive(), y.getActive())) elif int(order[0:1]) == 4: mtypes.sort(lambda x, y: cmp(x.getDatatypeString().lower(), y.getDatatypeString().lower())) elif int(order[0:1]) == 5: mtypes.sort(lambda x, y: cmp(x.metadatatype.getAccess("read"), y.metadatatype.getAccess("read"))) elif int(order[0:1]) == 6: mtypes.sort(lambda x, y: cmp(x.searchIndexCorrupt(), y.searchIndexCorrupt())) elif int(order[0:1]) == 7: mtypes.sort(lambda x, y: cmp(len(x.getAllItems()), len(y.getAllItems()))) if int(order[1:]) == 1: mtypes.reverse() else: mtypes.sort(lambda x, y: cmp(x.getName().lower(), y.getName().lower())) v = getAdminStdVars(req) v["sortcol"] = pages.OrderColHeader( [ t( lang(req), "admin_meta_col_1"), t( lang(req), "admin_meta_col_2"), t( lang(req), "admin_meta_col_3"), t( lang(req), "admin_meta_col_4"), t( lang(req), "admin_meta_col_5"), t( lang(req), "admin_meta_col_6")]) v["metadatatypes"] = mtypes v["datatypes"] = loadAllDatatypes() v["datatypes"].sort(lambda x, y: cmp(t(lang(req), x.getLongName()), t(lang(req), y.getLongName()))) v["pages"] = pages v["actfilter"] = actfilter v["filterattrs"] = [("id", "admin_metatype_filter_id"), ("name", "admin_metatype_filter_name")] v["filterarg"] = req.params.get("filtertype", "id") return req.getTAL("web/admin/modules/metatype.html", v, macro="view_type")