コード例 #1
0
ファイル: main.py プロジェクト: mediatum/mediatum
def change_language_request(req):
    language = req.args.get("change_language")
    if language:
        # change language cookie if language is configured
        switch_language(req, language)
        params = req.args.copy()
        del params["change_language"]
        req.request["Location"] = build_url_from_path_and_params(req.path, params)
        return httpstatus.HTTP_MOVED_TEMPORARILY
コード例 #2
0
def change_language_request(req):
    language = req.args.get("change_language")
    if language:
        # change language cookie if language is configured
        switch_language(req, language)
        params = req.args.copy()
        del params["change_language"]
        req.request["Location"] = build_url_from_path_and_params(
            req.path, params)
        return httpstatus.HTTP_MOVED_TEMPORARILY
コード例 #3
0
ファイル: start.py プロジェクト: mediatum/mediatum
    def show_workflow_step(self, req):
        typenames = self.get("newnodetype").split(";")
        wfnode = self.parents[0]
        redirect = ""
        message = ""

        # check existence of metadata types listed in the definition of the start node
        mdts = q(Metadatatypes).one()
        for schema in typenames:
            if not mdts.children.filter_by(name=schema.strip().split("/")[-1]).scalar():
                return ('<i>%s: %s </i>') % (schema, t(lang(req), "permission_denied"))

        if "workflow_start" in req.params:
            switch_language(req, req.params.get('workflow_language'))
            content_class = Node.get_class_for_typestring(req.params.get('selected_schema').split('/')[0])
            node = content_class(name=u'', schema=req.params.get('selected_schema').split('/')[1])
            self.children.append(node)

            # create user group named '_workflow' if it doesn't exist
            workflow_group = q(UserGroup).filter_by(name=u'_workflow').scalar()
            if workflow_group is None:
                workflow_group = UserGroup(name=u'_workflow', description=u'internal dummy group for nodes in workflows')
                db.session.add(workflow_group)

            # create access rule with '_workflow' user group
            workflow_rule = get_or_add_access_rule(group_ids=[workflow_group.id])

            special_access_ruleset = node.get_or_add_special_access_ruleset(ruletype=u'read')
            special_access_ruleset.rule_assocs.append(AccessRulesetToRule(rule=workflow_rule))

            node.set("creator", "workflow-" + self.parents[0].name)
            node.set("creationtime", date.format_date())
            node.set("system.wflanguage", req.params.get('workflow_language', req.Cookies.get('language')))
            node.set("key", mkKey())
            node.set("system.key", node.get("key"))  # initial key identifier
            req.session["key"] = node.get("key")
            db.session.commit()
            return self.forwardAndShow(node, True, req)

        elif "workflow_start_auth" in req.params:  # auth node by id and key
            try:
                node = q(Node).get(req.params.get('nodeid'))

                # startkey, but protected
                if node.get('system.key') == req.params.get('nodekey') and node.get('key') != req.params.get('nodekey'):
                    message = "workflow_start_err_protected"
                elif node.get('key') == req.params.get('nodekey'):
                    redirect = "/pnode?id=%s&key=%s" % (node.id, node.get('key'))
                else:
                    message = "workflow_start_err_wrongkey"
            except:
                logg.exception("exception in workflow step start (workflow_start_auth)")
                message = "workflow_start_err_wrongkey"

        types = []
        for a in typenames:
            if a:
                m = getMetaType(a)
                # we could now check m.isActive(), but for now let's
                # just take all specified metatypes, so that edit area
                # and workflow are independent on this
                types += [(m, a)]
        cookie_error = t(lang(req), "Your browser doesn't support cookies")

        js = """
        <script language="javascript">
        function cookie_test() {
            if (document.cookie=="")
                document.cookie = "CookieTest=Erfolgreich";
            if (document.cookie=="") {
                alert("%s");
            }
        }
        cookie_test();
        </script>""" % cookie_error

        return req.getTAL("workflow/start.html",
                          {'types': types,
                           'id': self.id,
                           'js': js,
                           'starttext': self.get('starttext'),
                           'languages': self.parents[0].getLanguages(),
                           'currentlang': lang(req),
                              'sidebartext': self.getSidebarText(lang(req)),
                              'redirect': redirect,
                              'message': message,
                              'allowcontinue': self.get('allowcontinue'),
                           "csrf": req.csrf_token.current_token,},
                          macro="workflow_start")
コード例 #4
0
ファイル: start.py プロジェクト: hibozzy/mediatum
    def show_workflow_step(self, req):
        typenames = self.get("newnodetype").split(";")
        wfnode = self.getParents()[0]
        redirect = ""
        message = ""

        # check existence of metadata types listed in the definition of the start node
        mdts = tree.getRoot("metadatatypes")
        for schema in typenames:
            if not mdts.hasChild(schema.strip().split("/")[-1]):
                return ("<i>%s: %s </i>") % (schema, t(lang(req), "permission_denied"))

        if "workflow_start" in req.params:
            switch_language(req, req.params.get("workflow_language"))
            node = tree.Node(name="", type=req.params.get("selected_schema"))
            self.addChild(node)
            node.setAccess("read", "{user workflow}")
            node.set("creator", "workflow-" + self.getParents()[0].getName())
            node.set("creationtime", date.format_date())
            node.set("system.wflanguage", req.params.get("workflow_language", req.session.get("language")))
            node.set("key", mkKey())
            node.set("system.key", node.get("key"))  # initial key identifier
            req.session["key"] = node.get("key")
            return self.forwardAndShow(node, True, req)

        elif "workflow_start_auth" in req.params:  # auth node by id and key
            try:
                node = tree.getNode(req.params.get("nodeid"))

                # startkey, but protected
                if node.get("system.key") == req.params.get("nodekey") and node.get("key") != req.params.get("nodekey"):
                    message = "workflow_start_err_protected"
                elif node.get("key") == req.params.get("nodekey"):
                    redirect = "/pnode?id=%s&key=%s" % (node.id, node.get("key"))
                else:
                    message = "workflow_start_err_wrongkey"
            except:
                message = "workflow_start_err_wrongkey"

        types = []
        for a in typenames:
            if a:
                m = getMetaType(a)
                # we could now check m.isActive(), but for now let's
                # just take all specified metatypes, so that edit area
                # and workflow are independent on this
                types += [(m, a)]
        cookie_error = t(lang(req), "Your browser doesn't support cookies")

        js = (
            """
        <script language="javascript">
        function cookie_test() {
            if (document.cookie=="")
                document.cookie = "CookieTest=Erfolgreich";
            if (document.cookie=="") {
                alert("%s");
            }
        }
        cookie_test();
        </script>"""
            % cookie_error
        )

        return req.getTAL(
            "workflow/start.html",
            {
                "types": types,
                "id": self.id,
                "js": js,
                "starttext": self.get("starttext"),
                "languages": self.getParents()[0].getLanguages(),
                "currentlang": lang(req),
                "sidebartext": self.getSidebarText(lang(req)),
                "redirect": redirect,
                "message": message,
                "allowcontinue": self.get("allowcontinue"),
            },
            macro="workflow_start",
        )
コード例 #5
0
ファイル: workflow.py プロジェクト: schnittstabil/mediatum
    def show_node_big(self, req, *args):
        template = "workflow/workflow.html"
        macro = "object_step"

        # the workflow operations (node forwarding, key assignment,
        # parent node handling) are highly non-reentrant, so protect
        # everything with a global lock
        global workflow_lock

        with workflow_lock:
            # stop caching
            _setCookie(req, "nocache", "1", path="/")

            key = req.params.get("key", req.session.get("key", ""))
            req.session["key"] = key

            if "obj" in req.params:
                nodes = [
                    q(Node).get(id) for id in req.params['obj'].split(',')
                ]

                for node in nodes:
                    if not self.has_write_access() and \
                            (key != node.get("key")):  # no permission

                        link = '(' + self.name + ')'
                        try:
                            return req.getTAL(
                                template, {
                                    "node": node,
                                    "link": link,
                                    "email": config.get("email.workflow"),
                                    "csrf": req.csrf_token.current_token
                                },
                                macro=macro)
                        except:
                            logg.exception(
                                "exception in show_node_big, ignoring")
                            return ""

                if 'action' in req.params:
                    if self.has_write_access():
                        if req.params.get('action') == 'delete':
                            for node in nodes:
                                for parent in node.parents:
                                    parent.children.remove(node)
                        elif req.params.get('action').startswith('move_'):
                            step = q(Node).get(
                                req.params.get('action').replace('move_', ''))
                            for node in nodes:
                                for parent in node.parents:
                                    parent.children.remove(node)
                                step.children.append(node)
                    db.session.commit()
                    return self.show_workflow_step(req)

                else:
                    node = nodes[0]

                if self in node.parents:
                    # set correct language for workflow for guest user only
                    if node.get('key') == node.get(
                            'system.key') and current_user.is_anonymous:
                        switch_language(req, node.get('system.wflanguage'))

                    link = req.makeLink("/mask", {"id": self.id})
                    if "forcetrue" in req.params:
                        return self.forwardAndShow(node, True, req, link=link)
                    if "forcefalse" in req.params:
                        return self.forwardAndShow(node, False, req, link=link)

                    return self.show_workflow_node(node, req)
                else:
                    return self.show_workflow_notexist(node, req)
            else:
                return self.show_workflow_step(req)
コード例 #6
0
    def show_workflow_step(self, req):
        typenames = self.get("newnodetype").split(";")
        wfnode = self.getParents()[0]
        redirect = ""
        message = ""

        # check existence of metadata types listed in the definition of the start node
        mdts = tree.getRoot("metadatatypes")
        for schema in typenames:
            if not mdts.hasChild(schema.strip().split("/")[-1]):
                return ('<i>%s: %s </i>') % (schema,
                                             t(lang(req), "permission_denied"))

        if "workflow_start" in req.params:
            switch_language(req, req.params.get('workflow_language'))
            node = tree.Node(name="", type=req.params.get('selected_schema'))
            self.addChild(node)
            node.setAccess("read", "{user workflow}")
            node.set("creator", "workflow-" + self.getParents()[0].getName())
            node.set("creationtime", date.format_date())
            node.set(
                "system.wflanguage",
                req.params.get('workflow_language',
                               req.session.get('language')))
            node.set("key", mkKey())
            node.set("system.key", node.get("key"))  # initial key identifier
            req.session["key"] = node.get("key")
            return self.forwardAndShow(node, True, req)

        elif "workflow_start_auth" in req.params:  # auth node by id and key
            try:
                node = tree.getNode(req.params.get('nodeid'))

                # startkey, but protected
                if node.get('system.key') == req.params.get(
                        'nodekey'
                ) and node.get('key') != req.params.get('nodekey'):
                    message = "workflow_start_err_protected"
                elif node.get('key') == req.params.get('nodekey'):
                    redirect = "/pnode?id=%s&key=%s" % (node.id,
                                                        node.get('key'))
                else:
                    message = "workflow_start_err_wrongkey"
            except:
                message = "workflow_start_err_wrongkey"

        types = []
        for a in typenames:
            if a:
                m = getMetaType(a)
                # we could now check m.isActive(), but for now let's
                # just take all specified metatypes, so that edit area
                # and workflow are independent on this
                types += [(m, a)]
        cookie_error = t(lang(req), "Your browser doesn't support cookies")

        js = """
        <script language="javascript">
        function cookie_test() {
            if (document.cookie=="")
                document.cookie = "CookieTest=Erfolgreich";
            if (document.cookie=="") {
                alert("%s");
            }
        }
        cookie_test();
        </script>""" % cookie_error

        return req.getTAL("workflow/start.html", {
            'types': types,
            'id': self.id,
            'js': js,
            'starttext': self.get('starttext'),
            'languages': self.getParents()[0].getLanguages(),
            'currentlang': lang(req),
            'sidebartext': self.getSidebarText(lang(req)),
            'redirect': redirect,
            'message': message,
            'allowcontinue': self.get('allowcontinue')
        },
                          macro="workflow_start")
コード例 #7
0
ファイル: start.py プロジェクト: schnittstabil/mediatum
    def show_workflow_step(self, req):
        typenames = self.get("newnodetype").split(";")
        wfnode = self.parents[0]
        redirect = ""
        message = ""

        # check existence of metadata types listed in the definition of the start node
        mdts = q(Metadatatypes).one()
        for schema in typenames:
            if not mdts.children.filter_by(
                    name=schema.strip().split("/")[-1]).scalar():
                return ('<i>%s: %s </i>') % (schema,
                                             t(lang(req), "permission_denied"))

        if "workflow_start" in req.params:
            switch_language(req, req.params.get('workflow_language'))
            content_class = Node.get_class_for_typestring(
                req.params.get('selected_schema').split('/')[0])
            node = content_class(
                name=u'',
                schema=req.params.get('selected_schema').split('/')[1])
            self.children.append(node)

            # create user group named '_workflow' if it doesn't exist
            workflow_group = q(UserGroup).filter_by(name=u'_workflow').scalar()
            if workflow_group is None:
                workflow_group = UserGroup(
                    name=u'_workflow',
                    description=u'internal dummy group for nodes in workflows')
                db.session.add(workflow_group)

            # create access rule with '_workflow' user group
            workflow_rule = get_or_add_access_rule(
                group_ids=[workflow_group.id])

            special_access_ruleset = node.get_or_add_special_access_ruleset(
                ruletype=u'read')
            special_access_ruleset.rule_assocs.append(
                AccessRulesetToRule(rule=workflow_rule))

            node.set("creator", "workflow-" + self.parents[0].name)
            node.set("creationtime", date.format_date())
            node.set(
                "system.wflanguage",
                req.params.get('workflow_language',
                               req.Cookies.get('language')))
            node.set("key", mkKey())
            node.set("system.key", node.get("key"))  # initial key identifier
            req.session["key"] = node.get("key")
            db.session.commit()
            return self.forwardAndShow(node, True, req)

        elif "workflow_start_auth" in req.params:  # auth node by id and key
            try:
                node = q(Node).get(req.params.get('nodeid'))

                # startkey, but protected
                if node.get('system.key') == req.params.get(
                        'nodekey'
                ) and node.get('key') != req.params.get('nodekey'):
                    message = "workflow_start_err_protected"
                elif node.get('key') == req.params.get('nodekey'):
                    redirect = "/pnode?id=%s&key=%s" % (node.id,
                                                        node.get('key'))
                else:
                    message = "workflow_start_err_wrongkey"
            except:
                logg.exception(
                    "exception in workflow step start (workflow_start_auth)")
                message = "workflow_start_err_wrongkey"

        types = []
        for a in typenames:
            if a:
                m = getMetaType(a)
                # we could now check m.isActive(), but for now let's
                # just take all specified metatypes, so that edit area
                # and workflow are independent on this
                types += [(m, a)]
        cookie_error = t(lang(req), "Your browser doesn't support cookies")

        js = """
        <script language="javascript">
        function cookie_test() {
            if (document.cookie=="")
                document.cookie = "CookieTest=Erfolgreich";
            if (document.cookie=="") {
                alert("%s");
            }
        }
        cookie_test();
        </script>""" % cookie_error

        return req.getTAL("workflow/start.html", {
            'types': types,
            'id': self.id,
            'js': js,
            'starttext': self.get('starttext'),
            'languages': self.parents[0].getLanguages(),
            'currentlang': lang(req),
            'sidebartext': self.getSidebarText(lang(req)),
            'redirect': redirect,
            'message': message,
            'allowcontinue': self.get('allowcontinue'),
            "csrf": req.csrf_token.current_token,
        },
                          macro="workflow_start")
コード例 #8
0
ファイル: workflow.py プロジェクト: mediatum/mediatum
    def show_node_big(self, req, *args):
        template = "workflow/workflow.html"
        macro = "object_step"

        # the workflow operations (node forwarding, key assignment,
        # parent node handling) are highly non-reentrant, so protect
        # everything with a global lock
        global workflow_lock
        workflow_lock.acquire()

        # stop caching
        req.setCookie("nocache", "1", path="/")

        try:
            key = req.params.get("key", req.session.get("key", ""))
            req.session["key"] = key

            if "obj" in req.params:
                nodes = [q(Node).get(id) for id in req.params['obj'].split(',')]

                for node in nodes:
                    if not self.has_write_access() and \
                            (key != node.get("key")):  # no permission

                        link = '(' + self.name + ')'
                        try:
                            return req.getTAL(template, {"node": node, "link": link, "email": config.get("email.workflow"), "csrf": req.csrf_token.current_token}, macro=macro)
                        except:
                            logg.exception("exception in show_node_big, ignoring")
                            return ""

                if 'action' in req.params:
                    if self.has_write_access():
                        if req.params.get('action') == 'delete':
                            for node in nodes:
                                for parent in node.parents:
                                    parent.children.remove(node)
                        elif req.params.get('action').startswith('move_'):
                            step = q(Node).get(req.params.get('action').replace('move_', ''))
                            for node in nodes:
                                for parent in node.parents:
                                    parent.children.remove(node)
                                step.children.append(node)
                    db.session.commit()
                    return self.show_workflow_step(req)

                else:
                    node = nodes[0]

                if self in node.parents:
                    # set correct language for workflow for guest user only
                    if node.get('key') == node.get('system.key') and current_user.is_anonymous:
                        switch_language(req, node.get('system.wflanguage'))

                    link = req.makeLink("/mask", {"id": self.id})
                    if "forcetrue" in req.params:
                        return self.forwardAndShow(node, True, req, link=link)
                    if "forcefalse" in req.params:
                        return self.forwardAndShow(node, False, req, link=link)

                    return self.show_workflow_node(node, req)
                else:
                    return self.show_workflow_notexist(node, req)
            else:
                return self.show_workflow_step(req)

        finally:
            workflow_lock.release()
コード例 #9
0
ファイル: workflow.py プロジェクト: hibozzy/mediatum
    def show_node_big(self, req, template="workflow/workflow.html", macro="object_step"):

        # the workflow operations (node forwarding, key assignment,
        # parent node handling) are highly non-reentrant, so protect
        # everything with a global lock
        global workflow_lock
        workflow_lock.acquire()

        try:
            access = acl.AccessData(req)
            key = req.params.get("key", req.session.get("key", ""))
            req.session["key"] = key

            if "obj" in req.params:
                nodes = [tree.getNode(id) for id in req.params['obj'].split(',')]

                for node in nodes:
                    if not access.hasWriteAccess(self) and \
                            (key != node.get("key")):  # no permission

                        link = '(' + self.name + ')'
                        try:
                            return req.getTAL(template, {"node": node, "link": link, "email": config.get("email.workflow")}, macro=macro)
                        except:
                            return ""

                if 'action' in req.params:
                    if access.hasWriteAccess(self):
                        if req.params.get('action') == 'delete':
                            for node in nodes:
                                for parent in node.getParents():
                                    parent.removeChild(node)
                        elif req.params.get('action').startswith('move_'):
                            step = tree.getNode(req.params.get('action').replace('move_', ''))
                            for node in nodes:
                                for parent in node.getParents():
                                    parent.removeChild(node)
                                step.addChild(node)
                    return self.show_workflow_step(req)

                else:
                    node = nodes[0]

                if self in node.getParents():
                    # set correct language for workflow for guest user only
                    if node.get('key') == node.get('system.key') and getUserFromRequest(req) == getUser(config.get('user.guestuser')):
                        switch_language(req, node.get('system.wflanguage'))

                    link = req.makeLink("/mask", {"id": self.id})
                    if "forcetrue" in req.params:
                        return self.forwardAndShow(node, True, req, link=link)
                    if "forcefalse" in req.params:
                        return self.forwardAndShow(node, False, req, link=link)

                    return self.show_workflow_node(node, req)
                else:
                    return self.show_workflow_notexist(node, req)
            else:
                return self.show_workflow_step(req)

        finally:
            workflow_lock.release()
コード例 #10
0
ファイル: workflow.py プロジェクト: hibozzy/mediatum
    def show_node_big(self, req, template="workflow/workflow.html", macro="object_step"):

        # the workflow operations (node forwarding, key assignment,
        # parent node handling) are highly non-reentrant, so protect
        # everything with a global lock
        global workflow_lock
        workflow_lock.acquire()

        try:
            access = acl.AccessData(req)
            key = req.params.get("key", req.session.get("key", ""))
            req.session["key"] = key

            if "obj" in req.params:
                nodes = [tree.getNode(id) for id in req.params["obj"].split(",")]

                for node in nodes:
                    if not access.hasWriteAccess(self) and (key != node.get("key")):  # no permission

                        link = "(" + self.name + ")"
                        try:
                            return req.getTAL(
                                template,
                                {"node": node, "link": link, "email": config.get("email.workflow")},
                                macro=macro,
                            )
                        except:
                            return ""

                if "action" in req.params:
                    if access.hasWriteAccess(self):
                        if req.params.get("action") == "delete":
                            for node in nodes:
                                for parent in node.getParents():
                                    parent.removeChild(node)
                        elif req.params.get("action").startswith("move_"):
                            step = tree.getNode(req.params.get("action").replace("move_", ""))
                            for node in nodes:
                                for parent in node.getParents():
                                    parent.removeChild(node)
                                step.addChild(node)
                    return self.show_workflow_step(req)

                else:
                    node = nodes[0]

                if self in node.getParents():
                    # set correct language for workflow for guest user only
                    if node.get("key") == node.get("system.key") and getUserFromRequest(req) == getUser(
                        config.get("user.guestuser")
                    ):
                        switch_language(req, node.get("system.wflanguage"))

                    link = req.makeLink("/mask", {"id": self.id})
                    if "forcetrue" in req.params:
                        return self.forwardAndShow(node, True, req, link=link)
                    if "forcefalse" in req.params:
                        return self.forwardAndShow(node, False, req, link=link)

                    return self.show_workflow_node(node, req)
                else:
                    return self.show_workflow_notexist(node, req)
            else:
                return self.show_workflow_step(req)

        finally:
            workflow_lock.release()