summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--spoken_auth/models.py36
-rw-r--r--static/website/css/main.css8
-rw-r--r--static/website/images/Advanced-Cpp.jpg (renamed from static/website/images/Advanced-C++.jpg)bin1855 -> 1855 bytes
-rw-r--r--static/website/images/Advanced-Cpp.png (renamed from static/website/images/Advanced-C++.png)bin3972 -> 3972 bytes
-rw-r--r--static/website/images/C-and-Cpp.jpg (renamed from static/website/images/C-and-C++.jpg)bin1449 -> 1449 bytes
-rw-r--r--static/website/templates/ajax-duration.html4
-rw-r--r--static/website/templates/ajax-tutorials.html4
-rw-r--r--static/website/templates/index.html8
-rw-r--r--website/forms.py78
-rw-r--r--website/helpers.py5
-rw-r--r--website/models.py35
-rw-r--r--website/templatetags/helpers.py11
-rw-r--r--website/views.py74
13 files changed, 109 insertions, 154 deletions
diff --git a/spoken_auth/models.py b/spoken_auth/models.py
index b315b2d..431330d 100644
--- a/spoken_auth/models.py
+++ b/spoken_auth/models.py
@@ -12,3 +12,39 @@ class Users(AbstractBaseUser):
USERNAME_FIELD = 'username'
class Meta:
db_table = 'auth_user'
+
+class FossCategory(models.Model):
+ foss = models.CharField(unique=True, max_length = 255)
+ description = models.TextField()
+ status = models.BooleanField(max_length = 2)
+ created = models.DateTimeField(auto_now_add = True)
+ updated = models.DateTimeField(auto_now = True)
+ class Meta:
+ db_table = 'creation_fosscategory'
+
+class Language(models.Model):
+ name = models.CharField(max_length = 255, unique = True)
+ created = models.DateTimeField(auto_now_add = True)
+ updated = models.DateTimeField(auto_now = True)
+ class Meta:
+ db_table = 'creation_language'
+
+class TutorialDetails(models.Model):
+ foss = models.ForeignKey(FossCategory)
+ tutorial = models.CharField(max_length = 255)
+ order = models.IntegerField()
+ created = models.DateTimeField(auto_now_add = True)
+ updated = models.DateTimeField(auto_now = True)
+
+ class Meta:
+ db_table = 'creation_tutorialdetail'
+
+class TutorialResources(models.Model):
+ id = models.IntegerField(primary_key=True)
+ tutorial_detail = models.ForeignKey(TutorialDetails)
+ language = models.ForeignKey(Language)
+ video = models.TextField()
+ status = models.PositiveSmallIntegerField(default = 0)
+
+ class Meta:
+ db_table = 'creation_tutorialresource'
diff --git a/static/website/css/main.css b/static/website/css/main.css
index d1e7e52..9e7ed71 100644
--- a/static/website/css/main.css
+++ b/static/website/css/main.css
@@ -359,3 +359,11 @@ table .title a {
background: #FDF5E6;
transition: background 2.5s ease;
}
+.category-title{
+ height: 100px;
+ text-shadow: 1px 1px 1px #000, 3px 3px 5px blue;
+ line-height: 100px;
+ text-align: center;
+ font-size: 22px;
+ overflow: hidden;
+}
diff --git a/static/website/images/Advanced-C++.jpg b/static/website/images/Advanced-Cpp.jpg
index 4550d61..4550d61 100644
--- a/static/website/images/Advanced-C++.jpg
+++ b/static/website/images/Advanced-Cpp.jpg
Binary files differ
diff --git a/static/website/images/Advanced-C++.png b/static/website/images/Advanced-Cpp.png
index 5f41a18..5f41a18 100644
--- a/static/website/images/Advanced-C++.png
+++ b/static/website/images/Advanced-Cpp.png
Binary files differ
diff --git a/static/website/images/C-and-C++.jpg b/static/website/images/C-and-Cpp.jpg
index b1e972b..b1e972b 100644
--- a/static/website/images/C-and-C++.jpg
+++ b/static/website/images/C-and-Cpp.jpg
Binary files differ
diff --git a/static/website/templates/ajax-duration.html b/static/website/templates/ajax-duration.html
index 22fe04f..e02fcff 100644
--- a/static/website/templates/ajax-duration.html
+++ b/static/website/templates/ajax-duration.html
@@ -1,14 +1,14 @@
{% load count_tags %}
<div>
<div id="minutes">
- <option value="None">min</option>
+ <option value="">min</option>
{% for i in minutes|inc|get_range %}
<option value="{{ i }}-{{ i|inc }}">{{ i }}-{{ i|inc }} </option>
{% endfor %}
</div> <!-- /#minutes -->
<div id="seconds">
- <option value="None">sec</option>
+ <option value="">sec</option>
{% for i in seconds|get_range:"0,10" %}
<option value="{{ i }}-{{ i|add:"10" }}">{{ i }}-{{ i|add:"10" }}</option>
{% endfor %}
diff --git a/static/website/templates/ajax-tutorials.html b/static/website/templates/ajax-tutorials.html
index c19fe3c..62192bb 100644
--- a/static/website/templates/ajax-tutorials.html
+++ b/static/website/templates/ajax-tutorials.html
@@ -1,5 +1,5 @@
-<option value="None">Select a Tutorial</option>
+<option value="">Select a Tutorial</option>
{% for tutorial in tutorials %}
- <option value="{{ tutorial.tutorial_name }}">{{ tutorial.tutorial_name }}</option>
+ <option value="{{ tutorial.tutorial }}">{{ tutorial.tutorial }}</option>
{% endfor %}
<option value="General">General</option>
diff --git a/static/website/templates/index.html b/static/website/templates/index.html
index 7f4a497..63890fd 100644
--- a/static/website/templates/index.html
+++ b/static/website/templates/index.html
@@ -10,7 +10,13 @@
{% for category in categories %}
<div>
<div class="thumbnail">
- <img src="{% static 'website/images/' %}{{ category }}.jpg">
+ {% with file=category|get_category_image %}
+ {% if file %}
+ <img src="{% static category|get_category_image %}">
+ {% else %}
+ <div class="category-title">{{category}}</div>
+ {% endif %}
+ {% endwith %}
<div class="caption">
<small class="category">
{{ category }}
diff --git a/website/forms.py b/website/forms.py
index b982d54..e2e6783 100644
--- a/website/forms.py
+++ b/website/forms.py
@@ -1,85 +1,33 @@
from django import forms
from website.models import *
-
-categories = (
- ("None", "Select a Category"),
- ("General", "General"),
- ('Advanced-C++', 'Advanced-C++'),
- ('BASH', 'BASH'),
- ('Blender', 'Blender'),
- ('C-and-C++', 'C-and-C++'),
- ('CellDesigner', 'CellDesigner'),
- ('Digital-Divide', 'Digital-Divide'),
- ('Drupal', 'Drupal'),
- ('Firefox', 'Firefox'),
- ('GChemPaint', 'GChemPaint'),
- ('Geogebra', 'Geogebra'),
- ('GeoGebra-for-Engineering-drawing', 'GeoGebra-for-Engineering-drawing'),
- ('GIMP', 'GIMP'),
- ('GNS3', 'GNS3'),
- ('GSchem', 'GSchem'),
- ('Inkscape', 'Inkscape'),
- ('Java', 'Java'),
- ('Java-Business-Application', 'Java-Business-Application'),
- ('KiCad', 'KiCad'),
- ('KTouch', 'KTouch'),
- ('KTurtle', 'KTurtle'),
- ('LaTeX', 'LaTeX'),
- ('LibreOffice-Suite-Base', 'LibreOffice-Suite-Base'),
- ('LibreOffice-Suite-Calc', 'LibreOffice-Suite-Calc'),
- ('LibreOffice-Suite-Draw', 'LibreOffice-Suite-Draw'),
- ('LibreOffice-Suite-Impress', 'LibreOffice-Suite-Impress'),
- ('LibreOffice-Suite-Math', 'LibreOffice-Suite-Math'),
- ('LibreOffice-Suite-Writer', 'LibreOffice-Suite-Writer'),
- ('Linux', 'Linux'),
- ('Netbeans', 'Netbeans'),
- ('Ngspice', 'Ngspice'),
- ('OpenFOAM', 'OpenFOAM'),
- ('Orca', 'Orca'),
- ('Oscad', 'Oscad'),
- ('PERL', 'PERL'),
- ('PHP-and-MySQL', 'PHP-and-MySQL'),
- ('Python', 'Python'),
- ('Python-Old-Version', 'Python-Old-Version'),
- ('QCad', 'QCad'),
- ('R', 'R'),
- ('Ruby', 'Ruby'),
- ('Scilab', 'Scilab'),
- ('Selenium', 'Selenium'),
- ('Single-Board-Heater-System', 'Single-Board-Heater-System'),
- ('Spoken-Tutorial-Technology', 'Spoken-Tutorial-Technology'),
- ('Step', 'Step'),
- ('Thunderbird', 'Thunderbird'),
- ('Tux-Typing', 'Tux-Typing'),
- ('What-is-Spoken-Tutorial', 'What-is-Spoken-Tutorial'),
- ('Xfig', 'Xfig')
-)
+from spoken_auth.models import TutorialDetails, TutorialResources, FossCategory
+from django.db.models import Q
tutorials = (
- ("None", "Select a Tutorial"),
+ ("", "Select a Tutorial"),
)
minutes = (
- ("None", "min"),
+ ("", "min"),
)
seconds= (
- ("None", "sec"),
+ ("", "sec"),
)
class NewQuestionForm(forms.Form):
- #fix dirty code
+ category = forms.ChoiceField(choices = [('', 'Select a Category'),] + list(TutorialResources.objects.filter(Q(status = 1) | Q(status = 2), language__name = 'English').values('tutorial_detail__foss__foss').order_by('tutorial_detail__foss__foss').values_list('tutorial_detail__foss__foss', 'tutorial_detail__foss__foss').distinct()), widget=forms.Select(attrs = {}), required = True, error_messages = {'required':'State field is required.'})
def __init__(self, *args, **kwargs):
category = kwargs.pop('category', None)
super(NewQuestionForm, self).__init__(*args, **kwargs)
- self.fields['category'] = forms.CharField(widget=forms.Select(choices=categories))
- self.fields['category'].initial = category
-
tutorial_choices = (
- ("None", "Select a Tutorial"),
+ ("", "Select a Tutorial"),
)
- if (category, category) in categories:
- tutorials = TutorialDetails.objects.using('spoken').filter(foss_category=category)
+ if not category and args and 'category' in args[0] and args[0]['category']:
+ category = args[0]['category']
+ if FossCategory.objects.filter(foss=category).exists():
+ self.fields['category'].initial = category
+ tutorials = TutorialDetails.objects.using('spoken').filter(foss__foss=category)
for tutorial in tutorials:
- tutorial_choices += ((tutorial.tutorial_name, tutorial.tutorial_name),)
+ tutorial_choices += ((tutorial.tutorial, tutorial.tutorial),)
self.fields['tutorial'] = forms.CharField(widget=forms.Select(choices=tutorial_choices))
else:
self.fields['tutorial'] = forms.CharField(widget=forms.Select(choices=tutorial_choices))
diff --git a/website/helpers.py b/website/helpers.py
index bf5217b..25ee1e7 100644
--- a/website/helpers.py
+++ b/website/helpers.py
@@ -8,11 +8,10 @@ def get_video_info(path):
import subprocess
import re
- process = subprocess.Popen(['/usr/bin/ffmpeg', '-i', path], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+ process = subprocess.Popen(['/usr/bin/avconv', '-i', path], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
stdout, stderr = process.communicate()
duration_m = re.search(r"Duration:\s{1}(?P<hours>\d+?):(?P<minutes>\d+?):(?P<seconds>\d+\.\d+?)", stdout, re.DOTALL).groupdict()
info_m = re.search(r": Video: (?P<codec>.*?), (?P<profile>.*?), (?P<width>.*?)x(?P<height>.*?), ", stdout, re.DOTALL).groupdict()
-
hours = Decimal(duration_m['hours'])
minutes = Decimal(duration_m['minutes'])
seconds = Decimal(duration_m['seconds'])
@@ -26,8 +25,6 @@ def get_video_info(path):
info_m['minutes'] = minutes
info_m['seconds'] = seconds
info_m['duration'] = total
- info_m['width'] = int(info_m['width'])
- info_m['height'] = int(info_m['height'])
return info_m
def prettify(string):
diff --git a/website/models.py b/website/models.py
index 7a845c5..727edd1 100644
--- a/website/models.py
+++ b/website/models.py
@@ -76,38 +76,3 @@ class Notification(models.Model):
return user.username
# CDEEP database created using inspectdb arg of manage.py
-class TutorialDetails(models.Model):
- id = models.IntegerField(primary_key=True)
- foss_category = models.CharField(max_length=255L)
- tutorial_name = models.CharField(max_length=600L)
- tutorial_level = models.CharField(max_length=400L)
- order_code = models.IntegerField()
-
- class Meta:
- db_table = 'tutorial_details'
-
-class TutorialResources(models.Model):
- id = models.IntegerField(primary_key=True)
- tutorial_detail_id = models.IntegerField()
- uid = models.IntegerField()
- language = models.CharField(max_length=50L)
- upload_time = models.DateTimeField()
- reviewer = models.CharField(max_length=400L)
- tutorial_content_id = models.IntegerField()
- tutorial_outline = models.TextField()
- tutorial_outline_uid = models.IntegerField()
- tutorial_outline_status = models.IntegerField()
- tutorial_script = models.TextField()
- tutorial_script_uid = models.IntegerField()
- tutorial_script_status = models.IntegerField()
- tutorial_script_timed = models.TextField()
- tutorial_video = models.TextField()
- tutorial_video_uid = models.IntegerField()
- tutorial_video_status = models.IntegerField()
- tutorial_status = models.CharField(max_length=50L)
- cvideo_version = models.IntegerField()
- hit_count = models.BigIntegerField()
- request_exception = models.TextField()
-
- class Meta:
- db_table = 'tutorial_resources'
diff --git a/website/templatetags/helpers.py b/website/templatetags/helpers.py
index a0f65be..e6afc51 100644
--- a/website/templatetags/helpers.py
+++ b/website/templatetags/helpers.py
@@ -2,8 +2,19 @@ from django import template
from website.models import Question, Answer, Notification
from website.helpers import prettify
+from django.conf import settings
+import os.path
register = template.Library()
+def get_category_image(category):
+ base_path = settings.PROJECT_DIR + '/static/website/images/'
+ file_name = category.replace(' ', '-') + '.jpg'
+ file_path = base_path + file_name
+ if os.path.isfile(file_path):
+ return 'website/images/' + file_name
+ return False
+
+register.filter('get_category_image', get_category_image)
# imported from website/helpers
register.simple_tag(prettify)
diff --git a/website/views.py b/website/views.py
index 7e33a87..5c772ae 100644
--- a/website/views.py
+++ b/website/views.py
@@ -12,30 +12,20 @@ from django.core.urlresolvers import reverse
from django.contrib.auth import get_user_model
User = get_user_model()
-from website.models import Question, Answer, Notification, TutorialDetails, TutorialResources, AnswerComment
+from website.models import Question, Answer, Notification, AnswerComment
+from spoken_auth.models import TutorialDetails, TutorialResources
from website.forms import NewQuestionForm, AnswerQuesitionForm
from website.helpers import get_video_info, prettify
+from django.db.models import Count
admins = (
9, 4376, 4915, 14595, 12329, 22467, 5518, 30705
)
-categories = (
- 'Advanced-C++', 'BASH', 'Blender',
- 'C-and-C++', 'CellDesigner', 'Digital-Divide',
- 'Drupal', 'Firefox', 'GChemPaint', 'Geogebra',
- 'GeoGebra-for-Engineering-drawing', 'GIMP', 'GNS3',
- 'GSchem', 'Inkscape', 'Java', 'Java-Business-Application',
- 'KiCad', 'KTouch', 'KTurtle', 'LaTeX',
- 'LibreOffice-Suite-Base', 'LibreOffice-Suite-Calc',
- 'LibreOffice-Suite-Draw', 'LibreOffice-Suite-Impress',
- 'LibreOffice-Suite-Math', 'LibreOffice-Suite-Writer',
- 'Linux', 'Netbeans', 'Ngspice', 'OpenFOAM', 'Orca', 'Oscad',
- 'PERL', 'PHP-and-MySQL', 'Python', 'Python-Old-Version',
- 'QCad', 'R', 'Ruby', 'Scilab', 'Selenium',
- 'Single-Board-Heater-System', 'Spoken-Tutorial-Technology',
- 'Step', 'Thunderbird', 'Tux-Typing', 'What-is-Spoken-Tutorial', 'Xfig'
-)
+categories = []
+trs = TutorialResources.objects.filter(Q(status = 1) | Q(status = 2), language__name = 'English').values('tutorial_detail__foss__foss').order_by('tutorial_detail__foss__foss').values_list('tutorial_detail__foss__foss').distinct()
+for tr in trs:
+ categories.append(tr[0])
def home(request):
questions = Question.objects.all().order_by('date_created').reverse()[:10]
@@ -225,8 +215,8 @@ def new_question(request):
cleaned_data = form.cleaned_data
question = Question()
question.uid = request.user.id
- question.category = cleaned_data['category']
- question.tutorial = cleaned_data['tutorial']
+ question.category = cleaned_data['category'].replace(' ', '-')
+ question.tutorial = cleaned_data['tutorial'].replace(' ', '-')
question.minute_range = cleaned_data['minute_range']
question.second_range = cleaned_data['second_range']
question.title = cleaned_data['title']
@@ -340,7 +330,7 @@ def ajax_category(request):
def ajax_tutorials(request):
if request.method == 'POST':
category = request.POST.get('category')
- tutorials = TutorialDetails.objects.using('spoken').filter(foss_category=category)
+ tutorials = TutorialDetails.objects.using('spoken').filter(foss__foss=category)
context = {
'tutorials': tutorials
}
@@ -352,15 +342,17 @@ def ajax_duration(request):
category = request.POST['category']
tutorial =request.POST['tutorial']
video_detail = TutorialDetails.objects.using('spoken').get(
- Q(foss_category=category),
- Q(tutorial_name=tutorial)
+ Q(foss__foss=category),
+ Q(tutorial=tutorial)
)
video_resource = TutorialResources.objects.using('spoken').get(
Q(tutorial_detail_id=video_detail.id),
- Q(language='English')
+ Q(language__name='English')
)
- video_path = '/Sites/spoken_tutorial_org/sites/default/files/{0}'.format(
- video_resource.tutorial_video
+ video_path = '/home/sanmugam/devel/spoken/media/videos/{0}/{1}/{2}'.format(
+ str(video_detail.foss_id),
+ str(video_detail.id),
+ video_resource.video
)
# video_path = '/home/cheese/test-video.ogv'
video_info = get_video_info(video_path)
@@ -475,30 +467,22 @@ def ajax_keyword_search(request):
@csrf_exempt
def ajax_time_search(request):
if request.method == "POST":
- key = request.POST['key']
- questions = Question.objects.filter(title__icontains=key)
- context = {
- 'questions': questions
- }
- return render(request, 'website/templates/ajax-keyword-search.html', context)
-
-@csrf_exempt
-def ajax_time_search(request):
- if request.method == "POST":
category = request.POST.get('category')
tutorial = request.POST.get('tutorial')
minute_range= request.POST.get('minute_range')
second_range = request.POST.get('second_range')
-
- if category != 'None':
- questions = Question.objects.filter(category=category)
- if tutorial != 'None':
- questions = questions.filter(tutorial=tutorial)
- if minute_range != 'None':
- questions = questions.filter(minute_range=minute_range)
- if second_range != 'None':
- questions = questions.filter(second_range=second_range)
-
+ questions = None
+ print request.POST, "***********"
+ if category:
+ questions = Question.objects.filter(category=category.replace(' ', '-'))
+ print "sssssssssss", questions
+ if tutorial:
+ questions = questions.filter(tutorial=tutorial.replace(' ', '-'))
+ if minute_range:
+ questions = questions.filter(category=category.replace(' ', '-'), tutorial=tutorial.replace(' ', '-'), minute_range=minute_range)
+ if second_range:
+ questions = questions.filter(category=category.replace(' ', '-'), tutorial=tutorial.replace(' ', '-'),second_range=second_range)
+ print questions, "&&&&&&&&&&&"
context = {
'questions': questions
}