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)
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)
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'])
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'] )
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 )
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)
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)
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))
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)
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)
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 )
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)
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)
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 )
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()
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)
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)
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()
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)