def item_saved_notification(self, is_new, change): if change and "enabled" in change.changed_members: notify_user( translations("woost.controllers.backoffice.ExtensionEditNode " "%s extension needs reloading" % ("enabled" if self.item.enabled else "disabled"), extension=self.item), "notice", transient=False) else: EditNode.item_saved_notification(self, is_new, change)
def iter_changes(self): # Discard differences in the password field for member, language in EditNode.iter_changes(self): if not self.item.encryption_method or member.name not in ( "change_password", "password", "password_confirmation"): yield (member, language)
def form_schema(self): form_schema = EditNode.form_schema(self) password_member = form_schema.get_member("synchronization_password") if password_member: if User.encryption_method: order = form_schema.members_order = list(form_schema.members_order) pos = order.index("synchronization_password") if self.item.is_inserted: change_password_member = schema.Boolean( name = "change_password", required = True, default = False, visible_in_detail_view = False ) form_schema.add_member(change_password_member) order.insert(pos, "change_password") password_member.exclusive = change_password_member # No encryption: edit passwords in plain sight else: password_member.edit_control = "cocktail.html.TextBox" return form_schema
def iter_changes(self): # Discard differences in the password field for member, language in EditNode.iter_changes(self): if not User.encryption_method or member.name not in ( "change_password", "synchronization_password" ): yield (member, language)
def form_adapter(self): form_adapter = EditNode.form_adapter(self) if not self.content_type.edit_controls: form_adapter.exclude(["member_edit_control"]) if not self.content_type.search_controls: form_adapter.exclude(["member_search_control"]) return form_adapter
def form_schema(self): form_schema = EditNode.form_schema(self) edit_control = form_schema.get_member("member_edit_control") if edit_control: edit_control.enumeration = self.item.edit_controls search_control = form_schema.get_member("member_search_control") if search_control: search_control.enumeration = self.item.search_controls return form_schema
def iter_changes(self, source=None): for member, language in EditNode.iter_changes(self, source): # Ignore differences on the upload field if no file has been # uploaded if member.name == "upload": upload = schema.get(self.form_data, "upload", None) if (upload is None or upload.get("file_hash") == self.item.file_hash): continue yield (member, language)
def form_schema(self): form_schema = EditNode.form_schema(self) password_member = form_schema.get_member("password") if password_member: if self.item.encryption_method: order = form_schema.members_order = list( form_schema.members_order) pos = order.index("password") password_conf_member = schema.String( name="password_confirmation", edit_control="cocktail.html.PasswordBox", visible_in_detail_view=False, required=password_member.required) form_schema.add_member(password_conf_member) order.insert(pos + 1, "password_confirmation") if self.item.is_inserted: change_password_member = schema.Boolean( name="change_password", required=True, default=False, visible_in_detail_view=False) form_schema.add_member(change_password_member) order.insert(pos, "change_password") password_member.exclusive = change_password_member password_conf_member.exclusive = change_password_member @form_schema.add_validation def validate_password_confirmation(form_schema, value, ctx): password = ctx.get_value("password") password_confirmation = ctx.get_value( "password_confirmation") if password and password_confirmation \ and password != password_confirmation: yield PasswordConfirmationError( form_schema, value, ctx) # No encryption: edit passwords in plain sight else: password_member.edit_control = "cocktail.html.TextBox" return form_schema
def form_schema(self): form_schema = EditNode.form_schema(self) form_schema.add_member( FileUpload( "upload", async=True, async_uploader=async_uploader, async_upload_url="/async_upload", hash_algorithm="md5", get_file_destination=lambda upload: self.temp_file_path, member_group="content", required=not (self.item.is_inserted and self.item.file_name)))
def import_form_data(self, form_data, item): # Overriden to require exclusive access to application schemas. The # update will wait for all current requests to end, and then will block # any further incoming requests until the schemas have been modified. # The current request doesn't count when waiting for exclusive access # to the models: models_access.leave() # Require exclusive access try: with models_access.locking: return EditNode.import_form_data(self, form_data, item) # Claim usage of the models once again finally: models_access.enter()
def form_adapter(self): form_adapter = EditNode.form_adapter(self) if self.item.is_inserted: form_adapter.exclude("change_password") if User.encryption_method: kwargs = { "export_condition": False, "import_condition": lambda context: context.get("change_password", default = None) } else: kwargs = {} form_adapter.copy("synchronization_password", **kwargs) return form_adapter
def form_adapter(self): adapter = EditNode.form_adapter(self) adapter.exclude(["mime_type"]) adapter.import_rules.add_rule(ImportUploadInfo()) return adapter