summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--category_names.txt10
-rw-r--r--forums/forms.py52
-rw-r--r--forums/settings.py10
-rw-r--r--forums/urls.py1
-rw-r--r--forums/views.py86
-rw-r--r--issue_names.txt6
-rw-r--r--migrate_spoken/views.py2
-rw-r--r--populate_category.py26
-rw-r--r--populate_issue.py24
-rw-r--r--requirements.txt1
-rw-r--r--static/forums/templates/user-login.html6
-rw-r--r--static/forums/templates/user-register.html91
-rw-r--r--static/website/css/font-awesome.min.css4
-rw-r--r--static/website/css/login.css111
-rw-r--r--static/website/css/yamm-min.css1
-rw-r--r--static/website/css/yamm.css29
-rw-r--r--static/website/templates/base.html2
-rw-r--r--static/website/templates/filter.html11
-rw-r--r--static/website/templates/get-question.html13
-rw-r--r--static/website/templates/index.html10
-rw-r--r--static/website/templates/new-question.html4
-rw-r--r--static/website/templates/questions.html6
-rw-r--r--website/forms.py17
-rw-r--r--website/models.py6
-rw-r--r--website/views.py14
25 files changed, 490 insertions, 53 deletions
diff --git a/category_names.txt b/category_names.txt
new file mode 100644
index 0000000..d716a03
--- /dev/null
+++ b/category_names.txt
@@ -0,0 +1,10 @@
+Scilab
+Python
+FreeEDA
+OpenFOAM
+OR-Tools
+Osdag
+SBHS
+Netbook
+Sandhi
+DWSIM
diff --git a/forums/forms.py b/forums/forms.py
index 5a93b5f..6bfb184 100644
--- a/forums/forms.py
+++ b/forums/forms.py
@@ -1,5 +1,18 @@
from django import forms
from django.contrib.auth import login, logout, authenticate
+from django.utils.translation import ugettext_lazy as _
+from django.core.validators import MinLengthValidator, MinValueValidator, \
+RegexValidator, URLValidator
+from captcha.fields import ReCaptchaField
+from django.contrib.auth.models import User
+from captcha.fields import ReCaptchaField
+
+from django.utils.translation import ugettext_lazy as _
+from django.core.validators import MinLengthValidator, MinValueValidator, \
+RegexValidator, URLValidator
+from django.template.defaultfilters import filesizeformat
+
+
class UserLoginForm(forms.Form):
username = forms.CharField()
@@ -8,13 +21,50 @@ class UserLoginForm(forms.Form):
def clean(self):
cleaned_data = self.cleaned_data
username = cleaned_data.get('username')
+ print username
password = cleaned_data.get('password')
- if username is None or password is None:
+ print password
+ if username is None or password is None:
raise forms.ValidationError("Invalid username or password")
user = authenticate(username=username, password=password)
+
if not user:
raise forms.ValidationError("Invalid username or password")
if not user.is_active:
raise forms.ValidationError("User is blocked")
cleaned_data['user'] = user
return cleaned_data
+
+
+class RegisterForm(forms.Form):
+ username = forms.CharField(
+ label = _("Username"),
+ max_length = 30,
+ widget = forms.TextInput(),
+ required = True,
+ validators = [
+ RegexValidator(
+ regex = '^[a-zA-Z0-9-_+.]*$',
+ message = 'Username required. 30 characters or fewer. \
+ Letters, digits and @/./+/-/_ only.',
+ code = 'invalid_username'
+ ),
+ ]
+ )
+ password = forms.CharField(
+ label = _("Password"),
+ widget = forms.PasswordInput(render_value = False),
+ min_length = 8,
+ )
+
+ password_confirm = forms.CharField(
+ label = _("Password (again)"),
+ widget = forms.PasswordInput(render_value = False),
+ min_length = 8,
+ )
+ email = forms.EmailField(
+ label = _("Email"),
+ widget = forms.TextInput(),
+ required=True
+ )
+ captcha = ReCaptchaField()
diff --git a/forums/settings.py b/forums/settings.py
index 88133d2..63ec9c5 100644
--- a/forums/settings.py
+++ b/forums/settings.py
@@ -141,6 +141,7 @@ INSTALLED_APPS = (
#'spoken_auth',
'compressor',
'debug_toolbar',
+ 'captcha',
#'migrate_spoken',
)
@@ -179,5 +180,10 @@ TEMPLATE_CONTEXT_PROCESSORS += (
)
COMPRESS_ROOT = PROJECT_DIR + "/static/"
-COMPRESS_ENABLED = True
-HTML_MINIFY = True
+COMPRESS_ENABLED = True # disable in production Env
+HTML_MINIFY = True # disable in production Env
+
+HTML_MINIFY = HTML_MINIFY
+RECAPTCHA_PUBLIC_KEY = '6LemngMTAAAAAAC0Fkv0CQcavkTIIJ3LTDzi9gMq'
+RECAPTCHA_PRIVATE_KEY = '6LemngMTAAAAAHZsIaY-G98QegM3htdGVEWbEJYL'
+RECAPTCHA_USE_SSL = True
diff --git a/forums/urls.py b/forums/urls.py
index 90d61fb..3f257ea 100644
--- a/forums/urls.py
+++ b/forums/urls.py
@@ -18,5 +18,6 @@ urlpatterns = patterns('',
# User account urls
url(r'^accounts/login/', 'forums.views.user_login', name='user_login'),
url(r'^accounts/logout/', 'forums.views.user_logout', name='user_logout'),
+ url(r'^accounts/register/', 'forums.views.account_register', name='user_register'),
url(r'^migrate', 'migrate_spoken.views.chenage_drupal_userid_spoken', name='chenage_drupal_userid_spoken'),
)
diff --git a/forums/views.py b/forums/views.py
index b2dae90..3e82a90 100644
--- a/forums/views.py
+++ b/forums/views.py
@@ -2,16 +2,98 @@ from django.http import HttpResponse, HttpResponseRedirect
from django.contrib.auth import login, logout, authenticate
from django.shortcuts import render_to_response
from django.core.context_processors import csrf
+from django.template import RequestContext
+from django.contrib.auth.decorators import login_required
+from django.contrib.auth import authenticate, login, logout
+from django.core.mail import EmailMultiAlternatives
+from django.contrib import messages
+from django.utils import timezone
-from forums.forms import UserLoginForm
+from django.conf import settings
+
+
+
+import random, string
+
+from forums.forms import *
+
+def account_register(request):
+ context = {}
+ print "account_registration"
+ print request.method
+ if request.method == 'POST':
+ form = RegisterForm(request.POST)
+ print form
+ print form.is_valid
+ if form.is_valid():
+
+ username = request.POST['username']
+ print username
+ password = request.POST['password']
+ print password
+ email = request.POST['email']
+ print email
+ user = User.objects.create_user(username, email, password)
+ user.is_active = True
+ user.save()
+ confirmation_code = ''.join(random.choice(string.ascii_uppercase + string.digits + string.ascii_lowercase) for x in range(33))
+ #p = Profile(user=user, confirmation_code=confirmation_code)
+ #p.save()
+ #send_registration_confirmation(user)
+ messages.success(request, """
+ Please confirm your registration by clicking on the activation link which has been sent to your registered email id.
+ """)
+ return HttpResponseRedirect('/')
+ context = {'form':form}
+ return render_to_response('forums/templates/user-register.html', context,context_instance = RequestContext(request))
+ else:
+ form = RegisterForm()
+ context = {
+ 'form': form
+ }
+ context.update(csrf(request))
+ return render_to_response('forums/templates/user-register.html', context)
+
+def send_registration_confirmation(user):
+ p = Profile.objects.get(user=user)
+ #user.email = "k.sanmugam2@gmail.com"
+ # Sending email when an answer is posted
+ subject = 'Account Active Notification'
+ message = """Dear {0},
+ Thank you for registering at {1}. You may activate your account by clicking on this link or copying and pasting it in your browser
+ {2}
+ Regards,
+ Admin
+ Spoken Tutorials
+ IIT Bombay.
+ """.format(
+ user.username,
+ "http://spoken-tutorial.org",
+ "http://spoken-tutorial.org/accounts/confirm/" + str(p.confirmation_code) + "/" + user.username
+ )
+ email = EmailMultiAlternatives(
+ subject, message, 'administrator@spoken-tutorial.org',
+ to = [user.email], bcc = [], cc = [],
+ headers={'Reply-To': 'no-replay@spoken-tutorial.org', "Content-type":"text/html;charset=iso-8859-1"}
+ )
+ #email.attach_alternative(message, "text/html")
+ try:
+ result = email.send(fail_silently=False)
+ except:
+ pass
def user_login(request):
if request.user.is_anonymous():
+
if request.method == 'POST':
form = UserLoginForm(request.POST)
+
if form.is_valid():
+
cleaned_data = form.cleaned_data
+
user = cleaned_data.get("user")
+
login(request, user)
if 'next' in request.POST:
next_url = request.POST.get('next')
@@ -19,12 +101,14 @@ def user_login(request):
return HttpResponseRedirect('/')
else:
form = UserLoginForm()
+ print form.errors
next_url = request.GET.get('next')
context = {
'form': form,
'next': next_url
}
+
context.update(csrf(request))
return render_to_response('forums/templates/user-login.html', context)
else:
diff --git a/issue_names.txt b/issue_names.txt
new file mode 100644
index 0000000..fa07da1
--- /dev/null
+++ b/issue_names.txt
@@ -0,0 +1,6 @@
+Bug
+Features
+Suggestions
+Error
+Feedback
+Request
diff --git a/migrate_spoken/views.py b/migrate_spoken/views.py
index fc56c25..bbf81bd 100644
--- a/migrate_spoken/views.py
+++ b/migrate_spoken/views.py
@@ -1,6 +1,6 @@
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
-from website.models import Question, Answer, AnswerComment, Notification
+#from website.models import Question, Answer, AnswerComment, Notification
from migrate_spoken.models import OldUsers
from spoken_auth.models import Users
# Create your views here.
diff --git a/populate_category.py b/populate_category.py
new file mode 100644
index 0000000..339811c
--- /dev/null
+++ b/populate_category.py
@@ -0,0 +1,26 @@
+import os
+import datetime
+from datetime import timedelta
+
+Date = datetime.datetime.now()
+def populate():
+ #file_obj=open("data_of_rc.csv")
+ #print file_obj
+ #file_obj.close()
+ f=open("category_names.txt")
+ for line in f:
+ cname=line.replace("\n","")
+ cat_added=add_category(cname)
+ f.close()
+
+def add_category(cname):
+ cat = FossCategory.objects.get_or_create(name=cname,description=cname,date_created=Date,date_modified=Date)[0]#for now description is same as category_names
+ print "category " +str(cname)+" added at "+str(Date)
+ return cat
+
+# Start execution here!
+if __name__ == '__main__':
+ print "Starting population script for adding category..."
+ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'forums.settings')
+ from website.models import *
+ populate()
diff --git a/populate_issue.py b/populate_issue.py
new file mode 100644
index 0000000..8ea103c
--- /dev/null
+++ b/populate_issue.py
@@ -0,0 +1,24 @@
+import os
+import datetime
+from datetime import timedelta
+
+Date = datetime.datetime.now()
+def populate():
+
+ f=open("issue_names.txt")
+ for line in f:
+ cname=line.replace("\n","")
+ cat_added=add_category(cname)
+ f.close()
+
+def add_category(cname):
+ cat = Issue.objects.get_or_create(name=cname,date_created=Date,date_modified=Date)[0]#for now description is same as category_names
+ print "category " +str(cname)+" added at "+str(Date)
+ return cat
+
+# Start execution here!
+if __name__ == '__main__':
+ print "Starting population script for adding category..."
+ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'forums.settings')
+ from website.models import *
+ populate()
diff --git a/requirements.txt b/requirements.txt
index 1acb05c..e7beaee 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,4 +1,5 @@
Django==1.5
+django-recaptcha==1.0.2
MySQL-python==1.2.4
argparse==1.2.1
beautifulsoup4==4.3.2
diff --git a/static/forums/templates/user-login.html b/static/forums/templates/user-login.html
index 350cce5..cb09a06 100644
--- a/static/forums/templates/user-login.html
+++ b/static/forums/templates/user-login.html
@@ -5,11 +5,11 @@
<div class="row">
<div class="col-lg-6" style="border-right: 1px dashed #424242;">
<h4>Please login with your <br>Spoken-Tutorial.org account.</h4>
- <form action="/accounts/login/" method="POST"> {% csrf_token %}
+ <form action="accounts/login/" method="POST"> {% csrf_token %}
{% if form.errors %}
<div class="alert alert-danger">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
- Invalid username or password
+ <b>Invalid username or password</b>
</div>
{% endif %}
{% with WIDGET_ERROR_CLASS='field_error' %}
@@ -40,7 +40,7 @@
</ul>
<h4>Dont have a Spoken-Tutorial.org account yet ?</h4>
<p>
- <a class="btn btn-sm btn-success" href="http://www.spoken-tutorial.org/accounts/register/" target="_blank">Register</a>
+ <a class="btn btn-sm btn-success" href="/accounts/register/" >Register</a>
</p>
</div> <!-- /.col -->
</div> <!-- /.row -->
diff --git a/static/forums/templates/user-register.html b/static/forums/templates/user-register.html
new file mode 100644
index 0000000..0d88dcc
--- /dev/null
+++ b/static/forums/templates/user-register.html
@@ -0,0 +1,91 @@
+{% extends 'website/templates/base.html' %}
+{% load widget_tweaks %}
+{% load static %}
+{% block title %}Register{% endblock %}
+
+{% block cssblock %}
+ <link rel="stylesheet" href="{% static 'website/css/login.css' %}" type="text/css" media="screen" charset="utf-8" />
+{% endblock %}
+{% block search %}
+{% endblock %}
+{% block content %}
+ <div id="loggit" class="img-rounded">
+ <h1><i class="fa fa-pencil"></i> Register Yourself</h1>
+ <br>
+ <form id="logForm" method="post" class="form-horizontal">{% csrf_token %}
+ <div class="form-group">
+ <div class="col-xs-12">
+ <div class="input-group">
+ <span class="input-group-addon"><i class="fa fa-user fa-fw"></i></span>
+ {% render_field form.username class+="form-control username" tabindex="1" placeholder="Desired Username" %}
+ </div>
+ {{ form.username.errors }}
+ </div>
+ </div>
+ <div class="form-group">
+ <div class="col-xs-12">
+ <div class="input-group">
+ <span class="input-group-addon"><i class="fa fa-envelope fa-fw"></i></span>
+ {% render_field form.email class+="form-control email" tabindex="1" placeholder="Your Email" %}
+ </div>
+ {{ form.email.errors }}
+ </div>
+ </div>
+ <div class="form-group">
+ <div class="col-xs-12">
+ <div class="input-group">
+ <span class="input-group-addon"><i class="fa fa-key fa-fw"></i></span>
+ {% render_field form.password class+="form-control password" tabindex="1" placeholder="Enter password" %}
+ </div>
+ {{ form.password.errors }}
+ </div>
+ </div>
+ <div class="form-group">
+ <div class="col-xs-12">
+ <div class="input-group">
+ <span class="input-group-addon"><i class="fa fa-key fa-fw"></i></span>
+ {% render_field form.password_confirm class+="form-control password_confirm" tabindex="1" placeholder="Retype Password" %}
+ </div>
+ {{ form.password_confirm.errors }}
+ </div>
+ </div>
+ <div class="form-group">
+ <div class="col-xs-12">
+ <div class="input-group captcha-group">
+ {% render_field form.captcha class+="form-control captcha" placeholder="Enter Captcha" %}
+ </div>
+ {{ form.captcha.errors }}
+ </div>
+ </div>
+ <div class="form-group formSubmit">
+ <div class="col-sm-7">
+ <p class="text-center">Already Registered? <span><a href="/accounts/login/">Login here</span></a></p>
+ </div>
+ <div class="col-sm-5 submitWrap">
+ <button type="submit" class="btn btn-primary btn-lg">Register Me</button>
+ </div>
+ </div>
+ </form>
+ </div>
+{% endblock %}
+{% block uncompressjsblock %}
+ <script>
+ $(function() {
+ // Add refresh button after field (this can be done in the template as well)
+
+ // Click-handler for the refresh-link
+ $('.captcha-refresh').click(function(){
+ var $form = $(this).parents('form');
+ var url = location.protocol + "//" + window.location.hostname + ":"+ location.port + "/captcha/refresh/";
+
+ // Make the AJAX-call
+ $.getJSON(url, {}, function(json) {
+ $form.find('input[name="captcha_0"]').val(json.key);
+ $form.find('img.captcha').attr('src', json.image_url);
+ });
+
+ return false;
+ });
+ });
+ </script>
+{% endblock %}
diff --git a/static/website/css/font-awesome.min.css b/static/website/css/font-awesome.min.css
new file mode 100644
index 0000000..ec53d4d
--- /dev/null
+++ b/static/website/css/font-awesome.min.css
@@ -0,0 +1,4 @@
+/*!
+ * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.2.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"} \ No newline at end of file
diff --git a/static/website/css/login.css b/static/website/css/login.css
new file mode 100644
index 0000000..9ec8f43
--- /dev/null
+++ b/static/website/css/login.css
@@ -0,0 +1,111 @@
+#loggit {
+ color: #fff;
+ font-family: "Open Sans",sans-serif;
+ background: #404040;
+ width: 480px;
+ margin: 5% auto;
+ padding: 20px 40px;
+}
+#loggit .captcha-refresh{
+ margin-left: 10px;
+}
+#loggit .form-control.captcha{
+ margin: 5px 0;
+}
+#loggit .form-group{
+ margin-bottom: 20px;
+}
+#loggit a{
+ color: #20B2AA;
+}
+#loggit a:hover{
+ color: #D26800;
+}
+#loggit h1 {
+ text-align: center;
+ font-size: 26px;
+ font-weight: 700;
+ margin: 5px 0 15px;
+}
+#loggit h3 {
+ text-align: center;
+ font-size: 14px;
+ color: #bbb;
+ margin: 0 0 20px;
+}
+#loggit .input-group-addon {
+ border: 0 none;
+}
+#loggit .form-control {
+ border: 0 none;
+}
+#loggit .form-control:focus {
+ box-shadow: none;
+}
+#loggit .formSubmit {
+ margin-bottom: 25px;
+}
+#loggit .submitWrap {
+ text-align: right;
+}
+#loggit .formNotice {
+ margin: 0;
+ font-size: 13px;
+}
+#loggit .formNotice span {
+ cursor: pointer;
+ color: #428BCA;
+}
+#loggit .formNotice span:hover,
+#loggit .formNotice span:focus {
+ color: #2A6496;
+ text-decoration: underline;
+}
+#loggit #regForm {
+ display: none;
+}
+.errorlist{
+ color: #FF4500;
+ margin-top: 5px;
+ margin-bottom: 0px;
+}
+.input-group.captcha-group{
+ background-color: #EEE;
+ border: 1px solid #eee !important;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+/**********************************************************************/
+/****************** MEDIA QUERIES ************************************/
+/********************************************************************/
+
+@media(max-width:979px){
+
+
+}
+@media (max-width: 768px) {
+ body {
+ padding-bottom: 0;
+ }
+ #loggit {
+ margin-top: 0;
+ width: 100%;
+ }
+ #loggit .submitWrap {
+ margin-top: 15px;
+ text-align: center;
+ }
+ footer {
+ position: relative;
+ }
+ footer p{
+ font-size: 13px;
+ }
+
+}
+@media (max-width: 500px) {
+ #loggit {
+ width: 100%;
+ }
+}
diff --git a/static/website/css/yamm-min.css b/static/website/css/yamm-min.css
new file mode 100644
index 0000000..5c9c2fe
--- /dev/null
+++ b/static/website/css/yamm-min.css
@@ -0,0 +1 @@
+.yamm .collapse,.yamm .dropdown,.yamm .dropup,.yamm .nav{position:static}.yamm .container{position:relative}.yamm .dropdown-menu{left:auto}.yamm .nav.navbar-right .dropdown-menu{left:auto;right:0}.yamm .yamm-content{padding:20px 30px}.yamm .dropdown.yamm-fw .dropdown-menu{left:0;right:0}
diff --git a/static/website/css/yamm.css b/static/website/css/yamm.css
new file mode 100644
index 0000000..8a1aa35
--- /dev/null
+++ b/static/website/css/yamm.css
@@ -0,0 +1,29 @@
+/*!
+ * Yamm!3
+ * Yet another megamenu for Bootstrap 3
+ *
+ * http://geedmo.github.com/yamm3
+ */
+.yamm .nav,
+.yamm .collapse,
+.yamm .dropup,
+.yamm .dropdown {
+ position: static;
+}
+.yamm .container {
+ position: relative;
+}
+.yamm .dropdown-menu {
+ left: auto;
+}
+.yamm .nav.navbar-right .dropdown-menu {
+ left: auto;
+ right: 0;
+}
+.yamm .yamm-content {
+ padding: 20px 30px;
+}
+.yamm .dropdown.yamm-fw .dropdown-menu {
+ left: 0;
+ right: 0;
+}
diff --git a/static/website/templates/base.html b/static/website/templates/base.html
index 86ca41a..d876c70 100644
--- a/static/website/templates/base.html
+++ b/static/website/templates/base.html
@@ -1,4 +1,5 @@
{% load compress %}
+
{% load static %}
<html>
<head>
@@ -12,6 +13,7 @@
<link rel="stylesheet" href="{% static 'website/slick/slick.css' %}" type="text/css" media="screen" charset="utf-8" />
<link rel="stylesheet" href="{% static 'website/css/main.css' %}" type="text/css" media="screen" charset="utf-8" />
<link rel="stylesheet" href="{% static 'website/css/nice-bar.css' %}" type="text/css" media="screen" charset="utf-8" />
+ <link rel="stylesheet" href="{% static 'website/css/login.css' %}" type="text/css" media="screen" charset="utf-8" />
{% endcompress %}
</head>
<body>
diff --git a/static/website/templates/filter.html b/static/website/templates/filter.html
index 8a54c72..eb42fcb 100644
--- a/static/website/templates/filter.html
+++ b/static/website/templates/filter.html
@@ -27,7 +27,7 @@
<table class="table table-bordered">
<th> FOSS </th>
- <th> Tutorial</th>
+ <!--<th> Tutorial</th>-->
<th> Question</th>
<th> Date</th>
<th> Views</th>
@@ -45,15 +45,6 @@
</td>
<td>
- <span class="tutorial" data-toggle="tooltip" data-placement="top" title="{{ question.tutorial}}">
- {{ question.tutorial|truncatechars:12 }}
- </span>
- <a class="pull-right" href="{% url 'website:filter' question.category question.tutorial %}?qid={{ question.id }}">
- <span class="glyphicon glyphicon-search"></span>
- </a>
- </td>
-
- <td>
<span class="title" data-toggle="tooltip" data-placement="top" title="{{ question.title }}">
<a href="{% url 'website:get_question' question.id %}{% prettify question.title %}">{{ question.title|truncatechars:40 }}</a>
</span>
diff --git a/static/website/templates/get-question.html b/static/website/templates/get-question.html
index 4b37652..18758c9 100644
--- a/static/website/templates/get-question.html
+++ b/static/website/templates/get-question.html
@@ -38,14 +38,7 @@
</a>
</small>
</span>
-
- <span class="tutorial">
- <small>
- <a href="{% url 'website:filter' question.category question.tutorial %}">
- {{ question.tutorial}}
- </a>
- </small>
- </span>
+
<a id="question-details-edit" data-toggle="modal" data-target="#detailsModal" href="#" class="hideme">
<span class="glyphicon glyphicon-edit"></span>
@@ -202,14 +195,14 @@
<div class="modal-body">
<h5>The Current question is under:</h5>
- {{ question.category }}
+ {{ question.category }} <!--
--&gt; {{ question.tutorial }}
{% if question.minute_range != 'None' %}
--&gt; {{ question.minute_range }}
{% endif %}
{% if question.second_range != 'None' %}
--&gt; {{ question.second_range}}
- {% endif %}
+ {% endif %}-->
<h5>Move the question to:</h5>
<div class="row">
diff --git a/static/website/templates/index.html b/static/website/templates/index.html
index 95a5360..bad1d6b 100644
--- a/static/website/templates/index.html
+++ b/static/website/templates/index.html
@@ -60,7 +60,7 @@
<div class="panel-body">
<table class="table table-bordered table-hover">
<th> FOSS </th>
- <th> Tutorial</th>
+ <!--<th> Tutorial</th>-->
<th> Question <span class="glyphicon glyphicon-link"></span></th>
<th> Date</th>
<th> Views</th>
@@ -77,14 +77,6 @@
</a>
</td>
- <td>
- <span class="tutorial" data-toggle="tooltip" data-placement="top" title="{{ question.tutorial}}">
- {{ question.tutorial|truncatechars:12 }}
- </span>
- <a class="pull-right" href="{% url 'website:filter' question.category question.tutorial %}?qid={{ question.id }}">
- <span class="glyphicon glyphicon-search"></span>
- </a>
- </td>
<td>
<span class="title" data-toggle="tooltip" data-placement="top" title="{{ question.title }}">
diff --git a/static/website/templates/new-question.html b/static/website/templates/new-question.html
index aa135ca..cb0439d 100644
--- a/static/website/templates/new-question.html
+++ b/static/website/templates/new-question.html
@@ -17,13 +17,13 @@
<div class="col-lg-3 col-md-3 col-sm-3">
{% render_field form.category class+="form-control"%}
</div>
- <div class="col-lg-3 col-md-3 col-sm-3">
+ <!--<div class="col-lg-3 col-md-3 col-sm-3">
{% if category %}
{% render_field form.tutorial class+="form-control" %}
{% else %}
{% render_field form.tutorial class+="form-control" %}
{% endif %}
- </div>
+ </div>-->
<div class="col-lg-2 col-md-2 col-sm-2">
<small><strong>
<a id="similar-link" data-toggle="modal" data-target="#similarModal" href="#">
diff --git a/static/website/templates/questions.html b/static/website/templates/questions.html
index 7a259a9..5242236 100644
--- a/static/website/templates/questions.html
+++ b/static/website/templates/questions.html
@@ -10,7 +10,7 @@
</h4>
<table class="table table-bordered table-hover">
<th> FOSS </th>
- <th> Tutorial</th>
+ <!--<th> Tutorial</th>-->
<th> Min </th>
<th> Sec </th>
<th> Question <span class="glyphicon glyphicon-link"></span></th>
@@ -38,7 +38,7 @@
</a>
</td>
- <td>
+ <!--<td>
<span>
<a href="{% url 'website:filter' question.category question.tutorial %}?qid={{ question.id }}">
{{ question.minute_range }}
@@ -52,7 +52,7 @@
{{ question.second_range }}
</a>
</span>
- </td>
+ </td>-->
<td>
<span class="title" data-toggle="tooltip" data-placement="top" title="{{ question.title }}">
diff --git a/website/forms.py b/website/forms.py
index 14f4d2d..d6f281c 100644
--- a/website/forms.py
+++ b/website/forms.py
@@ -4,11 +4,22 @@ from website.models import *
#from spoken_auth.models import TutorialDetails
from django.db.models import Q
class NewQuestionForm(forms.ModelForm):
- category = forms.ModelChoiceField(widget = forms.Select(attrs = {}), queryset = FossCategory.objects.order_by('name'), empty_label = "Select a category", error_messages = {'required':'Categoty field required.'})
- tutorial = forms.ModelChoiceField(widget = forms.Select(attrs = {}), queryset = Issue.objects.order_by('name'), empty_label = "Select a Issue", error_messages = {'required':'Issue field required.'})
+ category = forms.ModelChoiceField(widget = forms.Select(attrs = {}),
+ queryset = FossCategory.objects.order_by('name'),
+ empty_label = "Select a category",
+ error_messages = {'required':'Categoty field required.'})
+
+ '''tutorial = forms.ModelChoiceField(widget = forms.Select(attrs = {}), q
+ ueryset = Issue.objects.order_by('name'),
+ empty_label = "Select a Issue",
+ error_messages = {'required':'Issue field required.'})'''
+ '''class Meta:
+ model = Question
+ fields = ['category', 'tutorial', 'title', 'body']'''
+
class Meta:
model = Question
- fields = ['category', 'tutorial', 'title', 'body']
+ fields = ['category', 'title', 'body']
def __init__(self, *args, **kwargs):
category = kwargs.pop('category', None)
diff --git a/website/models.py b/website/models.py
index e6816f3..0e11a4c 100644
--- a/website/models.py
+++ b/website/models.py
@@ -23,14 +23,16 @@ class Issue(models.Model):
class Question(models.Model):
user = models.ForeignKey(User)
category = models.ForeignKey(FossCategory)
- tutorial = models.ForeignKey(Issue)
+ #tutorial = models.ForeignKey(Issue)
title = models.CharField(max_length=200)
body = models.TextField()
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
views = models.IntegerField(default=1)
# votes = models.IntegerField(default=0)
-
+ def __unicode__(self):
+ return self.user
+
class Meta:
get_latest_by = "date_created"
diff --git a/website/views.py b/website/views.py
index d80835d..9b413e5 100644
--- a/website/views.py
+++ b/website/views.py
@@ -212,7 +212,7 @@ def new_question(request):
question = Question()
question.user = request.user
question.category = cleaned_data['category']
- question.tutorial = cleaned_data['tutorial']
+ #question.tutorial = cleaned_data['tutorial']
question.title = cleaned_data['title']
question.body = cleaned_data['body'].encode('unicode_escape')
question.views= 1
@@ -224,12 +224,12 @@ def new_question(request):
The following new question has been posted in the Spoken Tutorial Forum: <br>
Title: <b>{0}</b><br>
Category: <b>{1}</b><br>
- Tutorial: <b>{2}</b><br>
- Link: <a href="{3}">{3}</a><br>
+
+ Link: <a href="{2}">{2}</a><br>
""".format(
question.title,
question.category,
- question.tutorial,
+ #question.tutorial,
'http://forums.spoken-tutorial.org/question/'+str(question.id)
)
email = EmailMultiAlternatives(
@@ -255,14 +255,16 @@ def new_question(request):
# Notification Section
@login_required
def user_questions(request, user_id):
+ print "user_id"
+ print user_id
marker = 0
if 'marker' in request.GET:
marker = int(request.GET['marker'])
if str(user_id) == str(request.user.id):
- total = Question.objects.filter(uid=user_id).count()
+ total = Question.objects.filter(user_id=user_id).count()
total = int(total - (total % 10 - 10))
- questions = Question.objects.filter(uid=user_id).order_by('date_created').reverse()[marker:marker+10]
+ questions = Question.objects.filter(user_id=user_id).order_by('date_created').reverse()[marker:marker+10]
context = {
'questions': questions,