def get_view(self, request): moderated_items = registry.get_by_user(request.user) ctx = { "moderated_item": registry.get_by_name(self.name), "moderated_items": moderated_items['items'], "moderator_tools": moderated_items['tools'] } 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)
def get_view(self, request): moderated_items = registry.get_by_user(request.user) ctx = { "moderated_item": registry.get_by_name(self.name), "moderated_items": moderated_items['items'], "moderator_tools": moderated_items['tools'] } if request.method == 'POST': ctx['form'] = TagTranslationForm(request.POST) if ctx['form'].is_valid(): cleaned_data = ctx['form'].cleaned_data f = cleaned_data['f'] t = cleaned_data['t'] TagTranslation.create_translation(f, t) messages.add_message(request, messages.INFO, _("Tag translated!")) return redirect(self.get_absolute_url()) else: ctx['form'] = TagTranslationForm() return render(request, 'moderation/tag_translation/create.html', ctx)
def get_view( self, request ): moderated_items = registry.get_by_user( request.user ) ctx = { "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 )
def get_view(self, request): moderated_items = registry.get_by_user(request.user) ctx = { "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)
def get_view( self, request ): moderated_items = registry.get_by_user( request.user ) ctx = { "moderated_item": registry.get_by_name( self.name ), "moderated_items": moderated_items['items'], "moderator_tools": moderated_items['tools'] } if request.method == 'POST': ctx['form'] = TagTranslationForm( request.POST ) if ctx['form'].is_valid(): cleaned_data = ctx['form'].cleaned_data f = cleaned_data['f'] t = cleaned_data['t'] TagTranslation.create_translation( f, t ) messages.add_message( request, messages.INFO, _( "Tag translated!" ) ) return redirect( self.get_absolute_url() ) else: ctx['form'] = TagTranslationForm() return render( request, 'moderation/tag_translation/create.html', ctx )
def get_view( self, request ): moderated_items = registry.get_by_user( request.user ) ctx = { "moderated_item": registry.get_by_name( self.name ), "moderated_items": moderated_items['items'], "moderator_tools": moderated_items['tools'] } 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 )
def moderate_item( request, model ): moderated_item = registry.get_by_name( model ) if moderated_item is None: raise Http404 if request.user.has_perm( moderated_item.permission ): if isinstance( moderated_item, ModeratorTool ): return moderated_item.get_view( request ) template = "moderation/index.html" moderated_items = registry.get_by_user( request.user ) args = { "moderated_item": moderated_item, "moderated_items": moderated_items['items'], "moderator_tools": moderated_items['tools'], } if request.method == 'POST': try: if 'reject' in request.POST and not 'confirmed' in request.POST: item_id = request.POST.get( 'id', None ) if item_id is None: raise ModerationException( "Unknown item ..." ) template = "moderation/reject.html" args['form'] = RejectForm() args['item'] = moderated_item.get_by_pk( int( item_id ) ) else: process_action( request, moderated_item ) except ModerationException, e: request.user.message_set.create( message=str( e ) ) return render_to_response( template, args, context_instance=RequestContext( request ) )
def film_merging( request ): items = DuplicateFilm.objects.filter( resolved=False ) moderated_items = registry.get_by_user( request.user ) return render( request, "moderation/merging_tools/movies/index.html", { "items": items, "moderated_items": moderated_items['items'], "moderator_tools": moderated_items['tools'], })
def film_merging(request): items = DuplicateFilm.objects.filter(resolved=False) moderated_items = registry.get_by_user(request.user) return render( request, "moderation/merging_tools/movies/index.html", { "items": items, "moderated_items": moderated_items['items'], "moderator_tools": moderated_items['tools'], })
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
def get_view(self, request): moderated_items = registry.get_by_user(request.user) ctx = { "moderated_item": registry.get_by_name(self.name), "moderated_items": moderated_items['items'], "moderator_tools": moderated_items['tools'] } if request.method == 'POST': ctx['form'] = TagRenameForm(request.POST) if ctx['form'].is_valid(): cleaned_data = ctx['form'].cleaned_data tag_a_name = cleaned_data['tagA'] tag_a_tag = Tag.objects.get(name=tag_a_name) tag_a_count = self._get_tagged_objects_count(tag_a_tag) tag_b_name = cleaned_data['tagB'] tag_b_tag = None try: tag_b_tag = Tag.objects.get(name=tag_b_name) except Tag.DoesNotExist: pass tag_b_count = self._get_tagged_objects_count( tag_b_tag) if tag_b_tag else 0 if not 'confirm' in request.POST: ctx['to_confirm'] = { 'tagA': { 'name': tag_a_name, 'count': tag_a_count, }, 'tagB': { 'name': tag_b_name, 'count': tag_b_count, } } else: rename_tag.delay(tag_a_name, tag_b_name, request.user) messages.add_message( request, messages.INFO, _("your task will be executed in the background, you will be informed when it's finished" )) return redirect(self.get_absolute_url()) else: ctx['form'] = TagRenameForm() return render(request, 'moderation/rename_tag/create.html', ctx)
def get_view( self, request ): moderated_items = registry.get_by_user( request.user ) ctx = { "moderated_item": registry.get_by_name( self.name ), "moderated_items": moderated_items['items'], "moderator_tools": moderated_items['tools'] } if request.method == 'POST': ctx['form'] = TagRenameForm( request.POST ) if ctx['form'].is_valid(): cleaned_data = ctx['form'].cleaned_data tag_a_name = cleaned_data['tagA'] tag_a_tag = Tag.objects.get( name=tag_a_name ) tag_a_count = self._get_tagged_objects_count( tag_a_tag ) tag_b_name = cleaned_data['tagB'] tag_b_tag = None try: tag_b_tag = Tag.objects.get( name=tag_b_name ) except Tag.DoesNotExist: pass tag_b_count = self._get_tagged_objects_count( tag_b_tag ) if tag_b_tag else 0 if not 'confirm' in request.POST: ctx['to_confirm'] = { 'tagA': { 'name' : tag_a_name, 'count': tag_a_count, }, 'tagB': { 'name' : tag_b_name, 'count': tag_b_count, } } else: rename_tag.delay( tag_a_name, tag_b_name, request.user ) messages.add_message( request, messages.INFO, _( "your task will be executed in the background, you will be informed when it's finished" ) ) return redirect( self.get_absolute_url() ) else: ctx['form'] = TagRenameForm() return render( request, 'moderation/rename_tag/create.html', ctx )
def index( request ): moderated_items = registry.get_by_user( request.user ) first_with_items = None for moderated_item in moderated_items['items']: if first_with_items is None and moderated_item.get_not_moderated().count() > 0: first_with_items = moderated_item break if first_with_items is None: first_with_items = moderated_items['items'][0] if len( moderated_items['items'] ) > 0 else None return render_to_response( "moderation/index.html", { "moderated_item": first_with_items, "moderated_items": moderated_items['items'], "moderator_tools": moderated_items['tools'], }, context_instance=RequestContext( request ) )
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
def people_merging_resolve(request, id): dp = get_object_or_404(DuplicatePerson, pk=id) step = int(request.POST.get('step', 1)) moderated_items = registry.get_by_user(request.user) ctx = { "step": step, "duplicate_person": dp, "moderated_items": moderated_items['items'], "moderator_tools": moderated_items['tools'], } if step > 1: if 'A' in request.POST: option = 'A' selected = dp.personA to_delete = dp.personB else: option = 'B' selected = dp.personB to_delete = dp.personA ctx['option'] = option ctx['selected'] = selected ctx['to_delete'] = to_delete if step in [2, 3]: save = (step == 3) preview = Preview(request, item_formater) if not save else None do_people_merging_resolve(selected, to_delete, preview) if not save: ctx['preview'] = preview ctx['objects_to_delete'] = get_related_objects([to_delete]) return render( request, "moderation/merging_tools/people/resolve-step-%d.html" % step, ctx)
def index(request): moderated_items = registry.get_by_user(request.user) first_with_items = None for moderated_item in moderated_items['items']: if first_with_items is None and moderated_item.get_not_moderated( ).count() > 0: first_with_items = moderated_item break if first_with_items is None: first_with_items = moderated_items['items'][0] if len( moderated_items['items']) > 0 else None return render_to_response("moderation/index.html", { "moderated_item": first_with_items, "moderated_items": moderated_items['items'], "moderator_tools": moderated_items['tools'], }, context_instance=RequestContext(request))
def people_merging_resolve( request, id ): dp = get_object_or_404( DuplicatePerson, pk=id ) step = int( request.POST.get( 'step', 1 ) ) moderated_items = registry.get_by_user( request.user ) ctx = { "step": step, "duplicate_person": dp, "moderated_items": moderated_items['items'], "moderator_tools": moderated_items['tools'], } if step > 1: if 'A' in request.POST: option = 'A' selected = dp.personA to_delete = dp.personB else: option = 'B' selected = dp.personB to_delete = dp.personA ctx['option'] = option ctx['selected'] = selected ctx['to_delete'] = to_delete if step in [2, 3]: save = ( step == 3 ) preview = Preview( request, item_formater ) if not save else None do_people_merging_resolve( selected, to_delete, preview ) if not save: ctx['preview'] = preview ctx['objects_to_delete'] = get_related_objects( [to_delete] ) return render( request, "moderation/merging_tools/people/resolve-step-%d.html" % step, ctx )
def moderate_item(request, model): moderated_item = registry.get_by_name(model) if moderated_item is None: raise Http404 if request.user.has_perm(moderated_item.permission): if isinstance(moderated_item, ModeratorTool): return moderated_item.get_view(request) template = "moderation/index.html" moderated_items = registry.get_by_user(request.user) args = { "moderated_item": moderated_item, "moderated_items": moderated_items['items'], "moderator_tools": moderated_items['tools'], } if request.method == 'POST': try: if 'reject' in request.POST and not 'confirmed' in request.POST: item_id = request.POST.get('id', None) if item_id is None: raise ModerationException("Unknown item ...") template = "moderation/reject.html" args['form'] = RejectForm() args['item'] = moderated_item.get_by_pk(int(item_id)) else: process_action(request, moderated_item) except ModerationException, e: request.user.message_set.create(message=str(e)) return render_to_response(template, args, context_instance=RequestContext(request))
def get_view( self, request ): moderated_items = registry.get_by_user( request.user ) ctx = { "moderated_item": registry.get_by_name( self.name ), "moderated_items": moderated_items['items'], "moderator_tools": moderated_items['tools'] } if request.method == 'POST': ctx['form'] = TagRenameForm( request.POST ) if ctx['form'].is_valid(): cleaned_data = ctx['form'].cleaned_data tag_a_name = cleaned_data['tagA'] tag_a_tag = Tag.objects.get( name=tag_a_name ) tag_a_count = self._get_tagged_objects_count( tag_a_tag ) tag_b_name = cleaned_data['tagB'] tag_b_tag = None try: tag_b_tag = Tag.objects.get( name=tag_b_name ) except Tag.DoesNotExist: pass tag_b_count = self._get_tagged_objects_count( tag_b_tag ) if tag_b_tag else 0 if not 'confirm' in request.POST: ctx['to_confirm'] = { 'tagA': { 'name' : tag_a_name, 'count': tag_a_count, }, 'tagB': { 'name' : tag_b_name, 'count': tag_b_count, } } else: with transaction.commit_on_success(): # create tag b if not exists if tag_b_tag is None: tag_b_tag = Tag.objects.create( name=tag_b_name ) # replace tags for obj in TaggedItem.objects.filter( tag=tag_a_tag ): # if objects is already tagged with tag 'a' # we must remove this relation try: ti = TaggedItem.objects.get( tag=tag_b_tag, content_type=obj.content_type, object_id=obj.object_id ) ti.delete() except TaggedItem.DoesNotExist: pass obj.tag = tag_b_tag obj.save() # update object localized tag_list if isinstance( obj.object, ObjectLocalized ): obj.object.tag_list = ', '.join( [ tag.name for tag in Tag.objects.get_for_object( obj.object ) ] ) obj.object.save() # remove tag a tag_a_tag.delete() messages.add_message( request, messages.INFO, _( "Tag renamed!" ) ) return redirect( self.get_absolute_url() ) else: ctx['form'] = TagRenameForm() return render( request, 'moderation/rename_tag/create.html', ctx )
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 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 people_merging_resolve( request, id ): dp = get_object_or_404( DuplicatePerson, pk=id ) step = int( request.POST.get( 'step', 1 ) ) moderated_items = registry.get_by_user( request.user ) ctx = { "step": step, "duplicate_person": dp, "moderated_items": moderated_items['items'], "moderator_tools": moderated_items['tools'], } if step > 1: if 'A' in request.POST: option = 'A' selected = dp.personA to_delete = dp.personB else: option = 'B' selected = dp.personB to_delete = dp.personA 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. 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 ): if save: rating.director = selected rating.save() else: preview.add_item( 'Director rating to update', rating, _( "the director rating to update" ) ) for rating in Rating.objects.filter( actor=to_delete ): if save: rating.actor = selected rating.save() 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() else: ctx['preview'] = preview ctx['objects_to_delete'] = get_related_objects( [to_delete] ) return render( request, "moderation/merging_tools/people/resolve-step-%d.html" % step, ctx )