def publish(self, user): """Change state to PUBLISHED and unpublish currently published versions""" # trigger pre operation signal action_token = send_pre_version_operation(constants.OPERATION_PUBLISH, version=self) self._set_publish(user) self.modified = timezone.now() self.save() StateTracking.objects.create( version=self, old_state=constants.DRAFT, new_state=constants.PUBLISHED, user=user, ) # Only one published version is allowed per unique grouping values. # Set all other published versions to unpublished pks_for_grouping_values = self.versionable.for_content_grouping_values( self.content).values_list("pk", flat=True) to_unpublish = Version.objects.exclude(pk=self.pk).filter( state=constants.PUBLISHED, object_id__in=pks_for_grouping_values, content_type=self.content_type, ) for version in to_unpublish: version.unpublish(user) on_publish = self.versionable.on_publish if on_publish: on_publish(self) # trigger post operation signal send_post_version_operation(constants.OPERATION_PUBLISH, version=self, token=action_token) if emit_content_change: emit_content_change(self.content)
def save(self, **kwargs): created = not self.pk # On version creation if created: # trigger pre operation signal action_token = send_pre_version_operation( constants.OPERATION_DRAFT, version=self) # Set the version number self.number = self.make_version_number() super().save(**kwargs) # Only one draft version is allowed per unique grouping values. # Set all other drafts to archived if self.state == constants.DRAFT: if created: pks_for_grouping_values = self.versionable.for_content_grouping_values( self.content).values_list("pk", flat=True) to_archive = Version.objects.exclude(pk=self.pk).filter( state=constants.DRAFT, object_id__in=pks_for_grouping_values, content_type=self.content_type, ) for version in to_archive: version.archive(self.created_by) on_draft_create = self.versionable.on_draft_create if on_draft_create: on_draft_create(self) # trigger post operation signal send_post_version_operation(constants.OPERATION_DRAFT, version=self, token=action_token) if emit_content_change: emit_content_change(self.content, created=created)
def inner(self, request, obj, form, change): func(self, request, obj, form, change) try: from djangocms_internalsearch.helpers import emit_content_change except ImportError: return emit_content_change(obj, sender=self.model)
def emit_content_change(objs, sender=None): try: from djangocms_internalsearch.helpers import emit_content_change except ImportError: return for obj in objs: emit_content_change(obj, sender=sender)
def remove_version_lock(version): """ Delete a version lock, handles when there are none available. """ deleted = VersionLock.objects.filter(version=version).delete() if deleted[0] and emit_content_change: emit_content_change(version.content) return deleted
def create_version_lock(version, user): """ Create a version lock if necessary """ lock, created = VersionLock.objects.get_or_create(version=version, created_by=user) if created and emit_content_change: emit_content_change(version.content) return lock
def unpublish(self, user): """Change state to UNPUBLISHED""" self._set_unpublish(user) self.save() StateTracking.objects.create(version=self, old_state=constants.PUBLISHED, new_state=constants.UNPUBLISHED, user=user) on_unpublish = self.versionable.on_unpublish if on_unpublish: on_unpublish(self) if emit_content_change: emit_content_change(self.content)
def archive(self, user): """Change state to ARCHIVED""" self._set_archive(user) self.save() StateTracking.objects.create(version=self, old_state=constants.DRAFT, new_state=constants.ARCHIVED, user=user) on_archive = self.versionable.on_archive if on_archive: on_archive(self) if emit_content_change: emit_content_change(self.content)
def unpublish(self, user): """Change state to UNPUBLISHED""" # trigger pre operation signal action_token = send_pre_version_operation( constants.OPERATION_UNPUBLISH, version=self) self._set_unpublish(user) self.modified = timezone.now() self.save() StateTracking.objects.create( version=self, old_state=constants.PUBLISHED, new_state=constants.UNPUBLISHED, user=user, ) on_unpublish = self.versionable.on_unpublish if on_unpublish: on_unpublish(self) # trigger post operation signal send_post_version_operation(constants.OPERATION_UNPUBLISH, version=self, token=action_token) if emit_content_change: emit_content_change(self.content)
def archive(self, user): """Change state to ARCHIVED""" # trigger pre operation signal action_token = send_pre_version_operation(constants.OPERATION_ARCHIVE, version=self) self._set_archive(user) self.modified = timezone.now() self.save() StateTracking.objects.create( version=self, old_state=constants.DRAFT, new_state=constants.ARCHIVED, user=user, ) on_archive = self.versionable.on_archive if on_archive: on_archive(self) # trigger post operation signal send_post_version_operation(constants.OPERATION_ARCHIVE, version=self, token=action_token) if emit_content_change: emit_content_change(self.content)
def save(self, **kwargs): created = not self.pk # On version creation if created: # Set the version number self.number = self.make_version_number() super().save(**kwargs) # Only one draft version is allowed per unique grouping values. # Set all other drafts to archived if self.state == constants.DRAFT: pks_for_grouping_values = self.versionable.for_content_grouping_values( self.content).values_list('pk', flat=True) to_archive = Version.objects.exclude(pk=self.pk).filter( state=constants.DRAFT, object_id__in=pks_for_grouping_values, content_type=self.content_type) for version in to_archive: version.archive(self.created_by) on_draft_create = self.versionable.on_draft_create if on_draft_create: on_draft_create(self) if emit_content_change: emit_content_change(self.content, created=created)
def publish(self, user): """Change state to PUBLISHED and unpublish currently published versions""" self._set_publish(user) self.save() StateTracking.objects.create(version=self, old_state=constants.DRAFT, new_state=constants.PUBLISHED, user=user) # Only one published version is allowed per unique grouping values. # Set all other published versions to unpublished pks_for_grouping_values = self.versionable.for_content_grouping_values( self.content).values_list('pk', flat=True) to_unpublish = Version.objects.exclude(pk=self.pk).filter( state=constants.PUBLISHED, object_id__in=pks_for_grouping_values, content_type=self.content_type) for version in to_unpublish: version.unpublish(user) on_publish = self.versionable.on_publish if on_publish: on_publish(self) if emit_content_change: emit_content_change(self.content)