diff options
Diffstat (limited to 'views/pages.py')
-rw-r--r-- | views/pages.py | 303 |
1 files changed, 1 insertions, 302 deletions
diff --git a/views/pages.py b/views/pages.py index fcab462..b40ebee 100644 --- a/views/pages.py +++ b/views/pages.py @@ -23,42 +23,11 @@ from kittystore.kittysastore import KittySAStore from gsoc.models import Rating from lib.mockup import * - +from forms import * logger = logging.getLogger(__name__) - -# @TODO : Move this into settings.py -MONTH_PARTICIPANTS = 284 -MONTH_DISCUSSIONS = 82 - STORE = KittySAStore(settings.KITTYSTORE_URL) -class SearchForm(forms.Form): - target = forms.CharField(label='', help_text=None, - widget=forms.Select( - choices=(('Subject', 'Subject'), - ('Content', 'Content'), - ('SubjectContent', 'Subject & Content'), - ('From', 'From')) - ) - ) - - keyword = forms.CharField(max_length=100,label='', help_text=None, - widget=forms.TextInput( - attrs={'placeholder': 'Search this list.'} - ) - ) - - -class AddCategoryForm(forms.Form): - category = forms.CharField(label='', help_text=None, - widget=forms.TextInput( - attrs={'placeholder': 'Add a category...'} - ) - ) - from_url = forms.CharField(widget=forms.HiddenInput, required=False) - - def index(request): t = loader.get_template('index.html') search_form = SearchForm(auto_id=False) @@ -72,273 +41,3 @@ def index(request): 'search_form': search_form, }) return HttpResponse(t.render(c)) - -def add_category(request, mlist_fqdn, email_id): - """ Add a category to a given message. """ - t = loader.get_template('add_tag_form.html') - if request.method == 'POST': - form = AddCategoryForm(request.POST) - if form.is_valid(): - print "THERE WE ARE" - # TODO: Add the logic to add the category - if form.data['from_url']: - return HttpResponseRedirect(form.data['from_url']) - else: - return HttpResponseRedirect('/') - else: - form = AddCategoryForm() - c = RequestContext(request, { - 'list_address': mlist_fqdn, - 'email_id': email_id, - 'addtag_form': form, - }) - return HttpResponse(t.render(c)) - -def api(request): - t = loader.get_template('api.html') - c = RequestContext(request, { - }) - return HttpResponse(t.render(c)) - - -def archives(request, mlist_fqdn, year=None, month=None, day=None): - # No year/month: past 32 days - # year and month: find the 32 days for that month - end_date = None - if year or month or day: - try: - start_day = 1 - end_day = 1 - start_month = int(month) - end_month = int(month) + 1 - start_year = int(year) - end_year = int(year) - if day: - start_day = int(day) - end_day = start_day + 1 - end_month = start_month - if start_month == 12: - end_month = 1 - end_year = start_year + 1 - - begin_date = datetime(start_year, start_month, start_day) - end_date = datetime(end_year, end_month, end_day) - month_string = begin_date.strftime('%B %Y') - except ValueError, err: - print err - logger.error('Wrong format given for the date') - - if not end_date: - today = datetime.utcnow() - begin_date = datetime(today.year, today.month, 1) - end_date = datetime(today.year, today.month+1, 1) - month_string = 'Past thirty days' - list_name = mlist_fqdn.split('@')[0] - - search_form = SearchForm(auto_id=False) - t = loader.get_template('month_view.html') - threads = STORE.get_archives(list_name, start=begin_date, - end=end_date) - - participants = set() - cnt = 0 - for msg in threads: - # Statistics on how many participants and threads this month - participants.add(msg.sender) - msg.participants = STORE.get_thread_participants(list_name, - msg.thread_id) - msg.answers = STORE.get_thread_length(list_name, - msg.thread_id) - threads[cnt] = msg - cnt = cnt + 1 - - archives_length = STORE.get_archives_length(list_name) - - c = RequestContext(request, { - 'list_name' : list_name, - 'list_address': mlist_fqdn, - 'search_form': search_form, - 'month': month_string, - 'month_participants': len(participants), - 'month_discussions': len(threads), - 'threads': threads, - 'archives_length': archives_length, - }) - return HttpResponse(t.render(c)) - -def list(request, mlist_fqdn=None): - if not mlist_fqdn: - return HttpResponseRedirect('/') - t = loader.get_template('recent_activities.html') - search_form = SearchForm(auto_id=False) - list_name = mlist_fqdn.split('@')[0] - - # Get stats for last 30 days - today = datetime.utcnow() - end_date = datetime(today.year, today.month, today.day) - begin_date = end_date - timedelta(days=32) - - threads = STORE.get_archives(list_name=list_name,start=begin_date, - end=end_date) - - participants = set() - dates = {} - cnt = 0 - for msg in threads: - month = msg.date.month - if month < 10: - month = '0%s' % month - day = msg.date.day - if day < 10: - day = '0%s' % day - key = '%s%s%s' % (msg.date.year, month, day) - if key in dates: - dates[key] = dates[key] + 1 - else: - dates[key] = 1 - # Statistics on how many participants and threads this month - participants.add(msg.sender) - msg.participants = STORE.get_thread_participants(list_name, - msg.thread_id) - msg.answers = STORE.get_thread_length(list_name, - msg.thread_id) - threads[cnt] = msg - cnt = cnt + 1 - - # top threads are the one with the most answers - top_threads = sorted(threads, key=lambda entry: entry.answers, reverse=True) - - # active threads are the ones that have the most recent posting - active_threads = sorted(threads, key=lambda entry: entry.date, reverse=True) - - archives_length = STORE.get_archives_length(list_name) - - # top authors are the ones that have the most kudos. How do we determine - # that? Most likes for their post? - authors = generate_top_author() - authors = sorted(authors, key=lambda author: author.kudos) - authors.reverse() - - # Get the list activity per day - days = dates.keys() - days.sort() - dates_string = ["%s/%s/%s" % (key[0:4], key[4:6], key[6:8]) for key in days] - #print days - #print dates_string - evolution = [dates[key] for key in days] - if not evolution: - evolution.append(0) - - # threads per category is the top thread titles in each category - threads_per_category = generate_thread_per_category() - c = RequestContext(request, { - 'list_name' : list_name, - 'list_address': mlist_fqdn, - 'search_form': search_form, - 'month': 'Recent activity', - 'month_participants': len(participants), - 'month_discussions': len(threads), - 'top_threads': top_threads[:5], - 'most_active_threads': active_threads[:5], - 'top_author': authors, - 'threads_per_category': threads_per_category, - 'archives_length': archives_length, - 'evolution': evolution, - 'dates_string': dates_string, - }) - return HttpResponse(t.render(c)) - - -def _search_results_page(request, mlist_fqdn, threads, search_type, - page=1, num_threads=25, limit=None): - search_form = SearchForm(auto_id=False) - t = loader.get_template('search.html') - list_name = mlist_fqdn.split('@')[0] - res_num = len(threads) - - participants = set() - for msg in threads: - participants.add(msg.sender) - - paginator = Paginator(threads, num_threads) - - #If page request is out of range, deliver last page of results. - try: - threads = paginator.page(page) - except (EmptyPage, InvalidPage): - threads = paginator.page(paginator.num_pages) - - cnt = 0 - for msg in threads.object_list: - msg.email = msg.email.strip() - # Statistics on how many participants and threads this month - participants.add(msg.sender) - if msg.thread_id: - msg.participants = STORE.get_thread_participants(list_name, - msg.thread_id) - msg.answers = STORE.get_thread_length(list_name, - msg.thread_id) - else: - msg.participants = 0 - msg.answers = 0 - threads.object_list[cnt] = msg - cnt = cnt + 1 - - c = RequestContext(request, { - 'list_name' : list_name, - 'list_address': mlist_fqdn, - 'search_form': search_form, - 'month': search_type, - 'month_participants': len(participants), - 'month_discussions': res_num, - 'threads': threads, - 'full_path': request.get_full_path(), - }) - return HttpResponse(t.render(c)) - - -def search(request, mlist_fqdn): - keyword = request.GET.get('keyword') - target = request.GET.get('target') - page = request.GET.get('page') - if keyword and target: - url = '/search/%s/%s/%s/' % (mlist_fqdn, target, keyword) - if page: - url += '%s/' % page - else: - url = '/search/%s' % (mlist_fqdn) - return HttpResponseRedirect(url) - - -def search_keyword(request, mlist_fqdn, target, keyword, page=1): - ## Should we remove the code below? - ## If urls.py does it job we should never need it - if not keyword: - keyword = request.GET.get('keyword') - if not target: - target = request.GET.get('target') - if not target: - target = 'Subject' - regex = '%%%s%%' % keyword - list_name = mlist_fqdn.split('@')[0] - if target.lower() == 'subjectcontent': - threads = STORE.search_content_subject(list_name, keyword) - elif target.lower() == 'subject': - threads = STORE.search_subject(list_name, keyword) - elif target.lower() == 'content': - threads = STORE.search_content(list_name, keyword) - elif target.lower() == 'from': - threads = STORE.search_sender(list_name, keyword) - - return _search_results_page(request, mlist_fqdn, threads, 'Search', page) - - -def search_tag(request, mlist_fqdn, tag=None, page=1): - '''Searches both tag and topic''' - if tag: - query_string = {'Category': tag.capitalize()} - else: - query_string = None - return _search_results_page(request, mlist_fqdn, query_string, - 'Tag search', page, limit=50) - |