@@ -1,6 +1,7 @@
|
||||
from django.contrib import admin
|
||||
from infoscreen.models import Rotation, InfoItem, InfoInstance, ImageInfoItem, ExternalImageInfoItem, ABBInfoItem
|
||||
from infoscreen.models import ExternalWebsiteInfoItem
|
||||
from infoscreen.models import VideoInfoItem
|
||||
|
||||
# Register your models here.
|
||||
admin.site.register(Rotation)
|
||||
@@ -10,3 +11,4 @@ admin.site.register(ExternalImageInfoItem)
|
||||
admin.site.register(ABBInfoItem)
|
||||
admin.site.register(InfoInstance)
|
||||
admin.site.register(ExternalWebsiteInfoItem)
|
||||
admin.site.register(VideoInfoItem)
|
||||
@@ -0,0 +1,24 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9 on 2017-05-10 16:54
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('infoscreen', '0003_auto_20170329_1857'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='VideoInfoItem',
|
||||
fields=[
|
||||
('infoitem_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='infoscreen.InfoItem')),
|
||||
('video', models.FileField(upload_to='infovideos/')),
|
||||
],
|
||||
bases=('infoscreen.infoitem',),
|
||||
),
|
||||
]
|
||||
@@ -175,6 +175,21 @@ class ImageInfoItem(InfoItem):
|
||||
d["options"] = {'img': self.img.url}
|
||||
return d
|
||||
|
||||
class VideoInfoItem(InfoItem):
|
||||
display_name = ("Video")
|
||||
video = models.FileField(upload_to="infovideos/")
|
||||
|
||||
def get_template_url(self):
|
||||
return "/static/html/generic_video.html?video={}".format(self.name)
|
||||
|
||||
@staticmethod
|
||||
def get_create_template_url():
|
||||
return "/static/html/generic_video_create.html"
|
||||
|
||||
def get_dict(self):
|
||||
d = super().get_dict()
|
||||
d["options"] = {'video': self.video.url}
|
||||
return d
|
||||
|
||||
class HslInfoItem(InfoItem):
|
||||
display_name = _("HSL timetables")
|
||||
@@ -298,6 +313,11 @@ class ImageUploadForm(forms.Form):
|
||||
name = forms.CharField()
|
||||
image = forms.ImageField()
|
||||
|
||||
class UploadFileForm(forms.Form):
|
||||
|
||||
name = forms.CharField()
|
||||
video = forms.FileField()
|
||||
|
||||
|
||||
class HSLDataModel(models.Model):
|
||||
data = models.TextField(default="", editable=False)
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
.fullscreen-bg {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
overflow: hidden;
|
||||
z-index: -100;
|
||||
}
|
||||
|
||||
.fullscreen-bg__video {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<link rel="stylesheet" href="/static/css/video.css">
|
||||
|
||||
|
||||
<div class="fullscreen-bg">
|
||||
<video autoplay loop class="fullscreen-bg__video">
|
||||
<source ng-src="{{ video }}" type=video/webm>
|
||||
Your browser doesn't support WebM videos!
|
||||
</video>
|
||||
</div>
|
||||
@@ -0,0 +1,13 @@
|
||||
<div ng-controller="infoadmin_video_create" style="margin-top:20px;">
|
||||
<div>
|
||||
Create new video. Enter name and select video (.WebM) for upload
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Name:</label>
|
||||
<input type="text" ng-model="name"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input type="file" ngf-select ng-model="video" name="file" required>
|
||||
</div>
|
||||
<input type="button" class="btn btn-success" ng-click="send(video);" value="create"></input>
|
||||
</div>
|
||||
@@ -145,6 +145,27 @@ app.controller('infoadmin_image_create', ['$scope', 'Upload', '$timeout',"ItemLi
|
||||
}
|
||||
}]);
|
||||
|
||||
app.controller('infoadmin_video_create', ['$scope', 'Upload', '$timeout',"ItemList", function ($scope, Upload, $timeout,ItemList) {
|
||||
$scope.send = function(file) {
|
||||
file.upload = Upload.upload({
|
||||
url: '/infoscreen/create_video',
|
||||
data: {name: $scope.name, video: file},
|
||||
}).then(function (response) {
|
||||
$timeout(function () {
|
||||
file.result = response.data;
|
||||
ItemList.loadItems();
|
||||
$scope.name= ""
|
||||
$scope.video = {}
|
||||
});
|
||||
},function (response) {
|
||||
if (response.status > 0)
|
||||
$scope.errorMsg = response.status + ': ' + response.data;
|
||||
}, function (evt) {
|
||||
file.progress = Math.min(100, parseInt(100.0 * evt.loaded / evt.total));
|
||||
});
|
||||
}
|
||||
}]);
|
||||
|
||||
function itemGenerator(create_url){
|
||||
return function($scope, $http, ItemList){
|
||||
$scope.item = {}
|
||||
|
||||
@@ -13,6 +13,7 @@ from infoscreen.views import createInstance
|
||||
from infoscreen.views import deleteInstance
|
||||
from infoscreen.views import createExternalImageInfoItem
|
||||
from infoscreen.views import create_image_item
|
||||
from infoscreen.views import create_video_item
|
||||
from infoscreen.views import createABBItem
|
||||
from infoscreen.views import createSossoItem
|
||||
from infoscreen.views import createHslItem
|
||||
@@ -39,6 +40,7 @@ urlpatterns = [
|
||||
url(r'^delete_item/(?P<type_id>\d+)/(?P<idx>\d+)$', delete_info_item),
|
||||
url(r'^create_external_image$', createExternalImageInfoItem),
|
||||
url(r'^create_image$', create_image_item),
|
||||
url(r'^create_video$', create_video_item),
|
||||
url(r'^create_abbitem$', createABBItem),
|
||||
url(r'^create_sossoitem$', createSossoItem),
|
||||
url(r'^create_eventitem$', createEventItem),
|
||||
|
||||
@@ -4,6 +4,7 @@ from django.views.decorators.csrf import ensure_csrf_cookie
|
||||
from django.views.decorators.http import require_http_methods
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.contrib.auth.decorators import permission_required
|
||||
from infoscreen.models import UploadFileForm
|
||||
|
||||
from infoscreen.models import Rotation, InfoItem, InfoInstance
|
||||
from infoscreen.models import ABBInfoItem, ExternalImageInfoItem, ImageInfoItem, SossoInfoItem, HslInfoItem
|
||||
@@ -12,7 +13,9 @@ from infoscreen.models import ExternalWebsiteInfoItem
|
||||
from infoscreen.models import ImageUploadForm
|
||||
from infoscreen.models import HSLDataModel
|
||||
from infoscreen.models import ApyInfoItem
|
||||
from infoscreen.models import VideoInfoItem
|
||||
from infoscreen.hsl_fetcher import HSLFetcher
|
||||
|
||||
import sikweb.settings as settings
|
||||
import json
|
||||
import logging
|
||||
@@ -155,6 +158,21 @@ def create_image_item(request, *args, **kwargs):
|
||||
ImageInfoItem.objects.create(img=img, name=name)
|
||||
return HttpResponse('{"status":"success"}')
|
||||
|
||||
@require_http_methods(["POST"])
|
||||
@ensure_csrf_cookie
|
||||
@permission_required('infoscreen.change_infoinstance', login_url='/login')
|
||||
def create_video_item(request, *args, **kwargs):
|
||||
form = UploadFileForm(request.POST, request.FILES)
|
||||
print(form.errors)
|
||||
print("hurdurr")
|
||||
if not form.is_valid():
|
||||
return HttpResponseBadRequest('{"status": "failure",'
|
||||
'"error": "invalid data supplied"}')
|
||||
|
||||
video = form.cleaned_data['video']
|
||||
name = form.cleaned_data['name']
|
||||
VideoInfoItem.objects.create(video=video, name=name)
|
||||
return HttpResponse('{"status": "success"}')
|
||||
|
||||
@require_http_methods(["POST"])
|
||||
@ensure_csrf_cookie
|
||||
@@ -223,3 +241,4 @@ createExternalImageInfoItem = create_item_generator(ExternalImageInfoItem)
|
||||
createExternalWebsiteItem = create_item_generator(ExternalWebsiteInfoItem)
|
||||
createEventItem = create_item_generator(EventInfoItem)
|
||||
createApyItem = create_item_generator(ApyInfoItem)
|
||||
createVideoItem = create_item_generator(VideoInfoItem)
|
||||
|
||||
@@ -26,6 +26,19 @@ import webapp.urls
|
||||
import infoscreen.urls
|
||||
import members.urls
|
||||
|
||||
# main
|
||||
from webapp.views import main_index
|
||||
from webapp.views import admin_index
|
||||
# login
|
||||
from webapp.views import login_view
|
||||
from webapp.views import logout_view
|
||||
#application
|
||||
from members.views import application_index
|
||||
from members.views import list_applications
|
||||
from members.views import edit_application
|
||||
from members.views import application_success_index
|
||||
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
url(r'', include('webapp.urls')),
|
||||
|
||||
Reference in New Issue
Block a user