示例#1
0
        if request.method == 'POST':
            ctx['form'] = TagCreateAliasForm( request.POST )
            if ctx['form'].is_valid():
                cleaned_data = ctx['form'].cleaned_data
                
                tag = cleaned_data['tag']
                aliases = cleaned_data['aliases']

                already_added = TagAlias.objects.filter( tag=tag )
                for added in already_added:
                    if added.name in aliases:
                        aliases.remove( added.name )
                    else:
                        added.delete()
               
                for alias in aliases:
                    TagAlias.objects.create( tag=tag, name=alias )
                
                messages.add_message( request, messages.INFO, _( "Alias created!" ) )
                return redirect( self.get_absolute_url() )

        else: 
            ctx['form'] = TagCreateAliasForm()

        return render( request, 'moderation/tag_aliases/create.html', ctx )


registry.register( TagAliasTool() )
registry.register( TagRenamingTool() )
示例#2
0
        super( ExternalLinkToRemove, self ).reject( user, reason )

        self.send_notification();

    def send_notification( self ):
        if self.user != self.moderation_status_by and notification:
            notification.send( [ self.user ], "link_to_remove_moderated", { "item": self } )


# register moderated items

from film20.moderation.registry import registry
from film20.moderation.items import ModeratedObjectItem

moderated_links = ModeratedObjectItem( 
        ExternalLink, "externallink.can_add_link",
        name="externallink", 
        item_template_name="moderation/externallink/record.html",
        rss_template_name="moderation/externallink/rss.xml"
    )

moderated_links_to_remove = ModeratedObjectItem( 
        ExternalLinkToRemove, "externallink.can_add_link",
        name="externallink-tr", 
        item_template_name="moderation/externallink-tr/record.html",
        rss_template_name="moderation/externallink-tr/rss.xml"
    )

registry.register( moderated_links )
registry.register( moderated_links_to_remove )
示例#3
0
    def get_queryset(self, status):
        if status == ModeratedObject.STATUS_UNKNOWN:
            status = FilmToImport.UNKNOW

        elif status == ModeratedObject.STATUS_ACCEPTED:
            status = FilmToImport.ACCEPTED

        elif status == ModeratedObject.STATUS_REJECTED:
            status = FilmToImport.NOT_ACCEPTED

        return self.model._default_manager.filter(status=status)

    def accept_item(self, item, user, **kwargs):
        if self.can_accept(item, user):
            item.accept(user, **kwargs)

        else:
            raise ModerationException(_("Permission denied!"))

    def reject_item(self, item, user, reason=None):
        if self.can_reject(item, user):
            item.reject(user, reason)

        else:
            raise ModerationException(_("Permission denied!"))


moderated_added_film = FilmToImportModeratedItem()
registry.register(moderated_added_film)
示例#4
0
                pass

    # if moderated send notification ...
    if instance.moderation_status != AddedFilm.STATUS_UNKNOWN \
        and instance.user != instance.moderation_status_by:
        if notification:
            notification.send( [ instance.user ], "added_film_moderated", { "item": instance, 
                                                                            "accepted": instance.moderation_status == AddedFilm.STATUS_ACCEPTED } )

post_save.connect( added_film_post_save, sender=AddedFilm )

class AddedCharacter( models.Model ):
    person = models.ForeignKey( Person, verbose_name=_( "Person" ) )
    added_film = models.ForeignKey( AddedFilm, verbose_name=_( "Film" ) )
    
    importance = models.IntegerField( _( "Importance" ), blank=True, null=True )
    character = models.CharField( _( "Character" ), max_length=255, blank=True, null=True )


from film20.config.urls import urls
from film20.moderation.registry import registry
from film20.moderation.items import ModeratedObjectItem

moderated_added_film = ModeratedObjectItem( 
        AddedFilm, "add_films.can_accept_added_films",
        name=urls["MODERATED_FILMS"], item_template_name="moderation/add_films/record.html",
        rss_template_name="moderation/add_films/rss.xml"
    )

registry.register( moderated_added_film )
示例#5
0
    template_name = 'moderation/film_features/edit.html'
 
    def get_context_data( self, *args, **kwargs ):
        context = super( ModerationEditFeaturesView, self ).get_context_data( *args, **kwargs )
        moderated_items = registry.get_by_user( self.request.user )
        context.update({
            "all"            : self.request.method == 'GET' and self.request.GET.get( 'all', False ),
            "tag"            : self.request.method == 'GET' and self.request.GET.get( 'tag', '' ),
            "moderated_item" : registry.get_by_name( "film-features" ),
            "moderated_items": moderated_items['items'],
            "moderator_tools": moderated_items['tools'],
            "from_moderation": True,
        })
        return context

class FilmFeaturesTool( ModeratorTool ):
    name = "film-features"
    permission = "core.can_edit_localized_title"
    verbose_name = _( "Film features" )

    def get_view( self, request ):
        all = request.method == 'GET' and request.GET.get( 'all', False )
        tag = request.method == 'GET' and request.GET.get( 'tag', '' )
        
        next_film_to_vote = FilmFeature.objects.next_film_to_vote( request.user, all_movies=all, tag=tag )
        if next_film_to_vote is None:
            return render( request, 'moderation/film_features/edit.html', { 'all': all, 'tag': tag } )
        return ModerationEditFeaturesView.as_view()( request, pk=next_film_to_vote.pk )

registry.register( FilmFeaturesTool() )
示例#6
0
            "moderator_tools": moderated_items['tools']
        }

        lang = settings.LANGUAGE_CODE
        to_lang = TagTranslation.to_lang()

        if request.method == 'POST':
            for f, t in request.POST.items():
                TagTranslation.create_translation(f, t)

            if request.is_ajax():
                return HttpResponse(json.dumps({'success': True}))

        kwargs = {"%s__isnull" % to_lang: False}
        translated = [
            t[lang]
            for t in TagTranslation.objects.filter(**kwargs).values(lang)
        ]
        ctx['items'] = Tag.objects.all().exclude(
            name__in=translated).order_by('weight')
        ctx['lang'] = lang
        ctx['to_lang'] = to_lang

        return render(request, 'moderation/tag_translation/list.html', ctx)


registry.register(TagAliasTool())
registry.register(TagRenamingTool())
registry.register(TagTranslateToolA())
registry.register(TagTranslateToolB())
示例#7
0
                    ua.object_slug = instance.content_object.permalink
                    ua.content = instance.content_object.image

                ua.save()
            
            # if moderated send notification ...
            if instance.moderation_status != ModeratedPhoto.STATUS_UNKNOWN \
               and instance.user != instance.moderation_status_by:
                if notification:
                    notification.send( [ instance.user ], "photo_moderated", { "item": instance, 
                                                                          "status": instance.moderation_status } )

    else:
        raise NotImplementedError

post_save.connect( photo_post_save, sender=ModeratedPhoto )


from film20.config.urls import urls
from film20.moderation.registry import registry
from film20.moderation.items import ModeratedObjectItem

moderated_photo_item = ModeratedObjectItem( 
        ModeratedPhoto, "posters.can_accept_posters",
        name=urls["MODERATED_PHOTOS"], item_template_name="moderation/posters/record.html",
        rss_template_name="moderation/posters/rss.xml"
    )


registry.register( moderated_photo_item )
示例#8
0
                    ua.object_slug = instance.content_object.permalink
                    ua.content = poster.image

                ua.save()
            
            # if moderated send notification ...
            if instance.moderation_status != ModeratedPhoto.STATUS_UNKNOWN \
               and instance.user != instance.moderation_status_by:
                if notification:
                    notification.send( [ instance.user ], "photo_moderated", { "item": instance, 
                                                                          "status": instance.moderation_status } )

    else:
        raise NotImplementedError

post_save.connect( photo_post_save, sender=ModeratedPhoto )


from film20.config.urls import urls
from film20.moderation.registry import registry
from film20.moderation.items import ModeratedObjectItem

moderated_photo_item = ModeratedObjectItem( 
        ModeratedPhoto, "posters.can_accept_posters",
        name=urls["MODERATED_PHOTOS"], item_template_name="moderation/posters/record.html",
        rss_template_name="moderation/posters/rss.xml"
    )


registry.register( moderated_photo_item )
示例#9
0
# 
# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#-------------------------------------------------------------------------------

from django.db import models
from django.contrib.auth.models import User

from film20.moderation.models import ModeratedObject
from film20.moderation.registry import registry, AlreadyRegistered
from film20.moderation.items import ModeratedItem, ModeratedObjectItem

class TestModeratedObject( ModeratedObject ):
    user = models.ForeignKey( User )
    class Meta:
        permissions = (
            ( "test_moderation_permission", "Can moderate" ),
        )

class ModeratedItem1( ModeratedItem ):
    name = 'user-test'
    model = User
    permission = 'tests.test_moderation_permission'

registry.register( 
    ModeratedObjectItem( 
        TestModeratedObject, "tests.test_moderation_permission",
        name = "test-moderated-object", item_template_name='moderation/record.html'
    ) 
)
示例#10
0
            moderated_items['items'],
            "moderator_tools":
            moderated_items['tools'],
            "from_moderation":
            True,
        })
        return context


class FilmFeaturesTool(ModeratorTool):
    name = "film-features"
    permission = "core.can_edit_localized_title"
    verbose_name = _("Film features")

    def get_view(self, request):
        all = request.method == 'GET' and request.GET.get('all', False)
        tag = request.method == 'GET' and request.GET.get('tag', '')

        next_film_to_vote = FilmFeature.objects.next_film_to_vote(
            request.user, all_movies=all, tag=tag)
        if next_film_to_vote is None:
            return render(request, 'moderation/film_features/edit.html', {
                'all': all,
                'tag': tag
            })
        return ModerationEditFeaturesView.as_view()(request,
                                                    pk=next_film_to_vote.pk)


registry.register(FilmFeaturesTool())
示例#11
0
            "moderated_item": registry.get_by_name( self.name ),
            "moderated_items": moderated_items['items'],
            "moderator_tools": moderated_items['tools']
        }

        lang = settings.LANGUAGE_CODE
        to_lang = TagTranslation.to_lang()
        
        if request.method == 'POST':
            for f, t in request.POST.items():
                TagTranslation.create_translation( f, t )
        
            if request.is_ajax():
                return HttpResponse( json.dumps( { 'success': True  } ) )

        kwargs = {
            "%s__isnull" % to_lang: False
        }
        translated = [ t[lang] for t in TagTranslation.objects.filter( **kwargs ).values( lang ) ]
        ctx['items'] = Tag.objects.all().exclude( name__in=translated ).order_by( 'weight' )
        ctx['lang'] = lang
        ctx['to_lang'] = to_lang

        return render( request, 'moderation/tag_translation/list.html', ctx )


registry.register( TagAliasTool() )
registry.register( TagRenamingTool() )
registry.register( TagTranslateToolA() )
registry.register( TagTranslateToolB() )
示例#12
0
# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#-------------------------------------------------------------------------------

from django.db import models
from django.contrib.auth.models import User

from film20.moderation.models import ModeratedObject
from film20.moderation.registry import registry, AlreadyRegistered
from film20.moderation.items import ModeratedItem, ModeratedObjectItem


class TestModeratedObject(ModeratedObject):
    user = models.ForeignKey(User)

    class Meta:
        permissions = (("test_moderation_permission", "Can moderate"), )


class ModeratedItem1(ModeratedItem):
    name = 'user-test'
    model = User
    permission = 'tests.test_moderation_permission'


registry.register(
    ModeratedObjectItem(TestModeratedObject,
                        "tests.test_moderation_permission",
                        name="test-moderated-object",
                        item_template_name='moderation/record.html'))