def _prepareData(self, req): access = acl.AccessData(req) mask = self.getFullView(lang(req)) obj = {'deleted': False, 'access': access} node = self if self.get('deleted') == 'true': node = self.getActiveVersion() obj['deleted'] = True if mask: obj['metadata'] = mask.getViewHTML([node], VIEW_HIDE_EMPTY, lang(req), mask=mask) # hide empty elements else: obj['metadata'] = [] obj['node'] = node obj['path'] = req and req.params.get("path", "") or "" obj['audiothumb'] = '/thumb2/{}'.format(node.id) if node.has_object(): obj['canseeoriginal'] = access.hasAccess(node, "data") obj['audiolink'] = '/file/{}/{}'.format(node.id, node.getName()) obj['audiodownload'] = '/download/{}/{}'.format(node.id, node.getName()) else: obj['canseeoriginal'] = False obj['parentInformation'] = self.getParentInformation(req) return obj
def _prepareData(self, req, words=""): access = acl.AccessData(req) mask = self.getFullView(lang(req)) obj = {'deleted': False, 'access': access} node = self if self.get('deleted') == 'true': node = self.getActiveVersion() obj['deleted'] = True for filenode in node.getFiles(): if filenode.getType() in ["original", "video"]: obj["file"] = "/file/%s/%s" % (node.id, filenode.getName()) break if mask: obj['metadata'] = mask.getViewHTML([node], VIEW_HIDE_EMPTY, lang(req), mask=mask) # hide empty elements else: obj['metadata'] = [] obj['node'] = node obj['path'] = req.params.get("path", "") obj['canseeoriginal'] = access.hasAccess(node, "data") obj['parentInformation'] = self.getParentInformation(req) return obj
def show_workflow_node(self, node, req): print req.params if self.getAccess('data') != self.getAccess('write'): # set access for download same as edit (only once needed) self.setAccess('data', self.getAccess('write')) if "gotrue" in req.params: return self.forwardAndShow(node, True, req) elif "gofalse" in req.params: return self.forwardAndShow(node, False, req) if self.getTrueLabel(language=node.get("system.wflanguage")) == "" and self.getFalseLabel( language=node.get("system.wflanguage")) == "": buttons = [] else: buttons = self.tableRowButtons(node) try: mask = getMetaType(node.type).getMask(self.get("mask_fileatt")) maskdata = mask.getViewHTML([node], VIEW_HIDE_EMPTY, language=lang(req)) except: maskdata = "" return req.getTAL("workflow/fileattachment.html", {"buttons": buttons, "files": self.getFiles(), "wfnode": self, "pretext": self.getPreText(lang(req)), "posttext": self.getPostText(lang(req)), "sidebar": self.getSidebarText(lang(req)), 'maskdata': maskdata}, macro="fileattachment_show_node")
def show_workflow_step(self, req): access = acl.AccessData(req) if not access.hasWriteAccess(self): return "<i>" + t(lang(req), "permission_denied") + "</i>" c = [] for item in self.getChildren(): c.append( { "id": str(item.id), "creationtime": date.format_date(date.parse_date(item.get("creationtime")), "dd.mm.yyyy HH:MM:SS"), "name": item.getName(), } ) c.sort(lambda x, y: cmp(x["name"], y["name"])) return req.getTAL( "workflow/workflow.html", { "children": c, "workflow": self.getParents()[0], "step": self, "nodelink": "/mask?id=" + self.id + "&obj=", "currentlang": lang(req), }, macro="workflow_show", )
def getHelp(req): global menustructure, items, paths, all_paths, index v = {'user': getUserFromRequest(req)} if "language_change" in req.params: # change language req.session["language"] = req.params.get('language_change') language = translation.lang(req) if "edit.x" in req.params: # edit content print "edit page" if "refresh.x" in req.params: # refresh content menustructure = [] index = {} items = {} paths = {} all_paths = {} initHelp() if req.path[-1] == "/": req.path = req.path[:-1] if re.sub('^\.', '', req.path.replace("/", ".")) in all_paths: pathlangs = all_paths[re.sub('^\.', '', req.path.replace("/", "."))] if language not in pathlangs: content = getHelpFileContent(req.path, pathlangs[0]) else: content = getHelpFileContent(req.path, language) else: # page not found 404 req.setStatus(httpstatus.HTTP_NOT_FOUND) content = req.getTAL(theme.getTemplate("help.html"), {}, macro='notfound') if "export" in req.params: if req.params.get('export') == "pdf": print "deliver pdf" req.reply_headers['Content-Type'] = "application/pdf; charset=utf-8" content = content.replace('"/help/', '"http://' + config.get('host.name') + '/help/') req.write(buildHelpPDF(req.params.get('url'), language)) return if language not in menustructure: menustructure.append(language) for path in all_paths: addExtItem(language, path, items[language]) v['content'] = content v['languages'] = config.get('i18n.languages').split(',') v['curlang'] = translation.lang(req) v['items'] = items[translation.lang(req)] v['path'] = req.path.split("/")[1:] v['url'] = req.path v['indexvalues'] = index[language] indexchars = sorted(set([i[0].upper() for i in index[language].keys()])) v['indexchars'] = indexchars req.writeTAL(theme.getTemplate("help.html"), v, macro='help')
def WorkflowStepList(req, wid): global _cssclass, _page workflow = getWorkflow(wid) workflowsteps = list(workflow.getSteps()) order = getSortCol(req) 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])') workflowsteps = filter(lambda x: num.match(x.name), workflowsteps) elif actfilter == "else" or actfilter == t(lang(req), "admin_filter_else"): all = re.compile(r'([a-z]|[A-Z]|[0-9])') workflowsteps = filter(lambda x: not all.match(x.name), workflowsteps) else: workflowsteps = filter(lambda x: x.name.lower().startswith(actfilter), workflowsteps) pages = Overview(req, workflowsteps) # sorting if order != "": if int(order[0]) == 0: workflowsteps.sort(lambda x, y: cmp(x.name.lower(), y.name.lower())) elif int(order[0]) == 1: workflowsteps.sort(lambda x, y: cmp(x.type, y.type)) elif int(order[0]) == 2: workflowsteps.sort(lambda x, y: cmp(x.getTrueId(), y.getTrueId())) elif int(order[0]) == 3: workflowsteps.sort(lambda x, y: cmp(x.getFalseId(), y.getFalseId())) elif int(order[0]) == 4: workflowsteps.sort(lambda x, y: cmp(len(x.get("description")), len(y.get("description")))) # elif int(order[0]) == 5: # workflowstep.sort(lambda x, y: cmp(x.getAccess("read"), y.getAccess("read"))) # elif int(order[0]) == 6: # workflowstep.sort(lambda x, y: cmp(x.getAccess("write"), y.getAccess("write"))) if int(order[1]) == 1: workflowsteps.reverse() else: workflowsteps.sort(lambda x, y: cmp(x.name.lower(), y.name.lower())) v = getAdminStdVars(req) v["sortcol"] = pages.OrderColHeader( [ t( lang(req), "admin_wfstep_col_1"), t( lang(req), "admin_wfstep_col_2"), t( lang(req), "admin_wfstep_col_3"), t( lang(req), "admin_wfstep_col_4"), t( lang(req), "admin_wfstep_col_5"), t( lang(req), "admin_wfstep_col_6"), t( lang(req), "admin_wfstep_col_7")]) v["workflow"] = workflow v["workflowsteps"] = workflowsteps v["pages"] = pages v["actfilter"] = actfilter v["csrf"] = req.csrf_token.current_token return req.getTAL("web/admin/modules/workflows.html", v, macro="view_step")
def _prepareData(self, req, words=""): access = acl.AccessData(req) mask = self.getFullView(lang(req)) obj = {'deleted': False, 'access': access} node = self if self.get('deleted') == 'true': node = self.getActiveVersion() obj['deleted'] = True if mask: obj['metadata'] = mask.getViewHTML([node], VIEW_HIDE_EMPTY, lang(req), mask=mask) # hide empty elements else: obj['metadata'] = [] obj['node'] = node obj['path'] = req and req.params.get("path", "") or "" files, sum_size = filebrowser(node, req) obj['attachment'] = files obj['sum_size'] = sum_size obj['bibtex'] = False if node.getMask("bibtex"): obj['bibtex'] = True if node.has_object(): obj['canseeoriginal'] = access.hasAccess(node, "data") if node.get('system.origname') == "1": obj['documentlink'] = '/doc/{}/{}'.format(node.id, node.getName()) obj['documentdownload'] = '/download/{}/{}'.format(node.id, node.getName()) else: obj['documentlink'] = '/doc/{}/{}.pdf'.format(node.id, node.id) obj['documentdownload'] = '/download/{}/{}.pdf'.format(node.id, node.id) else: obj['canseeoriginal'] = False obj['documentthumb'] = '/thumb2/{}'.format(node.id) if "oogle" not in (req.get_header("user-agent") or ""): obj['print_url'] = '/print/{}'.format(node.id) else: # don't confuse search engines with the PDF link obj['print_url'] = None obj['documentdownload'] = None if "style" in req.params.keys(): req.session["full_style"] = req.params.get("style", "full_standard") elif "full_style" not in req.session.keys(): if "contentarea" in req.session.keys(): col = req.session["contentarea"].collection req.session["full_style"] = col.get("style_full") else: req.session["full_style"] = "full_standard" obj['parentInformation'] = self.getParentInformation(req) obj['style'] = req.session["full_style"] return obj
def show_node_big(self, req, style_name=""): # style_name is ignored content = u"" link = node_url(self.id, files=1) sidebar = u"" pages = self.getStartpageDict() if self.get("system.sidebar") != "": for sb in self.get("system.sidebar").split(";"): if sb: l, fn = sb.split(":") if l == lang(req): for f in self.getFiles(): if fn.endswith(f.getName()): sidebar = includetemplate(self, f.retrieveFile(), {}) if sidebar: sidebar = req.getTAL("contenttypes/container.html", {"content": sidebar}, macro="addcolumn") else: sidebar = u"" if "item" in req.params: fname = req.params.get("item") fname_allowed = False # accept only filenames which starts with a number and the number is a node_id and the current_user has # read access to this node, to avoid delivering of systemfiles like /etc/passwd # with e.g. 604993?item=../../../../../../../../../../etc/passwd node_id_list = self.item_file_pattern.findall(fname) if node_id_list: node_id = node_id_list[0] node = db.query(Node).get(node_id) fname_allowed = node and node.has_read_access(user=current_user) fpath = "{}html/{}".format(config.get("paths.datadir"), fname) if fname_allowed and os.path.isfile(fpath): with codecs.open(fpath, "r", encoding='utf8') as c: content = c.read() if sidebar: return u'<div id="portal-column-one">{}</div>{}'.format(content, sidebar) return content spn = self.getStartpageFileNode(lang(req)) if spn: long_path = spn.retrieveFile() if os.path.isfile(long_path) and fileIsNotEmpty(long_path): content = includetemplate(self, long_path, {'${next}': link}) if content: if sidebar: return u'<div id="portal-column-one">{}</div>{}'.format(content, sidebar) return content return u'{}{}'.format(content, sidebar)
def _prepareData(self, req, words=""): access = acl.AccessData(req) mask = self.getFullView(lang(req)) obj = {'deleted': False, 'access': access} node = self if self.get('deleted') == 'true': node = self.getActiveVersion() obj['deleted'] = True if mask: obj['metadata'] = mask.getViewHTML([node], VIEW_HIDE_EMPTY, lang(req), mask=mask) # hide empty elements else: obj['metadata'] = [] obj['node'] = node obj['path'] = req.params.get("path", "") return obj
def viewlist(req, id): mapping = getMapping(id) fields = list(mapping.getFields()) order = getSortCol(req) actfilter = getFilter(req) # filter if actfilter != "": if actfilter in ("all", "*", (lang(req), "admin_filter_all")): None # all mappings elif actfilter == "0-9": num = re.compile(r'([0-9])') fields = filter(lambda x: num.match(x.name), fields) elif actfilter == "else" or actfilter == t(lang(req), "admin_filter_else"): all = re.compile(r'([a-z]|[A-Z]|[0-9])') fields = filter(lambda x: not all.match(x.name), fields) else: fields = filter(lambda x: x.name.lower().startswith(actfilter), fields) pages = Overview(req, fields) # sorting if order != "": if int(order[0:1]) == 0: fields.sort(lambda x, y: cmp(x.name.lower(), y.name.lower())) elif int(order[0:1]) == 1: fields.sort(lambda x, y: cmp(x.getDescription().lower(), y.getDescription().lower())) elif int(order[0:1]) == 2: fields.sort(lambda x, y: cmp(x.getMandatory(), y.getMandatory())) if int(order[1:]) == 1: fields.reverse() else: fields.sort(lambda x, y: cmp(x.name.lower(), y.name.lower())) v = getAdminStdVars(req) v["sortcol"] = pages.OrderColHeader([t(lang(req), "admin_mappingfield_col_1"), t(lang(req), "admin_mappingfield_col_2"), t( lang(req), "admin_mappingfield_col_3")], addparams="&detailof=" + unicode(mapping.id)) v["fields"] = fields v["mapping"] = mapping v["options"] = [] v["pages"] = pages v["actfilter"] = actfilter v["csrf"] = req.csrf_token.current_token return req.getTAL("web/admin/modules/mapping.html", v, macro="viewlist")
def show_workflow_node(self, node, req): if "gotrue" in req.params: return self.forwardAndShow(node, True, req) if "gofalse" in req.params: return self.forwardAndShow(node, False, req) key = req.params.get("key", req.session.get("key", "")) masks = self.get("masks") if not masks: masklist = ["editmask"] else: masklist = masks.split(";") fieldmap = [] mask = None for maskname in masklist: t = q(Metadatatype).filter_by(name=node.schema).scalar() if t: if node.get('system.wflanguage') != '': # use correct language mask = t.getMask("%s.%s" % (node.get('system.wflanguage'), maskname)) if not mask: mask = t.getMask(maskname) try: fieldmap += [mask.getViewHTML([node], VIEW_HIDE_EMPTY, language=lang(req))] except: logg.exception("exception for mask %s, returning empty string", mask) return "" filelist = "" filelistshort = "" if node.files: filelist = mkfilelist(node, request=req) filelistshort = mkfilelistshort(node, request=req) return req.getTAL("workflow/showdata.html", {"key": key, "filelist": filelist, "filelistshort": filelistshort, "fields": fieldmap, "pretext": self.getPreText(lang(req)), "posttext": self.getPostText(lang(req)), "sidebar": self.getSidebarText(lang(req)), "buttons": self.tableRowButtons(node), "csrf": req.csrf_token.current_token,}, macro="workflow_showdata")
def show_workflow_node(self, node, req): if "gotrue" in req.params: return self.forwardAndShow(node, True, req) if "gofalse" in req.params: return self.forwardAndShow(node, False, req) key = req.params.get("key", req.session.get("key", "")) masks = self.get("masks") if not masks: masklist = ["editmask"] else: masklist = masks.split(";") fieldmap = [] mask = None for maskname in masklist: t = getMetaType(node.type) if t: if node.get('system.wflanguage') != '': # use correct language mask = t.getMask("%s.%s" % (node.get('system.wflanguage'), maskname)) if not mask: mask = t.getMask(maskname) try: fieldmap += [mask.getViewHTML([node], VIEW_HIDE_EMPTY, language=lang(req))] except: print "error" logging.getLogger("error").error("mask %s defined for workflow step not found." % mask) return "" filelist = "" filelistshort = "" if node.getFiles(): filelist = mkfilelist(node, request=req) filelistshort = mkfilelistshort(node, request=req) return req.getTAL("workflow/showdata.html", {"key": key, "filelist": filelist, "filelistshort": filelistshort, "fields": fieldmap, "pretext": self.getPreText(lang(req)), "posttext": self.getPostText(lang(req)), "sidebar": self.getSidebarText(lang(req)), "buttons": self.tableRowButtons(node)}, macro="workflow_showdata")
def handle_json_request(req): s = [] if req.args.get("cmd") == "get_list_smi": searchmaskitem_id = req.params.get("searchmaskitem_id") f = None g = None if searchmaskitem_id and searchmaskitem_id != "full": f = q(Node).get(searchmaskitem_id).getFirstField() if not f: # All Metadata f = g = getMetadataType("text") container_id = req.args.get("container_id") container = q(Container).get(container_id) if container_id else None if container is None or not container.has_read_access(): container = get_collections_node() s = [ f.getSearchHTML( Context( g, value=req.args.get("query_field_value"), width=174, name="query" + str(req.args.get("fieldno")), language=lang(req), container=container, user=current_user, ip=req.ip))] req.write(req.params.get("jsoncallback") + "(%s)" % json.dumps(s, indent=4))
def sendmailUser_mask(req, id, err=0): v = getAdminStdVars(req) v["path"] = req.path[1:] if id in["execute", "execu"]: userid = req.params.get("userid") user = getUser(userid) if not user: path = req.path[1:].split("/") user = getExternalUser(userid, path[-1]) password = makeRandomPassword() user.resetPassword(password) text = req.params.get("text") text = text.replace("[wird eingesetzt]", password) try: mail.sendmail(req.params.get("from"), req.params.get("email"), req.params.get("subject"), text) except mail.SocketError: print "Socket error while sending mail" req.setStatus(httpstatus.HTTP_INTERNAL_SERVER_ERROR) return req.getTAL("web/admin/modules/user.html", v, macro="sendmailerror") return req.getTAL("web/admin/modules/user.html", v, macro="sendmaildone") user = getUser(id) if not user: path = req.path[1:].split("/") user = getExternalUser(id, path[-1]) collections = [] seen = {} access = acl.AccessData(user=user) for node in getAllCollections(): if access.hasReadAccess(node): if access.hasWriteAccess(node): collections.append(node.name + " (lesen/schreiben)") seen[node.id] = None for node in tree.getRoot("collections").getChildren(): if access.hasReadAccess(node) and node.id not in seen: collections.append(node.name + " (nur lesen)") x = {} x["name"] = "%s %s" % (user.getFirstName(), user.getLastName()) if(x["name"] == ""): x["name"] = user.getName() x["host"] = config.get("host.name") x["login"] = user.getName() x["isEditor"] = user.isEditor() x["collections"] = list() x["groups"] = user.getGroups() x["groups"].sort() x["language"] = lang(req) x["collections"] = collections x["collections"].sort() v["mailtext"] = req.getTAL("web/admin/modules/user.html", x, macro="emailtext").strip() v["email"] = user.getEmail() v["userid"] = user.getName() return req.getTAL("web/admin/modules/user.html", v, macro="sendmail")
def __init__(self, req, list): self.req = req self.path = req.path[1:] self.language = lang(req) self.stdVars = getAdminStdVars(self.req) # self.page = 0 or None -> all entries try: self.page = int(req.params.get("page", req.params.get("actpage", 1))) except ValueError: self.page = req.params.get("actpage") if "firstpage" in req.params.keys(): self.page = 1 elif "resetpage" in req.params.keys(): self.page = 0 items_per_page = config.getint("admin.pageitems", 20) max_page = len(list) / items_per_page if max_page + 1 < self.page: self.page = 1 req.params["page"] = 1 if self.page == 0: self.start = 0 self.end = len(list) else: self.start = (self.page - 1) * items_per_page self.end = self.start + items_per_page self.list = list
def feedback(self, req): user = users.getUserFromRequest(req) userlinks = UserLinks(user, area=req.session.get("area")) userlinks.feedback(req) # tabs navigation = {} # collection collection_portlet = self.collection_portlet collection_portlet.feedback(req) col_selected = collection_portlet.collection navigation["collection"] = collection_portlet # search search_portlet = self.cmap.getSearch(col_selected) search_portlet.feedback(req) navigation["search"] = search_portlet # languages front_lang = {} front_lang["name"] = config.get("i18n.languages").split(",") front_lang["actlang"] = lang(req) self.params = {"show_navbar": True, "user": user, "userlinks": userlinks, "navigation": navigation, "language": front_lang}
def handletabs(req, ids, tabs): user = users.getUserFromRequest(req) language = lang(req) n = tree.getNode(ids[0]) if n.type.startswith("workflow"): n = tree.getRoot() menu = filterMenu(getEditMenuString(n.getContentType()), user) spc = [Menu("sub_header_frontend", "../", target="_parent")] if user.isAdmin(): spc.append(Menu("sub_header_administration", "../admin", target="_parent")) if user.isWorkflowEditor(): spc.append(Menu("sub_header_workflow", "../publish", target="_parent")) spc.append(Menu("sub_header_logout", "../logout", target="_parent")) # a html snippet may be inserted in the editor header help_link = tree.getRoot("collections").get("system.editor.help.link." + language).strip() ctx = { "user": user, "ids": ids, "idstr": ",".join(ids), "menu": menu, "hashelp": help.getHelpPath(["edit", "modules", req.params.get("tab") or tabs]), "breadcrumbs": getBreadcrumbs(menu, req.params.get("tab", tabs)), "spc": spc, "system_editor_help_link": help_link, } return req.getTAL("web/edit/edit.html", ctx, macro="edit_tabs")
def feedback(self, req): self.container_id = req.args.get("id", type=int) self.lang = lang(req) self.before = req.args.get("before", type=int) self.after = req.args.get("after", type=int) for i in range(SORT_FIELDS): key = "sortfield" + str(i) if key not in req.args: break sortfield = req.args[key].strip() if sortfield: self.sortfields[i] = req.args[key] if not self.sortfields: default_sortfield = self.collection.get(u"sortfield") self.sortfields[0] = default_sortfield if default_sortfield else u"-node.id" liststyle_name = req.args.get("liststyle") if liststyle_name: ls = liststyle_name # use default collection style else: ls = self.collection.get("style", None) if ls is None: # nothing found, use default style ls = "list" else: ls = ls.split(";")[0] liststyle = get_list_style(ls) if not liststyle: raise Exception("invalid liststyle '" + ls + "'") self.liststyle = liststyle self.nodes_per_page_from_req = req.args.get("nodes_per_page", type=int) if self.nodes_per_page_from_req: self.nodes_per_page = self.nodes_per_page_from_req else: self.nodes_per_page = liststyle.nodes_per_page self.nav_params = {k: v for k, v in req.args.items() if k not in ("before", "after", "style", "sortfield", "page", "nodes_per_page")} self.show_id = req.args.get("show_id") self.result_nav = req.args.get("result_nav") if self.show_id or self.result_nav: # single result view self.content = self._single_result() return self.content.feedback(req) else: # prepare content list page navigation self.page_nav, self.files = self._page_nav_prev_next()
def getData(req): pid = req.params.get("parentId") style = req.params.get("style", "edittree") ret = [] for c in q(Node).get(pid).children.filter_read_access().order_by(Node.orderpos): try: if isinstance(c, Container): special_dir_type = get_special_dir_type(c) cnum = c.container_children.count() inum = c.content_children.count() label = get_edit_label(c, lang(req)) title = label + " (" + unicode(c.id) + ")" cls = "folder" itemcls = "" if not c.has_write_access(): itemcls = "read" if c.type == "collection": # or "collection" in c.type: cls = "collection" if hasattr(c, 'treeiconclass'): cls = c.treeiconclass() if special_dir_type == u'trash': cls = "trashicon" elif special_dir_type == u'upload': cls = "uploadicon" elif c == current_user.home_dir: cls = "homeicon" if style == "edittree": # standard tree for edit area if inum > 0: label += u" <small>({})</small>".format(inum) ret.append(u'<li class="{}.gif" id="Node{}">'.format(cls, c.id)) ret.append(u'<a href="#" title="{}" id="{}" class="{}">{}</a>'.format(title, c.id, itemcls, label)) if cnum > 0: ret.append(u'<ul><li parentId="{}" class="spinner.gif"><a href="#"> </a></li></ul>'.format(c.id)) ret.append(u'</li>') elif style == "classification": # style for classification ret.append(u'<li class="{}.gif" id="Node{}">'.format(cls, c.id)) ret.append(u'<a href="#" title="{}" id="{}" class="{}">{}<input type="image" src="/img/ftree/uncheck.gif"/></a>'.format( title, c.id, itemcls, label)) if cnum > 0: ret.append(u'<ul><li parentId="{}" class="spinner.gif"><a href="#"> </a></li></ul>'.format(c.id)) ret.append(u'</li>') except: logg.exception("exception in getData") req.write(u"\n".join(ret)) return
def getShortName(self, req): l = lang(req) if self.get("shortstepname_" + l) != "": return self.get("shortstepname_" + l) elif self.get("shortstepname") != "": return self.get("shortstepname") else: return ""
def getShortName(self, req): l = lang(req) if self.get('shortstepname_' + l) != "": return self.get('shortstepname_' + l) elif self.get('shortstepname') != "": return self.get('shortstepname') else: return ""
def show_workflow_notexist(self, node, req, template="workflow/workflow.html", macro="workflow_node"): step = getNodeWorkflowStep(node) link = "" if step: link = '/mask?id=%s&obj=%s' % (step.id, node.id) return '<script language="javascript">document.location.href = "%s";</script> <a href="%s">%s</a>' % (link, link, step.name) else: return '<i>%s</i>' % (t(lang(req), "permission_denied"))
def feedback(self, req): self.user = users.getUserFromRequest(req) r = req.params.get(self.name, "") if r == "unfold": self.open() elif r == "fold": self.close() self.language = lang(req)
def render_content_occurences(node, req, paths): language = lang(req) ctx = { "paths": paths, "language": language } html = webconfig.theme.render_template("content_nav_paths.j2.jade", ctx) return html
def getContent(req, ids): user = users.getUserFromRequest(req) access = AccessData(req) language = lang(req) node = tree.getNode(ids[0]) if "sort" in users.getHideMenusForUser(user) or not access.hasWriteAccess(node): req.setStatus(httpstatus.HTTP_FORBIDDEN) return req.getTAL("web/edit/edit.html", {}, macro="access_error") msg_t = (user.getName(), node.id, node.name, node.type, req.params) msg = "%s sorting subfolders of node %r (%r, %r): %r" % msg_t logger.info(msg) if "order" in req.params: # do reorder ids = req.params.get('order').split(',') children = [] for n in ids: child = tree.getNode(n) child.setOrderPos(ids.index(n)) children.append(child) req.writeTAL('web/edit/modules/subfolder.html', {'nodelist': children, "language": language}, macro="ordered_list") return "" elif "sortdirection" in req.params: # do automatic re-order i = 0 sort_dir = "" if req.params.get("sortdirection", "up") == "up" else "-" sorted_children = node.getContainerChildren().sort_by_fields(sort_dir + req.params.get("sortattribute")) for child in sorted_children: child.setOrderPos(i) i += 1 req.writeTAL('web/edit/modules/subfolder.html', {'nodelist': sorted_children, "language": language}, macro="ordered_list") return "" nodelist = [] attributes = [] fields = {} i = 0 for child in list(node.getContainerChildren().sort_by_orderpos()): i += 1 # count container children nodelist.append(child) if getMetaType(child.getSchema()): for field in getMetaType(child.getSchema()).getMetaFields(): if not field in fields.keys(): fields[field] = 0 fields[field] += 1 for field in fields: if i == fields[field]: attributes.append(field) ctx = { "node": node, "nodelist": nodelist, "sortattributes": sorted(attributes, lambda x, y: cmp(x.getLabel().lower(), y.getLabel().lower())), "language": language, } return req.getTAL("web/edit/modules/subfolder.html", ctx, macro="edit_subfolder")
def show_node_big(self, req, style_name=""): # style_name is ignored content = u"" link = node_url(self.id, files=1) sidebar = u"" pages = self.getStartpageDict() if self.get("system.sidebar") != "": for sb in self.get("system.sidebar").split(";"): if sb: l, fn = sb.split(":") if l == lang(req): for f in self.getFiles(): if fn.endswith(f.getName()): sidebar = includetemplate( self, f.retrieveFile(), {}) if sidebar: sidebar = req.getTAL("contenttypes/container.html", {"content": sidebar}, macro="addcolumn") else: sidebar = u"" if "item" in req.params: fpath = "{}html/{}".format(config.get("paths.datadir"), req.params.get("item")) if os.path.isfile(fpath): with codecs.open(fpath, "r", encoding='utf8') as c: content = c.read() if sidebar: return u'<div id="portal-column-one">{}</div>{}'.format( content, sidebar) return content spn = self.getStartpageFileNode(lang(req)) if spn: long_path = spn.retrieveFile() if os.path.isfile(long_path) and fileIsNotEmpty(long_path): content = includetemplate(self, long_path, {'${next}': link}) if content: if sidebar: return u'<div id="portal-column-one">{}</div>{}'.format( content, sidebar) return content return u'{}{}'.format(content, sidebar)
def render_content(node, req, render_paths=True, show_id=None): make_search_content = get_make_search_content_function(req) if render_paths and node is not None: paths = get_accessible_paths(node, q(Node).prefetch_attrs()) else: paths = None if make_search_content is None: content_or_error = make_node_content(node, req, paths) else: content_or_error = make_search_content(req, paths) cache_duration = content_or_error.cache_duration if cache_duration: req.reply_headers["Cache-Control"] = "max-age=" + str(cache_duration) else: req.reply_headers["Cache-Control"] = "no-cache" if isinstance(content_or_error, NodeNotAccessible): req.setStatus(content_or_error.status) return render_content_error(content_or_error.error, lang(req)) if isinstance(content_or_error, StartpageNotAccessible): req.setStatus(content_or_error.status) return render_startpage_error(node, lang(req)) content = content_or_error if "raw" in req.args: content_nav_html = "" else: node = content.node logo = content.logo select_style_link = content.select_style_link print_url = content.print_url styles = content.content_styles content_nav_html = render_content_nav(req, node, logo, styles, select_style_link, print_url, paths) if isinstance(show_id, list) and hasattr(content, 'show_id'): show_id.append(content.show_id) content_html = content_nav_html + "\n" + content.html(req) return content_html
def MetatypeDetail(req, id, err=0): v = getAdminStdVars(req) if err == 0 and id == "": # new metadatatype metadatatype = Metadatatype(u"") db.session.commit() v["original_name"] = "" elif id != "" and err == 0: # edit metadatatype metadatatype = getMetaType(id) v["original_name"] = metadatatype.getName() else: # error metadatatype = Metadatatype(req.params["mname"]) metadatatype.set("description", req.params["description"]) metadatatype.set("longname", req.params["mlongname"]) metadatatype.set("active", "mactive" in req.params) metadatatype.set("datatypes", req.params.get("mdatatypes", "").replace(";", ", ")) metadatatype.set("bibtexmapping", req.params.get("mbibtex", "")) metadatatype.set("citeprocmapping", req.params.get("mciteproc", "")) db.session.commit() v["original_name"] = req.params["mname_orig"] d = Data() v["datatypes"] = d.get_all_datatypes() v["datatypes"].sort(lambda x, y: cmp(t(lang(req), x.__name__), t(lang(req), y.__name__))) v["metadatatype"] = metadatatype v["error"] = err v["bibtextypes"] = getAllBibTeXTypes() v["bibtexselected"] = metadatatype.get("bibtexmapping").split(";") v["citeproctypes"] = citeproc.TYPES v["citeprocselected"] = metadatatype.get("citeprocmapping").split(";") try: rules = [r.ruleset_name for r in metadatatype.access_ruleset_assocs.filter_by(ruletype=u'read')] except: rules = [] v["acl"] = makeList(req, "read", removeEmptyStrings(rules), {}, overload=0, type="read") v["filtertype"] = req.params.get("filtertype", "") v["actpage"] = req.params.get("actpage") v["csrf"] = req.csrf_token.current_token return req.getTAL("web/admin/modules/metatype.html", v, macro="modify_type")
def MetatypeDetail(req, id, err=0): v = getAdminStdVars(req) if err == 0 and id == "": # new metadatatype metadatatype = tree.Node("", type="metadatatype") v["original_name"] = "" elif id != "" and err == 0: # edit metadatatype metadatatype = getMetaType(id) v["original_name"] = metadatatype.getName() else: # error metadatatype = tree.Node(req.params["mname"], type="metadatatype") metadatatype.setDescription(req.params["description"]) metadatatype.setLongName(req.params["mlongname"]) metadatatype.setActive("mactive" in req.params) metadatatype.setDatatypeString(req.params.get("mdatatypes", "").replace(";", ", ")) metadatatype.set("bibtexmapping", req.params.get("mbibtex", "")) metadatatype.set("citeprocmapping", req.params.get("mciteproc", "")) v["original_name"] = req.params["mname_orig"] v["datatypes"] = loadNonSystemTypes() v["datatypes"].sort(lambda x, y: cmp(t(lang(req), x.getLongName()), t(lang(req), y.getLongName()))) v["metadatatype"] = metadatatype v["error"] = err v["bibtextypes"] = getAllBibTeXTypes() v["bibtexselected"] = metadatatype.get("bibtexmapping").split(";") v["citeproctypes"] = citeproc.TYPES v["citeprocselected"] = metadatatype.get("citeprocmapping").split(";") rule = metadatatype.getAccess("read") if rule: rule = rule.split(",") else: rule = [] rights = removeEmptyStrings(rule) v["acl"] = makeList(req, "read", rights, {}, overload=0, type="read") v["filtertype"] = req.params.get("filtertype", "") v["actpage"] = req.params.get("actpage") return req.getTAL("web/admin/modules/metatype.html", v, macro="modify_type")
def show_workflow_node(self, node, req): if "sendout" in req.params: del req.params["sendout"] if "from" in req.params: node.set("system.mailtmp.from", req.params.get("from")) if "to" in req.params: node.set("system.mailtmp.to", req.params.get("to")) if "subject" in req.params: node.set("system.mailtmp.subject", req.params.get("subject")) if "text" in req.params: node.set("system.mailtmp.text", req.params.get("text")) db.session.commit() if(self.sendOut(node)): return self.forwardAndShow(node, True, req) if "gofalse" in req.params: return self.forwardAndShow(node, False, req) elif node.system_attrs.get("mailtmp.talerror", "") != "": del node.system_attrs["mailtmp.talerror"] db.session.commit() self.runAction(node, "true") if node.system_attrs.get("mailtmp.talerror", "") != "": return """<pre>%s</pre>""" % node.system_attrs.get("mailtmp.talerror") elif node.get("system.mailtmp.error"): return '%s<br/><pre>%s</pre><br>><a href="%s">%s</a><' % (t(lang(req), "workflow_email_msg_1"), node.get( "system.mailtmp.error"), req.makeSelfLink({"sendout": "true"}), t(lang(req), "workflow_email_resend")) else: xfrom = node.get("system.mailtmp.from") to = node.get("system.mailtmp.to") text = node.get("system.mailtmp.text") subject = tal.getTALstr(node.get("system.mailtmp.subject"), {}, language=node.get("system.wflanguage")) return req.getTAL("workflow/email.html", {"page": u"node?id={}&obj={}".format(self.id, node.id), "from": xfrom, "to": to, "text": text, "subject": subject, "node": node, "sendcondition": self.get("sendcondition"), "wfnode": self, "pretext": self.getPreText(lang(req)), "posttext": self.getPostText(lang(req)), "csrf": req.csrf_token.current_token,}, macro="sendmail")
def getContent(req, ids): user = current_user language = lang(req) node = q(Node).get(ids[0]) if "sort" in user.hidden_edit_functions or not node.has_write_access(): req.setStatus(httpstatus.HTTP_FORBIDDEN) return req.getTAL("web/edit/edit.html", {}, macro="access_error") logg.info("%s sorting subfolders of node %s (%s, %s): %s", user.login_name, node.id, node.name, node.type, req.params) if "order" in req.params: # do reorder ids = req.params.get('order').split(',') children = [] for n in ids: child = q(Node).get(n) child.orderpos = ids.index(n) children.append(child) db.session.commit() req.writeTAL('web/edit/modules/subfolder.html', {'nodelist': children, "language": language, "csrf": req.csrf_token.current_token}, macro="ordered_list") return "" elif "sortdirection" in req.params: # do automatic re-order sorted_children = node.container_children.order_by(Node.name).all() if req.params.get("sortdirection", "up") != "up": sorted_children.reverse() for position, child in enumerate(sorted_children, start=1): child.orderpos = position db.session.commit() req.writeTAL('web/edit/modules/subfolder.html', {'nodelist': sorted_children, "language": language, "csrf": req.csrf_token.current_token}, macro="ordered_list") return "" nodelist = [] attributes = [] fields = {} i = 0 for child in list(node.container_children.sort_by_orderpos()): i += 1 # count container children nodelist.append(child) if getMetaType(child.schema): for field in getMetaType(child.schema).getMetaFields(): if not field in fields.keys(): fields[field] = 0 fields[field] += 1 for field in fields: if i == fields[field]: attributes.append(field) ctx = { "node": node, "nodelist": nodelist, "sortattributes": sorted(attributes, lambda x, y: cmp(x.getLabel().lower(), y.getLabel().lower())), "language": language, "csrf": req.csrf_token.current_token } return req.getTAL("web/edit/modules/subfolder.html", ctx, macro="edit_subfolder")
def create_app(name="mediatum"): from core import translation app = AthanaFlaskStyleApp(name) # bind app to athana server app.register_with_athana() from mediatumbabel import Babel babel = Babel(app) babel.localeselector(lambda: translation.lang(request)) return app
def show_workflow_node(self, node, req): if "sendout" in req.params: del req.params["sendout"] if "from" in req.params: node.set("system.mailtmp.from", req.params.get("from")) if "to" in req.params: node.set("system.mailtmp.to", req.params.get("to")) if "subject" in req.params: node.set("system.mailtmp.subject", req.params.get("subject")) if "text" in req.params: node.set("system.mailtmp.text", req.params.get("text")) db.session.commit() if(self.sendOut(node)): return self.forwardAndShow(node, True, req) if "gofalse" in req.params: return self.forwardAndShow(node, False, req) elif node.system_attrs.get("mailtmp.talerror", "") != "": del node.system_attrs["mailtmp.talerror"] db.session.commit() self.runAction(node, "true") if node.system_attrs.get("mailtmp.talerror", "") != "": return """<pre>%s</pre>""" % node.system_attrs.get("mailtmp.talerror") elif node.get("system.mailtmp.error"): return '%s<br/><pre>%s</pre><br>><a href="%s">%s</a><' % (t(lang(req), "workflow_email_msg_1"), node.get( "system.mailtmp.error"), req.makeSelfLink({"sendout": "true"}), t(lang(req), "workflow_email_resend")) else: xfrom = node.get("system.mailtmp.from") to = node.get("system.mailtmp.to") text = node.get("system.mailtmp.text") subject = tal.getTALstr(node.get("system.mailtmp.subject"), {}, language=node.get("system.wflanguage")) return req.getTAL("workflow/email.html", {"page": u"node?id={}&obj={}".format(self.id, node.id), "from": xfrom, "to": to, "text": text, "subject": subject, "node": node, "sendcondition": self.get("sendcondition"), "wfnode": self, "pretext": self.getPreText(lang(req)), "posttext": self.getPostText(lang(req))}, macro="sendmail")
def getContent(req, ids): user = users.getUserFromRequest(req) access = AccessData(user=user) language = lang(req) node = tree.getNode(ids[0]) if not access.hasWriteAccess(node): req.setStatus(httpstatus.HTTP_FORBIDDEN) return req.getTAL("web/edit/edit.html", {}, macro="access_error") if req.params.get("upload")=="uploadfile": # try to import file return import_new(req) v = {"error":req.params.get("error")} class SortChoice: def __init__(self, label, value): self.label = label self.value = value 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"]: 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 v['sortchoices'] = sortfields v['ids'] = ids v['count'] = len(node.getContentChildren()) v['nodelist'] = showdir(req, node) v['language'] = lang(req) v['t'] = t _html = req.getTAL("web/edit/modules/imports.html", v, macro="upload_form") return _html
def show_workflow_node(self, node, req): result = "" error = "" key = req.params.get("key", req.session.get("key", "")) maskname = self.get("mask") mask = None if node.get('system.wflanguage') != '': # use correct language mask = getMetaType(node.schema).getMask( "%s.%s" % (node.get('system.wflanguage'), maskname)) if not mask: mask = getMetaType(node.schema).getMask(maskname) if "metaDataEditor" in req.params: mask.update_node(node, req, current_user) db.session.commit() missing = mask.validate([node]) if not missing or "gofalse" in req.params: op = "gotrue" in req.params return self.forwardAndShow(node, op, req) else: error = '<p class="error">%s</p>' % (t(lang(req), "workflow_error_msg")) req.params["errorlist"] = missing if mask: maskcontent = mask.getFormHTML([node], req) else: maskcontent = req.getTAL("workflow/editmetadata.html", {}, macro="maskerror") return req.getTAL("workflow/editmetadata.html", { "name": self.name, "error": error, "key": key, "mask": maskcontent, "pretext": self.getPreText(lang(req)), "posttext": self.getPostText(lang(req)), "sidebartext": self.getSidebarText(lang(req)), "buttons": self.tableRowButtons(node), "csrf": req.csrf_token.current_token, }, macro="workflow_metadateneditor")
def html(self, req): # do we want to show a single result or the result list? if self.content: # render single result headline = webconfig.theme.render_template( "content_nav_headline.j2.jade", {"nav": self}) # self.content.paths is the same as self.paths which is only the paths to an upper directory/collection # to force a recalculation of paths in self.content.html(req) it must be set to [] self.content.paths = [] return headline + self.content.html(req) # render result list ctx = { "page_nav": Markup(self.page_nav), "nav": self, "sortfieldslist": self.getSortFieldsList(), "op": "", "query": req.args.get("query", "") } content_nav_list_header_html = webconfig.theme.render_template( "content_nav_list_header.j2.jade", ctx) # use template of style and build html content ctx = { "files": self.files, "op": "", "language": self.lang, "nodesperpage": self.nodes_per_page } content_list_html = self.liststyle.render_template(req, ctx) if self.show_sidebar: sidebar_html = u"" # check for sidebar_html if self.collection.get(u"system.sidebar_html") != "": for sb in [ s for s in self.collection.get( "system.sidebar_html").split(";") if s != "" ]: l, fn = sb.split(":") if l == lang(req): for f in [ f for f in self.collection.getFiles() if fn.endswith(f.getName()) ]: sidebar_html = includetemplate( self, f.retrieveFile(), {}).strip() if sidebar_html: return u'<div id="portal-column-one">{0}<div id="nodes">{1}</div>{0}</div><div id="portal-column-two">{2}</div>'.format( content_nav_list_header_html, content_list_html, sidebar_html) return u'{0}<div id="nodes">{1}</div>{0}'.format( content_nav_list_header_html, content_list_html)
def show_node_big(node, req, template="workflow/workflow.html", macro="object_list"): access = acl.AccessData(req) if not access.hasWriteAccess(node): return '<i>' + t(lang(req), "permission_denied") + '</i>' return req.getTAL( template, { "workflow": node, "access": access, "search": req.params.get( "workflow_search", ""), "items": workflowSearch( [node], req.params.get( "workflow_search", ""), access), "getStep": getNodeWorkflowStep, "format_date": formatItemDate}, macro=macro)
def editGroup_mask(req, id, err=0): """edit/create usergroup""" newusergroup = 0 if err == 0 and id == "": # new usergroup group = tree.Node("", type="usergroup") newusergroup = 1 elif id != "": # edit usergroup group = getGroup(id) else: # error while filling values option = "" for key in req.params.keys(): if key.startswith("option_"): option += key[7] group = tree.Node("", type="usergroup") group.setName(req.params.get("groupname", "")) group.setDescription(req.params.get("description", "")) group.setHideEdit(req.params.get("leftmodule", "").split(';')) group.setOption(option) v = getAdminStdVars(req) v["error"] = err v["group"] = group v["groupoption"] = groupoption v["modulenames"] = getEditModuleNames() v["val_left"] = buildRawModuleLeft(group, lang(req)) v["val_right"] = buildRawModuleRight(group, lang(req)) v["valmeta_left"] = buildRawModuleMetaLeft(group) v["valmeta_right"] = buildRawModuleMetaRight(group) v["emails"] = ', '.join([u.get('email') for u in group.getChildren()]) v["actpage"] = req.params.get("actpage") v["newusergroup"] = newusergroup v["allow_dynamic_users"] = ALLOW_DYNAMIC_USERS # global flag v["allow_dynamic"] = group.get("allow_dynamic") # for checkbox v["dynamic_users"] = group.get("dynamic_users") return req.getTAL("/web/admin/modules/usergroup.html", v, macro="modify")
def getPopup(self, req): if "type" in req.params: req.reply_headers['Content-Type'] = "application/javascript" if req.params.get('type') == "configfile": from core.translation import lang req.writeTAL("metadata/htmlmemo.html", {'lang': lang(req)}, macro="ckconfig") elif req.params.get('type') == "javascript": req.writeTAL("metadata/htmlmemo.html", {}, macro="javascript") return httpstatus.HTTP_OK
def _get_node_metadata_html(node, req): """Renders HTML data for displaying metadata using the the fullview mask. :rtype: unicode """ language = lang(req) mask = node.getFullView(language) if mask is not None: return mask.getViewHTML([node], VIEW_HIDE_EMPTY, language) # hide empty elements else: return t(req, "no_metadata_to_display")
def shownodelist(req, nodes, page, publishwarn=True, markunpublished=False, dir=None, item_count=None, all_nodes=None, faultyidlist=[]): req.session["nodelist"] = EditorNodeList(nodes) script_array = "allobjects = new Array();\n" nodelist = [] nodes_per_page = get_nodes_per_page(req, dir) start = (page - 1) * nodes_per_page end = start + nodes_per_page user = current_user nodes_in_page = nodes[start:end] all_nodes = nodes[:] if isinstance(item_count, list): item_count.append(len(nodes_in_page)) item_count.append(len(all_nodes)) for child in nodes_in_page: from contenttypes import Content if isinstance(child, Content): script_array += "allobjects['%s'] = 0;\n" % child.id nodelist.append(child) notpublished = {} if publishwarn or markunpublished: homedirs = user.home_dir.all_children_by_query(q(Container)) for node in nodes_in_page: ok = 0 for p in node.parents: if p not in homedirs: ok = 1 if not ok: notpublished[node] = node # if all nodes are properly published, don't bother # to warn the user if not notpublished: publishwarn = 0 unpublishedlink = None if publishwarn: if dir: uploaddir = dir else: uploaddir = user.upload_dir unpublishedlink = "edit_content?tab=publish&id=" + unicode(uploaddir.id) html = req.getTAL("web/edit/edit_common.html", {"notpublished": notpublished, "unpublishedlink": unpublishedlink, "nodelist": nodelist, "faultyidlist": faultyidlist, "script_array": script_array, "language": lang(req)}, macro="show_nodelist") return html
def getPrintView(nid, p, req): node = q(Node).get(nid) for f in node.files: if f.filetype == "statistic": period, type = getPeriod(f.abspath) if type == p.split("_")[0] and period == p.split("_")[1]: data = StatisticFile(f) if data: pdf = StatsAccessPDF(data, p.split("_")[1], nid, lang(req)) return pdf.build()
def show_workflow_step(self, req): access = acl.AccessData(req) if not access.hasWriteAccess(self): return '<i>' + t(lang(req), "permission_denied") + '</i>' c = [] for item in self.getChildren(): c.append({"id": str(item.id), "creationtime": date.format_date( date.parse_date(item.get('creationtime')), 'dd.mm.yyyy HH:MM:SS'), "name": item.getName()}) c.sort(lambda x, y: cmp(x['name'], y['name'])) return req.getTAL("workflow/workflow.html", {"children": c, "workflow": self.getParents()[ 0], "step": self, "nodelink": "/mask?id=" + self.id + "&obj=", 'currentlang': lang(req)}, macro="workflow_show")
def html(self, req): styles = [] nodeprint = "1" # show print icon styles = self.content.getContentStyles() if "raw" in req.params: path = "" else: items = req.params.get("itemsperpage") try: id = self.content.node.id node = self.content.node if not node.getContentType() in ['collection', 'directory']: nodeprint = 0 else: if node.get("system.print") != "": nodeprint = node.get("system.print") except: id = 0 printlink = '/print/' + str(id) if nodeprint == "1" and "sortfield0" in req.params.keys(): printlink += '?sortfield0=' + str( req.params.get("sortfield0")) + '&sortfield1=' + str( req.params.get("sortfield1")) if req.params.get("show_navbar") == 0 or req.session.get( "area") == "publish": breadscrubs = [] else: try: breadscrubs = self.getPath(lang(req), access=AccessData(req)) except AttributeError: log.exception("") return req.error(404, "Object cannot be shown") path = req.getTAL(theme.getTemplate("content_nav.html"), { "params": self.params, "path": breadscrubs, "styles": styles, "logo": self.collectionlogo, "searchmode": req.params.get("searchmode", ""), "items": items, "id": id, "nodeprint": nodeprint, "printlink": printlink, "area": req.session.get("area", "") }, macro="path") return path + '\n<!-- CONTENT START -->\n' + self.content.html( req) + '\n<!-- CONTENT END -->\n'
def show_node_big(self, req, template="", macro=""): content = "" link = "node?id=" + self.id + "&files=1" sidebar = "" pages = self.getStartpageDict() if self.get("system.sidebar") != "": for sb in self.get("system.sidebar").split(";"): if sb != "": l, fn = sb.split(":") if l == lang(req): for f in self.getFiles(): if fn.endswith(f.getName()): sidebar = includetemplate(self, f.retrieveFile(), {}) sidebar = replaceModules(self, req, sidebar).strip() if sidebar != "": sidebar = req.getTAL("contenttypes/directory.html", {"content": sidebar}, macro="addcolumn") else: sidebar = "" if "item" in req.params: fpath = config.get("paths.datadir") + "html/" + req.params.get("item") if os.path.isfile(fpath): c = open(fpath, "r") content = c.read() c.close() if sidebar != "": return '<div id="portal-column-one">' + content + '</div>' + sidebar return content spn = self.getStartpageFileNode(lang(req)) if spn: long_path = spn.retrieveFile() if os.path.isfile(long_path) and fileIsNotEmpty(long_path): content = includetemplate(self, long_path, {'${next}': link}) content = replaceModules(self, req, content) if content: if sidebar != "": return '<div id="portal-column-one">' + content + '</div>' + sidebar return content return content + sidebar
def _prepareData(self, req): mask = self.getFullView(lang(req)) tif = "" try: tifs = req.session["fullresolutionfiles"] except: tifs = [] access = acl.AccessData(req) if access.hasAccess(self, "data"): for f in self.getFiles(): if f.getType() == "original": if self.get('system.origname') == "1": tif = self.getName() else: tif = f.getName() if self.get("archive_path") != "": tif = "file/" + str(self.id) + "/" + self.get("archive_path") files, sum_size = filebrowser(self, req) obj = {'deleted': False, 'access': access} node = self if self.get('deleted') == 'true': node = self.getActiveVersion() obj['deleted'] = True obj['path'] = req and req.params.get("path", "") or "" obj['attachment'] = files obj['sum_size'] = sum_size obj['metadata'] = mask.getViewHTML( [node], VIEW_HIDE_EMPTY) # hide empty elements obj['node'] = node obj['tif'] = tif obj['zoom'] = dozoom(node) obj['tileurl'] = "/tile/{}/".format(node.id) obj['canseeoriginal'] = access.hasAccess(node, "data") obj['originallink'] = "getArchivedItem('{}/{}')".format(node.id, tif) obj['archive'] = node.get('archive_type') if "style" in req.params.keys(): req.session["full_style"] = req.params.get("style", "full_standard") elif "full_style" not in req.session.keys(): if "contentarea" in req.session.keys(): col = req.session["contentarea"].collection req.session["full_style"] = col.get("style_full") else: req.session["full_style"] = "full_standard" obj['style'] = req.session["full_style"] return obj
def getMetaEditor(self, item, req): """ editor mask for vgroup-field definition """ fieldlist = getAllMetaFields() if len(item.getParents()) == 0: pid = req.params.get("pid", "") else: pid = item.getParents()[0].id if req.params.get("edit") == "None": item = Maskitem(name="", type="maskitem") item.set("type", "vgroup") details = "" i = 0 for field in item.getChildren().sort_by_orderpos(): f = getMetadataType(field.get("type")) details += f.getMetaHTML(item, i, False, fieldlist=fieldlist, language=lang(req)) i += 1 if req.params.get("sel_id", "") != "": i = 0 for id in req.params.get("sel_id")[:-1].split(";"): f = getMetadataType(q(Node).get(id).get("type")) try: details += f.getMetaHTML(item, i, False, itemlist=req.params.get("sel_id") [:-1].split(";"), ptype="vgroup", fieldlist=fieldlist) except TypeError: pass i += 1 fields = [] metadatatype = req.params.get("metadatatype") if req.params.get("op", "") == "new": pidnode = q(Node).get(req.params.get("pid")) if pidnode.get("type") in ("vgroup", "hgroup"): for field in pidnode.all_children: if field.getType().getName() == "maskitem" and field.id != pidnode.id: fields.append(field) else: for m in metadatatype.getMasks(): if ustr(m.id) == ustr(req.params.get("pid")): for field in m.getChildren(): fields.append(field) fields.sort(lambda x, y: cmp(x.getOrderPos(), y.getOrderPos())) v = {} v["pid"] = pid v["item"] = item v["op"] = req.params.get("op", "") v["details"] = details v["fields"] = fields v["selid"] = req.params.get("sel_id", "") return req.getTAL("schema/mask/vgroup.html", v, macro="metaeditor")
def getPrintView(req): p = req.params.get("period") id = req.path.split("/")[2] node = tree.getNode(id) for f in node.getFiles(): if f.getType() == "statistic": period, type = getPeriod(f.retrieveFile()) if type == p.split("_")[0] and period == p.split("_")[1]: data = StatisticFile(f) if data: pdf = StatsAccessPDF(data, p.split("_")[1], id, lang(req)) return pdf.build()
def show_workflow_notexist(self, node, req, template="workflow/workflow.html", macro="workflow_node"): step = getNodeWorkflowStep(node) link = "" if step: link = '/mask?id=%s&obj=%s' % (step.id, node.id) return '<script language="javascript">document.location.href = "%s";</script> <a href="%s">%s</a>' % ( link, link, step.name) else: return '<i>%s</i>' % (t(lang(req), "permission_denied"))
def show_workflow_node(self, node, req): print req.params if self.getAccess('data') != self.getAccess( 'write' ): # set access for download same as edit (only once needed) self.setAccess('data', self.getAccess('write')) if "gotrue" in req.params: return self.forwardAndShow(node, True, req) elif "gofalse" in req.params: return self.forwardAndShow(node, False, req) if self.getTrueLabel(language=node.get( "system.wflanguage")) == "" and self.getFalseLabel( language=node.get("system.wflanguage")) == "": buttons = [] else: buttons = self.tableRowButtons(node) try: mask = getMetaType(node.type).getMask(self.get("mask_fileatt")) maskdata = mask.getViewHTML([node], VIEW_HIDE_EMPTY, language=lang(req)) except: maskdata = "" return req.getTAL("workflow/fileattachment.html", { "buttons": buttons, "files": self.getFiles(), "wfnode": self, "pretext": self.getPreText(lang(req)), "posttext": self.getPostText(lang(req)), "sidebar": self.getSidebarText(lang(req)), 'maskdata': maskdata }, macro="fileattachment_show_node")
def getPopup(self, req): if "type" in req.params: if req.params.get('type') == 'javascript': req.reply_headers['Content-Type'] = "application/javascript" from core.translation import lang req.writeTAL("metadata/memo.html", {'lang': lang(req)}, macro="javascript") else: req.writeTAL("metadata/memo.html", { "charmap": charmap, "name": req.params.get("name"), "value": req.params.get("value") }, macro="popup") return httpstatus.HTTP_OK
def view(req): groups = list(loadGroupsFromDB()) order = getSortCol(req) actfilter = getFilter(req) # filter if actfilter != "": if actfilter in ("all", t(lang(req), "admin_filter_all"), "*"): None # all groups elif actfilter == "0-9": num = re.compile(r'([0-9])') groups = filter(lambda x: num.match(x.getName()), groups) elif actfilter == "else" or actfilter == t(lang(req), "admin_filter_else"): all = re.compile(r'([a-z]|[A-Z]|[0-9])') groups = filter(lambda x: not all.match(x.getName()), groups) else: groups = filter( lambda x: x.getName().lower().startswith(actfilter), groups) pages = Overview(req, groups) # sorting if order != "": if int(order[0:1]) == 0: groups.sort(lambda x, y: cmp(x.getName().lower(), y.getName().lower())) elif int(order[0:1]) == 1: groups.sort(lambda x, y: cmp(getNumUsers(x.getName()), getNumUsers(y.getName()))) elif int(order[0:1]) == 2: gl = {} for g in groups: gl[g.id] = g.getSchemas() groups.sort(lambda x, y: cmp(len(gl[x.id]), len(gl[y.id]))) elif int(order[0:1]) == 3: groups.sort(lambda x, y: cmp(x.getHideEdit() == "", y.getHideEdit() == "")) if int(order[1:]) == 1: groups.reverse() # else: # groups.sort(lambda x, y: cmp(x.getName().lower(),y.getName().lower())) v = getAdminStdVars(req) v["sortcol"] = pages.OrderColHeader([ t(lang(req), "admin_usergroup_col_1"), t(lang(req), "admin_usergroup_col_2"), t(lang(req), "admin_usergroup_col_3"), t(lang(req), "admin_usergroup_col_4") ]) v["options"] = list(groupoption) v["groups"] = groups v["pages"] = pages v["actfilter"] = actfilter return req.getTAL("/web/admin/modules/usergroup.html", v, macro="view")
def __init__(self, user, req): self.user = user self.host = _get_header(req, "HOST") # show_id: edit currently shown content node nid = req.args.get("show_id") # id: edit current container if nid is None: nid = req.args.get("id") self.id = nid self.language = lang(req) self.path = req.path self.args = req.args # XXX: hack to show the frontend link when workflows are displayed self.is_workflow_area = req.path.startswith("/publish")
def html(self, req): language = lang(req) context = { "language": language, "query": self.query, "container": self.container.getLabel(language), "container_url": node_url(self.container.id) } theme = webconfig.theme if self.error: html = theme.render_template("search_error.j2.jade", context) else: html = theme.render_template("search_noresult.j2.jade", context) return html
def getSearchField(self, i, width=174): try: f = None if self.names[i] and self.names[i] != "full": f = tree.getNode(self.names[i]).getFirstField() g = None if f is None: # All Metadata # quick&dirty f = g = getMetadataType("text") return f.getSearchHTML(Context(g, value=self.values[i], width=width, name="query" + str(i), language=lang(self.req), collection=self.collection, user=users.getUserFromRequest(self.req), ip=self.req.ip)) except: # workaround for unknown error logException("error during getSearchField(i)") return ""
def feedback(self, req): self.lang = lang(req) self.ip = req.ip self.url_params = {k: v for k, v in iteritems(req.args) if k not in ()} searchmode_from_req = req.args.get("searchmode") if searchmode_from_req in ("extended", "extendedsuper"): if self.searchmask is None: raise ValueError( "no searchmask defined, extended search cannot be run for container {}" .format(self.container.id)) self.searchmode = searchmode_from_req if self.searchmode == "extended": extendedfields = range(1, 4) elif self.searchmode == "extendedsuper": extendedfields = range(1, 11) else: extendedfields = [] # this is the "special" value for simple search if not extendedfields and "query" in req.args: self.values[0] = req.args["query"] else: for pos in extendedfields: searchmaskitem_argname = "field" + str(pos) searchmaskitem_id = req.args.get(searchmaskitem_argname, type=int) self.searchmaskitem_ids[pos] = searchmaskitem_id searchmaskitem = self.searchmask.children.filter_by( id=searchmaskitem_id).scalar( ) if searchmaskitem_id else None field = searchmaskitem.children.first( ) if searchmaskitem else None value_argname = "query" + str(pos) if field is not None and field.getFieldtype() == "date": from_value = req.args.get(value_argname + "-from", u"") to_value = req.args.get(value_argname + "-to", u"") value = from_value + ";" + to_value else: value = req.args.get(value_argname) if value: self.values[pos] = value
def show_node_big(self, req, template="", macro=""): mask = self.getFullView(lang(req)) access = acl.AccessData(req) if template == "": styles = getContentStyles("bigview", contenttype=self.getContentType()) if len(styles) >= 1: template = styles[0].getTemplate() # hide empty elements}, macro) return req.getTAL( template, { 'node': self, 'metadata': mask.getViewHTML([self], VIEW_HIDE_EMPTY), 'format_size': format_filesize, 'access': access })