lkd-planet/DJAGEN/trunk/djagen/collector/views.py

361 lines
14 KiB
Python
Raw Normal View History

2010-07-06 19:25:42 +03:00
# -*- coding: utf-8 -*-
# View definitions are created here.
from django.shortcuts import render_to_response
from django.http import HttpResponse,HttpResponseRedirect
from djagen.collector.models import *
from djagen.collector.forms import ContactForm, QueryForm
from djagen.collector.wrappers import render_response
from django.conf import settings
2010-07-09 10:15:46 +03:00
from django.utils.datastructures import MultiValueDictKeyError
2010-07-06 19:25:42 +03:00
import magic
import os
import datetime, time
from django.core.paginator import Paginator, EmptyPage, InvalidPage
import string
BASE_URL = settings.BASE_URL
def main(request):
selected_entries = Entries.objects.select_related()
entries_list1 = selected_entries.filter(entry_id__label_personal = 1)
entries_list2 = selected_entries.filter(entry_id__label_lkd = 1)
entries_list3 = selected_entries.filter(entry_id__label_community = 1)
entries_list = entries_list1 | entries_list2 | entries_list3
# This setting gets the content truncated which contains more than <truncate_words> words.
truncate_words = 250
items_per_page = 25
#get the last run time
run_time = RunTime.objects.all()[0]
#get the last entries' date
last_entry_date = Entries.objects.all()[0].date
day = datetime.timedelta(days=1)
last_date_li = []
for x in xrange(5):
2010-07-06 19:25:42 +03:00
last_entry_date -= day
last_date_li.append(last_entry_date)
2010-07-09 10:15:46 +03:00
return render_response(request, 'main/main.html' ,{
2010-07-06 19:25:42 +03:00
'entries_list':entries_list,
'truncate_words':truncate_words,
'items_per_page':repr(items_per_page),
'run_time':run_time,
#'pag_entries_list':pag_entries_list,
'BASE_URL': BASE_URL,
'last_date_li': last_date_li,
'info_area':'main',
2010-07-06 19:25:42 +03:00
})
def member_subscribe(request):
info_area = 'subscribe'
2010-07-06 19:25:42 +03:00
if request.method == 'POST':
form = ContactForm(request.POST, request.FILES)
#return HttpResponse(str(request.FILES))
if form.is_valid():
human = True
try:
check = handle_uploaded_file(request.FILES['hackergotchi'])
2010-07-09 10:15:46 +03:00
except MultiValueDictKeyError:
2010-07-06 19:25:42 +03:00
check = (False,False)
#save the author information
if check[0]:
2010-07-09 10:15:46 +03:00
f = request.FILES['hackergotchi']
2010-07-06 19:25:42 +03:00
#change the name of the file with the unique name created
f.name = check[1]
author = Authors(author_name=request.POST['name'], author_surname=request.POST['surname'], author_email=request.POST['email'], channel_url=request.POST['feed'], author_face=f.name, is_approved=0, current_status=5)
else:
author = Authors(author_name=request.POST['name'], author_surname=request.POST['surname'], author_email=request.POST['email'], channel_url=request.POST['feed'], is_approved=0, current_status=5)
2010-07-09 10:15:46 +03:00
author.save()
2010-07-06 19:25:42 +03:00
2010-07-09 10:15:46 +03:00
#save the history with explanation
author.history_set.create(action_type=5, action_date=datetime.datetime.now(), action_explanation=request.POST['message'])
2010-07-06 19:25:42 +03:00
#send mail part
#fill it here
return render_response(request, 'main/subscribe.html/',{'submit': 'done', 'BASE_URL': BASE_URL,'info_area':info_area})
2010-07-06 19:25:42 +03:00
else:
form = ContactForm()
return render_response(request, 'main/subscribe.html', {'form': form, 'BASE_URL': BASE_URL,'info_area':info_area})
2010-07-06 19:25:42 +03:00
def handle_uploaded_file(f):
if not f.name: return False
#lets create a unique name for the image
t = str(time.time()).split(".")
img_name = t[0] + t[1] + '.' +f.name.split(".")[1]
2010-07-06 19:25:42 +03:00
f.name = img_name
path = os.path.join(settings.FILE_UPLOAD_TEMP_DIR, f.name)
destination = open(path, 'wb+')
for chunk in f.chunks():
destination.write(chunk)
destination.close()
m = magic.open(magic.MAGIC_MIME)
m.load()
t = m.file(path)
if t.split('/')[0] == 'image':
return (True, f.name)
else:
os.unlink(path)
return (False, '')
def list_archives(request):
entries_list = Entries.objects.select_related()
ava_years = entries_list.dates('date','year',order='DESC')
archives_list = []
for date in ava_years:
ava_months = entries_list.filter(date__year = date.year).dates('date','month',order='DESC')
for month in ava_months:
ava_days = entries_list.filter(date__year = date.year).filter(date__month = month.month).dates('date','day',order='DESC')
a = (date,ava_months,ava_days)
archives_list.append(a)
return render_to_response('main/archives.html', { 'archives_list': archives_list, 'BASE_URL':BASE_URL})
2010-07-06 19:25:42 +03:00
def list_members(request):
info_area = 'members'
2010-07-06 19:25:42 +03:00
authors = Authors.objects.all()
return render_response(request, 'main/members.html', {'members': authors, 'BASE_URL': BASE_URL,'info_area' : info_area })
2010-07-06 19:25:42 +03:00
def __search(cleaned_data):
cdata = cleaned_data
q_author_name = cdata.get('q_author_name','')
q_author_surname = cdata.get('q_author_surname','')
q_text = cdata.get('q_text','')
q_date_from = cdata.get('q_date_from','')
q_date_till = cdata.get('q_date_till','')
q_label_personal = cdata.get('q_label_personal','')
q_label_community = cdata.get('q_label_community','')
q_label_lkd = cdata.get('q_label_lkd','')
q_label_eng = cdata.get('q_label_eng','')
entries_list = Entries.objects.select_related()
# Name - surname queries.
if(q_author_name):
entries_list = entries_list.filter(entry_id__author_name__iexact = q_author_name)
if(q_author_surname):
entries_list = entries_list.filter(entry_id__author_surname__iexact = q_author_surname)
# Label based queries.
if(q_label_personal == True):
entries_list = entries_list.filter(entry_id__label_personal = 1)
if(q_label_community == True):
entries_list = entries_list.filter(entry_id__label_community = 1)
if(q_label_lkd == True):
entries_list = entries_list.filter(entry_id__label_lkd = 1)
if(q_label_eng == True):
entries_list = entries_list.filter(entry_id__label_eng = 1)
# Text search.
if(q_text):
entries_list = entries_list.filter(content_text__icontains = q_text)
# Date based queries.
if(q_date_from and q_date_till):
entries_list = entries_list.filter(date__range = (q_date_from,q_date_till))
return entries_list
2010-07-06 19:25:42 +03:00
def query(request):
# Determine if method is POST.
if (request.method == 'POST'):
## If Yes:
form = QueryForm(request.POST)
# Determine if all of them were valid.
if (form.is_valid()):
cdata = form.cleaned_data
entries_list = __search(cdata)
p_entries_list = entries_list
truncate_words = 250
items_per_page = 25
#get the last run time
run_time = RunTime.objects.all()[0]
info_area = 'search'
# Pagination
elements_in_a_page = 25 # This determines, how many elements will be displayed in a paginator page.
paginator = Paginator(entries_list,elements_in_a_page)
# Validation for page number if it is not int return first page.
try:
page = int(request.GET.get('page', '1'))
except ValueError:
page = 1
# If page request is out of range, return last page .
try:
p_entries_list = paginator.page(page)
except (EmptyPage, InvalidPage):
p_entries_list = paginator.page(paginator.num_pages)
#--
return render_to_response('main/searchresult.html' ,{
'entries_list':entries_list,
'p_entries_list':p_entries_list,
'truncate_words':truncate_words,
'items_per_page':repr(items_per_page),
'run_time':run_time,
'info_area':info_area,
#'q_author_name':q_author_name,
#'q_author_surname':q_author_surname,
#'q_text':q_text,
'BASE_URL':BASE_URL,
})
"""else:
# Issue an error message and show the form again.
form = SearchForm(request.POST)
info_area = "query"
return render_to_response('main/query.html', {'q_form': form, 'BASE_URL': BASE_URL,'info_area':info_area})"""
else:
# Show the form.
info_area = 'query'
form = QueryForm()
return render_to_response('main/query.html', {'q_form': form, 'BASE_URL': BASE_URL,'info_area':info_area})
2010-07-06 19:25:42 +03:00
2010-08-16 10:46:16 +03:00
def archive(request,archive_year=None,archive_month=None,archive_day=None,label=None):
info_area = 'archive'
2010-07-06 19:25:42 +03:00
# This setting gets the content truncated which contains more than <truncate_words> words.
truncate_words = 250
items_per_page = 25
#get the last run time
run_time = RunTime.objects.all()[0]
# Now we are creating few scenarios depending on the incoming variables.
# This part is for validation.
if ('q_author_name' in request.GET and request.GET['q_author_name']): #If that exists and not empty
q_author_name = request.GET['q_author_name']
else:
q_author_name = ""
if ('q_author_surname' in request.GET and request.GET['q_author_surname']): #If that exists and not empty
q_author_surname = request.GET['q_author_surname']
else:
q_author_surname = ""
if ('q_text' in request.GET and request.GET['q_text']): #If that exists and not empty
q_text = request.GET['q_text']
else:
q_text = ""
2010-08-16 10:46:16 +03:00
if ((label == "personal") or 'q_label_personal' in request.GET and request.GET['q_label_personal'] == '1'): #If that exists and not empty
q_label_personal = 1
else:
q_label_personal = ""
2010-08-16 10:46:16 +03:00
if ((label == "community") or 'q_label_community' in request.GET and request.GET['q_label_community'] == '1'):
q_label_community = 1
else:
q_label_community = ""
2010-08-16 10:46:16 +03:00
if ((label == "lkd") or 'q_label_lkd' in request.GET and request.GET['q_label_lkd']=='1'):
q_label_lkd = 1
else:
q_label_lkd = ""
2010-08-16 10:46:16 +03:00
if ((label == "eng") or 'q_label_eng' in request.GET and request.GET['q_label_eng']=='1'):
q_label_eng = 1
else:
q_label_eng = ""
#--
#--
# Querying
entries_list = Entries.objects.select_related()
# Name - surname queries.
if(q_author_name):
entries_list = entries_list.filter(entry_id__author_name__iexact = q_author_name)
if(q_author_surname):
entries_list = entries_list.filter(entry_id__author_surname__iexact = q_author_surname)
elif(q_author_surname):
entries_list = entries_list.filter(entry_id__author_surname__iexact = q_author_surname)
# Label based queries.
if(q_label_personal):
entries_list = entries_list.filter(entry_id__label_personal = 1)
if(q_label_community):
entries_list = entries_list.filter(entry_id__label_community = 1)
if(q_label_lkd):
entries_list = entries_list.filter(entry_id__label_lkd = 1)
2010-08-16 10:46:16 +03:00
if(q_label_eng):
entries_list = entries_list.filter(entry_id__label_eng = 1)
# Text search.
if(q_text):
entries_list = entries_list.filter(content_text__icontains = q_text)
# Date based queries.
if(archive_year):
entries_list = entries_list.filter(date__year = archive_year)
if(archive_month):
entries_list = entries_list.filter(date__month = archive_month)
if(archive_day):
entries_list = entries_list.filter(date__day = archive_day)
#--
# Pagination
elements_in_a_page = 25 # This determines, how many elements will be displayed in a paginator page.
paginator = Paginator(entries_list,elements_in_a_page)
# Validation for page number if it is not int return first page.
try:
page = int(request.GET.get('page', '1'))
except ValueError:
page = 1
# If page request is out of range, return last page .
try:
p_entries_list = paginator.page(page)
except (EmptyPage, InvalidPage):
p_entries_list = paginator.page(paginator.num_pages)
#--
return render_to_response('main/archive.html' ,{
'entries_list':entries_list,
'p_entries_list':p_entries_list,
'truncate_words':truncate_words,
'items_per_page':repr(items_per_page),
'run_time':run_time,
'info_area':info_area,
'archive_year' : archive_year,
'archive_month' : archive_month,
'archive_day' : archive_day,
'q_author_name':q_author_name,
'q_author_surname':q_author_surname,
'q_text':q_text,
'BASE_URL':BASE_URL,
})
def issue_error(request,error_msg=None):
info_area = 'error'
if not(error_msg):
error_msg = 'Bilinmeyen bir hata oluştu!'
return render_response(request, 'main/error.html', {'error_msg': error_msg,'info_area' : info_area })