Exemple #1
0
    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
Exemple #2
0
    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
Exemple #3
0
    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")
Exemple #4
0
 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",
     )
Exemple #5
0
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')
Exemple #6
0
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")
Exemple #7
0
    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
Exemple #8
0
    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)
Exemple #9
0
 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
Exemple #10
0
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")
Exemple #11
0
    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")
Exemple #12
0
    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")
Exemple #13
0
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))
Exemple #14
0
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")
Exemple #15
0
    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
Exemple #16
0
    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}
Exemple #17
0
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")
Exemple #18
0
    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()
Exemple #19
0
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="#">&nbsp;</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="#">&nbsp;</a></li></ul>'.format(c.id))

                    ret.append(u'</li>')
        except:
            logg.exception("exception in getData")

    req.write(u"\n".join(ret))
    return
Exemple #20
0
 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 ""
Exemple #21
0
 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 ""
Exemple #22
0
 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"))
Exemple #23
0
 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)
Exemple #24
0
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
Exemple #25
0
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")
Exemple #26
0
    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)
Exemple #27
0
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
Exemple #28
0
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")
Exemple #29
0
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")
Exemple #30
0
    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>&gt;<a href="%s">%s</a>&lt;' % (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")
Exemple #31
0
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
Exemple #32
0
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")
Exemple #33
0
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")
Exemple #34
0
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
Exemple #35
0
    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>&gt;<a href="%s">%s</a>&lt;' % (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")
Exemple #36
0
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
Exemple #37
0
    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")
Exemple #38
0
    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)
Exemple #39
0
 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)
Exemple #40
0
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")
Exemple #41
0
 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
Exemple #42
0
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")
Exemple #43
0
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
Exemple #44
0
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()
Exemple #45
0
 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")
Exemple #46
0
    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'
Exemple #47
0
    def show_node_big(self, req, template="", macro=""):
        content = ""
        link = "node?id=" + self.id + "&amp;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
Exemple #48
0
    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
Exemple #49
0
    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")
Exemple #50
0
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()
Exemple #51
0
 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"))
Exemple #52
0
    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")
Exemple #53
0
 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
Exemple #54
0
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")
Exemple #55
0
    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")
Exemple #56
0
    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
Exemple #57
0
 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 ""
Exemple #58
0
    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
Exemple #59
0
    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
            })