def chooser_upload(request): Video = get_video_model() VideoForm = get_video_form(Video) searchform = SearchForm() if request.POST: video = Video(uploaded_by_user=request.user) form = VideoForm(request.POST, request.FILES, instance=video) if form.is_valid(): video.uploaded_by_user = request.user video.save() # Reindex the video to make sure all tags are indexed search_index.insert_or_update_object(video) return render_modal_workflow( request, None, json_data={ 'step': 'video_chosen', 'result': get_video_json(video) } ) else: form = VideoForm() videos = Video.objects.order_by('title') paginator = Paginator(videos, per_page=12) page = paginator.get_page(request.GET.get('p')) return render_modal_workflow( request, 'wagtailvideos/chooser/chooser.html', None, template_vars={'videos': page, 'uploadform': form, 'searchform': searchform}, json_data=get_chooser_js_data() )
def add(request): Video = get_video_model() VideoForm = get_video_form(Video) if request.POST: video = Video(uploaded_by_user=request.user) form = VideoForm(request.POST, request.FILES, instance=video, user=request.user) if form.is_valid(): # Save video = form.save(commit=False) video.file_size = video.file.size video.save() # Success! Send back an edit form for backend in get_search_backends(): backend.add(video) messages.success(request, _("Video '{0}' added.").format(video.title), buttons=[ messages.button(reverse('wagtailvideos:edit', args=(video.id,)), _('Edit')) ]) return redirect('wagtailvideos:index') else: messages.error(request, _("The video could not be created due to errors.")) else: form = VideoForm(user=request.user) return render(request, "wagtailvideos/videos/add.html", { 'form': form, })
def create_transcode(request, video_id): video = get_object_or_404(get_video_model(), id=video_id) transcode_form = VideoTranscodeAdminForm(data=request.POST, video=video) if transcode_form.is_valid(): transcode_form.save() return redirect('wagtailvideos:edit', video_id)
def chooser(request): Video = get_video_model() VideoForm = get_video_form(Video) uploadform = VideoForm() videos = Video.objects.order_by('-created_at') q = None if ( 'q' in request.GET or 'p' in request.GET or 'tag' in request.GET or 'collection_id' in request.GET ): # this request is triggered from search, pagination or 'popular tags'; # we will just render the results.html fragment collection_id = request.GET.get('collection_id') if collection_id: videos = videos.filter(collection=collection_id) searchform = SearchForm(request.GET) if searchform.is_valid(): q = searchform.cleaned_data['q'] videos = videos.search(q) is_searching = True else: is_searching = False tag_name = request.GET.get('tag') if tag_name: videos = videos.filter(tags__name=tag_name) # Pagination paginator = Paginator(videos, per_page=12) page = paginator.get_page(request.GET.get('p')) return render(request, "wagtailvideos/chooser/results.html", { 'videos': page, 'is_searching': is_searching, 'query_string': q, }) else: searchform = SearchForm() collections = Collection.objects.all() if len(collections) < 2: collections = None paginator = Paginator(videos, per_page=12) page = paginator.get_page(request.GET.get('p')) return render_modal_workflow(request, 'wagtailvideos/chooser/chooser.html', None, { 'videos': page, 'uploadform': uploadform, 'searchform': searchform, 'is_searching': False, 'query_string': q, 'popular_tags': popular_tags_for_model(Video), 'collections': collections, }, json_data=get_chooser_js_data())
def video_chosen(request, video_id): video = get_object_or_404(get_video_model(), id=video_id) return render_modal_workflow( request, None, json_data={ 'step': 'video_chosen', 'result': get_video_json(video) })
def delete(request, video_id): video = get_object_or_404(get_video_model(), id=video_id) if request.POST: video.delete() messages.success(request, _("Video '{0}' deleted.").format(video.title)) return redirect('wagtailvideos:index') return render(request, "wagtailvideos/videos/confirm_delete.html", { 'video': video, })
def index(request): # Get Videos (filtered by user permission) Video = get_video_model() videos = Video.objects.all() # Search query_string = None if 'q' in request.GET: form = SearchForm(request.GET, placeholder=_("Search videos")) if form.is_valid(): query_string = form.cleaned_data['q'] videos = videos.search(query_string) else: form = SearchForm(placeholder=_("Search videos")) # Filter by collection current_collection = None collection_id = request.GET.get('collection_id') if collection_id: try: current_collection = Collection.objects.get(id=collection_id) videos = videos.filter(collection=current_collection) except (ValueError, Collection.DoesNotExist): pass paginator = Paginator(videos, per_page=25) page = paginator.get_page(request.GET.get('p')) # Create response if request.is_ajax(): response = render( request, 'wagtailvideos/videos/results.html', { 'videos': page, 'query_string': query_string, 'is_searching': bool(query_string), }) return response else: response = render( request, 'wagtailvideos/videos/index.html', { 'videos': page, 'query_string': query_string, 'is_searching': bool(query_string), 'search_form': form, 'popular_tags': popular_tags_for_model(Video), 'current_collection': current_collection, }) return response
def target_model(self): from wagtailvideos import get_video_model return get_video_model()
from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ from wagtail.admin.edit_handlers import InlinePanel from wagtail.admin.menu import Menu, MenuItem, SubmenuMenuItem from wagtail.admin.search import SearchArea from wagtail.admin.site_summary import SummaryItem from wagtail.contrib.modeladmin.options import ModelAdmin, modeladmin_register from wagtail.core import hooks from wagtailvideos import get_video_model, is_modeladmin_installed, urls from wagtailvideos.edit_handlers import VideoChooserPanel from wagtailvideos.forms import GroupVideoPermissionFormSet from .permissions import permission_policy Video = get_video_model() class TracksAdmin(ModelAdmin): model = Video.get_track_listing_model() menu_icon = 'openquote' menu_label = 'Text tracks' list_display = ('__str__', 'track_count') def track_count(self, track_listing): return track_listing.tracks.count() track_count.short_description = 'No. tracks' panels = [
from wagtail.core.permission_policies.collections import ( CollectionOwnershipPermissionPolicy) from wagtailvideos import get_video_model from wagtailvideos.models import Video permission_policy = CollectionOwnershipPermissionPolicy( get_video_model(), auth_model=Video, owner_field_name='uploaded_by_user')
def test_invalid_get_video_model(self): with self.assertRaises(ImproperlyConfigured): get_video_model()
def test_standard_get_video_model(self): self.assertIs(get_video_model(), Video)
def test_custom_get_video_model(self): self.assertIs(get_video_model(), CustomVideoModel)