# -*- coding: utf-8 -*- from django.shortcuts import render from django.utils.encoding import force_text from django.contrib.contenttypes.models import ContentType from django.template.context import RequestContext from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import render_to_response, redirect from django.views.decorators.csrf import csrf_exempt from django.core.context_processors import csrf from django.contrib.auth import authenticate, login, logout from django.contrib.auth.models import User from django.contrib.admin.models import CHANGE from django.contrib.auth.decorators import login_required from django.core.mail import send_mail from django.db.models import F import csv from django.core.mail import EmailMultiAlternatives import os from website.forms import ProposalForm, UserRegisterForm, UserLoginForm, WorkshopForm, ContactForm from website.models import Proposal, Comments, Ratings from social.apps.django_app.default.models import UserSocialAuth import random import string def userregister(request): context = {} context.update(csrf(request)) registered_emails = [] users = User.objects.all() for user in users: registered_emails.append(user.email) if request.user.is_anonymous(): if request.method == 'POST': form = UserRegisterForm(request.POST) if form.is_valid(): data = form.cleaned_data if data['email'] in registered_emails: context['form'] = form context['email_registered'] = True return render_to_response('user-register.html', context) else: form.save() context['registration_complete'] = True form = UserLoginForm() context['form'] = form context['user'] = request.user return render_to_response('cfp.html', context) else: context.update(csrf(request)) context['form'] = form return render_to_response('user-register.html', context) else: form = UserRegisterForm() context.update(csrf(request)) context['form'] = form return render_to_response('user-register.html', context) else: context['user'] = request.user return render_to_response('cfp.html', context) def contact_us(request,next_url): pass # user = request.user # context = {} # if request.method == "POST": # form = ContactForm(request.POST) # sender_name = request.POST['name'] # sender_email = request.POST['email'] # to = ('scipy@fossee.in',) # subject = "Query from - "+sender_name # message = request.POST['message'] # try: # send_mail(subject, message, sender_email, to) # context['mailsent'] = True # context['user'] = user # except: # context['mailfailed'] = True # context['user'] = user # return redirect(next_url,context) def home(request): #pass context = {} if request.user.is_authenticated(): social_user = request.user context.update(csrf(request)) django_user = User.objects.get(username=social_user) context['user'] = django_user if request.method == "POST": sender_name = request.POST['name'] sender_email = request.POST['email'] to = ('scipy@fossee.in', sender_email) subject = "Query from - "+sender_name message = request.POST['message'] try: send_mail(subject, message, sender_email, to) context['mailsent'] = True except: context['mailfailed'] = True return render_to_response('base.html', context) def cfp(request): if request.method == "POST": context = {} context.update(csrf(request)) username = request.POST['username'] password = request.POST['password'] user = authenticate(username=username, password=password) if user is not None: login(request, user) if 'next' in request.GET: next = request.GET['next'] return HttpResponseRedirect(next) proposals = Proposal.objects.filter(user = request.user).count() context['user'] = user context['proposals'] = proposals return render_to_response('cfp.html', context) else: context['invalid'] = True context['form'] = UserLoginForm context['user'] = user return render_to_response('cfp.html', context) else: form = UserLoginForm() context = RequestContext(request, {'request': request, 'user': request.user, 'form': form}) context.update(csrf(request)) return render_to_response('cfp.html', context_instance=context) @login_required def submitcfp(request): context = {} if request.user.is_authenticated(): social_user = request.user context.update(csrf(request)) django_user = User.objects.get(username=social_user) context['user'] = django_user proposals_a = Proposal.objects.filter(user = request.user, proposal_type = 'ABSTRACT').count() if request.method == 'POST': form = ProposalForm(request.POST, request.FILES) if form.is_valid(): data = form.save(commit=False) data.user = django_user data.save() context['proposal_submit'] = True sender_name = "SciPy India 2016" sender_email = "scipy@fossee.in" subject = "SciPy India 2016 – Talk Proposal Submission Acknowledgment" to = (social_user.email, "scipy@fossee.in") message = """ Dear {0},

Thank you for showing interest & submitting a talk proposal at SciPy India 2016 conference for the talk titled “{1}”. Reviewal of the proposals will start once the CFP closes.

You will be notified regarding comments/selection/rejection of your talk via email. Visit this {2} link to view status of your submission.
Thank You !

Regards,
SciPy India 2016,
FOSSEE - IIT Bombay. """.format( social_user.first_name, request.POST['title'], 'http://scipy.in/2016/view-abstracts/', ) email = EmailMultiAlternatives( subject,'', sender_email, to, headers={"Content-type":"text/html;charset=iso-8859-1"} ) email.attach_alternative(message, "text/html") email.send(fail_silently=True) return render_to_response('cfp.html', context) else: context['proposal_form'] = form context['proposals_a'] = proposals_a return render_to_response('submit-cfp.html', context) else: form = ProposalForm() context['proposals_a'] = proposals_a context['proposal_form'] = form return render_to_response('submit-cfp.html', context) #when link clicked else: context['login_required'] = True return render_to_response('cfp.html', context) @login_required def submitcfw(request): context = {} if request.user.is_authenticated(): social_user = request.user context.update(csrf(request)) django_user = User.objects.get(username=social_user) context['user'] = django_user proposals_w = Proposal.objects.filter(user = request.user, proposal_type = 'WORKSHOP').count() if request.method == 'POST': form = WorkshopForm(request.POST, request.FILES) if form.is_valid(): data = form.save(commit=False) data.user = django_user data.save() context['proposal_submit'] = True sender_name = "SciPy India 2016" sender_email = "scipy@fossee.in" subject = "SciPy India 2016 – Workshop Proposal Submission Acknowledgment" to = (social_user.email, "scipy@fossee.in") message = """ Dear {0},

Thank you for showing interest & submitting a workshop proposal at SciPy India 2016 conference for the workshop titled “{1}”. Reviewal of the proposals will start once the CFP closes.

You will be notified regarding comments/selection/rejection of your workshop via email. Visit this {2} link to view status of your submission.
Thank You !

Regards,
SciPy India 2016,
FOSSEE - IIT Bombay. """.format( social_user.first_name, request.POST['title'], 'http://scipy.in/2016/view-abstracts/', ) email = EmailMultiAlternatives( subject,'', sender_email, to, headers={"Content-type":"text/html;charset=iso-8859-1"} ) email.attach_alternative(message, "text/html") email.send(fail_silently=True) return render_to_response('cfp.html', context) else: context['proposal_form'] = form context['proposals_w'] = proposals_w return render_to_response('submit-cfw.html', context) else: form = WorkshopForm() context['proposal_form'] = form context['proposals_w'] = proposals_w return render_to_response('submit-cfw.html', context) else: context['login_required'] = True return render_to_response('cfp.html', context) @login_required def view_abstracts(request): user = request.user context = {} count_list =[] if user.is_authenticated(): if user.is_superuser : proposals = Proposal.objects.all().order_by('status') ratings = Ratings.objects.all() context['ratings'] = ratings context['proposals'] = proposals context['user'] = user return render(request, 'view-abstracts.html', context) elif user is not None: if Proposal.objects.filter(user = user).exists : proposals = Proposal.objects.filter(user = user).order_by('status') context['counts'] = count_list context['proposals'] = proposals context['user'] = user return render(request, 'view-abstracts.html', context) else: return render(request, 'cfp.html') else: return render(request, 'cfp.html', context) @login_required def edit_proposal(request, proposal_id = None): user = request.user context = {} if user.is_authenticated(): proposal = Proposal.objects.get(id=proposal_id) if proposal.proposal_type == 'ABSTRACT': form = ProposalForm( instance=proposal) else: form = WorkshopForm( instance=proposal) if request.method == 'POST': if proposal.proposal_type == 'ABSTRACT': form = ProposalForm( request.POST, request.FILES, instance=proposal) else: form = WorkshopForm( request.POST, request.FILES, instance=proposal) if form.is_valid(): data = form.save(commit = False) data.user = user proposal.status = 'Resubmitted' data.save() context.update(csrf(request)) proposals = Proposal.objects.filter(user = user).order_by('status') context['proposals'] = proposals return render(request, 'view-abstracts.html', context) else: context['user'] = user context['form'] = form context['proposal'] = proposal return render(request, 'edit-proposal.html', context) context['user'] = user context['form'] = form context['proposal'] = proposal return render(request, 'edit-proposal.html', context) @login_required def abstract_details(request, proposal_id=None): user = request.user context = {} if user.is_authenticated(): if user.is_superuser : proposals = Proposal.objects.all() context['proposals'] = proposals context['user'] = user return render(request, 'abstract_details.html', context) elif user is not None: proposal = Proposal.objects.get(id=proposal_id) print "------------------> owner",proposal.user if proposal.user = user: url = '/2016'+str(proposal.attachment.url) comments = Comments.objects.filter(proposal=proposal) context['proposal'] = proposal context['user'] = user context['url'] = url context['comments'] = comments path, filename = os.path.split(str(proposal.attachment)) context['filename'] = filename return render(request, 'abstract-details.html', context) else: return render(request, 'cfp.html', context) else: return render(request, 'cfp.html', context) @login_required def rate_proposal(request, proposal_id = None): user = request.user context = {} if user.is_authenticated(): proposal = Proposal.objects.get(id=proposal_id) if request.method == 'POST': ratings = Ratings.objects.filter(proposal_id= proposal_id, user_id = user.id) if ratings: for rate in ratings: rate.rating = request.POST['rating'] rate.save() else: newrate = Ratings() newrate.rating = request.POST['rating'] newrate.user = user newrate.proposal = proposal newrate.save() rates = Ratings.objects.filter(proposal_id=proposal_id) comments = Comments.objects.filter(proposal=proposal) context['comments'] = comments context['proposal'] = proposal context['rates'] = rates context.update(csrf(request)) return render(request, 'comment-abstract.html', context) else: rates = Ratings.objects.filter(proposal=proposal) comments = Comments.objects.filter(proposal=proposal) context['comments'] = comments context['proposal'] = proposal context['rates'] = rates context.update(csrf(request)) return render(request, 'comment-abstract.html', context) else: return render(request, 'comment-abstract.html', context) @login_required def comment_abstract(request, proposal_id = None): user = request.user context = {} if user.is_authenticated(): if user.is_superuser : proposal = Proposal.objects.get(id=proposal_id) url = '/2016'+str(proposal.attachment.url) if request.method == 'POST': comment = Comments() comment.comment = request.POST['comment'] comment.user = user comment.proposal = proposal comment.save() comments = Comments.objects.filter(proposal=proposal) sender_name = "SciPy India 2016" sender_email = "scipy@fossee.in" to = (proposal.user.email, "scipy@fossee.in" ) if proposal.proposal_type == 'ABSTRACT': subject = "SciPy India 216 - Comment on Your talk Proposal" message = """ Dear {0},

There is a comment posted on your proposal for the talk titled {1}.
Once we receive your response, you will be notified regarding further comments/acceptance/ rejection of your talk/workshop via email. Visit this link {2} to view comments on your submission.

Thank You !

Regards,
SciPy India 2016,
FOSSEE - IIT Bombay. """.format( proposal.user.first_name, proposal.title, 'http://scipy.in/2016/abstract-details/' + str(proposal.id), ) elif proposal.proposal_type =='WORKSHOP': subject = "SciPy India 216 - Comment on Your Workshop Proposal" message = """ Dear {0},

There is a comment posted on your proposal for the workshop titled {1}.
Once we receive your response, you will be notified regarding further comments/acceptance/ rejection of your talk/workshop via email. Visit this {2} link to view comments on your submission.

Thank You !

Regards,
SciPy India 2016,
FOSSEE - IIT Bombay. """.format( proposal.user.first_name, proposal.title, 'http://scipy.in/2016/abstract-details/' + str(proposal.id), ) email = EmailMultiAlternatives( subject,'', sender_email, to, headers={"Content-type":"text/html;charset=iso-8859-1"} ) email.attach_alternative(message, "text/html") email.send(fail_silently=True) proposal.status="Commented" proposal.save() rates = Ratings.objects.filter(proposal=proposal) context['rates'] = rates context['proposal'] = proposal context['comments'] = comments context['url'] = url path, filename = os.path.split(str(proposal.attachment)) context['filename'] = filename context.update(csrf(request)) return render(request, 'comment-abstract.html', context) else: comments = Comments.objects.filter(proposal=proposal) rates = Ratings.objects.filter(proposal=proposal) context['rates'] = rates context['proposal'] = proposal context['url'] = url context['comments'] = comments path, filename = os.path.split(str(proposal.attachment)) context['filename'] = filename context.update(csrf(request)) return render(request, 'comment-abstract.html', context) else: return render(request, 'cfp.html', context) else: return render(request, 'cfp.html', context) @login_required def status(request, proposal_id= None): user = request.user context = {} if user.is_authenticated(): if user.is_superuser : proposal = Proposal.objects.get(id=proposal_id) if 'accept' in request.POST: proposal.status="Accepted" proposal.save() sender_name = "SciPy India 2016" sender_email = "scipy@fossee.in" to = (proposal.user.email, "scipy@fossee.in") if proposal.proposal_type == 'ABSTRACT': subject = "SciPy India 2016 - Talk Proposal Accepted" message = """Dear """+proposal.user.first_name+""", Congratulations. Your proposal for the talk titled '"""+ proposal.title+ """' is accepted. You shall present the talk at the conference.\n\nYou will be notified regarding instructions of your talk via email.\n\nThank You ! \n\nRegards,\nSciPy India 2016,\nFOSSEE - IIT Bombay""" elif proposal.proposal_type == 'WORKSHOP': subject = "SciPy India 2016 - Workshop Proposal Accepted" message = """Dear """+proposal.user.first_name+""", Congratulations. Your proposal for the workshop titled '"""+ proposal.title+ """' is accepted. You shall conduct the workshop at the conference.\n\nYou will be notified regarding instructions of your workshop via email.\n\nThank You ! \n\nRegards,\nSciPy India 2016,\nFOSSEE - IIT Bombay""" send_mail(subject, message, sender_email, to) context.update(csrf(request)) elif 'reject' in request.POST: proposal.status="Rejected" proposal.save() sender_name = "SciPy India 2016" sender_email = "scipy@fossee.in" to = (proposal.user.email,"scipy@fossee.in", ) if proposal.proposal_type == 'ABSTRACT': subject = "SciPy India 2016 - Talk Proposal Rejected" message = """Dear """+proposal.user.first_name+""", We regret to inform you that your proposal for the talk titled '"""+ proposal.title+ """' as not been shortlisted.
You may register and attend the conference by clicking http://scipyindia2016.doattend.com/ \n\nThank You ! \n\nRegards,\nSciPy India 2016,\nFOSSEE - IIT Bombay""" elif proposal.proposal_type == 'WORKSHOP': subject = "SciPy India 2016 - Workshop Proposal Rejected" message = """Dear """+proposal.user.first_name+""", We regret to inform you that your proposal for the workshop titled '"""+ proposal.title+ """' as not been shortlisted.
You may register and attend the conference by clicking http://scipyindia2016.doattend.com/ \n\nThank You ! \n\nRegards,\nSciPy India 2016,\nFOSSEE - IIT Bombay""" send_mail(subject, message, sender_email, to) context.update(csrf(request)) elif 'resubmit' in request.POST: to = (proposal.user.email, "scipy@fossee.in" ) sender_name = "SciPy India 2016" sender_email = "scipy@fossee.in" if proposal.proposal_type == 'ABSTRACT': subject = "SciPy India 216 - Talk Proposal Resumbmission" message = """ Dear {0},

Thank you for showing interest & submitting a talk proposal at SciPy India 2016 conference for the talk titled "{1}". You are requested to submit this talk proposal once again.
You will be notified regarding comments/selection/rejection of your talk via email. Visit this {2} link to view comments on your submission.

Thank You !

Regards,
SciPy India 2016,
FOSSEE - IIT Bombay. """.format( proposal.user.first_name, proposal.title, 'http://scipy.in/2016/view-abstracts/' ) elif proposal.proposal_type =='WORKSHOP': subject = "SciPy India 216 - Workshop Proposal Resubmission" message = """ Thank you for showing interest & submitting a workshop proposal at SciPy India 2016 conference for the workshop titled "{1}". You are requested to submit this talk proposal once again.
You will be notified regarding comments/selection/rejection of your workshop via email. Visit this {2} link to view comments on your submission.

Thank You !

Regards,
SciPy India 2016,
FOSSEE - IIT Bombay. """.format( proposal.user.first_name, proposal.title, 'http://scipy.in/2016/view-abstracts/' ) email = EmailMultiAlternatives( subject,'', sender_email, to, headers={"Content-type":"text/html;charset=iso-8859-1"} ) email.attach_alternative(message, "text/html") email.send(fail_silently=True) proposal.status="Edit" proposal.save() context.update(csrf(request)) else: return render(request, 'cfp.html') else: return render(request, 'cfp.html') proposals = Proposal.objects.all().order_by('status') context['proposals'] = proposals context['user'] = user return render(request, 'view-abstracts.html', context) @login_required def status_change(request): user = request.user context = {} if user.is_authenticated(): if user.is_superuser: if 'delete' in request.POST: delete_proposal = request.POST.getlist('delete_proposal') for proposal_id in delete_proposal: proposal = Proposal.objects.get(id = proposal_id) proposal.delete() context.update(csrf(request)) proposals = Proposal.objects.all() context['proposals'] = proposals context['user'] = user return render(request, 'view-abstracts.html', context) elif 'dump' in request.POST: delete_proposal = request.POST.getlist('delete_proposal') try: response = HttpResponse(content_type='text/csv') response['Content-Disposition'] = 'attachment; filename="Proposals.csv"' writer = csv.writer(response) header = [ 'name', 'username', 'email', 'about_me', 'phone', 'title', 'abstract', 'prerequisite', 'duration', 'attachment', 'date_created', 'status', 'proposal_type', 'tags', ] writer.writerow(header) for proposal_id in delete_proposal: proposal = Proposal.objects.get(id = proposal_id) row = [ '{0} {1}'.format(proposal.user.first_name, proposal.user.last_name), proposal.user.username, proposal.user.email, proposal.about_me, proposal.phone, proposal.title, proposal.abstract, proposal.prerequisite, proposal.duration, proposal.attachment, proposal.date_created, proposal.status, proposal.proposal_type, proposal.tags, ] writer.writerow(row) return response except: proposals = Proposal.objects.all() context['proposals'] = proposals context['user'] = user return render(request, 'view-abstracts.html', context) elif 'accept' in request.POST: delete_proposal = request.POST.getlist('delete_proposal') for proposal_id in delete_proposal: proposal = Proposal.objects.get(id = proposal_id) proposal.status = "Accepted" proposal.save() sender_name = "SciPy India 2016" sender_email = "scipy@fossee.in" to = (proposal.user.email, "scipy@fossee.in") if proposal.proposal_type == 'ABSTRACT': subject = "SciPy India 2016 - Talk Proposal Accepted" message = """Dear """+proposal.user.first_name+""", Congratulations. Your proposal for the talk titled '"""+ proposal.title+ """'is accepted. You shall present the talk at the conference.\n\nYou will be notified regarding instructions of your talk via email.\n\nThank You ! \n\nRegards,\nSciPy India 2016,\nFOSSEE - IIT Bombay""" elif proposal.proposal_type == 'WORKSHOP': subject = "SciPy India 2016 - Workshop Proposal Accepted" message = """Dear """+proposal.user.first_name+""", Congratulations. Your proposal for the workshop titled '"""+ proposal.title+ """'is accepted. You shall conduct the workshop at the conference.\n\nYou will be notified regarding instructions of your workshop via email.\n\nThank You ! \n\nRegards,\nSciPy India 2016,\nFOSSEE - IIT Bombay""" send_mail(subject, message, sender_email, to) context.update(csrf(request)) proposals = Proposal.objects.all() context['proposals'] = proposals context['user'] = user return render(request, 'view-abstracts.html', context) elif 'reject' in request.POST: delete_proposal = request.POST.getlist('delete_proposal') for proposal_id in delete_proposal: proposal = Proposal.objects.get(id = proposal_id) proposal.status="Rejected" proposal.save() sender_name = "SciPy India 2016" sender_email = "scipy@fossee.in" to = (proposal.user.email, "scipy@fossee.in") if proposal.proposal_type == 'ABSTRACT': subject = "SciPy India 2016 - Talk Proposal Rejected" message = """Dear """+proposal.user.first_name+""", We regret to inform you that your proposal for the talk titled '"""+ proposal.title+ """' as not been shortlisted.
You may register and attend the conference by clicking http://scipyindia2016.doattend.com/ \n\nThank You ! \n\nRegards,\nSciPy India 2016,\nFOSSEE - IIT Bombay""" elif proposal.proposal_type == 'WORKSHOP': subject = "SciPy India 2016 - Workshop Proposal Rejected" message = """Dear """+proposal.user.first_name+""", We regret to inform you that your proposal for the workshop titled '"""+ proposal.title+ """' as not been shortlisted.
You may register and attend the conference by clicking http://scipyindia2016.doattend.com/ \n\nThank You ! \n\nRegards,\nSciPy India 2016,\nFOSSEE - IIT Bombay""" send_mail(subject, message, sender_email, to) context.update(csrf(request)) proposals = Proposal.objects.all() context['proposals'] = proposals context['user'] = user return render(request, 'view-abstracts.html', context) elif 'resubmit' in request.POST: delete_proposal = request.POST.getlist('delete_proposal') for proposal_id in delete_proposal: proposal = Proposal.objects.get(id = proposal_id) sender_name = "SciPy India 2016" sender_email = "scipy@fossee.in" to = (proposal.user.email, "scipy@fossee.in" ) if proposal.proposal_type == 'ABSTRACT': subject = "SciPy India 216 - Talk Proposal Resumbmission" message = """ Dear {0},

Thank you for showing interest & submitting a talk proposal at SciPy India 2016 conference for the talk titled "{1}". You are requested to submit this talk proposal once again.
You will be notified regarding comments/selection/rejection of your talk via email. Visit this {2} link to view comments on your submission.

Thank You !

Regards,
SciPy India 2016,
FOSSEE - IIT Bombay. """.format( proposal.user.first_name, proposal.title, 'http://scipy.in/2016/view-abstracts/' ) elif proposal.proposal_type =='WORKSHOP': subject = "SciPy India 216 - Workshop Proposal Resubmission" message = """ Thank you for showing interest & submitting a workshop proposal at SciPy India 2016 conference for the workshop titled "{1}". You are requested to submit this talk proposal once again.
You will be notified regarding comments/selection/rejection of your workshop via email. Visit this {2} link to view comments on your submission.

Thank You !

Regards,
SciPy India 2016,
FOSSEE - IIT Bombay. """.format( proposal.user.first_name, proposal.title, 'http://scipy.in/2016/view-abstracts/' ) email = EmailMultiAlternatives( subject,'', sender_email, to, headers={"Content-type":"text/html;charset=iso-8859-1"} ) email.attach_alternative(message, "text/html") email.send(fail_silently=True) proposal.status="Edit" proposal.save() context.update(csrf(request)) proposals = Proposal.objects.all() context['proposals'] = proposals context['user'] = user return render(request, 'view-abstracts.html', context) else: proposals = Proposal.objects.all() context['proposals'] = proposals context['user'] = user return render(request, 'view-abstracts.html', context) else: return render(request, 'cfp.html', context) else: return render(request, 'view-abstracts.html', context)