-
+
{% for i in seconds|get_range:"0,10" %}
{% 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 @@
-
+
{% for tutorial in tutorials %}
-
+
{% endfor %}
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 %}
-

+ {% with file=category|get_category_image %}
+ {% if file %}
+

+ {% else %}
+
{{category}}
+ {% endif %}
+ {% endwith %}
{{ 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\d+?):(?P\d+?):(?P\d+\.\d+?)", stdout, re.DOTALL).groupdict()
info_m = re.search(r": Video: (?P.*?), (?P.*?), (?P.*?)x(?P.*?), ", 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)
@@ -472,16 +464,6 @@ def ajax_keyword_search(request):
}
return render(request, 'website/templates/ajax-keyword-search.html', context)
-@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":
@@ -489,16 +471,18 @@ def ajax_time_search(request):
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
}
--
cgit