blob: abba56c4f0a2e3c64d9f681c61f084737ac2602e [file] [log] [blame]
# Copyright 2011 the Melange authors.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# See the License for the specific language governing permissions and
# limitations under the License.
"""This module contains the templates which are used across the views."""
import re
from soc.views.base_templates import ProgramSelect
from soc.views.template import Template
from soc.modules.gci.logic import program as program_logic
from soc.modules.gci.logic import ranking as ranking_logic
from soc.modules.gci.logic.ranking import winnersForProgram
from soc.modules.gci.views import forms
from soc.modules.gci.views.helper import url_names
class Timeline(Template):
"""Timeline template.
def context(self):
rem_days, rem_hours, rem_mins =
remaining_time_message = 'Remaining'
rem_days, rem_hours, rem_mins =
remaining_time_message = 'Starts in'
complete_percentage =
stopwatch_percentage =
return {
'remaining_days': rem_days,
'remaining_hours': rem_hours,
'remaining_minutes': rem_mins,
'complete_percentage': complete_percentage,
'stopwatch_percentage': stopwatch_percentage,
'remaining_time_message': remaining_time_message
def templatePath(self):
return "modules/gci/common_templates/_timeline.html"
class YourScore(Template):
"""Template that is used to show score of the current user, provided
he or she is a student.
def __init__(self, data): = data
self.score = None
if and
self.score = ranking_logic.get(
def context(self):
return {} if not self.score else {
'points': self.score.points,
'tasks': len(self.score.tasks),
def render(self):
"""This template should only render to a non-empty string, if the
current user is a student.
if not self.score:
return ''
return super(YourScore, self).render()
def templatePath(self):
return 'modules/gci/common_templates/_your_score.html'
class ProgramSelect(ProgramSelect):
"""Program select template.
def templatePath(self):
return 'modules/gci/common_templates/_program_select.html'
class GlobalRankingWinners(Template):
"""Templates to display winners of the program.
def context(self):
winners = winnersForProgram(
return {
'winners': winners,
def templatePath(self):
return 'modules/gci/common_templates/_winners.html'
class OrgNominatedWinners(Template):
"""Template to display Grand Prize Winners of the program in
which each organization nominates students who receive the award.
class Winner(object):
"""Representation of a single winner used by the template."""
def __init__(self, profile):
self.profile = profile
self.avatar_name = None
self.avatar_prefix = None
if profile.avatar:
avatar_groups = re.findall(forms.RE_AVATAR_COLOR, profile.avatar)
# Being a bit pessimistic
if avatar_groups:
# We only want the first match, so pick group[0]
name, prefix = avatar_groups[0]
self.avatar_name = '%s-%s.jpg' % (name, prefix)
self.avatar_prefix = prefix
def organization(self):
"""Returns GCIOrganization associated with the winner."""
return self.profile.student_info.winner_for
def avatarPrefix(self):
"""Returns avatar prefix associated with the winner."""
return self.avatar_prefix
def avatarName(self):
"""Returns avatar name associated with the winner."""
return self.avatar_name
def context(self):
winners = self._getWinnersForProgram(
return {
'winners': winners,
def templatePath(self):
return 'modules/gci/common_templates/_org_nominated_winners.html'
def _getWinnersForProgram(self, program):
"""Returns the Grand Prize Winners for the specified program.
program: GCIProgram instance for which to retrieve the winners.
a list containing GCIProfile instances which represent the winners
ordered by the first name.
winners = []
profiles = program_logic.getWinnersForProgram(program)
for profile in profiles:
winners.sort(key=lambda o: o.profile.given_name.lower())
return winners