Example #1
0
    def setUp(self):
        self.u1 = User.objects.create_user("user", "*****@*****.**", "user")
        self.u1.is_superuser = True
        self.u1.save()

        self.u2 = User.objects.create_user("user2", "*****@*****.**", "user2")
        self.u3 = User.objects.create_user("user3", "*****@*****.**", "user3")
        self.u4 = User.objects.create_user("user4", "*****@*****.**", "user4")

        self.f1 = Film()
        self.f1.title = "Battlefield Earth II"
        self.f1.type = Object.TYPE_FILM
        self.f1.permalink = "battlefirld-earth-ii"
        self.f1.release_year = 2010
        self.f1.production_country_list = "USA"
        self.f1.save()
        self.f1.save_tags("sciencie-fiction komedia test1 test2",
                          LANG="pl",
                          saved_by=2)

        self.f2 = Film()
        self.f2.title = "Battlefield Earth II 2"
        self.f2.type = Object.TYPE_FILM
        self.f2.permalink = "battlefirld-earth-ii-2"
        self.f2.release_year = 2010
        self.f2.production_country_list = "USA"
        self.f2.save()
        self.f2.save_tags("sciencie komedia test1", LANG="pl", saved_by=2)

        rating_helper.rate(self.u1, 1, self.f1.id)
        rating_helper.rate(self.u1, 2, self.f2.id)
        rating_helper.rate(self.u2, 3, self.f1.id)
        rating_helper.rate(self.u3, 3, self.f1.id)
        rating_helper.rate(self.u4, 3, self.f2.id)
Example #2
0
    def setUp( self ):
        self.u1 = User.objects.create_user( "user", "*****@*****.**", "user" )
        self.u1.is_superuser = True
        self.u1.save()

        self.u2 = User.objects.create_user( "user2", "*****@*****.**", "user2" )
        self.u3 = User.objects.create_user( "user3", "*****@*****.**", "user3" )
        self.u4 = User.objects.create_user( "user4", "*****@*****.**", "user4" )

        self.f1 = Film()
        self.f1.title = "Battlefield Earth II"
        self.f1.type = Object.TYPE_FILM
        self.f1.permalink = "battlefirld-earth-ii"
        self.f1.release_year = 2010
        self.f1.production_country_list = "USA"
        self.f1.save()
        self.f1.save_tags( "sciencie-fiction komedia test1 test2", LANG="pl", saved_by=2)

        self.f2 = Film()
        self.f2.title = "Battlefield Earth II 2"
        self.f2.type = Object.TYPE_FILM
        self.f2.permalink = "battlefirld-earth-ii-2"
        self.f2.release_year = 2010
        self.f2.production_country_list = "USA"
        self.f2.save()
        self.f2.save_tags( "sciencie komedia test1", LANG="pl", saved_by=2)

        rating_helper.rate(self.u1, 1, self.f1.id)
        rating_helper.rate(self.u1, 2, self.f2.id)
        rating_helper.rate(self.u2, 3, self.f1.id)
        rating_helper.rate(self.u3, 3, self.f1.id)
        rating_helper.rate(self.u4, 3, self.f2.id)
Example #3
0
 def save(self):
     from film20.core import rating_helper
     rating_helper.rate(self.user,
                        self.cleaned_data['rating'],
                        type=self.cleaned_data['type'],
                        film_id=self.cleaned_data['film_id'],
                        actor_id=self.cleaned_data['actor_id'],
                        director_id=self.cleaned_data['director_id'])
Example #4
0
 def save(self):
     from film20.core import rating_helper
     rating_helper.rate(self.user,
             self.cleaned_data['rating'],
             type=self.cleaned_data['type'],
             film_id=self.cleaned_data['film_id'],
             actor_id=self.cleaned_data['actor_id'],
             director_id=self.cleaned_data['director_id']
     )
Example #5
0
    def testRatingRemoveFromWishlist( self ):

        BasketItem.objects.create( film=self.film, wishlist=BasketItem.DYING_FOR, user=self.user )

        self.assertEqual( len( BasketItem.user_basket( self.user ) ), 1 )

        rating_helper.rate(self.user, 5, film_id=self.film.id)
    
        bi = BasketItem.objects.get( film=self.film, user=self.user )
        self.assertTrue( bi.wishlist is None )
Example #6
0
 def create_rating(self, request, data):
     if not 'rating' in data:
         raise BadRequestException("'rating' is required")
     if not self.user and not 'user_uri' in data:
         raise BadRequestException("'user_uri' is required")
     if not 'film_uri' in data:
         raise BadRequestException("'film_uri' is required")
     user = self.user or get_resource(request, data.get('user_uri'))
     film = get_resource(request, data.get('film_uri'))
     value = self.parse_rating(data.get('rating'))
     rating_helper.rate(user, value, film.id, skip_activity=True)
Example #7
0
    def testRatingRemoveFromWishlist(self):

        BasketItem.objects.create(film=self.film,
                                  wishlist=BasketItem.DYING_FOR,
                                  user=self.user)

        self.assertEqual(len(BasketItem.user_basket(self.user)), 1)

        rating_helper.rate(self.user, 5, film_id=self.film.id)

        bi = BasketItem.objects.get(film=self.film, user=self.user)
        self.assertTrue(bi.wishlist is None)
Example #8
0
    def test_rate_films(self):
        cache.set('test', True)
        self.assertTrue(cache.get('test'))
        
        cache.clear()
        self.assertTrue(cache.get('test') is None)

        settings.RATING_BASKET_SIZE = 20
        
        all_films = set()

        films = Film.get_films_to_rate(self.user, 20)
        all_films.update(f.id for f in films)
        logger.info("film ids: %r", [f.id for f in films])
        self.assertTrue(all(self.film_pos[f.id]<=20 for f in films))
        
        films[0].mark_as_seen(self.user)

        BasketItem.objects.create(film=films[1], wishlist=1,
                user=self.user)
        
        rating_helper.rate(self.user, 5, film_id=films[2].id)

        films = Film.get_films_to_rate(self.user, 17)
        for f in films:
            f.mark_as_seen(self.user)

        # second basket
        films = Film.get_films_to_rate(self.user, 10)
        all_films.update(f.id for f in films)
        logger.info("film ids: %r", [f.id for f in films])
        self.assertTrue(all(self.film_pos[f.id]>20 and self.film_pos[f.id]<=40 for f in films))
        for f in films:
            f.mark_as_seen(self.user)

        cache.clear()

        films = Film.get_films_to_rate(self.user, 10)
        all_films.update(f.id for f in films)
        self.assertTrue(all(self.film_pos[f.id]>20 and self.film_pos[f.id]<=40 for f in films))
        for f in films:
            f.mark_as_seen(self.user)

        films = Film.get_films_to_rate(self.user, 100)
        all_films.update(f.id for f in films)
        for f in films:
            f.mark_as_seen(self.user)
        self.assertEquals(len(films), 60)

        self.assertEquals(len(all_films), 100)

        self.assertFalse(Film.get_films_to_rate(self.user, 1))
def save_rating(film, user, score=None, review=None, overwrite=False):
    """
        Saves a single rating to database
    """
    rated = False
    if score:
        score = int(float(score))
        link = film.parent.permalink
        rated = rating_helper.rate(user, score, film_id=film.id, overwrite=overwrite, check_if_exists=True, _send_notice=False)

    if review and len(review) < ShortReview._meta.get_field('review_text').max_length:
        try:
            sr = ShortReview.all_objects.get(kind=ShortReview.REVIEW,
                                             object=film, user=user,
                                             LANG=settings.LANGUAGE_CODE)
            logger.info("review fetched from db: updating for user_id %s, object %s" % (str(user.id), str(film.id)))
        except ShortReview.DoesNotExist:
            sr = ShortReview(type=ShortReview.TYPE_SHORT_REVIEW,
                             kind=ShortReview.REVIEW, permalink='FIXME',
                             status=1, version=1, object=film, user=user,
                             LANG=settings.LANGUAGE_CODE)
            logger.info("review doesn't exist, creating with user_id: %s, object %s" % (str(user.id), str(film.id)))

        if not sr.review_text or overwrite:
            sr.review_text = review
            try:
                sr.save()
                logger.info("review saved")
            except Exception, e:
                logger.error("review not saved, exception caught: " + str(e))
Example #10
0
    def initialize(self):
        self.clean_data()

        # set up users
        self.u1 = User.objects.create_user('michuk',
                                           '*****@*****.**',
                                           'secret')
        self.u1.save()
        self.u2 = User(username='******', email='*****@*****.**')
        self.u2.save()
        self.u3 = User(username='******', email='*****@*****.**')
        self.u3.save()
        self.u4 = User(username='******', email='*****@*****.**')
        self.u4.save()

        # set up film
        self.film = Film()
        self.film.title = "Battlefield Earth II"
        self.film.type = Object.TYPE_FILM
        self.film.permalink = "battlefirld-earth-ii"
        self.film.release_year = 2010
        self.film.save()
        self.film.save_tags('comedy')

        self.film1 = Film()
        self.film1.title = "Battlefield Earth III"
        self.film1.type = Object.TYPE_FILM
        self.film1.permalink = "battlefirld-earth-iii"
        self.film1.release_year = 2010
        self.film1.save()
        self.film1.save_tags('sci-fi')

        self.film2 = Film()
        self.film2.title = "Battlefield Earth IV"
        self.film2.type = Object.TYPE_FILM
        self.film2.permalink = "battlefirld-earth-iv"
        self.film2.release_year = 2010
        self.film2.save()
        self.film2.save_tags('horror')

        rating_helper.rate(self.u1, 8, self.film.id)
        rating_helper.rate(self.u1, 8, self.film1.id)
        rating_helper.rate(self.u1, 8, self.film2.id)
        rating_helper.rate(self.u2, 8, self.film2.id, _skip_activity=True)
Example #11
0
    def initialize(self):
        self.clean_data()

        # set up users
        self.u1 = User.objects.create_user("michuk", "*****@*****.**", "secret")
        self.u1.save()
        self.u2 = User(username="******", email="*****@*****.**")
        self.u2.save()
        self.u3 = User(username="******", email="*****@*****.**")
        self.u3.save()
        self.u4 = User(username="******", email="*****@*****.**")
        self.u4.save()

        # set up film
        self.film = Film()
        self.film.title = "Battlefield Earth II"
        self.film.type = Object.TYPE_FILM
        self.film.permalink = "battlefirld-earth-ii"
        self.film.release_year = 2010
        self.film.save()
        self.film.save_tags("comedy")

        self.film1 = Film()
        self.film1.title = "Battlefield Earth III"
        self.film1.type = Object.TYPE_FILM
        self.film1.permalink = "battlefirld-earth-iii"
        self.film1.release_year = 2010
        self.film1.save()
        self.film1.save_tags("sci-fi")

        self.film2 = Film()
        self.film2.title = "Battlefield Earth IV"
        self.film2.type = Object.TYPE_FILM
        self.film2.permalink = "battlefirld-earth-iv"
        self.film2.release_year = 2010
        self.film2.save()
        self.film2.save_tags("horror")

        rating_helper.rate(self.u1, 8, self.film.id)
        rating_helper.rate(self.u1, 8, self.film1.id)
        rating_helper.rate(self.u1, 8, self.film2.id)
        rating_helper.rate(self.u2, 8, self.film2.id, _skip_activity=True)
Example #12
0
    def setUp( self ):
        self.u1 = User.objects.create_user( "user1", "*****@*****.**", "user" )
        self.u2 = User.objects.create_user( "user2", "*****@*****.**", "user" )
        self.u3 = User.objects.create_user( "user3", "*****@*****.**", "user" )

        self.films = []
        for i in range(10):
            f = Film.objects.create(
                permalink="test-film-%d" % i,
                title="title %2d" % i,
                type=Film.TYPE_FILM,
                release_year=2000,
            )
            rating_helper.rate( self.u1, random.randint( 1, 5 ), film_id=f.pk )
            rating_helper.rate( self.u2, random.randint( 1, 5 ), film_id=f.pk )

            self.films.append( f )

        SimilarFilm.add_vote( self.u2, self.films[1], self.films[2] )
        SimilarFilm.add_vote( self.u3, self.films[2], self.films[1] )

        SimilarFilm.add_vote( self.u2, self.films[2], self.films[4] )

        rating_helper.rate( self.u3, 3, film_id=self.films[2].pk )
Example #13
0
    def setUp(self):
        self.u1 = User.objects.create_user("user1", "*****@*****.**", "user")
        self.u2 = User.objects.create_user("user2", "*****@*****.**", "user")
        self.u3 = User.objects.create_user("user3", "*****@*****.**", "user")

        self.films = []
        for i in range(10):
            f = Film.objects.create(
                permalink="test-film-%d" % i,
                title="title %2d" % i,
                type=Film.TYPE_FILM,
                release_year=2000,
            )
            rating_helper.rate(self.u1, random.randint(1, 5), film_id=f.pk)
            rating_helper.rate(self.u2, random.randint(1, 5), film_id=f.pk)

            self.films.append(f)

        SimilarFilm.add_vote(self.u2, self.films[1], self.films[2])
        SimilarFilm.add_vote(self.u3, self.films[2], self.films[1])

        SimilarFilm.add_vote(self.u2, self.films[2], self.films[4])

        rating_helper.rate(self.u3, 3, film_id=self.films[2].pk)
Example #14
0
 def rate_film(self, film_id, rating, type=1):
     return rating_helper.rate(self.user,
                               rating,
                               film_id=film_id,
                               type=type,
                               redis_only=False)
Example #15
0
def film_merging_resolve( request, id ):
    dp = get_object_or_404( DuplicateFilm, pk=id )
    step = int( request.POST.get( 'step', 1 ) )

    moderated_items = registry.get_by_user( request.user )
    ctx = {
        "step": step,
        "duplicate_film": dp,
        "moderated_items": moderated_items['items'],
        "moderator_tools": moderated_items['tools'],
    }

    if step == 1:
        ctx['stats'] = {
            'number_of_ratings': {
                'A': Rating.objects.filter( film=dp.filmA ).count(),
                'B': Rating.objects.filter( film=dp.filmB ).count(),
            },
            'number_of_activities': {
                'A': UserActivity.all_objects.filter( film=dp.filmA ).count(),
                'B': UserActivity.all_objects.filter( film=dp.filmB ).count(),
            }
        }

    elif step > 1:
        if 'A' in request.POST:
            option    = 'A'
            selected  = dp.filmA
            to_delete = dp.filmB

        else:
            option    = 'B'
            selected  = dp.filmB
            to_delete = dp.filmA

        ctx['option']    = option
        ctx['selected']  = selected
        ctx['to_delete'] = to_delete

        if step in [2, 3]:
            save = ( step == 3 )

            if not save:
                preview = Preview( request, item_formater )

            with transaction.commit_on_success():
                has_photo = selected.image or selected.hires_image

                # 1. update tags
                tags = { 
                    'en': [],
                    'pl': [] 
                }

                for lang in ( 'en', 'pl' ):
                    for flm in ( to_delete, selected ):
                        try:
                            film_localized = ObjectLocalized.objects.get( parent=flm.id, LANG=lang )
                            for tag in Tag.objects.get_for_object( film_localized ):
                                if not tag.name in tags[lang]:
                                    tags[lang].append( tag.name )

                        except ObjectLocalized.DoesNotExist: 
                            pass

                for lang in ( 'en', 'pl' ):
                    if len( tags[lang] ):
                        tag_list = ", ". join( tags[lang] )
                        if save:
                            selected.save_tags( tag_list, lang )
                        else:
                            preview.add_item( _( 'Merged tags' ), "<strong>%s</strong>: %s" % ( lang, tag_list ), "" )
            

                # 2. update wishlist and owned 
                for bi in BasketItem.objects.filter( film=to_delete ):
                    try:
                        BasketItem.objects.get( film=selected, user=bi.user )

                    except BasketItem.DoesNotExist: 
                        if save:
                            bi.film = selected
                            bi.save()

                        else:
                            preview.add_item( _( 'Basket item to update' ), bi, "" )

               
                # 3. merge all activities reloated to that film
                for ua in UserActivity.all_objects.filter( film=to_delete ):

                    # remove deleted object photo activity if selected film already has
                    if has_photo and ua.activity_type == UserActivity.TYPE_POSTER:
                        if save:
                            ua.delete()

                        else:
                            preview.add_item( _( 'UserActivity to remove' ), ua,
                                                _( "will be removed because the film already has image" ) )
                        continue
                     
                    if save:
                        # film wallpost 
                        if ua.activity_type == UserActivity.TYPE_SHORT_REVIEW:
                            ua.object = selected
                            ua.watching_object = selected
                            ua.title = str( selected )
 
                        ua.film = selected
                        ua.film_title = selected.get_title();
                        ua.film_slug = selected.permalink
                        ua.save()

                    else:
                        preview.add_item( _( 'UserActivity to update' ), ua, _( "will be updated to point to a selected film" ) )

                # 3. merge film photo
                if not has_photo and ( to_delete.hires_image or to_delete.image ):
                    if save:
                        selected.image = to_delete.image
                        selected.hires_image = to_delete.hires_image
                    else:
                        preview.add_item( _( 'Photo to replace' ), to_delete.hires_image or to_delete.image
                                            , _( "the image will be taken from object to delete" ) )

                # 4. update all the ratings of this film
                for rating in Rating.objects.filter( film=to_delete, rating__isnull=False ):
                    try:
                        selected_rating = Rating.objects.get( film=selected, type=rating.type, user=rating.user )
                        if save:
                            rating_helper.rate(rating.user, None, film_id=to_delete.id, type=rating.type)
                        else:
                            preview.add_item( 'Film rating to delete', rating, _( "the film rating to delete - user rated both films" ) )

                    except Rating.DoesNotExist:
                        if save:
                            rating_helper.rate(rating.user, rating.rating, film_id=selected.id, type=rating.type)
                            rating_helper.rate(rating.user, None, film_id=to_delete.id, type=rating.type)
                        else:
                            preview.add_item( 'Film rating to update', rating, _( "the film rating to update" ) )

                # 5. short reviews
                for review in ShortReview.all_objects.filter( object__pk=to_delete.pk ):
                    if save:
                        review.object=selected
                        review.save()

                    else:
                        preview.add_item( 'Short Review to update', review, _( "the related object of this short review will be updated" ) )


                # 6. articles
                for post in Post.objects.filter( related_film__pk=to_delete.pk ):
                    if save:
                        post.related_film.remove( to_delete )
                        post.related_film.add( selected )
                        post.save()

                    else:
                        preview.add_item( 'Article to update', post, _( "the related film of this article will be updated" ) )

                # 7. showtimes
                for foch in FilmOnChannel.objects.filter( film=to_delete ):
                    if save:
                        foch.film = selected
                        foch.save()

                    else:
                        preview.add_item( 'Film on channel to update', foch, "" )

                for checkin in ScreeningCheckIn.objects.filter( film=to_delete ):
                    if save:
                        checkin.film = selected
                        checkin.save()

                    else:
                        preview.add_item( 'Checkin to update', checkin, "" )


                # 8. delete object
                if save:
                    to_delete.delete()
                    selected.save()

                else:
                    ctx['preview'] = preview
                    ctx['objects_to_delete'] = get_related_objects( [to_delete] )

    return render( request, "moderation/merging_tools/movies/resolve-step-%d.html" % step, ctx )
Example #16
0
def do_people_merging_resolve( selected, to_delete, preview = None ):

    save = preview is None

    with transaction.commit_on_success():
        has_photo = selected.image or selected.hires_image
        
        # 1. merge all activities reloated to that person
        for ua in UserActivity.all_objects.filter( person=to_delete ):

            # remove deleted object photo activity if selected person already has
            if has_photo and ua.activity_type == UserActivity.TYPE_POSTER:
                if save:
                    ua.delete()

                else:
                    preview.add_item( _( 'UserActivity to remove' ), ua,
                                        _( "will be removed becouse person already has image" ) )
                continue
            
            # update poster related fields
            if ua.activity_type == UserActivity.TYPE_POSTER:
                if save:
                    ua.object_title = str( selected );
                    ua.object_slug = selected.permalink
            
            # person wallpost 
            elif ua.activity_type == UserActivity.TYPE_SHORT_REVIEW:
                if save:
                    ua.object = selected
                    ua.watching_object = selected
                    ua.title = str( selected )
           
            if save:
                ua.person = selected
                ua.save()
            else:
                preview.add_item( _( 'UserActivity to update' ), ua, _( "will be updated to point selected person" ) )

        # 2. merge person photo
        if not has_photo and ( to_delete.hires_image or to_delete.image ):
            if save:
                selected.image = to_delete.image
                selected.hires_image = to_delete.hires_image
            else:
                preview.add_item( _( 'Photo to replace' ), to_delete.hires_image or to_delete.image
                                    , _( "the image will be taken from object to delete" ) )

        # 3. update links to that person in all the films he's eiter acting or directing
        for character in Character.objects.filter( person=to_delete ):
            if save:
                character.person = selected
                character.save()
            else:
                preview.add_item( 'Character to replace', character, _( "this characters will be updated" ) )

        # ordering ???
        for film in Film.objects.filter( directors__in=[to_delete] ):
            if save:
                film.directors.remove( to_delete )
                film.directors.add( selected )
                film.save()

            else:
                preview.add_item( 'Director to replace', film, _( "the director of this movies will be updated" ) )

        # 4. update all the ratings of this person
        for rating in Rating.objects.filter( director=to_delete ):
            try:
                selected_rating = Rating.objects.get( director=selected, type=rating.type, user=rating.user )
                if save:
                    rating_helper.rate(rating.user, None, director_id=to_delete.id, type=rating.type)
                else:
                    preview.add_item( 'Director rating to delete', rating, _( "the director rating to delete - user rated both" ) )

            except Rating.DoesNotExist:
                if save:
                    rating_helper.rate(rating.user, rating.rating, director_id=selected.id, type=rating.type)
                    rating_helper.rate(rating.user, None, director_id=to_delete.id, type=rating.type)

                else:
                    preview.add_item( 'Director rating to update', rating, _( "the director rating to update" ) )

        for rating in Rating.objects.filter( actor=to_delete ):
            try:
                selected_rating = Rating.objects.get( actor=selected, type=rating.type, user=rating.user )
                if save:
                    rating_helper.rate(rating.user, None, actor_id=to_delete.id, type=rating.type)
                else:
                    preview.add_item( 'Actor rating to delete', rating, _( "the actor rating to delete - user rated both" ) )

            except Rating.DoesNotExist:
                if save:
                    rating_helper.rate(rating.user, rating.rating, actor_id=selected.id, type=rating.type)
                    rating_helper.rate(rating.user, None, actor_id=to_delete.id, type=rating.type)

                else:
                    preview.add_item( 'Actor rating to update', rating, _( "the actor rating to update" ) )

        # 5. short reviews
        for review in ShortReview.all_objects.filter( object__pk=to_delete.pk ):
            if save:
                review.object=selected
                review.save()

            else:
                preview.add_item( 'Short Review to update', review, _( "the related object of this short review will be updated" ) )


        # 6. articles
        for post in Post.objects.filter( related_person__pk=to_delete.pk ):
            if save:
                post.related_person.remove( to_delete )
                post.related_person.add( selected )
                post.save()

            else:
                preview.add_item( 'Article to update', post, _( "the related person of this article will be updated" ) )

        # 7. delete object
        if save:
            to_delete.delete()
            selected.save()
Example #17
0
    def setUp( self ):
        self.u1 = User.objects.create_user( "user", "*****@*****.**", "user" )
        self.u1.is_superuser = True
        self.u1.save()

        self.u2 = User.objects.create_user( "user2", "*****@*****.**", "user2" )
        self.u3 = User.objects.create_user( "user3", "*****@*****.**", "user3" )
        self.u4 = User.objects.create_user( "user4", "*****@*****.**", "user4" )

        self.p1 = Person.objects.create( name='P1', surname='P1', permalink='p1', type=Person.TYPE_PERSON )
        self.p2 = Person.objects.create( name='P2', surname='P2', permalink='p2', type=Person.TYPE_PERSON )

        rating_helper.rate(self.u1, 5, director_id=self.p1.id, type=2)
        rating_helper.rate(self.u2, 2, director_id=self.p2.id, type=2)
        
        rating_helper.rate(self.u1, 1, actor_id=self.p1.id, type=3)
        rating_helper.rate(self.u2, 2, actor_id=self.p1.id, type=3)
        rating_helper.rate(self.u3, 3, actor_id=self.p1.id, type=3)
        
        rating_helper.rate(self.u1, 5, actor_id=self.p2.id, type=3)
        rating_helper.rate(self.u4, 6, actor_id=self.p2.id, type=3)
Example #18
0
    def setUp(self):
        self.u1 = User.objects.create_user("user", "*****@*****.**", "user")
        self.u1.is_superuser = True
        self.u1.save()

        self.u2 = User.objects.create_user("user2", "*****@*****.**", "user2")
        self.u3 = User.objects.create_user("user3", "*****@*****.**", "user3")
        self.u4 = User.objects.create_user("user4", "*****@*****.**", "user4")

        self.p1 = Person.objects.create(name="P1", surname="P1", permalink="p1", type=Person.TYPE_PERSON)
        self.p2 = Person.objects.create(name="P2", surname="P2", permalink="p2", type=Person.TYPE_PERSON)

        rating_helper.rate(self.u1, 5, director_id=self.p1.id, type=2)
        rating_helper.rate(self.u2, 2, director_id=self.p2.id, type=2)

        rating_helper.rate(self.u1, 1, actor_id=self.p1.id, type=3)
        rating_helper.rate(self.u2, 2, actor_id=self.p1.id, type=3)
        rating_helper.rate(self.u3, 3, actor_id=self.p1.id, type=3)

        rating_helper.rate(self.u1, 5, actor_id=self.p2.id, type=3)
        rating_helper.rate(self.u4, 6, actor_id=self.p2.id, type=3)
Example #19
0
 def rate_film(self, film_id, rating, type=1):
     return rating_helper.rate(self.user, rating, film_id=film_id, type=type, redis_only=False)
Example #20
0
def do_people_merging_resolve(selected, to_delete, preview=None):

    save = preview is None

    with transaction.commit_on_success():
        has_photo = selected.image or selected.hires_image

        # 1. merge all activities reloated to that person
        for ua in UserActivity.all_objects.filter(person=to_delete):

            # remove deleted object photo activity if selected person already has
            if has_photo and ua.activity_type == UserActivity.TYPE_POSTER:
                if save:
                    ua.delete()

                else:
                    preview.add_item(
                        _('UserActivity to remove'), ua,
                        _("will be removed becouse person already has image"))
                continue

            # update poster related fields
            if ua.activity_type == UserActivity.TYPE_POSTER:
                if save:
                    ua.object_title = str(selected)
                    ua.object_slug = selected.permalink

            # person wallpost
            elif ua.activity_type == UserActivity.TYPE_SHORT_REVIEW:
                if save:
                    ua.object = selected
                    ua.watching_object = selected
                    ua.title = str(selected)

            if save:
                ua.person = selected
                ua.save()
            else:
                preview.add_item(_('UserActivity to update'), ua,
                                 _("will be updated to point selected person"))

        # 2. merge person photo
        if not has_photo and (to_delete.hires_image or to_delete.image):
            if save:
                selected.image = to_delete.image
                selected.hires_image = to_delete.hires_image
            else:
                preview.add_item(
                    _('Photo to replace'), to_delete.hires_image
                    or to_delete.image,
                    _("the image will be taken from object to delete"))

        # 3. update links to that person in all the films he's eiter acting or directing
        for character in Character.objects.filter(person=to_delete):
            if save:
                character.person = selected
                character.save()
            else:
                preview.add_item('Character to replace', character,
                                 _("this characters will be updated"))

        # ordering ???
        for film in Film.objects.filter(directors__in=[to_delete]):
            if save:
                film.directors.remove(to_delete)
                film.directors.add(selected)
                film.save()

            else:
                preview.add_item(
                    'Director to replace', film,
                    _("the director of this movies will be updated"))

        # 4. update all the ratings of this person
        for rating in Rating.objects.filter(director=to_delete):
            try:
                selected_rating = Rating.objects.get(director=selected,
                                                     type=rating.type,
                                                     user=rating.user)
                if save:
                    rating_helper.rate(rating.user,
                                       None,
                                       director_id=to_delete.id,
                                       type=rating.type)
                else:
                    preview.add_item(
                        'Director rating to delete', rating,
                        _("the director rating to delete - user rated both"))

            except Rating.DoesNotExist:
                if save:
                    rating_helper.rate(rating.user,
                                       rating.rating,
                                       director_id=selected.id,
                                       type=rating.type)
                    rating_helper.rate(rating.user,
                                       None,
                                       director_id=to_delete.id,
                                       type=rating.type)

                else:
                    preview.add_item('Director rating to update', rating,
                                     _("the director rating to update"))

        for rating in Rating.objects.filter(actor=to_delete):
            try:
                selected_rating = Rating.objects.get(actor=selected,
                                                     type=rating.type,
                                                     user=rating.user)
                if save:
                    rating_helper.rate(rating.user,
                                       None,
                                       actor_id=to_delete.id,
                                       type=rating.type)
                else:
                    preview.add_item(
                        'Actor rating to delete', rating,
                        _("the actor rating to delete - user rated both"))

            except Rating.DoesNotExist:
                if save:
                    rating_helper.rate(rating.user,
                                       rating.rating,
                                       actor_id=selected.id,
                                       type=rating.type)
                    rating_helper.rate(rating.user,
                                       None,
                                       actor_id=to_delete.id,
                                       type=rating.type)

                else:
                    preview.add_item('Actor rating to update', rating,
                                     _("the actor rating to update"))

        # 5. short reviews
        for review in ShortReview.all_objects.filter(object__pk=to_delete.pk):
            if save:
                review.object = selected
                review.save()

            else:
                preview.add_item(
                    'Short Review to update', review,
                    _("the related object of this short review will be updated"
                      ))

        # 6. articles
        for post in Post.objects.filter(related_person__pk=to_delete.pk):
            if save:
                post.related_person.remove(to_delete)
                post.related_person.add(selected)
                post.save()

            else:
                preview.add_item(
                    'Article to update', post,
                    _("the related person of this article will be updated"))

        # 7. delete object
        if save:
            to_delete.delete()
            selected.save()
Example #21
0
def film_merging_resolve(request, id):
    dp = get_object_or_404(DuplicateFilm, pk=id)
    step = int(request.POST.get('step', 1))

    moderated_items = registry.get_by_user(request.user)
    ctx = {
        "step": step,
        "duplicate_film": dp,
        "moderated_items": moderated_items['items'],
        "moderator_tools": moderated_items['tools'],
    }

    if step == 1:
        ctx['stats'] = {
            'number_of_ratings': {
                'A': Rating.objects.filter(film=dp.filmA).count(),
                'B': Rating.objects.filter(film=dp.filmB).count(),
            },
            'number_of_activities': {
                'A': UserActivity.all_objects.filter(film=dp.filmA).count(),
                'B': UserActivity.all_objects.filter(film=dp.filmB).count(),
            }
        }

    elif step > 1:
        if 'A' in request.POST:
            option = 'A'
            selected = dp.filmA
            to_delete = dp.filmB

        else:
            option = 'B'
            selected = dp.filmB
            to_delete = dp.filmA

        ctx['option'] = option
        ctx['selected'] = selected
        ctx['to_delete'] = to_delete

        if step in [2, 3]:
            save = (step == 3)

            if not save:
                preview = Preview(request, item_formater)

            with transaction.commit_on_success():
                has_photo = selected.image or selected.hires_image

                # 1. update tags
                tags = {'en': [], 'pl': []}

                for lang in ('en', 'pl'):
                    for flm in (to_delete, selected):
                        try:
                            film_localized = ObjectLocalized.objects.get(
                                parent=flm.id, LANG=lang)
                            for tag in Tag.objects.get_for_object(
                                    film_localized):
                                if not tag.name in tags[lang]:
                                    tags[lang].append(tag.name)

                        except ObjectLocalized.DoesNotExist:
                            pass

                for lang in ('en', 'pl'):
                    if len(tags[lang]):
                        tag_list = ", ".join(tags[lang])
                        if save:
                            selected.save_tags(tag_list, lang)
                        else:
                            preview.add_item(
                                _('Merged tags'),
                                "<strong>%s</strong>: %s" % (lang, tag_list),
                                "")

                # 2. update wishlist and owned
                for bi in BasketItem.objects.filter(film=to_delete):
                    try:
                        BasketItem.objects.get(film=selected, user=bi.user)

                    except BasketItem.DoesNotExist:
                        if save:
                            bi.film = selected
                            bi.save()

                        else:
                            preview.add_item(_('Basket item to update'), bi,
                                             "")

                # 3. merge all activities reloated to that film
                for ua in UserActivity.all_objects.filter(film=to_delete):

                    # remove deleted object photo activity if selected film already has
                    if has_photo and ua.activity_type == UserActivity.TYPE_POSTER:
                        if save:
                            ua.delete()

                        else:
                            preview.add_item(
                                _('UserActivity to remove'), ua,
                                _("will be removed because the film already has image"
                                  ))
                        continue

                    if save:
                        # film wallpost
                        if ua.activity_type == UserActivity.TYPE_SHORT_REVIEW:
                            ua.object = selected
                            ua.watching_object = selected
                            ua.title = str(selected)

                        ua.film = selected
                        ua.film_title = selected.get_title()
                        ua.film_slug = selected.permalink
                        ua.save()

                    else:
                        preview.add_item(
                            _('UserActivity to update'), ua,
                            _("will be updated to point to a selected film"))

                # 3. merge film photo
                if not has_photo and (to_delete.hires_image
                                      or to_delete.image):
                    if save:
                        selected.image = to_delete.image
                        selected.hires_image = to_delete.hires_image
                    else:
                        preview.add_item(
                            _('Photo to replace'), to_delete.hires_image
                            or to_delete.image,
                            _("the image will be taken from object to delete"))

                # 4. update all the ratings of this film
                for rating in Rating.objects.filter(film=to_delete,
                                                    rating__isnull=False):
                    try:
                        selected_rating = Rating.objects.get(film=selected,
                                                             type=rating.type,
                                                             user=rating.user)
                        if save:
                            rating_helper.rate(rating.user,
                                               None,
                                               film_id=to_delete.id,
                                               type=rating.type)
                        else:
                            preview.add_item(
                                'Film rating to delete', rating,
                                _("the film rating to delete - user rated both films"
                                  ))

                    except Rating.DoesNotExist:
                        if save:
                            rating_helper.rate(rating.user,
                                               rating.rating,
                                               film_id=selected.id,
                                               type=rating.type)
                            rating_helper.rate(rating.user,
                                               None,
                                               film_id=to_delete.id,
                                               type=rating.type)
                        else:
                            preview.add_item('Film rating to update', rating,
                                             _("the film rating to update"))

                # 5. short reviews
                for review in ShortReview.all_objects.filter(
                        object__pk=to_delete.pk):
                    if save:
                        review.object = selected
                        review.save()

                    else:
                        preview.add_item(
                            'Short Review to update', review,
                            _("the related object of this short review will be updated"
                              ))

                # 6. articles
                for post in Post.objects.filter(related_film__pk=to_delete.pk):
                    if save:
                        post.related_film.remove(to_delete)
                        post.related_film.add(selected)
                        post.save()

                    else:
                        preview.add_item(
                            'Article to update', post,
                            _("the related film of this article will be updated"
                              ))

                # 7. showtimes
                for foch in FilmOnChannel.objects.filter(film=to_delete):
                    if save:
                        foch.film = selected
                        foch.save()

                    else:
                        preview.add_item('Film on channel to update', foch, "")

                for checkin in ScreeningCheckIn.objects.filter(film=to_delete):
                    if save:
                        checkin.film = selected
                        checkin.save()

                    else:
                        preview.add_item('Checkin to update', checkin, "")

                # 8. delete object
                if save:
                    to_delete.delete()
                    selected.save()

                else:
                    ctx['preview'] = preview
                    ctx['objects_to_delete'] = get_related_objects([to_delete])

    return render(
        request, "moderation/merging_tools/movies/resolve-step-%d.html" % step,
        ctx)