Exemple #1
0
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)
Exemple #2
0
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)
Exemple #3
0
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,
            }
Exemple #4
0
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,
        }