Example #1
0
    def page_edit(self):
        back_url = html.var("back", self.list_url())

        self.load()
        self.need_overriding_permission("edit")

        # Three possible modes:
        # "create" -> create completely new page
        # "clone"  -> like new, but prefill form with values from existing page
        # "edit"   -> edit existing page
        mode = html.var("mode", "edit")
        if mode == "create":
            title = self.phrase("create")
            page_dict = {"name": self.default_name(), "topic": self.default_topic()}
        else:
            # Load existing page. visual from disk - and create a copy if 'load_user' is set
            page_name = html.var("load_name")
            if mode == "edit":
                title = self.phrase("edit")
                page = self.find_my_page(page_name)
                self.remove_instance((config.user_id, page_name))  # will be added later again
            else:  # clone
                title = self.phrase("clone")
                load_user = html.var("load_user")
                page = self.instance((load_user, page_name))
            page_dict = page.internal_representation()

        html.header(
            title
        )  ### TODO: extra stylesheets for BI. Move bi.css into views.css , stylesheets=["pages", "views", "status", "bi"])
        html.begin_context_buttons()
        html.context_button(_("Back"), back_url, "back")
        html.end_context_buttons()

        # TODO: Implement multiple topics
        vs = Dictionary(
            title=_("General Properties"), render="form", optional_keys=None, elements=self.collect_parameters()
        )

        def validate(page_dict):
            if self.find_my_page(page_dict["name"]):
                raise MKUserError("_p_name", _("You already have an with the ID <b>%s</b>") % page_dict["name"])

        new_page_dict = forms.edit_valuespec(vs, page_dict, validate=validate)
        if new_page_dict != None:
            new_page_dict["owner"] = config.user_id
            new_page = self(new_page_dict)

            if mode in ("edit", "clone"):
                # Take over non-editable keys from previous version
                for key in page_dict:
                    if key not in new_page_dict:
                        new_page_dict[key] = page_dict[key]

            self.add_page(new_page)
            self.save_user_instances()
            html.immediate_browser_redirect(1, back_url)
            html.message(_("Your changes haven been saved."))
            # Reload sidebar. TODO: This code logically belongs to PageRenderer. How
            # can we simply move it there?
            if new_page_dict.get("hidden") == False or new_page_dict.get("hidden") != page_dict.get("hidden"):
                html.reload_sidebar()

        else:
            html.show_localization_hint()

        html.footer()
        return
Example #2
0
    def page_edit(self):
        back_url = html.var("back", self.list_url())

        self.load()
        self.need_overriding_permission("edit")

        # Three possible modes:
        # "create" -> create completely new page
        # "clone"  -> like new, but prefill form with values from existing page
        # "edit"   -> edit existing page
        mode = html.var('mode', 'edit')
        if mode == "create":
            title = self.phrase("create")
            page_dict = {
                "name": self.default_name(),
                "topic": self.default_topic(),
            }
        else:
            # Load existing page. visual from disk - and create a copy if 'load_user' is set
            page_name = html.var("load_name")
            if mode == "edit":
                title = self.phrase("edit")

                owner_user_id = html.var("owner", config.user_id)
                if owner_user_id == config.user_id:
                    page = self.find_my_page(page_name)
                else:
                    page = self.find_foreign_page(owner_user_id, page_name)

                if page == None:
                    raise MKUserError(
                        None,
                        _("The requested %s does not exist") %
                        self.phrase("title"))

                # TODO FIXME: Looks like a hack
                self.remove_instance(
                    (owner_user_id, page_name))  # will be added later again
            else:  # clone
                title = self.phrase("clone")
                load_user = html.var(
                    "load_user")  # FIXME: Change varname to "owner"
                page = self.instance((load_user, page_name))
            page_dict = page.internal_representation()

        html.header(
            title
        )  ### TODO: extra stylesheets for BI. Move bi.css into views.css , stylesheets=["pages", "views", "status", "bi"])
        html.begin_context_buttons()
        html.context_button(_("Back"), back_url, "back")
        html.end_context_buttons()

        # TODO: Implement multiple topics
        vs = Dictionary(
            title=_("General Properties"),
            render='form',
            optional_keys=None,
            elements=self.collect_parameters(),
        )

        def validate(page_dict):
            owner_user_id = html.var("owner", config.user_id)
            if owner_user_id == config.user_id:
                page = self.find_my_page(page_name)
            else:
                page = self.find_foreign_page(owner_user_id, page_name)
            if page:
                raise MKUserError(
                    "_p_name",
                    _("You already have an with the ID <b>%s</b>") %
                    page_dict["name"])

        new_page_dict = forms.edit_valuespec(vs, page_dict, validate=validate)
        if new_page_dict != None:
            owner = html.var("owner", config.user_id)
            new_page_dict["owner"] = owner
            new_page = self(new_page_dict)

            if mode in ("edit", "clone"):
                # Take over non-editable keys from previous version
                for key in page_dict:
                    if key not in new_page_dict:
                        new_page_dict[key] = page_dict[key]

            self.add_page(new_page)
            self.save_user_instances(owner)
            html.immediate_browser_redirect(1, back_url)
            html.message(_('Your changes haven been saved.'))
            # Reload sidebar.TODO: This code logically belongs to PageRenderer. How
            # can we simply move it there?
            # TODO: This is not true for all cases. e.g. the BookmarkList is not
            # of type PageRenderer but has a dedicated sidebar snapin. Maybe
            # the best option would be to make a dedicated method to decide whether
            # or not to reload the sidebar.
            if new_page_dict.get("hidden") in [ None, False ] \
               or new_page_dict.get("hidden") != page_dict.get("hidden"):
                html.reload_sidebar()

        else:
            html.show_localization_hint()

        html.footer()
        return
Example #3
0
    def page_edit(self):
        back_url = html.var("back", self.list_url())

        self.load()
        self.need_overriding_permission("edit")

        # Three possible modes:
        # "create" -> create completely new page
        # "clone"  -> like new, but prefill form with values from existing page
        # "edit"   -> edit existing page
        mode = html.var('mode', 'edit')
        if mode == "create":
            title = self.phrase("create")
            page_dict = {
                "name"  : self.default_name(),
                "topic" : self.default_topic(),
            }
        else:
            # Load existing page. visual from disk - and create a copy if 'load_user' is set
            page_name = html.var("load_name")
            if mode == "edit":
                title = self.phrase("edit")

                owner_user_id = html.var("owner", config.user_id)
                if owner_user_id == config.user_id:
                    page = self.find_my_page(page_name)
                else:
                    page = self.find_foreign_page(owner_user_id, page_name)

                if page == None:
                    raise MKUserError(None, _("The requested %s does not exist") % self.phrase("title"))

                # TODO FIXME: Looks like a hack
                self.remove_instance((owner_user_id, page_name)) # will be added later again
            else: # clone
                title = self.phrase("clone")
                load_user = html.var("load_user") # FIXME: Change varname to "owner"
                page = self.instance((load_user, page_name))
            page_dict = page.internal_representation()


        html.header(title) ### TODO: extra stylesheets for BI. Move bi.css into views.css , stylesheets=["pages", "views", "status", "bi"])
        html.begin_context_buttons()
        html.context_button(_("Back"), back_url, "back")
        html.end_context_buttons()

        # TODO: Implement multiple topics
        vs = Dictionary(
            title = _("General Properties"),
            render = 'form',
            optional_keys = None,
            elements = self.collect_parameters(),
        )

        def validate(page_dict):
            owner_user_id = html.var("owner", config.user_id)
            page_name = page_dict["name"]
            if owner_user_id == config.user_id:
                page = self.find_my_page(page_name)
            else:
                page = self.find_foreign_page(owner_user_id, page_name)
            if page:
                raise MKUserError("_p_name", _("You already have an element with the ID <b>%s</b>") % page_dict["name"])

        new_page_dict = forms.edit_valuespec(vs, page_dict, validate=validate, focus="_p_title", method="POST")
        if new_page_dict != None:
            # Take over keys from previous value that are specific to the page type
            # and not edited here.
            if mode in ("edit", "clone"):
                for key, value in page_dict.items():
                    new_page_dict.setdefault(key, value)

            owner = html.var("owner", config.user_id)
            new_page_dict["owner"] = owner
            new_page = self(new_page_dict)

            self.add_page(new_page)
            self.save_user_instances(owner)
            if mode == "create":
                redirect_url = new_page.after_create_url() or back_url
            else:
                redirect_url = back_url

            html.immediate_browser_redirect(0.5, redirect_url)
            html.message(_('Your changes haven been saved.'))
            # Reload sidebar.TODO: This code logically belongs to PageRenderer. How
            # can we simply move it there?
            # TODO: This is not true for all cases. e.g. the BookmarkList is not
            # of type PageRenderer but has a dedicated sidebar snapin. Maybe
            # the best option would be to make a dedicated method to decide whether
            # or not to reload the sidebar.
            if new_page_dict.get("hidden") in [ None, False ] \
               or new_page_dict.get("hidden") != page_dict.get("hidden"):
                html.reload_sidebar()

        else:
            html.show_localization_hint()

        html.footer()
        return