Пример #1
0
 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)
Пример #2
0
    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)
Пример #3
0
    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
Пример #4
0
 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)
Пример #5
0
    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
Пример #6
0
    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
Пример #7
0
    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)
Пример #8
0
    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
Пример #9
0
    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)))
Пример #10
0
    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()
Пример #11
0
    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
Пример #12
0
 def form_adapter(self):
     adapter = EditNode.form_adapter(self)
     adapter.exclude(["mime_type"])
     adapter.import_rules.add_rule(ImportUploadInfo())
     return adapter