Beispiel #1
0
def rank(member, semester=get_current_semester()):
	paid = False
	num_semesters_paid_to_date = 0
	for semester_paid in member.semesters_paid:
		if semester_paid <= semester:
			paid = True
		if semester_paid < semester:
			num_semesters_paid_to_date += 1
	
	# Cadets cannot earn ranks
	if not paid:
		return 0
	
	rank = 1
	
	# Longevity
	if num_semesters_paid_to_date >= 4:
		rank += 1
	
	# Led weekly mission
	if Mission.query(Mission.runners == member.id, Mission.type == 0, Mission.start < semester_date(semester)).count(limit=1) != 0:
		rank += 1
	
	# Volunteered with special mission or committee
	if member.committee_rank or Mission.query(Mission.runners == member.id, Mission.type == 1, Mission.start < semester_date(semester)).count(limit=1) != 0:
		rank += 1
	
	# Merit ranks
	if member.merit_rank1:
		rank += 1
	if member.merit_rank2:
		rank += 1
	
	# Voted captain
	if BridgeCrew.query(BridgeCrew.captain == member.id, BridgeCrew.start < semester_date(semester)).count(limit=1) != 0:
		rank = 6
	
	# Alumni ranks
	if not member.current_student:
		if rank == 6:
			# Captains become rear admirals
			rank = 8
		else:
			# Non-captains become commodores
			rank = 7
	
	# Was an admiral (advisor)
	if BridgeCrew.query(BridgeCrew.admiral == member.id, BridgeCrew.start < semester_date(semester)).count(limit=1) != 0:
		rank = 10
	
	return rank
Beispiel #2
0
	def get(self):
		template_vals = {
			'page': 'home'
		}
		
		# Get the next five missions.
		# Include missions happening today.
		now = datetime.now()
		today = datetime(now.year, now.month, now.day)
		template_vals['missions'] = Mission.query(Mission.start >= today).order(Mission.start).fetch(limit=5)
		
		template_vals['user'] = users.get_current_user()
		if template_vals['user']:
			template_vals['logout_url'] = users.create_logout_url(self.request.uri)
		else:
			template_vals['login_url'] = users.create_login_url(self.request.uri)
		
		# Pick an end quote.
		template_vals['end_quote'] = choice([
			'Live long and prosper.',
			'May the Force be with you.',
			'Never give up!  Never surrender!'
		])
		
		template = JINJA_ENVIRONMENT.get_template('home.html')
		self.response.write(template.render(template_vals))
Beispiel #3
0
    def get(self, args):
        if not users.is_current_user_admin():
            self.error(403)
            return

        template_vals = {'title': 'Edit Mission', 'page': 'missions'}
        template_vals['user'] = users.get_current_user()
        template_vals['logout_url'] = users.create_logout_url(self.request.uri)

        req_id = self.request.get('id')

        if not req_id:
            new_mission = Mission()
            new_mission.name = 'New Mission'
            template_vals['mission'] = new_mission
        else:
            mission = Mission.query(Mission.id == req_id).get()
            if mission:
                template_vals['mission'] = mission
            else:
                self.error(404)
                return

        template_vals['semesters'] = get_all_semesters()

        template = JINJA_ENVIRONMENT.get_template('mission_edit.html')
        self.response.write(template.render(template_vals))
Beispiel #4
0
    def get(self, req_id):
        template_vals = {'page': 'missions'}

        if not req_id:
            # Redirect to the missions page if no mission is specified.
            self.redirect('/missions')
            return

        mission = Mission.query(Mission.id == req_id).get()
        if not mission:
            # 404 if a nonexistent mission is specified
            self.error(404)
            return

        template_vals['mission'] = mission
        template_vals['title'] = mission.title

        # Get user data for the footer and admin controls.
        user = users.get_current_user()
        if user:
            template_vals['user'] = user
            template_vals['admin'] = users.is_current_user_admin()
            template_vals['logout_url'] = users.create_logout_url(
                self.request.uri)
        else:
            template_vals['login_url'] = users.create_login_url(
                self.request.uri)

        template = JINJA_ENVIRONMENT.get_template('mission_info.html')
        self.response.write(template.render(template_vals))
Beispiel #5
0
	def get(self, args):
		template_vals = generate_base_template_vals(self)
		template_vals['title'] = 'Missions'
		template_vals['page'] = 'missions'
		
		# Get all users from the given semester
		try:
			selected_semester = float(self.request.get('semester'))
		except Exception:
			selected_semester = get_current_semester()
		
		next_semester_date = semester_date(next_semester(selected_semester))
		selected_semester_date = semester_date(selected_semester)
		
		template_vals['missions'] = Mission.query(Mission.start >= semester_date(selected_semester), Mission.start < next_semester_date).order(Mission.start).fetch(limit=None)
		
		# Get all possible semesters to put in the menu.
		semesters = []
		for semester in get_all_semesters():
			semesters.append({
				'id': semester,
				'pretty': semester_pretty(semester),
				'selected': semester == selected_semester
			})
		template_vals['semesters'] = semesters
		template_vals['prev_semester'] = prev_semester(selected_semester) if selected_semester != FIRST_SEMESTER else None
		template_vals['next_semester'] = next_semester(selected_semester) if selected_semester != get_current_semester() else None
		
		template = JINJA_ENVIRONMENT.get_template('missions_list.html')
		self.response.write(template.render(template_vals))
Beispiel #6
0
	def get(self, args):
		if not require_admin(self):
			return
		
		template_vals = generate_base_template_vals(self)
		template_vals['title'] = 'Edit Mission'
		template_vals['page'] = 'missions'
		
		req_id = self.request.get('id')
		
		if not req_id:
			new_mission = Mission()
			new_mission.name = 'New Mission'
			template_vals['mission'] = new_mission
		else:
			mission = Mission.query(Mission.id == req_id).get()
			if mission:
				template_vals['mission'] = mission
			else:
				self.error(404)
				return
		
		template_vals['semesters'] = get_all_semesters()
		
		template = JINJA_ENVIRONMENT.get_template('mission_edit.html')
		self.response.write(template.render(template_vals))
Beispiel #7
0
	def get(self, args):
		template_vals = generate_base_template_vals(self)
		template_vals['title'] = 'Missions'
		template_vals['page'] = 'missions'
		
		# Get all users from the given semester
		try:
			selected_semester = float(self.request.get('semester'))
		except Exception:
			selected_semester = get_current_semester()
		
		next_semester_date = semester_date(next_semester(selected_semester))
		selected_semester_date = semester_date(selected_semester)
		
		template_vals['missions'] = Mission.query(Mission.start >= semester_date(selected_semester), Mission.start < next_semester_date).order(Mission.start).fetch(limit=None)
		
		# Get all possible semesters to put in the menu.
		semesters = []
		for semester in get_all_semesters():
			semesters.append({
				'id': semester,
				'pretty': semester_pretty(semester),
				'selected': semester == selected_semester
			})
		template_vals['semesters'] = semesters
		template_vals['prev_semester'] = prev_semester(selected_semester) if selected_semester != FIRST_SEMESTER else None
		template_vals['next_semester'] = next_semester(selected_semester) if selected_semester != get_current_semester() else None
		
		template = JINJA_ENVIRONMENT.get_template('missions_list.html')
		self.response.write(template.render(template_vals))
Beispiel #8
0
	def get(self, args):
		if not require_admin(self):
			return
		
		template_vals = generate_base_template_vals(self)
		template_vals['title'] = 'Edit Mission'
		template_vals['page'] = 'missions'
		
		req_id = self.request.get('id')
		
		if not req_id:
			new_mission = Mission()
			new_mission.name = 'New Mission'
			template_vals['mission'] = new_mission
		else:
			mission = Mission.query(Mission.id == req_id).get()
			if mission:
				template_vals['mission'] = mission
			else:
				self.error(404)
				return
		
		template_vals['semesters'] = get_all_semesters()
		
		template = JINJA_ENVIRONMENT.get_template('mission_edit.html')
		self.response.write(template.render(template_vals))
Beispiel #9
0
    def post(self, args):
        if not users.is_current_user_admin():
            self.error(403)
            return

        req_id = self.request.get('id')
        if not req_id:
            self.error(422)
            return

        mission = Mission.query(Mission.id == req_id).get()
        if not mission:
            mission = Mission()
            req_id = req_id.strip().lower().replace(' ', '-')
            mission.id = req_id

        # Update int values.
        for int_param in ['type']:
            req_val = self.request.get(int_param)
            if req_val or req_val == 0:
                req_val = int(req_val)
                setattr(mission, int_param, req_val)

        # Update string values.
        for str_param in [
                'title', 'description', 'location', 'wave_url', 'fb_url',
                'gplus_url', 'the_link_url', 'youtube_url'
        ]:
            req_val = self.request.get(str_param)
            if req_val or req_val == '':
                req_val = urllib2.unquote(req_val)
                req_val = req_val.strip()
                setattr(mission, str_param, req_val)

        # Update date values.
        for date_param in ['start', 'end']:
            req_val = self.request.get(date_param)
            if req_val:
                req_val = urllib2.unquote(req_val)
                req_val = datetime.strptime(req_val, '%Y-%m-%dT%H:%M')
                setattr(mission, date_param, req_val)
            else:
                setattr(mission, date_param, None)

        # Update array values.
        req_runners = self.request.get('runners')
        if req_runners:
            req_runners = req_runners.replace(' ', '').split(',')
            mission.runners = req_runners
        else:
            mission.runners = []

        # Save the updated mission.
        mission.put()

        self.redirect('/missions/' + mission.id, code=303)
Beispiel #10
0
	def post(self, args):
		if not require_admin(self):
			return
		
		req_id = self.request.get('id')
		if not req_id:
			self.error(422)
			return
		
		mission = Mission.query(Mission.id == req_id).get()
		if not mission:
			mission = Mission()
			req_id = req_id.strip().lower().replace(' ', '-')
			mission.id = req_id
		
		# Update int values.
		for int_param in ['type']:
			req_val = self.request.get(int_param)
			if req_val or req_val == 0:
				req_val = int(req_val)
				setattr(mission, int_param, req_val)
		
		# Update string values.
		for str_param in ['title', 'description', 'location', 'wave_url', 'drive_url', 'intro_url', 'pres_url', 'sign_in_url', 'fb_url', 'gplus_url', 'the_link_url', 'youtube_url']:
			req_val = self.request.get(str_param)
			if req_val or req_val == '':
				req_val = urllib2.unquote(req_val)
				req_val = req_val.strip()
				setattr(mission, str_param, req_val)
		
		# Update date values.
		for date_param in ['start', 'end']:
			req_val = self.request.get(date_param)
			if req_val:
				req_val = urllib2.unquote(req_val)
				req_val = datetime.strptime(req_val, '%Y-%m-%dT%H:%M')
				setattr(mission, date_param, req_val)
			else:
				setattr(mission, date_param, None)
		
		# Update array values.
		req_runners = self.request.get('runners')
		if req_runners:
			req_runners = req_runners.replace(' ','').split(',')
			mission.runners = req_runners
		else:
			mission.runners = []
		
		# Save the updated mission.
		mission.put()
		
		if not mission.start:
			self.redirect('/missions/hidden', code=303)
			return
		
		self.redirect('/missions/' + mission.id, code=303)
Beispiel #11
0
	def get(self):
		if not require_admin(self):
			return
		
		template_vals = generate_base_template_vals(self)
		template_vals['title'] = 'Hidden Missions'
		template_vals['page'] = 'missions'
		
		template_vals['missions'] = Mission.query(ndb.OR(Mission.start == None)).order(Mission.id).fetch(limit=None)
		
		template = JINJA_ENVIRONMENT.get_template('missions_hidden.html')
		self.response.write(template.render(template_vals))
Beispiel #12
0
	def get(self):
		if not require_admin(self):
			return
		
		template_vals = generate_base_template_vals(self)
		template_vals['title'] = 'Hidden Missions'
		template_vals['page'] = 'missions'
		
		template_vals['missions'] = Mission.query(ndb.OR(Mission.start == None)).order(Mission.id).fetch(limit=None)
		
		template = JINJA_ENVIRONMENT.get_template('missions_hidden.html')
		self.response.write(template.render(template_vals))
Beispiel #13
0
    def get(self, args):
        template_vals = {'title': 'Missions', 'page': 'missions'}

        user = users.get_current_user()
        if user:
            template_vals['user'] = user
            template_vals['admin'] = users.is_current_user_admin()
            template_vals['logout_url'] = users.create_logout_url(
                self.request.uri)
        else:
            template_vals['login_url'] = users.create_login_url(
                self.request.uri)

        # Get all users from the given semester
        selected_semester = self.request.get('semester')
        if not selected_semester:
            selected_semester = get_current_semester()

        prev_semester_str = prev_semester(selected_semester)
        current_semester_str = get_current_semester()
        next_semester_str = next_semester(selected_semester)
        next_semester_date = semester_date(next_semester_str)
        selected_semester_date = semester_date(selected_semester)

        template_vals['missions'] = Mission.query(
            Mission.start >= selected_semester_date,
            Mission.start < next_semester_date).order(
                Mission.start).fetch(limit=None)

        # Get all possible semesters to put in the menu.
        semesters = []
        for semester in get_all_semesters():
            semester_pretty = semester[0].upper() + semester[1:].replace(
                '_', ' ')
            semesters.append({
                'id': semester,
                'pretty': semester_pretty,
                'selected': semester == selected_semester
            })
        template_vals['semesters'] = semesters
        template_vals[
            'prev_semester'] = prev_semester_str if selected_semester != 'fall_2013' else None
        template_vals[
            'next_semester'] = next_semester_str if selected_semester != current_semester_str else None

        template = JINJA_ENVIRONMENT.get_template('mission_list.html')
        self.response.write(template.render(template_vals))
Beispiel #14
0
	def get(self, req_id):
		if not req_id:
			# Redirect to the missions page if no mission is specified.
			self.redirect('/missions')
			return
		
		mission = Mission.query(Mission.id == req_id).get()
		if not mission:
			# 404 if a nonexistent mission is specified.
			self.error(404)
			return
		
		template_vals = generate_base_template_vals(self)
		template_vals['page'] = 'missions'
		
		template_vals['mission'] = mission
		template_vals['title'] = mission.title
		
		template = JINJA_ENVIRONMENT.get_template('mission_info.html')
		self.response.write(template.render(template_vals))
Beispiel #15
0
	def get(self, req_id):
		if not req_id:
			# Redirect to the missions page if no mission is specified.
			self.redirect('/missions')
			return
		
		mission = Mission.query(Mission.id == req_id).get()
		if not mission:
			# 404 if a nonexistent mission is specified.
			self.error(404)
			return
		
		template_vals = generate_base_template_vals(self)
		template_vals['page'] = 'missions'
		
		template_vals['mission'] = mission
		template_vals['title'] = mission.title
		
		template = JINJA_ENVIRONMENT.get_template('mission_info.html')
		self.response.write(template.render(template_vals))
Beispiel #16
0
	def get(self):
		template_vals = generate_base_template_vals(self)
		template_vals['page'] = 'home'
		
		# Get the home page text.
		home_content = PageContent.query(PageContent.page == 'home').get()
		template_vals['home_html'] = home_content.html_text if home_content else ''
		
		# Get the next five missions.
		# Include missions happening today.
		now = datetime.now()
		today = datetime(now.year, now.month, now.day)
		template_vals['missions'] = Mission.query(Mission.start >= today).order(Mission.start).fetch(limit=5)
		
		# Pick an end quote.
		template_vals['greeting'] = choice([
			'Greetings from Earth!',
			'Greetings, program!',
			'Hello there!',
			'Welcome aboard!'
		])
		template_vals['groups_call_to_action'] = choice([
			'Boldly chat where some have chatted before',
			'Come chat with us',
			'Explore strange new groups',
			'Join our groups',
			'Join the collective',
			'Join the conversation'
		])
		template_vals['end_quote'] = choice([
			'Excelsior!',
			'Live long and prosper.',
			'May the Force be with you.',
			'Never give up!  Never surrender!'
		])
		
		template = JINJA_ENVIRONMENT.get_template('home.html')
		self.response.write(template.render(template_vals))
Beispiel #17
0
	def get(self, req_id, resource_name):
		if not req_id:
			# Redirect to the missions page if no mission is specified.
			self.redirect('/missions')
			return
		
		mission = Mission.query(Mission.id == req_id).get()
		if not mission:
			# 404 if a nonexistent mission is specified.
			generate_plain_404(self, u'No mission exists with the ID \u201c%s\u201d.' % req_id)
			return
		
		if resource_name == 'wave':
			if not mission.wave_url:
				generate_plain_404(self, u'Mission \u201c%s\u201d does not have a wave URL.' % req_id)
				return
			self.redirect(mission.wave_url.encode('utf-8'))
			
		elif resource_name == 'gdrive' or resource_name == 'drive':
			if not mission.drive_url:
				generate_plain_404(self, u'Mission \u201c%s\u201d does not have a Drive URL.' % req_id)
				return
			self.redirect(mission.drive_url.encode('utf-8'))
			
		elif resource_name == 'intro':
			if not mission.intro_url:
				generate_plain_404(self, u'Mission \u201c%s\u201d does not have an intro. presentation URL.' % req_id)
				return
			self.redirect(mission.intro_url.encode('utf-8'))
			
		elif resource_name == 'presentation' or resource_name == 'pres':
			if not mission.pres_url:
				generate_plain_404(self, u'Mission \u201c%s\u201d does not have a mission presentation URL.' % req_id)
				return
			self.redirect(mission.pres_url.encode('utf-8'))
			
		elif resource_name == 'signin':
			if not mission.sign_in_url:
				generate_plain_404(self, u'Mission \u201c%s\u201d does not have a sign-in form URL.' % req_id)
				return
			self.redirect(mission.sign_in_url.encode('utf-8'))
			
		elif resource_name == 'facebook' or resource_name == 'fb':
			if not mission.fb_url:
				generate_plain_404(self, u'Mission \u201c%s\u201d does not have a Facebook event URL.' % req_id)
				return
			self.redirect(mission.fb_url.encode('utf-8'))
			
		elif resource_name == 'gplus' or resource_name == 'google' or resource_name == 'google+' or resource_name == 'googleplus':
			if not mission.gplus_url:
				generate_plain_404(self, u'Mission \u201c%s\u201d does not have a Google+ event URL.' % req_id)
				return
			self.redirect(mission.gplus_url.encode('utf-8'))
			
		elif resource_name == 'thelink':
			if not mission.the_link_url:
				generate_plain_404(self, u'Mission \u201c%s\u201d does not have a The Link event URL.' % req_id)
				return
			self.redirect(mission.the_link_url.encode('utf-8'))
			
		elif resource_name == 'youtube' or resource_name == 'yt':
			if not mission.youtube_url:
				generate_plain_404(self, u'Mission \u201c%s\u201d does not have a YouTube stream URL.' % req_id)
				return
			self.redirect(mission.youtube_url.encode('utf-8'))
			
		else:
			generate_plain_404(self, u'Mission \u201c%s\u201d does not have a \u201c%s\u201d URL.\n\nThe links a mission might have are:\n\u2022 wave\n\u2022 gdrive (or drive)\n\u2022 intro\n\u2022 presentation (or pres)\n\u2022 signin\n\u2022 facebook (or fb)\n\u2022 gplus (or google)\n\u2022 thelink\n\u2022 youtube (or yt)' % (req_id, resource_name))
			return