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
|
|
|
|
from django.utils.datastructures import MultiValueDictKeyError
|
|
|
|
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(6):
|
|
|
|
last_entry_date -= day
|
|
|
|
last_date_li.append(last_entry_date)
|
|
|
|
|
2010-07-10 01:11:14 +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,
|
2010-07-08 14:53:25 +03:00
|
|
|
'info_area':'main',
|
2010-07-06 19:25:42 +03:00
|
|
|
})
|
|
|
|
def member_subscribe(request):
|
2010-07-08 14:53:25 +03:00
|
|
|
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'])
|
|
|
|
except MultiValueDictKeyError:
|
2010-07-10 01:11:14 +03:00
|
|
|
check = (False,False)
|
2010-07-06 19:25:42 +03:00
|
|
|
#save the author information
|
2010-07-10 01:11:14 +03:00
|
|
|
|
2010-07-06 19:25:42 +03:00
|
|
|
if check[0]:
|
|
|
|
f = request.FILES['hackergotchi']
|
|
|
|
|
|
|
|
#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-15 14:48:56 +03:00
|
|
|
|
2010-07-10 01:11:14 +03:00
|
|
|
author.save()
|
2010-07-06 19:25:42 +03:00
|
|
|
|
2010-07-10 01:11:14 +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-15 14:48:56 +03:00
|
|
|
|
2010-07-06 19:25:42 +03:00
|
|
|
#send mail part
|
|
|
|
#fill it here
|
2010-07-08 14:53:25 +03:00
|
|
|
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()
|
2010-07-08 14:53:25 +03:00
|
|
|
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]
|
|
|
|
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_members(request):
|
2010-07-08 14:53:25 +03:00
|
|
|
info_area = 'members'
|
2010-07-06 19:25:42 +03:00
|
|
|
|
|
|
|
authors = Authors.objects.all()
|
|
|
|
|
2010-07-08 14:53:25 +03:00
|
|
|
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 query(request):
|
|
|
|
|
2010-07-15 14:48:56 +03:00
|
|
|
q_form = QueryForm()
|
|
|
|
|
|
|
|
return render_response(request,'main/query.html',{
|
|
|
|
'BASE_URL' : BASE_URL,
|
|
|
|
'q_form':q_form,
|
|
|
|
})
|
2010-07-06 19:25:42 +03:00
|
|
|
|
|
|
|
def archive(request,archive_year='',archive_month='',archive_day=''):
|
|
|
|
|
|
|
|
# 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]
|
|
|
|
|
|
|
|
|
2010-07-15 14:48:56 +03:00
|
|
|
### Determine if the request object includes any querying input or not. ###
|
2010-07-06 19:25:42 +03:00
|
|
|
|
2010-07-16 10:57:54 +03:00
|
|
|
if ( (request.GET) and ('q_author_name' in request.GET or 'q_author_surname' in request.GET or 'q_text' in request.GET ) ):
|
2010-07-06 19:25:42 +03:00
|
|
|
# Switch to 'return the result of query' mode.
|
2010-07-08 14:53:25 +03:00
|
|
|
info_area = 'query'
|
2010-07-06 19:25:42 +03:00
|
|
|
|
|
|
|
#Querying
|
2010-07-15 14:48:56 +03:00
|
|
|
#TODO: We should improve querying method implemented here.
|
2010-07-08 14:53:25 +03:00
|
|
|
q_author_name,q_author_surname,q_text = '','',''
|
|
|
|
authors = Authors.objects.all()
|
2010-07-06 19:25:42 +03:00
|
|
|
if ( ('q_author_name' in request.GET) and (request.GET['q_author_name'] )):
|
2010-07-08 14:53:25 +03:00
|
|
|
q_author_name = request.GET['q_author_name']
|
2010-07-15 14:48:56 +03:00
|
|
|
authors = authors.filter(author_name__iexact = q_author_name)
|
2010-07-08 14:53:25 +03:00
|
|
|
|
2010-07-06 19:25:42 +03:00
|
|
|
|
|
|
|
if (('q_author_surname' in request.GET) and (request.GET['q_author_surname'])):
|
2010-07-08 14:53:25 +03:00
|
|
|
q_author_surname = request.GET['q_author_surname']
|
2010-07-15 14:48:56 +03:00
|
|
|
authors = authors.filter(author_surname__iexact = q_author_surname)
|
2010-07-08 14:53:25 +03:00
|
|
|
|
|
|
|
|
|
|
|
for item in authors:
|
2010-07-15 14:48:56 +03:00
|
|
|
|
2010-07-08 14:53:25 +03:00
|
|
|
try:
|
|
|
|
entries_list |= item.entries_set.all()
|
|
|
|
except:
|
|
|
|
entries_list = item.entries_set.all()
|
2010-07-06 19:25:42 +03:00
|
|
|
|
|
|
|
if( ('q_text' in request.GET)and(request.GET['q_text'])):
|
2010-07-08 14:53:25 +03:00
|
|
|
q_text = request.GET['q_text']
|
2010-07-15 14:48:56 +03:00
|
|
|
if (q_author_name or q_author_surname):
|
2010-07-08 14:53:25 +03:00
|
|
|
|
2010-07-15 14:48:56 +03:00
|
|
|
entries_list = entries_list.filter(content_text__icontains = q_text)
|
|
|
|
else:
|
|
|
|
entries_list = Entries.objects.filter(content_text__icontains = q_text)
|
2010-07-08 14:53:25 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
2010-07-06 19:25:42 +03:00
|
|
|
try:
|
|
|
|
if(not(entries_list)):
|
|
|
|
return HttpResponseRedirect(BASE_URL+"/query")
|
|
|
|
except:
|
|
|
|
return HttpResponseRedirect(BASE_URL+ "/query")
|
2010-07-15 14:48:56 +03:00
|
|
|
|
2010-07-06 19:25:42 +03:00
|
|
|
#here is gonna be edited [X]
|
2010-07-07 09:49:11 +03:00
|
|
|
# Pagination
|
2010-07-15 14:48:56 +03:00
|
|
|
|
2010-07-07 09:49:11 +03:00
|
|
|
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' ,{
|
2010-07-06 19:25:42 +03:00
|
|
|
'entries_list':entries_list,
|
2010-07-07 09:49:11 +03:00
|
|
|
'p_entries_list':p_entries_list,
|
2010-07-06 19:25:42 +03:00
|
|
|
'truncate_words':truncate_words,
|
|
|
|
'items_per_page':repr(items_per_page),
|
|
|
|
'run_time':run_time,
|
2010-07-08 14:53:25 +03:00
|
|
|
'info_area':info_area,
|
|
|
|
'q_author_name':q_author_name,
|
|
|
|
'q_author_surname':q_author_surname,
|
|
|
|
'q_text':q_text,
|
2010-07-06 19:25:42 +03:00
|
|
|
'BASE_URL':BASE_URL,
|
|
|
|
})
|
|
|
|
### If not ###
|
|
|
|
else:
|
2010-07-08 14:53:25 +03:00
|
|
|
#Switch to return the result of arguments provided mode(archive viewing mode).
|
2010-07-15 14:48:56 +03:00
|
|
|
info_area = 'archive' # \This variable is used for determining which infoarea text should be used in "contenttop" div in /main/base.html
|
2010-07-06 19:25:42 +03:00
|
|
|
|
|
|
|
selected_entries = Entries.objects.select_related()
|
|
|
|
|
|
|
|
# For entry categories
|
|
|
|
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
|
|
|
|
|
|
|
|
## Validating arguments provided by urls.py.
|
|
|
|
# Check if archive_year is not empty and numeric.
|
|
|
|
if((archive_year != '' ) and (str(archive_year).isalnum()) and (not(str(archive_year).isalpha()))):
|
|
|
|
entries_list = entries_list.filter(date__year=archive_year)
|
|
|
|
else:
|
|
|
|
# Fall back to main view.
|
|
|
|
return HttpResponseRedirect(BASE_URL+"/main")
|
2010-07-15 14:48:56 +03:00
|
|
|
#pass
|
2010-07-06 19:25:42 +03:00
|
|
|
|
|
|
|
# Check if archive_month is not empty and numeric.
|
|
|
|
if(archive_month != ''and (str(archive_month).isalnum()) and not(str(archive_month).isalpha())):
|
|
|
|
entries_list = entries_list.filter(date__month=archive_month)
|
|
|
|
|
|
|
|
# Check if archive_day is not empty and numeric.
|
|
|
|
if(archive_day != ''and (str(archive_day).isalnum()) and not(str(archive_day).isalpha())):
|
|
|
|
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)
|
2010-07-15 14:48:56 +03:00
|
|
|
|
2010-07-06 19:25:42 +03:00
|
|
|
# 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,
|
|
|
|
'archive_year':archive_year,
|
|
|
|
'archive_month':archive_month,
|
2010-07-08 14:53:25 +03:00
|
|
|
'archive_day':archive_day,
|
2010-07-06 19:25:42 +03:00
|
|
|
#'error':error,
|
|
|
|
'BASE_URL':BASE_URL,
|
2010-07-08 14:53:25 +03:00
|
|
|
'info_area':info_area,
|
2010-07-06 19:25:42 +03:00
|
|
|
})
|