コード例 #1
0
 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)
コード例 #2
0
    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)
コード例 #3
0
    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)
コード例 #4
0
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)
コード例 #5
0
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
コード例 #6
0
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
コード例 #7
0
 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)
コード例 #8
0
 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)
コード例 #9
0
 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)
コード例 #10
0
 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)
コード例 #11
0
    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)
コード例 #12
0
 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)