Пример #1
0
def register(model, import_unmoderated=False, auto_moderator=None, long_desc=None,
             manager_name='objects', status_name='moderation_status',
             flagged_name='flagged', moderation_object_name='moderation_object',
             base_manager=None):
    if not model in registered_models:
        signals.post_save.connect(save_handler, sender=model)
        signals.pre_delete.connect(delete_handler, sender=model)
        # pass extra params onto add_fields to define what fields are named
        add_fields(model, manager_name, status_name, flagged_name, 
                   moderation_object_name, base_manager)
        registered_models[model] = {
            'auto_moderator': auto_moderator,
            'long_desc': long_desc or _default_long_desc,
        }
        if import_unmoderated:
            try:
                mod_obj_ids = model.objects.all().values_list('pk', flat=True)
                unmod_objs = model._base_manager.exclude(pk__in=mod_obj_ids)
                print 'importing %s unmoderated objects...' % unmod_objs.count()
                for obj in unmod_objs:
                    mo = ModeratedObject(
                        moderation_status=DEFAULT_STATUS,
                        content_object=obj,
                        timestamp=datetime.datetime.now())
                    mo.save()
            except:
                pass
Пример #2
0
def save_handler(sender, instance, **kwargs):

    if kwargs.get('created', None):

        mo = ModeratedObject(
            moderation_status=DEFAULT_STATUS,
            content_object=instance,
            timestamp=datetime.datetime.now())
        mo.save()

        # do automoderation
        auto_moderator = registered_models[instance.__class__]['auto_moderator']
        if auto_moderator:
            mod = auto_moderator(mo)
            if mod is None:
                pass # ignore the moderator if it returns None
            elif mod:
                mo.approve(_get_automod_user())
            else:
                mo.reject(_get_automod_user())

        # do old-style automoderation if automoderator did nothing
        if ENABLE_AUTOMODERATION and mo.moderation_status == PENDING_STATUS:
            user = get_current_user()
            if user and user.has_perm('gatekeeper.change_moderatedobject'):
                mo.approve(user)

        if MODERATOR_LIST:

            from django.contrib.sites.models import Site
            domain = Site.objects.get(id=settings.SITE_ID).domain

            status = mo.get_moderation_status_display()
            instance_class = instance.__class__.__name__
            long_desc = registered_models[instance.__class__]['long_desc']

            # message
            message = _long_desc(instance, long_desc)
            if status == 'Pending':
                message += "\n\nTo moderate, go to http://%s/admin/gatekeeper/moderatedobject/?ot=desc&o=2" % (message, domain)

            # subject
            key = "%s:%s" % (instance_class, status)
            if mo.moderation_status_by and mo.moderation_status_by.username == 'gatekeeper_automod':
                key = "%s:auto" % key
            subject = "[%s] New gatekeeper object on %s" % (key, domain)

            # sender
            from_addr = settings.DEFAULT_FROM_EMAIL

            send_mail(subject, message, from_addr, MODERATOR_LIST, fail_silently=True)