def test_has_object_been_changed_should_be_false(self): moderated_object = ModeratedObject(content_object=self.profile) moderated_object.save() value = moderated_object.has_object_been_changed(self.profile) self.assertEqual(value, False)
def test_has_object_been_changed_should_be_true(self): self.profile.description = 'New description' moderated_object = ModeratedObject(content_object=self.profile) moderated_object.save() user_profile = UserProfile.objects.get(user__username='******') value = moderated_object.has_object_been_changed(user_profile) self.assertEqual(value, True)
def test_has_object_been_changed_should_be_true(self): self.profile.description = 'New description' moderated_object = ModeratedObject(content_object=self.profile) moderated_object.save() user_profile = self.profile.__class__.objects.get(id=self.profile.id) value = moderated_object.has_object_been_changed(user_profile) self.assertEqual(value, True)
def post_save_handler(self, sender, instance, **kwargs): """ Creates new moderation object if instance is created, If instance exists and is only updated then save instance as content_object of moderated_object """ # check if object was loaded from fixture, bypass moderation if so if kwargs['raw']: return pk = instance.pk moderator = self.get_moderator(sender) if kwargs['created']: old_object = sender._default_manager.get(pk=pk) moderated_obj = ModeratedObject(content_object=old_object) if not moderator.visible_until_rejected: # Hide it by placing in draft state moderated_obj.moderation_state = MODERATION_DRAFT_STATE moderated_obj.save() moderator.inform_moderator(instance) return moderated_obj = ModeratedObject.objects.get_for_instance(instance) if (moderated_obj.moderation_status == MODERATION_STATUS_APPROVED and moderator.bypass_moderation_after_approval): # save new data in moderated object moderated_obj.changed_object = instance moderated_obj.save() return if moderated_obj.has_object_been_changed(instance): copied_instance = self._copy_model_instance(instance) if not moderator.visible_until_rejected: # Save instance with old data from changed_object, undoing # the changes that save() just saved to the database. moderated_obj.changed_object.save_base(raw=True) # Save the new data in moderated_object, so it will be applied # to the real record when the moderator approves the change. moderated_obj.changed_object = copied_instance moderated_obj.moderation_status = MODERATION_STATUS_PENDING moderated_obj.save() moderator.inform_moderator(instance) instance._moderated_object = moderated_obj
def post_save_handler(self, sender, instance, **kwargs): """ Creates new moderation object if instance is created, If instance exists and is only updated then save instance as content_object of moderated_object """ #check if object was loaded from fixture, bypass moderation if so if kwargs['raw']: return pk = instance.pk moderator = self.get_moderator(sender) if kwargs['created']: old_object = sender._default_manager.get(pk=pk) moderated_obj = ModeratedObject(content_object=old_object) moderated_obj.save() if instance.author and not moderator.is_auto_approve(instance, instance.author): moderator.inform_moderator(instance) else: moderated_obj \ = ModeratedObject.objects.get_for_instance(instance) if moderated_obj.moderation_status == MODERATION_STATUS_APPROVED\ and moderator.bypass_moderation_after_approval: return if moderated_obj.has_object_been_changed(instance): copied_instance = self._copy_model_instance(instance) if not moderator.visible_until_rejected: # save instance with data from changed_object moderated_obj.changed_object.save_base(raw=True) # save new data in moderated object moderated_obj.changed_object = copied_instance moderated_obj.moderation_status = MODERATION_STATUS_PENDING moderated_obj.moderation_reason = None moderated_obj.save() if moderated_obj.changed_by and not moderator.is_auto_approve(instance, moderated_obj.changed_by): moderator.inform_moderator(instance) instance._moderated_object = moderated_obj
def _get_or_create_moderated_object(self, instance, unchanged_obj): """ Get or create ModeratedObject instance. If moderated object is not equal instance then serialize unchanged in moderated object in order to use it later in post_save_handler """ try: moderated_object\ = ModeratedObject.objects.get_for_instance(instance) except ObjectDoesNotExist: moderated_object = ModeratedObject(content_object=unchanged_obj) moderated_object.changed_object = unchanged_obj else: if moderated_object.has_object_been_changed(instance): moderated_object.changed_object = unchanged_obj return moderated_object
def post_save_handler(self, sender, instance, **kwargs): """ Creates new moderation object if instance is created, If instance exists and is only updated then save instance as content_object of moderated_object """ # check if object was loaded from fixture, bypass moderation if so if kwargs['raw']: return pk = instance.pk moderator = self.get_moderator(sender) if kwargs['created']: old_object = sender._default_manager.get(pk=pk) moderated_obj = ModeratedObject(content_object=old_object) moderated_obj.save() moderator.inform_moderator(instance) else: moderated_obj = ModeratedObject.objects.\ get_for_instance(instance) if moderated_obj.moderation_status == \ MODERATION_STATUS_APPROVED and \ moderator.bypass_moderation_after_approval: return if moderated_obj.has_object_been_changed(instance): copied_instance = self._copy_model_instance(instance) if not moderator.visible_until_rejected: # save instance with data from changed_object moderated_obj.changed_object.save_base(raw=True) # save new data in moderated object moderated_obj.changed_object = copied_instance moderated_obj.moderation_status = MODERATION_STATUS_PENDING moderated_obj.save() moderator.inform_moderator(instance) instance._moderated_object = moderated_obj
def _get_or_create_moderated_object(self, instance, unchanged_obj, moderator): """ Get or create ModeratedObject instance. If moderated object is not equal instance then serialize unchanged in moderated object in order to use it later in post_save_handler """ try: moderated_object = ModeratedObject.objects.\ get_for_instance(instance) except ObjectDoesNotExist: moderated_object = ModeratedObject(content_object=unchanged_obj) moderated_object.changed_object = unchanged_obj else: if moderated_object.has_object_been_changed(instance): if moderator.visible_until_rejected: moderated_object.changed_object = instance else: moderated_object.changed_object = unchanged_obj return moderated_object