Commit 4ebba068 authored by Seb's avatar Seb
Browse files

Conditionally show some things only if modeladmin is installed, addded links...

Conditionally show some things only if modeladmin is installed, addded links for editing/adding tracks
parent 1d7f3aa4
...@@ -16,7 +16,7 @@ INSTALLED_APPS = [ ...@@ -16,7 +16,7 @@ INSTALLED_APPS = [
'wagtail.snippets', 'wagtail.snippets',
'wagtail.images', 'wagtail.images',
'wagtail.documents', 'wagtail.documents',
'wagtail.contrib.modeladmin', # 'wagtail.contrib.modeladmin',
'django.contrib.admin', 'django.contrib.admin',
'django.contrib.auth', 'django.contrib.auth',
......
...@@ -4,6 +4,11 @@ from django.core.exceptions import ImproperlyConfigured ...@@ -4,6 +4,11 @@ from django.core.exceptions import ImproperlyConfigured
default_app_config = 'wagtailvideos.apps.WagtailVideosApp' default_app_config = 'wagtailvideos.apps.WagtailVideosApp'
def is_modeladmin_installed():
from django.apps import apps
return apps.is_installed('wagtail.contrib.modeladmin')
def get_video_model_string(): def get_video_model_string():
return getattr(settings, 'WAGTAILVIDEOS_VIDEO_MODEL', 'wagtailvideos.Video') return getattr(settings, 'WAGTAILVIDEOS_VIDEO_MODEL', 'wagtailvideos.Video')
...@@ -18,4 +23,4 @@ def get_video_model(): ...@@ -18,4 +23,4 @@ def get_video_model():
except LookupError: except LookupError:
raise ImproperlyConfigured( raise ImproperlyConfigured(
"WAGTAILVIDEOS_VIDEO_MODEL refers to model '%s' that has not been installed" % model_string "WAGTAILVIDEOS_VIDEO_MODEL refers to model '%s' that has not been installed" % model_string
) )
\ No newline at end of file
...@@ -180,7 +180,7 @@ class AbstractVideo(CollectionMember, index.Indexed, ClusterableModel): ...@@ -180,7 +180,7 @@ class AbstractVideo(CollectionMember, index.Indexed, ClusterableModel):
@classmethod @classmethod
def get_track_model(cls): def get_track_model(cls):
return cls.tracks.rel.related_model return cls.tracks.related.related_model
def video_tag(self, attrs=None): def video_tag(self, attrs=None):
if attrs is None: if attrs is None:
...@@ -295,7 +295,7 @@ class AbstractVideoTranscode(models.Model): ...@@ -295,7 +295,7 @@ class AbstractVideoTranscode(models.Model):
upload_to=get_upload_to) upload_to=get_upload_to)
error_message = models.TextField(blank=True) error_message = models.TextField(blank=True)
@property @ property
def url(self): def url(self):
return self.file.url return self.file.url
...@@ -350,6 +350,9 @@ class VideoTrack(models.Model): ...@@ -350,6 +350,9 @@ class VideoTrack(models.Model):
choices=[(v, k) for k, v in bcp47.languages.items()], choices=[(v, k) for k, v in bcp47.languages.items()],
default='en', blank=True, help_text='Required if type is "Subtitle"', unique=True) default='en', blank=True, help_text='Required if type is "Subtitle"', unique=True)
def __str__(self):
return "{0} - {1}".format(self.label or self.get_kind_display(), self.get_language_display())
@property @property
def url(self): def url(self):
return self.file.url return self.file.url
......
...@@ -41,9 +41,6 @@ ...@@ -41,9 +41,6 @@
{% include "wagtailadmin/shared/field_as_li.html" with li_classes="label-above label-uppercase" %} {% include "wagtailadmin/shared/field_as_li.html" with li_classes="label-above label-uppercase" %}
{% endif %} {% endif %}
{% endfor %} {% endfor %}
</ul>
<h2 class="u-text-transform-uppercase">Tracks</h2>
<p>Add/edit subtitles or accessibility captions for you video. For information about the filetype that should be used see the mozilla docs on <a href="https://developer.mozilla.org/en-US/docs/Web/API/WebVTT_API">WebVTT</a></p>
<li> <li>
<input type="submit" class="button" value="{% trans 'Save' %}" /> {% if user_can_delete %} <input type="submit" class="button" value="{% trans 'Save' %}" /> {% if user_can_delete %}
<a href="{% url 'wagtailvideos:delete' video.id %}" class="button button-secondary no">{% trans "Delete video" %}</a> {% endif %} <a href="{% url 'wagtailvideos:delete' video.id %}" class="button button-secondary no">{% trans "Delete video" %}</a> {% endif %}
...@@ -111,6 +108,20 @@ ...@@ -111,6 +108,20 @@
<br/><br/> <br/><br/>
<span class='transcode-error'>Ffmpeg is not found on your server. Please install if you wish to transcode videos into an HTML5 video compliant format.</span> <span class='transcode-error'>Ffmpeg is not found on your server. Please install if you wish to transcode videos into an HTML5 video compliant format.</span>
{% endif %} {% endif %}
{% if tracks_action_url %}
<h2 class="u-text-transform-uppercase">Tracks</h2>
<p>You can add/edit subtitles or accessibility captions for you video. For information about the filetype that should be used see the mozilla docs on <a href="https://developer.mozilla.org/en-US/docs/Web/API/WebVTT_API">WebVTT</a></p>
{% if video.tracks %}
<ul>
{% for track in video.tracks.tracks.all %}
<li>{{ track }}</li>
{% endfor %}
</ul>
<a class='button' href="{{ tracks_action_url }}">Edit</a>
{% else %}
<a class='button' href="{{ tracks_action_url }}">Add tracks</a>
{% endif %}
{% endif %}
</div> </div>
</div> </div>
</div> </div>
......
from wagtail.contrib.modeladmin.helpers import AdminURLHelper
from distutils.version import LooseVersion from distutils.version import LooseVersion
import wagtail import wagtail
...@@ -12,7 +13,7 @@ from wagtail.admin.forms.search import SearchForm ...@@ -12,7 +13,7 @@ from wagtail.admin.forms.search import SearchForm
from wagtail.core.models import Collection from wagtail.core.models import Collection
from wagtail.search.backends import get_search_backends from wagtail.search.backends import get_search_backends
from wagtailvideos import ffmpeg, get_video_model from wagtailvideos import ffmpeg, get_video_model, is_modeladmin_installed
from wagtailvideos.forms import VideoTranscodeAdminForm, get_video_form from wagtailvideos.forms import VideoTranscodeAdminForm, get_video_form
from wagtailvideos.permissions import permission_policy from wagtailvideos.permissions import permission_policy
...@@ -117,6 +118,15 @@ def edit(request, video_id): ...@@ -117,6 +118,15 @@ def edit(request, video_id):
).format(video.title), buttons=[ ).format(video.title), buttons=[
messages.button(reverse('wagtailvideos:delete', args=(video.id,)), _('Delete')) messages.button(reverse('wagtailvideos:delete', args=(video.id,)), _('Delete'))
]) ])
if is_modeladmin_installed():
tracks_listing = video.tracks
url_helper = AdminURLHelper(Video.get_track_model())
if tracks_listing:
action_url = url_helper.get_action_url('edit', instance_pk=tracks_listing.pk)
else:
action_url = url_helper.create_url
else:
action_url = ''
return render(request, "wagtailvideos/videos/edit.html", { return render(request, "wagtailvideos/videos/edit.html", {
'video': video, 'video': video,
...@@ -125,6 +135,7 @@ def edit(request, video_id): ...@@ -125,6 +135,7 @@ def edit(request, video_id):
'can_transcode': ffmpeg.installed(), 'can_transcode': ffmpeg.installed(),
'transcodes': video.transcodes.all(), 'transcodes': video.transcodes.all(),
'transcode_form': VideoTranscodeAdminForm(video=video), 'transcode_form': VideoTranscodeAdminForm(video=video),
'tracks_action_url': action_url,
'user_can_delete': permission_policy.user_has_permission_for_instance(request.user, 'delete', video) 'user_can_delete': permission_policy.user_has_permission_for_instance(request.user, 'delete', video)
}) })
......
...@@ -12,7 +12,7 @@ from wagtail.admin.search import SearchArea ...@@ -12,7 +12,7 @@ from wagtail.admin.search import SearchArea
from wagtail.admin.site_summary import SummaryItem from wagtail.admin.site_summary import SummaryItem
from wagtail.core import hooks from wagtail.core import hooks
from wagtailvideos import get_video_model, urls from wagtailvideos import get_video_model, urls, is_modeladmin_installed
from wagtailvideos.forms import GroupVideoPermissionFormSet from wagtailvideos.forms import GroupVideoPermissionFormSet
from wagtailvideos.models import TrackListing from wagtailvideos.models import TrackListing
...@@ -21,7 +21,6 @@ from .permissions import permission_policy ...@@ -21,7 +21,6 @@ from .permissions import permission_policy
Video = get_video_model() Video = get_video_model()
@modeladmin_register
class TracksAdmin(ModelAdmin): class TracksAdmin(ModelAdmin):
model = TrackListing model = TrackListing
...@@ -37,6 +36,10 @@ class TracksAdmin(ModelAdmin): ...@@ -37,6 +36,10 @@ class TracksAdmin(ModelAdmin):
] ]
if is_modeladmin_installed():
modeladmin_register(TracksAdmin)
@hooks.register('register_admin_urls') @hooks.register('register_admin_urls')
def register_admin_urls(): def register_admin_urls():
return [ return [
...@@ -69,7 +72,7 @@ class VideoMenu(Menu): ...@@ -69,7 +72,7 @@ class VideoMenu(Menu):
def menu_items_for_request(self, request): def menu_items_for_request(self, request):
return [ return [
MenuItem(_('Manage videos'), reverse('wagtailvideos:index'), MenuItem(_('Manage videos'), reverse('wagtailvideos:index'),
name='videos', classnames='icon icon-media', order=300), name='videos', classnames='icon icon-media', order=100),
TracksAdmin().get_menu_item(), TracksAdmin().get_menu_item(),
] ]
...@@ -83,16 +86,23 @@ class VideoMenu(Menu): ...@@ -83,16 +86,23 @@ class VideoMenu(Menu):
@hooks.register('register_admin_menu_item') @hooks.register('register_admin_menu_item')
def register_images_menu_item(): def register_images_menu_item():
return SubmenuMenuItem( if is_modeladmin_installed():
_('Videos'), VideoMenu(), return SubmenuMenuItem(
name='videos', classnames='icon icon-media', order=300 _('Videos'), VideoMenu(),
) name='videos', classnames='icon icon-media', order=300
)
else:
return MenuItem(
_('Videos'), reverse('wagtailvideos:index'),
name='videos', classnames='icon icon-media', order=300
)
@hooks.register('construct_main_menu') @hooks.register('construct_main_menu')
def hide_track_listing_main(request, menu_items): def hide_track_listing_main(request, menu_items):
# Dumb but we need to remove the auto generated menu item because we add it to the video submenu # Dumb but we need to remove the auto generated menu item because we add it to the video submenu
menu_items[:] = [item for item in menu_items if item.name != 'track-listings'] if is_modeladmin_installed():
menu_items[:] = [item for item in menu_items if item.name != 'track-listings']
class VideoSummaryItem(SummaryItem): class VideoSummaryItem(SummaryItem):
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment