def show(request, discussion_id): """Show a threadedcomments discussion of an arbitrary object. discussion_id is the pk of the root comment.""" root_comment = get_object_or_404(ThreadedComment, pk = discussion_id) #for_now: space_viewer = request.user space_owner = request.user if request.GET.has_key('as') and request.user.is_staff: space_viewer = get_object_or_404(User, username=request.GET['as']) if not root_comment.content_object.permission_to('read',request): return HttpResponseForbidden('You do not have permission to view this discussion.') try: my_course = root_comment.content_object.context.content_object except: #temporary: my_courses = [c for c in Course.objects.all() if request.user in c.members] my_course = my_courses[-1] root_comment.content_object.context = Collaboration.get_associated_collab(my_course) assets = annotated_by(Asset.objects.filter(course=my_course), space_viewer) return { 'is_space_owner': True, 'edit_comment_permission': my_course.is_faculty, 'space_owner': space_owner, 'space_viewer': space_viewer, 'root_comment': root_comment, 'assets': assets, 'page_in_edit_mode': True, }
def your_records(request, record_owner_name): """ An ajax-only request to retrieve a specified user's projects, assignment responses and selections """ if not request.is_ajax(): raise Http404() course = request.course in_course_or_404(record_owner_name, course) record_owner = get_object_or_404(User, username = record_owner_name) logged_in_user = request.user assets = annotated_by(Asset.objects.filter(course = course), record_owner, include_archives = course.is_faculty(record_owner)) projects = Project.get_user_projects(record_owner, course).order_by('-modified') if not record_owner == logged_in_user: projects = [p for p in projects if p.visible(request)] project_type = ContentType.objects.get_for_model(Project) assignments = [] for assignment in Project.objects.filter(course.faculty_filter): if not assignment.visible(request): continue if assignment in projects: continue if is_unanswered_assignment(assignment, record_owner, request, project_type): assignments.append(assignment) return get_records(request, record_owner, projects, assignments, assets)
def your_records(request, record_owner_name): """ An ajax-only request to retrieve a specified user's projects, assignment responses and selections """ if not request.is_ajax(): raise Http404() course = request.course in_course_or_404(record_owner_name, course) record_owner = get_object_or_404(User, username=record_owner_name) logged_in_user = request.user assets = annotated_by(Asset.objects.filter(course=course), record_owner, include_archives=course.is_faculty(record_owner)) projects = Project.get_user_projects(record_owner, course).order_by('-modified') if not record_owner == logged_in_user: projects = [p for p in projects if p.visible(request)] project_type = ContentType.objects.get_for_model(Project) assignments = [] for assignment in Project.objects.filter(course.faculty_filter): if not assignment.visible(request): continue if assignment in projects: continue if is_unanswered_assignment(assignment, record_owner, request, project_type): assignments.append(assignment) return get_records(request, record_owner, projects, assignments, assets)
def annotations_collection_fragment(request,username): space_viewer = in_course_or_404(username, request.course) assets = annotated_by(Asset.objects.filter(course=request.course), space_viewer) return { 'space_viewer':space_viewer, 'assets':assets, }
def should_show_tour(request, course, user): assets = annotated_by(Asset.objects.filter(course=course), user, include_archives=False) projects = Project.objects.visible_by_course_and_user(request, user, course) return UserSetting.get_setting(user, "help_show_homepage_tour", len(assets) < 1 and len(projects) < 1)
def your_records(request, user_name): c = request.course in_course_or_404(user_name, c) today = datetime.date.today() user = get_object_or_404(User, username=user_name) editable = (user==request.user) assets = annotated_by(Asset.objects.filter(course=c), user, include_archives=c.is_faculty(user) ) projects = Project.get_user_projects(user, c) if not editable: projects = projects.filter(submitted=True) projects = projects.order_by('-modified') for fil in filter_by: filter_value = request.GET.get(fil) if filter_value: assets = [asset for asset in assets if filter_by[fil](asset, filter_value, user)] tags = calculate_cloud(Tag.objects.usage_for_queryset( user.sherdnote_set.filter( asset__course=c), counts=True)) active_filters = dict((filter, request.GET.get(filter)) for filter in filter_by if filter in request.GET) #bad language, we should change this to user_of_assets or something space_viewer = user if request.GET.has_key('as') and request.user.is_staff: space_viewer = get_object_or_404(User, username=request.GET['as']) return { 'assets' : assets, 'projects' : projects, 'tags' : tags, 'dates' : {'today':'today', 'yesterday':'yesterday', 'lastweek':'within the last week'}, 'space_owner' : user, 'space_viewer' : space_viewer, 'editable' : editable, 'active_filters': active_filters, }
def project_workspace(request, user, project): space_viewer = request.user if request.GET.has_key('as') and request.user.is_staff: space_viewer = get_object_or_404(User, username=request.GET['as']) assets = annotated_by(Asset.objects.filter(course=request.course), space_viewer) projectform = ProjectForm(request, instance=project) return { 'is_space_owner': project.is_participant(user), 'space_owner': user, 'space_viewer': space_viewer, 'project': project, 'projectform': projectform, 'assets': assets, 'page_in_edit_mode': True, }
def your_records(request, record_owner_name): """ An ajax-only request to retrieve a specified user's projects, assignment responses and selections """ if not request.is_ajax(): raise Http404() course = request.course if (request.user.username == record_owner_name and request.user.is_staff and not in_course(request.user.username, request.course)): return all_records(request) in_course_or_404(record_owner_name, course) record_owner = get_object_or_404(User, username=record_owner_name) assets = annotated_by(Asset.objects.filter(course=course), record_owner, include_archives=False) return get_records(request, record_owner, assets)
def get_records(user, course, request): c = course today = datetime.date.today() editable = (user==request.user) #bad language, we should change this to user_of_assets or something space_viewer = request.user if request.GET.has_key('as') and request.user.is_staff: space_viewer = get_object_or_404(User, username=request.GET['as']) assignments = [] responder = None if user == 'all': archives = list(course.asset_set.archives()) assets = [a for a in Asset.objects.filter(course=c).extra( select={'lower_title': 'lower(assetmgr_asset.title)'} ).select_related().order_by('lower_title') if a not in archives] user = None all_tags = Tag.objects.usage_for_queryset( SherdNote.objects.filter( asset__course=course), counts=True) all_tags.sort(lambda a,b:cmp(a.name.lower(),b.name.lower())) tags = calculate_cloud(all_tags) projects = [p for p in Project.objects.filter(course=c, submitted=True).order_by('title') if p.visible(request)] else: assets = annotated_by(Asset.objects.filter(course=c), user, include_archives=c.is_faculty(user) ) tags = calculate_cloud(Tag.objects.usage_for_queryset( user.sherdnote_set.filter( asset__course=c), counts=True)) projects = Project.get_user_projects(user, c).order_by('-modified') if not editable: projects = [p for p in projects if p.visible(request)] project_type = ContentType.objects.get_for_model(Project) assignments = [] maybe_assignments = Project.objects.filter( c.faculty_filter) for assignment in maybe_assignments: if not assignment.visible(request): continue if assignment in projects: continue if is_unanswered_assignment(assignment, user, request, project_type): assignments.append(assignment) if user.id == space_viewer.id: responder = space_viewer.username for fil in filter_by: filter_value = request.GET.get(fil) if filter_value: assets = [asset for asset in assets if filter_by[fil](asset, filter_value, user)] active_filters = get_active_filters(request, filter_by) if request.is_ajax(): asset_json = [] for asset in assets: the_json = asset.sherd_json(request) gannotation, created = SherdNote.objects.global_annotation(asset, user or space_viewer, auto_create=False) if gannotation: the_json['global_annotation'] = gannotation.sherd_json(request, 'x', ('tags','body') ) the_json['editable'] = editable annotations = [] if request.GET.has_key('annotations'): # @todo: refactor this serialization into a common place. def author_name(request, annotation, key): if not annotation.author_id: return None return 'author_name',get_public_name(annotation.author, request) for ann in asset.sherdnote_set.filter(range1__isnull=False,author=user): annotations.append( ann.sherd_json(request, 'x', ('title','author','tags',author_name,'body','modified', 'timecode') ) ) the_json['annotations'] = annotations asset_json.append(the_json) project_json = [] for p in projects: the_json = {} the_json['id'] = p.id the_json['title'] = p.title the_json['url'] = p.get_absolute_url() participants = p.attribution_list() the_json['authors'] = [ {'name': get_public_name(u, request) } for u in participants] the_json['modified'] = p.modified.strftime("%m/%d/%y %I:%M %p") the_json['status'] = p.status() the_json['editable'] = editable feedback = p.feedback_discussion() if feedback: the_json['feedback'] = feedback.id collaboration = p.collaboration() if collaboration: collaboration_parent = collaboration.get_parent() if collaboration_parent: the_json['collaboration'] = {} the_json['collaboration']['title'] = collaboration_parent.title if collaboration_parent.content_object: the_json['collaboration']['url'] = collaboration_parent.content_object.get_absolute_url() project_json.append(the_json) data = {'assets': asset_json, 'assignments' : [ {'id': a.id, 'responder': responder, 'url': a.get_absolute_url(), 'title': a.title, 'modified': a.modified.strftime("%m/%d/%y %I:%M %p")} for a in assignments], 'projects' : project_json, 'tags': [ { 'name': tag.name } for tag in tags ], 'active_filters': active_filters, 'space_viewer' : { 'username': space_viewer.username, 'public_name': get_public_name(space_viewer, request), 'can_manage': (space_viewer.is_staff and not user) }, 'editable' : editable, 'owners' : [{ 'username': m.username, 'public_name': get_public_name(m, request) } for m in request.course.members], 'compositions' : len(projects) > 0 or len(assignments) > 0, 'is_faculty': c.is_faculty(space_viewer), } if user: data['space_owner'] = { 'username': user.username, 'public_name': get_public_name(user, request) } json_stream = simplejson.dumps(data, indent=2) return HttpResponse(json_stream, mimetype='application/json') else: dates = (('today','today'), ('yesterday','yesterday'), ('lastweek','within the last week'),) return { 'assets' : assets, 'assignments' : assignments, 'projects' : projects, 'tags' : tags, 'dates' : dates, 'space_owner' : user, 'space_viewer' : space_viewer, 'editable' : editable, 'active_filters': active_filters, }
def get_records(user, course, request): c = course today = datetime.date.today() editable = (user == request.user) #bad language, we should change this to user_of_assets or something space_viewer = request.user if request.GET.has_key('as') and request.user.is_staff: space_viewer = get_object_or_404(User, username=request.GET['as']) assignments = [] responder = None if user == 'all': archives = list(course.asset_set.archives()) assets = [ a for a in Asset.objects.filter(course=c).extra( select={ 'lower_title': 'lower(assetmgr_asset.title)' }).select_related().order_by('lower_title') if a not in archives ] user = None all_tags = Tag.objects.usage_for_queryset( SherdNote.objects.filter(asset__course=course), counts=True) all_tags.sort(lambda a, b: cmp(a.name.lower(), b.name.lower())) tags = calculate_cloud(all_tags) projects = [ p for p in Project.objects.filter(course=c, submitted=True).order_by('title') if p.visible(request) ] else: assets = annotated_by(Asset.objects.filter(course=c), user, include_archives=c.is_faculty(user)) tags = calculate_cloud( Tag.objects.usage_for_queryset( user.sherdnote_set.filter(asset__course=c), counts=True)) projects = Project.get_user_projects(user, c).order_by('-modified') if not editable: projects = [p for p in projects if p.visible(request)] project_type = ContentType.objects.get_for_model(Project) assignments = [] maybe_assignments = Project.objects.filter(c.faculty_filter) for assignment in maybe_assignments: if not assignment.visible(request): continue if assignment in projects: continue if is_unanswered_assignment(assignment, user, request, project_type): assignments.append(assignment) if user.id == space_viewer.id: responder = space_viewer.username for fil in filter_by: filter_value = request.GET.get(fil) if filter_value: assets = [ asset for asset in assets if filter_by[fil](asset, filter_value, user) ] active_filters = get_active_filters(request, filter_by) if request.is_ajax(): asset_json = [] for asset in assets: the_json = asset.sherd_json(request) gannotation, created = SherdNote.objects.global_annotation( asset, user or space_viewer, auto_create=False) if gannotation: the_json['global_annotation'] = gannotation.sherd_json( request, 'x', ('tags', 'body')) the_json['editable'] = editable annotations = [] if request.GET.has_key('annotations'): # @todo: refactor this serialization into a common place. def author_name(request, annotation, key): if not annotation.author_id: return None return 'author_name', get_public_name( annotation.author, request) for ann in asset.sherdnote_set.filter(range1__isnull=False, author=user): annotations.append( ann.sherd_json(request, 'x', ('title', 'author', 'tags', author_name, 'body', 'modified', 'timecode'))) the_json['annotations'] = annotations asset_json.append(the_json) project_json = [] for p in projects: the_json = {} the_json['id'] = p.id the_json['title'] = p.title the_json['url'] = p.get_absolute_url() participants = p.attribution_list() the_json['authors'] = [{ 'name': get_public_name(u, request) } for u in participants] the_json['modified'] = p.modified.strftime("%m/%d/%y %I:%M %p") the_json['status'] = p.status() the_json['editable'] = editable feedback = p.feedback_discussion() if feedback: the_json['feedback'] = feedback.id collaboration = p.collaboration() if collaboration: collaboration_parent = collaboration.get_parent() if collaboration_parent: the_json['collaboration'] = {} the_json['collaboration'][ 'title'] = collaboration_parent.title if collaboration_parent.content_object: the_json['collaboration'][ 'url'] = collaboration_parent.content_object.get_absolute_url( ) project_json.append(the_json) data = { 'assets': asset_json, 'assignments': [{ 'id': a.id, 'responder': responder, 'url': a.get_absolute_url(), 'title': a.title, 'modified': a.modified.strftime("%m/%d/%y %I:%M %p") } for a in assignments], 'projects': project_json, 'tags': [{ 'name': tag.name } for tag in tags], 'active_filters': active_filters, 'space_viewer': { 'username': space_viewer.username, 'public_name': get_public_name(space_viewer, request), 'can_manage': (space_viewer.is_staff and not user) }, 'editable': editable, 'owners': [{ 'username': m.username, 'public_name': get_public_name(m, request) } for m in request.course.members], 'compositions': len(projects) > 0 or len(assignments) > 0, 'is_faculty': c.is_faculty(space_viewer), } if user: data['space_owner'] = { 'username': user.username, 'public_name': get_public_name(user, request) } json_stream = simplejson.dumps(data, indent=2) return HttpResponse(json_stream, mimetype='application/json') else: dates = ( ('today', 'today'), ('yesterday', 'yesterday'), ('lastweek', 'within the last week'), ) return { 'assets': assets, 'assignments': assignments, 'projects': projects, 'tags': tags, 'dates': dates, 'space_owner': user, 'space_viewer': space_viewer, 'editable': editable, 'active_filters': active_filters, }