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
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
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