def get_context(self, request, assets, notes): # Allow the logged in user to add assets to his composition citable = request.GET.get('citable', '') == 'true' # Include annotation metadata. (makes response much larger) include_annotations = request.GET.get('annotations', '') == 'true' # Initialize the context ures = UserResource() ctx = { 'space_viewer': ures.render_one(request, self.record_viewer), 'is_faculty': self.is_viewer_faculty } if self.record_owner: ctx['space_owner'] = ures.render_one(request, self.record_owner) ctx['active_filters'] = {} for key, val in request.GET.items(): if (key in self.valid_filters or key.startswith('vocabulary-')): ctx['active_filters'][key] = val ctx['editable'] = self.viewing_own_records ctx['citable'] = citable # render the assets ares = AssetResource(include_annotations=include_annotations, extras={'editable': self.viewing_own_records, 'citable': citable}) ctx['assets'] = ares.render_list(request, self.record_viewer, assets, notes) return ctx
def get(self, request, *args, **kwargs): course = get_object_or_404(Course, id=kwargs.pop('course_id', None)) faculty = [user.id for user in course.faculty.all()] faculty_ctx = UserResource().render_list(request, course.faculty.all()) # filter assets & notes by the faculty set assets = Asset.objects.by_course(course) assets = assets.filter(sherdnote_set__author__id__in=faculty) notes = SherdNote.objects.get_related_notes(assets, None, faculty) ares = AssetResource(include_annotations=False) asset_ctx = ares.render_list(request, None, assets, notes) projects = Project.objects.by_course_and_users(course, faculty) # filter private projects collabs = Collaboration.objects.get_for_object_list(projects) collabs = collabs.exclude( _policy__policy_name='PrivateEditorsAreOwners') ids = [int(c.object_pk) for c in collabs] projects = projects.filter(id__in=ids) info_ctx = CourseInfoResource().render_one(request, course) ctx = { 'course': {'id': course.id, 'title': course.title, 'faculty': faculty_ctx, 'info': info_ctx}, 'assets': asset_ctx, 'projects': ProjectResource().render_list(request, projects) } return self.render_to_json_response(ctx)
def get_context(self, request, assets, notes): # Allow the logged in user to add assets to his composition citable = request.GET.get('citable', '') == 'true' # Include annotation metadata. (makes response much larger) include_annotations = request.GET.get('annotations', '') == 'true' # Initialize the context ures = UserResource() ctx = { 'space_viewer': ures.render_one(request, self.record_viewer), 'is_faculty': self.is_viewer_faculty } if self.record_owner: ctx['space_owner'] = ures.render_one(request, self.record_owner) ctx['active_filters'] = {} for key, val in request.GET.items(): if (key in self.valid_filters or key.startswith('vocabulary-')): ctx['active_filters'][key] = val ctx['editable'] = self.viewing_own_records ctx['citable'] = citable # render the assets ares = AssetResource(include_annotations=include_annotations, extras={ 'editable': self.viewing_own_records, 'citable': citable }) ctx['assets'] = ares.render_list(request, self.record_viewer, assets, notes) return ctx
def get(self, request): self.root = 'http://' + request.get_host() assets = Asset.objects.filter(course=request.course) assets, notes = self.visible_assets_and_notes(request, assets) # @todo - factor out the tastypie interim json step ar = AssetResource(include_annotations=True) api_response = ar.render_list(request, None, request.user, assets, notes) if len(api_response) == 0: return HttpResponse("There are no videos in your collection") for i in range(0, len(api_response)): self.parse_response(api_response[i]) return HttpResponse(json.dumps(self.export))
def get(self, request): self.root = 'http://' + request.get_host() assets = Asset.objects.filter(course=request.course) assets, notes = self.visible_assets_and_notes(request, assets) # @todo - factor out the tastypie interim json step ar = AssetResource(include_annotations=True) api_response = ar.render_list(request, None, request.user, assets, notes) if len(api_response) == 0: return HttpResponse("There are no videos in your collection") for i in range(0, len(api_response)): self.parse_response(api_response[i]) return HttpResponse(json.dumps(self.export))
def get(self, request, *args, **kwargs): course = get_object_or_404(Course, id=kwargs.pop('course_id', None)) faculty = [user.id for user in course.faculty.all()] faculty_ctx = UserResource().render_list(request, course.faculty.all()) # filter assets & notes by the faculty set assets = Asset.objects.by_course(course) if settings.SURELINK_URL: assets = assets.exclude( source__url__startswith=settings.SURELINK_URL) assets = assets.filter(sherdnote_set__author__id__in=faculty).exclude( source__label='flv_pseudo') notes = SherdNote.objects.get_related_notes( assets, None, faculty, True).exclude_primary_types(['flv_pseudo']) ares = AssetResource(include_annotations=False) asset_ctx = ares.render_list(request, None, None, assets, notes) projects = Project.objects.by_course_and_users(course, faculty) # filter private projects if projects.count() > 0: collabs = Collaboration.objects.get_for_object_list(projects) collabs = collabs.exclude( policy_record__policy_name='PrivateEditorsAreOwners') ids = collabs.values_list('object_pk', flat=True) projects = projects.filter(id__in=ids) info_ctx = CourseInfoResource().render_one(request, course) ctx = { 'course': { 'id': course.id, 'title': course.title, 'faculty': faculty_ctx, 'info': info_ctx }, 'assets': asset_ctx, 'projects': ProjectResource().render_list(request, projects) } return self.render_to_json_response(ctx)
def get(self, request, *args, **kwargs): course = get_object_or_404(Course, id=kwargs.pop('course_id', None)) faculty = [user.id for user in course.faculty.all()] faculty_ctx = UserResource().render_list(request, course.faculty.all()) # filter assets & notes by the faculty set assets = Asset.objects.by_course(course) assets = assets.filter(sherdnote_set__author__id__in=faculty) notes = SherdNote.objects.get_related_notes(assets, None, faculty) ares = AssetResource(include_annotations=False) asset_ctx = ares.render_list(request, None, assets, notes) projects = Project.objects.by_course_and_users(course, faculty) # filter private projects collabs = Collaboration.objects.get_for_object_list(projects) collabs = collabs.exclude( _policy__policy_name='PrivateEditorsAreOwners') ids = [int(c.object_pk) for c in collabs] projects = projects.filter(id__in=ids) info_ctx = CourseInfoResource().render_one(request, course) ctx = { 'course': { 'id': course.id, 'title': course.title, 'faculty': faculty_ctx, 'info': info_ctx }, 'assets': asset_ctx, 'projects': ProjectResource().render_list(request, projects) } return self.render_to_json_response(ctx)
def render_assets(request, record_owner, assets): course = request.course logged_in_user = request.user # Is the current user faculty OR staff is_faculty = cached_course_is_faculty(course, logged_in_user) # Can the record_owner edit the records viewing_own_records = (record_owner == logged_in_user) viewing_faculty_records = record_owner and course.is_faculty(record_owner) # Allow the logged in user to add assets to his composition citable = request.GET.get('citable', '') == 'true' # Does the course allow viewing other user selections? owner_selections_are_visible = ( course_details.all_selections_are_visible(course) or viewing_own_records or viewing_faculty_records or is_faculty) # Spew out json for the assets if request.GET.get('annotations', '') == 'true': resource = AssetResource(owner_selections_are_visible, record_owner, {'editable': viewing_own_records, 'citable': citable}) else: resource = AssetSummaryResource({'editable': viewing_own_records, 'citable': citable}) asset_json = resource.render_list(request, assets) active_filters = {} for k, val in request.GET.items(): if (k == 'tag' or k == 'modified' or k.startswith('vocabulary-')): active_filters[k] = val user_resource = UserResource() # #todo -- figure out a cleaner way to do this. Ugli-ness # Collate tag set & vocabulary set for the result set. # Get all visible notes for the returned asset set # These notes may include global annotations for all users, # whereas the rendered set will not active_asset_ids = [a['id'] for a in asset_json] active_notes = [] if record_owner: if owner_selections_are_visible: active_notes = SherdNote.objects.filter( asset__course=course, asset__id__in=active_asset_ids, author__id=record_owner.id) else: if all_selections_are_visible(course) or is_faculty: # Display all tags for the asset set including globals active_notes = SherdNote.objects.filter( asset__course=course, asset__id__in=active_asset_ids) else: whitelist = [f.id for f in course.faculty] whitelist.append(request.user.id) active_notes = SherdNote.objects.filter( asset__course=course, asset__id__in=active_asset_ids, author__id__in=whitelist) tags = [] if len(active_notes) > 0: tags = Tag.objects.usage_for_queryset(active_notes) tags.sort(lambda a, b: cmp(a.name.lower(), b.name.lower())) active_vocabulary = [] note_ids = [n.id for n in active_notes] content_type = ContentType.objects.get_for_model(SherdNote) term_resource = TermResource() for v in Vocabulary.objects.get_for_object(request.course): vocabulary = { 'id': v.id, 'display_name': v.display_name, 'term_set': [] } related = TermRelationship.objects.filter(term__vocabulary=v, content_type=content_type, object_id__in=note_ids) terms = [] for r in related: if r.term.display_name not in terms: the_term = term_resource.render_one(request, r.term) vocabulary['term_set'].append(the_term) terms.append(r.term.display_name) active_vocabulary.append(vocabulary) # Assemble the context data = {'assets': asset_json, 'active_tags': TagResource().render_list(request, tags), 'active_filters': active_filters, 'active_vocabulary': active_vocabulary, 'space_viewer': user_resource.render_one(request, logged_in_user), 'editable': viewing_own_records, 'citable': citable, 'is_faculty': is_faculty} if record_owner: data['space_owner'] = user_resource.render_one(request, record_owner) json_stream = simplejson.dumps(data, indent=2) return HttpResponse(json_stream, mimetype='application/json')
def render_assets(request, record_owner, assets): course = request.course logged_in_user = request.user # Is the current user faculty OR staff is_faculty = cached_course_is_faculty(course, logged_in_user) # Can the record_owner edit the records viewing_own_records = (record_owner == logged_in_user) viewing_faculty_records = record_owner and course.is_faculty(record_owner) # Allow the logged in user to add assets to his composition citable = request.GET.get('citable', '') == 'true' # Does the course allow viewing other user selections? owner_selections_are_visible = ( course_details.all_selections_are_visible(course) or viewing_own_records or viewing_faculty_records or is_faculty) # Spew out json for the assets if request.GET.get('annotations', '') == 'true': resource = AssetResource(owner_selections_are_visible, record_owner, { 'editable': viewing_own_records, 'citable': citable }) else: resource = AssetSummaryResource({ 'editable': viewing_own_records, 'citable': citable }) asset_json = resource.render_list(request, assets) active_filters = {} for key, val in request.GET.items(): if (key == 'tag' or key == 'modified' or key.startswith('vocabulary-')): active_filters[key] = val user_resource = UserResource() # #todo -- figure out a cleaner way to do this. Ugli-ness # Collate tag set & vocabulary set for the result set. # Get all visible notes for the returned asset set # These notes may include global annotations for all users, # whereas the rendered set will not active_asset_ids = [a['id'] for a in asset_json] active_notes = [] if record_owner: if owner_selections_are_visible: active_notes = SherdNote.objects.filter( asset__course=course, asset__id__in=active_asset_ids, author__id=record_owner.id) else: if all_selections_are_visible(course) or is_faculty: # Display all tags for the asset set including globals active_notes = SherdNote.objects.filter( asset__course=course, asset__id__in=active_asset_ids) else: whitelist = [f.id for f in course.faculty] whitelist.append(request.user.id) active_notes = SherdNote.objects.filter( asset__course=course, asset__id__in=active_asset_ids, author__id__in=whitelist) tags = [] if len(active_notes) > 0: tags = Tag.objects.usage_for_queryset(active_notes) tags.sort(lambda a, b: cmp(a.name.lower(), b.name.lower())) active_vocabulary = [] note_ids = [n.id for n in active_notes] content_type = ContentType.objects.get_for_model(SherdNote) term_resource = TermResource() for vocab in Vocabulary.objects.get_for_object(request.course): vocabulary = { 'id': vocab.id, 'display_name': vocab.display_name, 'term_set': [] } related = TermRelationship.objects.filter(term__vocabulary=vocab, content_type=content_type, object_id__in=note_ids) terms = [] for rel in related: if rel.term.display_name not in terms: the_term = term_resource.render_one(request, rel.term) vocabulary['term_set'].append(the_term) terms.append(rel.term.display_name) active_vocabulary.append(vocabulary) # Assemble the context data = { 'assets': asset_json, 'active_tags': TagResource().render_list(request, tags), 'active_filters': active_filters, 'active_vocabulary': active_vocabulary, 'space_viewer': user_resource.render_one(request, logged_in_user), 'editable': viewing_own_records, 'citable': citable, 'is_faculty': is_faculty } if record_owner: data['space_owner'] = user_resource.render_one(request, record_owner) json_stream = simplejson.dumps(data, indent=2) return HttpResponse(json_stream, mimetype='application/json')