Ejemplo n.º 1
0
    def get(self, sessionId):
        user = users.get_current_user()
        if user:
            session = models.Session.get_by_id(int(sessionId))
            if session and session.observer == user.email():
                session_records = models.SessionRecord.all().ancestor(session).fetch(1000)
		session_records.sort(key=lambda x: x.startTime)
		
		# Check to see if a note was placed, if not, insert a default placeholder value
		if isinstance(session.notes, NoneType) == True:
		    session.notes = ''
		    session_notes = ["No Comments$$N/A"]
		else:
		# Split session.notes string into separate entries (all notes are stored in ONE string)
		    session_notes = session.notes.split("##")
		for i in range(0, len(session_notes)):
		    session_notes[i] = session_notes[i].split("$$")
		    
                for sr in session_records:
                    sr.totalSeconds = sr.endTime - sr.startTime
                self.response.write(riot_utils.render_template('templates/session_records.html', {
                    'session': session,
                    'session_records': session_records,
		    'session_notes': session_notes		    
                }))
            else:
                self.response.write({'error': 'invalid session id'})
        else:
            self.redirect(users.create_login_url(self.request.uri))
Ejemplo n.º 2
0
 def get(self):
     user = users.get_current_user()
     if user:
         sessions = models.get_sessions_for_user(user)
         self.response.write(riot_utils.render_template('templates/sessions.html', {
             'sessions': sessions
         }))
     else:
         self.redirect(users.create_login_url(self.request.uri))
Ejemplo n.º 3
0
 def get(self):
     user = users.get_current_user()
     if user:
         self.response.write(riot_utils.render_template('templates/home.html', {
             'user': user,
             'test': 'loof'
         }))
     else:
         self.redirect(users.create_login_url(self.request.uri))
Ejemplo n.º 4
0
    def get(self, sessionId):
        user = users.get_current_user()
	
	#Code to package a grid to send to session template 
	grid_dimension = 10
	Num_students = grid_dimension**2
	student_list = []
	student_grid = []
	for i in range(0,Num_students):
	    student_list.append('Student '+str(i+1))    
	grid_counter = 0
	for i in range(0,grid_dimension):
	    grid_entry = []
	    for j in range(0,grid_dimension):
		grid_entry.append(student_list[grid_counter])
		grid_counter += 1
	    student_grid.append(grid_entry)
	# End code to package a grid to send to session template
	
        if user:
            session = models.Session.get_by_id(int(sessionId))
            if session and user.email() == session.observer:
                query = models.InteractionGroup.all()
                interactionGroups = query.run()
                interactions = []
		choral_response = []

                for interaction in interactionGroups:
                    interactionItems = models.InteractionItem.all().order("order").ancestor(interaction).fetch(1000)
                    interactions.append(InteractionGroupItems(interaction, interactionItems))
		    for item in interactionItems:
			if item.name == "Small group time":
			    groupId = item.parent().key().id()
			    itemId = item.key().id()
			    color = item.color
			    sg_time = [groupId,itemId,color]
			    
                self.response.write(riot_utils.render_template('templates/session.html', {
                    'session': session,
                    'interactions': interactions,
		    'students': student_grid,
		    'sg_time': sg_time
		    
                }))
            else:
                self.response.write({'error': 'invalid session id'})
        else:
            self.redirect(users.create_login_url(self.request.uri))
Ejemplo n.º 5
0
    def get(self):
        user = users.get_current_user()
        if user:
            query = models.InteractionGroup.all()
            interactionGroups = query.run()
            interactions = []
            for interaction in interactionGroups:
                interactionItems = models.InteractionItem.all().ancestor(interaction).fetch(1000)
                interactions.append(InteractionGroupItems(interaction, interactionItems))

            self.response.write(riot_utils.render_template('templates/interactions.html', {
                'user': user,
                'interactions': interactions
            }))
        else:
            self.redirect(users.create_login_url(self.request.uri))
Ejemplo n.º 6
0
    def get(self, sessionId):
        user = users.get_current_user()
        if user:
            session = models.Session.get_by_id(int(sessionId))
            if session and session.observer == user.email():
                session_records = models.SessionRecord.all().ancestor(session).fetch(1000)
                for sr in session_records:
                    sr.totalSeconds = sr.endTime - sr.startTime

                self.response.write(riot_utils.render_template('templates/session_records.html', {
                    'session': session,
                    'session_records': session_records
                }))
            else:
                self.response.write({'error': 'invalid session id'})
        else:
            self.redirect(users.create_login_url(self.request.uri))
Ejemplo n.º 7
0
    def get(self):
        user = users.get_current_user()
        if user:
            sessions = models.get_sessions_for_user(user)
	    sessions.sort(key=lambda x: x.date)
	    
	    # Convert from UTC to PST
	    for session in sessions:
		date_utc = session.date
		date_pst = datetime.datetime.fromtimestamp(time.mktime(date_utc.timetuple()), Pacific_tzinfo())
		session.date = date_pst
		session.put()
		
            self.response.write(riot_utils.render_template('templates/sessions.html', {
                'sessions': sessions
            }))
        else:
            self.redirect(users.create_login_url(self.request.uri))
Ejemplo n.º 8
0
    def get(self, sessionId):
        user = users.get_current_user()
        if user:
            session = models.Session.get_by_id(int(sessionId))
            if session and user.email() == session.observer:
                query = models.InteractionGroup.all()
                interactionGroups = query.run()
                interactions = []
                for interaction in interactionGroups:
                    interactionItems = models.InteractionItem.all().ancestor(interaction).fetch(1000)
                    interactions.append(InteractionGroupItems(interaction, interactionItems))

                self.response.write(riot_utils.render_template('templates/session.html', {
                    'session': session,
                    'interactions': interactions
                }))
            else:
                self.response.write({'error': 'invalid session id'})
        else:
            self.redirect(users.create_login_url(self.request.uri))
Ejemplo n.º 9
0
 def get(self):
     user = users.get_current_user()
     if user:
         self.response.write(riot_utils.render_template('templates/new_session.html', {}))
     else:
         self.redirect(users.create_login_url(self.request.uri))
Ejemplo n.º 10
0
    def get(self, sessionId):
	user = users.get_current_user()
        if user: 
	    session = models.Session.get_by_id(int(sessionId)) 
	    session_count_array = []
	    for i in range(1,101):
		if ('Student' + ' '+ str(i) ) in session.studentcounts:
		    session_count_array.append( ( ( session.studentcounts[ ('Student' + ' '+ str(i) ) ] ), 'btn-black' ) )
		else:
		    session_count_array.append((0,'btn-grey'))
	    session_count_map = []
	    for i in range(0,100,10):
		session_count_map.append( (session_count_array[i:i+10] ) )

	    if session and session.observer == user.email():
		session_records = models.SessionRecord.all().ancestor(session).fetch(1000)
		session_records.sort(key = lambda x:x.startTime)
		session_start = session_records[0].startTime
		session_end = session_records[-1].endTime
		session_dur = session_end - session_start	
		student_counts = session.studentcounts
		
		color_map = {} #Create the color mappings, for converting names like btn-red to hex codes for plotting
		color_map["btn-grey"] = "#a5a5a5"
		color_map["btn-blue"] = "#0084cc"
		color_map["btn-lightblue"] = "#bbd5dc"
		color_map["btn-green"] = "#5e933d"
		color_map["btn-darkgreen"] = "#435a3e"
		color_map["btn-lightgreen"] = "#92bc89"
		color_map["btn-red"] = "#f40000"
		color_map["btn-orange"] = "#e58900"
		color_map["btn-yellow"] = "#e4e11f"
		color_map["btn-black"] = "#000000"
		color_map["btn-purple"] = "#dc18b5"
		color_map["btn-lightpurple"] = "#d7a8ff"
		color_map["btn-success"] = "#62c462"
		
		# These lists below are for timelines
		student_actions = []
		student_colors = []
		teacher_actions = []
		teacher_colors = []
		ind_student_actions = []
		
		# These are for pie charts (dictionaries/arrays)
		mode_dict = {}
		mode_plot = []
		student_activity = {}
		student_activity_plot = []
		teacher_activity = {}
		teacher_activity_plot = []
		
		# Create dict for time spent between student/teacher
		student_teacher = {}
		student_teacher["Teacher"] = 0
		student_teacher["Students"] = 0
		student_teacher_plot = []
		
		# Create student participation array for pie chart
		student_plot = []
		for item in student_counts:
		    student_plot.append([item,student_counts[item]])
		    
		session_start = session_records[0].startTime
		counter = 0
		for sr in session_records:
		    # Get relevant information from each session record
		    int_start = sr.startTime - session_start
		    int_end = sr.endTime - session_start
		    int_dur = str(int_start)+'-'+str(int_end)+' s'
		    total_seconds = sr.endTime - sr.startTime
		    int_item = sr.interactionItem.name
		    actor = sr.actor
		    mode = sr.mode
		    color = color_map[sr.color]
		    #print int_item, sr.color, color
		    
		    # Sum up all the times spent in each mode
		    if mode in mode_dict:
			mode_dict[mode] += total_seconds
		    else:
			mode_dict[mode] = total_seconds

		    if actor == "Students" or actor.split()[0] == "Student":
			# Add time into student teacher times
			student_teacher["Students"] += total_seconds
			# add up student interaction times
			
			if (int_item,color) in student_activity:
			    student_activity[(int_item,color)] += total_seconds
			else:
			    student_activity[(int_item,color)] = total_seconds
			    
			# Fill arrays for TOTAL student timeline
			if int_start != 0 and len(student_actions) == 0: 
			    student_actions.append(("Students", counter, 0, int_start, "transparent"))
			    counter -= 1

			student_actions.append(("Students",int_item+' ('+int_dur+ ')',int_start, int_end, color))

			#Fill in dictionary for INDIVIDUAL student timeline
			if actor.split()[0] == "Student":
			    ind_student_actions.append((actor, int_item+' ('+int_dur+ ')', int_start, int_end, color))
		
		    elif actor == "Teacher": 
			student_teacher["Teacher"] += total_seconds # Add time into student teacher times
			if (int_item,color) in teacher_activity:
			    teacher_activity[(int_item,color)] += total_seconds
			else:
			    teacher_activity[(int_item,color)] = total_seconds
			if int_start != 0 and len(teacher_actions) == 0: 
			    teacher_actions.append(("Teacher", counter, 0, int_start,"transparent"))
			    counter -= 1
			teacher_actions.append(("Teacher",int_item+' ('+int_dur+ ')',int_start,int_end,color))
		    counter += 1
		# Add in the last whitespace between end of last session entry and absolute end of session
		if len(student_actions) != 0:
		    if student_actions[-1][3] != session_dur:   
			last_end_time = student_actions[-1][3]
			student_actions.append(("Students", counter,last_end_time, session_dur,"transparent"))
		else:
		    student_actions = [("Students","None",0,0,"transparent")]	
		    
		if len(teacher_actions) != 0:
		    if teacher_actions[-1][3] != session_dur:
			last_end_time = teacher_actions[-1][3]
			teacher_actions.append(("Teacher", counter, last_end_time, session_dur,"transparent"))
		else:
		    teacher_actions = [("Teacher","None",0,0,"transparent")]	
		
		# Place dictionary items in a list for easier plotting via javascript
		for key in mode_dict:
		    mode_plot.append([key,mode_dict[key]])
		for key in student_teacher:
		    student_teacher_plot.append([key,student_teacher[key]])
		for key in student_activity:
		    student_activity_plot.append([key,student_activity[key]])
		for key in teacher_activity:
		    teacher_activity_plot.append([key,teacher_activity[key]])
		
		# Sort the arrays in which color IS important, this helps keep the plot colors in order
		ind_student_actions = sorted(ind_student_actions, key=lambda x: x[0])
		student_activity_plot = sorted(student_activity_plot, key=lambda x: x[0][1])
		teacher_activity_plot = sorted(teacher_activity_plot, key=lambda x: x[0][1])
		
		self.response.write(riot_utils.render_template('templates/session_charts.html', {
		    'student_actions': student_actions,
		    'teacher_actions': teacher_actions,
		    'ind_student_actions': ind_student_actions,
		    'mode_plot': mode_plot,
		    'student_plot': student_plot,
		    'student_teacher_plot': student_teacher_plot,
		    'student_activity_plot': student_activity_plot,
		    'teacher_activity_plot': teacher_activity_plot,
		    'session_count_map': session_count_map
		}))
		
	    if not session:
		self.response.write({'error': 'no session with id: ' + sessionId})
		return
	    if not session.observer == user.email():
		self.response.write({'error': 'not authorized'})
		return
	    # checks pass

	else:
	    self.response.write({'error': 'must be logged in'})