コード例 #1
0
    def get(self, *args, **kwargs):
        """
        A single panel read-only view of the specified project/version combo.
        No assignment, response or feedback access/links.
        Regular access conventions apply. For example, if the project is
        "private" an HTTPResponseForbidden will be returned.

        Used for reviewing old project versions and public project access.

        Keyword arguments:
        project_id -- the model id
        version_number -- a specific project version or
        None for the current version

        """

        attach_course_to_request(self.request, **kwargs)
        data = {'space_owner': self.request.user.username}
        version_number = self.kwargs.get('version_number', None)

        if not self.request.is_ajax():
            if version_number:
                # versioned view
                ctx = {
                    'course_pk': self.project.course.pk,
                    'project_id': self.project.id,
                    'version_number': version_number
                }
                project_url = reverse('project-view-readonly', kwargs=ctx)
            else:
                project_url = self.project.public_url()

            data['project'] = self.project
            data['version'] = version_number
            data['public_url'] = project_url
            data['readonly'] = True
            return self.render_to_response(data)

        # ajax view
        resource = ProjectResource(record_viewer=self.request.user,
                                   is_viewer_faculty=False,
                                   editable=False)

        if version_number:
            version = get_object_or_404(Version,
                                        object_id=str(self.project.id),
                                        revision_id=version_number)
            project_context = resource.render_one(
                self.request, version._object_version.object, version_number)
        else:
            project_context = resource.render_one(self.request, self.project)

        data['panels'] = [{
            'context': project_context,
            'template': 'project_readonly'
        }]

        return self.render_to_json_response(data)
コード例 #2
0
ファイル: views.py プロジェクト: coati-00/mediathread
    def post(self, request):
        project = Project.objects.create(author=request.user,
                                         course=request.course,
                                         title="Untitled")
        project.collaboration(request, sync_group=True)

        parent = request.POST.get("parent")
        if parent is not None:
            try:
                parent = Project.objects.get(pk=parent)

                parent_collab = parent.collaboration(request)
                if parent_collab.permission_to("add_child", request):
                    parent_collab.append_child(project)

            except Project.DoesNotExist:
                parent = None
                # @todo -- an error has occurred

        if not request.is_ajax():
            return HttpResponseRedirect(project.get_absolute_url())
        else:
            is_faculty = request.course.is_faculty(request.user)
            resource = ProjectResource(record_viewer=request.user,
                                       is_viewer_faculty=is_faculty,
                                       editable=project.can_edit(request))
            project_context = resource.render_one(request, project)
            project_context['editing'] = True

            data = {'panel_state': 'open',
                    'template': 'project',
                    'context': project_context}

            return self.render_to_json_response(data)
コード例 #3
0
    def post(self, request):
        project_type = request.POST.get('project_type', 'composition')
        body = request.POST.get('body', '')
        response_policy = request.POST.get('response_view_policy', 'always')
        due_date = self.format_date(self.request.POST.get('due_date', None))
        instructions1 = self.request.POST.get('custom_instructions_1', None)
        instructions2 = self.request.POST.get('custom_instructions_2', None)
        summary = self.request.POST.get('summary', None)
        project = Project.objects.create(author=request.user,
                                         course=request.course,
                                         title=self.get_title(),
                                         project_type=project_type,
                                         response_view_policy=response_policy,
                                         body=body,
                                         due_date=due_date,
                                         custom_instructions_1=instructions1,
                                         custom_instructions_2=instructions2,
                                         summary=summary)

        project.participants.add(request.user)

        item_id = request.POST.get('item', None)
        project.create_or_update_item(item_id)

        policy = request.POST.get('publish', PUBLISH_DRAFT[0])
        collaboration = project.create_or_update_collaboration(policy)

        DiscussionIndex.update_class_references(project.body, None, None,
                                                collaboration, project.author)

        parent_id = request.POST.get('parent', None)
        project.set_parent(parent_id)

        if project_type == PROJECT_TYPE_SEQUENCE_ASSIGNMENT:
            messages.add_message(request, messages.SUCCESS,
                                 self.get_confirmation_message(policy))

        if not request.is_ajax():
            return HttpResponseRedirect(project.get_absolute_url())
        else:
            is_faculty = request.course.is_faculty(request.user)
            can_edit = project.can_edit(request.course, request.user)

            resource = ProjectResource(record_viewer=request.user,
                                       is_viewer_faculty=is_faculty,
                                       editable=can_edit)
            project_context = resource.render_one(request, project)
            project_context['editing'] = True

            data = {
                'panel_state': 'open',
                'template': 'project',
                'context': project_context
            }

            return self.render_to_json_response(data)
コード例 #4
0
    def get(self, request, project_id):
        project = get_object_or_404(Project, id=project_id)
        if not project.visible(request):
            return HttpResponseForbidden("forbidden")

        resource = ProjectResource(record_viewer=request.user,
                                   is_viewer_faculty=self.is_viewer_faculty,
                                   editable=project.can_edit(request))
        context = resource.render_one(request, project)
        return self.render_to_json_response(context)
コード例 #5
0
ファイル: views.py プロジェクト: coati-00/mediathread
    def get(self, request, project_id):
        project = get_object_or_404(Project, id=project_id)
        if not project.visible(request):
            return HttpResponseForbidden("forbidden")

        resource = ProjectResource(record_viewer=request.user,
                                   is_viewer_faculty=self.is_viewer_faculty,
                                   editable=project.can_edit(request))
        context = resource.render_one(request, project)
        return self.render_to_json_response(context)
コード例 #6
0
ファイル: views.py プロジェクト: c0cky/mediathread
    def get(self, request, project_id):
        project = get_object_or_404(Project, id=project_id)

        can_edit = project.can_edit(request.course, request.user)

        resource = ProjectResource(record_viewer=request.user,
                                   is_viewer_faculty=self.is_viewer_faculty,
                                   editable=can_edit)
        context = resource.render_one(request, project)
        return self.render_to_json_response(context)
コード例 #7
0
    def get(self, request, project_id):
        project = get_object_or_404(Project, id=project_id)

        can_edit = project.can_edit(request.course, request.user)

        resource = ProjectResource(record_viewer=request.user,
                                   is_viewer_faculty=self.is_viewer_faculty,
                                   editable=can_edit)
        context = resource.render_one(request, project)
        return self.render_to_json_response(context)
コード例 #8
0
ファイル: views.py プロジェクト: ccnmtl/mediathread
    def post(self, request):
        project_type = request.POST.get('project_type', 'composition')
        body = request.POST.get('body', '')
        response_policy = request.POST.get('response_view_policy', 'always')
        due_date = self.format_date(self.request.POST.get('due_date', None))
        instructions1 = self.request.POST.get('custom_instructions_1', None)
        instructions2 = self.request.POST.get('custom_instructions_2', None)
        summary = self.request.POST.get('summary', None)
        project = Project.objects.create(
            author=request.user, course=request.course, title=self.get_title(),
            project_type=project_type, response_view_policy=response_policy,
            body=body, due_date=due_date, custom_instructions_1=instructions1,
            custom_instructions_2=instructions2, summary=summary)

        project.participants.add(request.user)

        item_id = request.POST.get('item', None)
        project.create_or_update_item(item_id)

        policy = request.POST.get('publish', PUBLISH_DRAFT[0])
        collaboration = project.create_or_update_collaboration(policy)

        DiscussionIndex.update_class_references(
            project.body, None, None, collaboration, project.author)

        parent_id = request.POST.get('parent', None)
        project.set_parent(parent_id)

        if project_type == PROJECT_TYPE_SEQUENCE_ASSIGNMENT:
            messages.add_message(request, messages.SUCCESS,
                                 self.get_confirmation_message(policy))

        if not request.is_ajax():
            return HttpResponseRedirect(project.get_absolute_url())
        else:
            is_faculty = request.course.is_faculty(request.user)
            can_edit = project.can_edit(request.course, request.user)

            resource = ProjectResource(record_viewer=request.user,
                                       is_viewer_faculty=is_faculty,
                                       editable=can_edit)
            project_context = resource.render_one(request, project)
            project_context['editing'] = True

            data = {'panel_state': 'open',
                    'template': 'project',
                    'context': project_context}

            return self.render_to_json_response(data)
コード例 #9
0
ファイル: views.py プロジェクト: avorio/mediathread
    def post(self, request):
        project = Project.objects.create(author=request.user,
                                         course=request.course,
                                         title="Untitled")

        project.participants.add(request.user)

        policy_name = request.POST.get('publish', 'PrivateEditorsAreOwners')
        project.create_or_update_collaboration(policy_name)

        parent = request.POST.get("parent", None)
        if parent is not None:
            parent = get_object_or_404(Project, pk=parent)

            collab = parent.get_collaboration()
            if collab.permission_to("add_child", request.course,
                                    request.user):
                collab.append_child(project)

        if not request.is_ajax():
            return HttpResponseRedirect(project.get_absolute_url())
        else:
            is_faculty = request.course.is_faculty(request.user)
            can_edit = project.can_edit(request.course, request.user)

            resource = ProjectResource(record_viewer=request.user,
                                       is_viewer_faculty=is_faculty,
                                       editable=can_edit)
            project_context = resource.render_one(request, project)
            project_context['editing'] = True

            data = {'panel_state': 'open',
                    'template': 'project',
                    'context': project_context}

            return self.render_to_json_response(data)
コード例 #10
0
    def post(self, request):
        project = Project.objects.create(author=request.user,
                                         course=request.course,
                                         title="Untitled")
        project.collaboration(request, sync_group=True)

        parent = request.POST.get("parent")
        if parent is not None:
            try:
                parent = Project.objects.get(pk=parent)

                parent_collab = parent.collaboration(request)
                if parent_collab.permission_to("add_child", request):
                    parent_collab.append_child(project)

            except Project.DoesNotExist:
                parent = None
                # @todo -- an error has occurred

        if not request.is_ajax():
            return HttpResponseRedirect(project.get_absolute_url())
        else:
            is_faculty = request.course.is_faculty(request.user)
            resource = ProjectResource(record_viewer=request.user,
                                       is_viewer_faculty=is_faculty,
                                       editable=project.can_edit(request))
            project_context = resource.render_one(request, project)
            project_context['editing'] = True

            data = {
                'panel_state': 'open',
                'template': 'project',
                'context': project_context
            }

            return self.render_to_json_response(data)
コード例 #11
0
def project_workspace(request, project_id, feedback=None):
    """
    A multi-panel editable view for the specified project
    Legacy note: Ideally, this function would be named project_view but
    StructuredCollaboration requires the view name
    to be  <class>-view to do a reverse lookup

    Panel 1: Parent Assignment (if applicable)
    Panel 2: Project
    Panel 3: Instructor Feedback (if applicable & exists)

    Keyword arguments:
    project_id -- the model id
    """
    project = get_object_or_404(Project, pk=project_id)

    if not project.can_read(request):
        return HttpResponseForbidden("forbidden")

    show_feedback = feedback == "feedback"
    data = {
        'space_owner': request.user.username,
        'show_feedback': show_feedback
    }

    if not request.is_ajax():
        data['project'] = project
        return render_to_response('projects/project.html',
                                  data,
                                  context_instance=RequestContext(request))
    else:
        panels = []

        vocabulary = VocabularyResource().render_list(
            request, Vocabulary.objects.get_for_object(request.course))

        owners = UserResource().render_list(request, request.course.members)

        is_faculty = request.course.is_faculty(request.user)
        can_edit = project.can_edit(request)
        feedback_discussion = project.feedback_discussion() \
            if is_faculty or can_edit else None

        # Project Parent (assignment) if exists
        parent_assignment = project.assignment()
        if parent_assignment:
            resource = ProjectResource(
                record_viewer=request.user,
                is_viewer_faculty=is_faculty,
                editable=parent_assignment.can_edit(request))
            assignment_ctx = resource.render_one(request, parent_assignment)

            panel = {
                'is_faculty':
                is_faculty,
                'panel_state':
                "open" if (project.title == "Untitled"
                           and len(project.body) == 0) else "closed",
                'subpanel_state':
                'closed',
                'context':
                assignment_ctx,
                'owners':
                owners,
                'vocabulary':
                vocabulary,
                'template':
                'project'
            }
            panels.append(panel)

        # Requested project, can be either an assignment or composition
        resource = ProjectResource(record_viewer=request.user,
                                   is_viewer_faculty=is_faculty,
                                   editable=can_edit)
        project_context = resource.render_one(request, project)

        # only editing if it's new
        project_context['editing'] = \
            True if can_edit and len(project.body) < 1 else False

        project_context['create_instructor_feedback'] = \
            is_faculty and parent_assignment and not feedback_discussion

        panel = {
            'is_faculty': is_faculty,
            'panel_state': 'closed' if show_feedback else 'open',
            'context': project_context,
            'template': 'project',
            'owners': owners,
            'vocabulary': vocabulary
        }
        panels.append(panel)

        # Project Response -- if the requested project is an assignment
        # This is primarily a student view. The student's response should
        # pop up automatically when the parent assignment is viewed.
        if project.is_assignment(request):
            responses = project.responses_by(request, request.user)
            if len(responses) > 0:
                response = responses[0]
                response_can_edit = response.can_edit(request)
                resource = ProjectResource(record_viewer=request.user,
                                           is_viewer_faculty=is_faculty,
                                           editable=response_can_edit)
                response_context = resource.render_one(request, response)

                panel = {
                    'is_faculty': is_faculty,
                    'panel_state': 'closed',
                    'context': response_context,
                    'template': 'project',
                    'owners': owners,
                    'vocabulary': vocabulary
                }
                panels.append(panel)

                if not feedback_discussion and response_can_edit:
                    feedback_discussion = response.feedback_discussion()

        data['panels'] = panels

        # If feedback exists for the requested project
        if feedback_discussion:
            # 3rd pane is the instructor feedback, if it exists
            panel = {
                'panel_state': 'open' if show_feedback else 'closed',
                'panel_state_label': "Instructor Feedback",
                'template': 'discussion',
                'owners': owners,
                'vocabulary': vocabulary,
                'context': threaded_comment_json(request, feedback_discussion)
            }
            panels.append(panel)

        # Create a place for asset editing
        panel = {
            'panel_state': 'closed',
            'panel_state_label': "Item Details",
            'template': 'asset_quick_edit',
            'update_history': False,
            'owners': owners,
            'vocabulary': vocabulary,
            'context': {
                'type': 'asset'
            }
        }
        panels.append(panel)

        return HttpResponse(json.dumps(data, indent=2),
                            mimetype='application/json')
コード例 #12
0
def project_view_readonly(request, project_id, version_number=None):
    """
    A single panel read-only view of the specified project/version combination.
    No assignment, response or feedback access/links.
    Regular access conventions apply. For example, if the project is "private"
    an HTTPResponseForbidden will be returned.

    Used for reviewing old project versions and public project access.

    Keyword arguments:
    project_id -- the model id
    version_number -- a specific project version or
    None for the current version

    """

    project = get_object_or_404(Project, pk=project_id)

    if not project.can_read(request):
        return HttpResponseForbidden("forbidden")

    data = {'space_owner': request.user.username}

    course = request.course
    if not course:
        # public view
        course = request.collaboration_context.content_object
        public_url = project.public_url()
    else:
        # versioned view
        public_url = reverse('project-view-readonly',
                             kwargs={
                                 'project_id': project.id,
                                 'version_number': version_number
                             })

    if not request.is_ajax():
        data['project'] = project
        data['version'] = version_number
        data['public_url'] = public_url
        return render_to_response('projects/project.html',
                                  data,
                                  context_instance=RequestContext(request))
    else:
        ProjectVersion = get_model('projects', 'projectversion')

        if version_number:
            version = get_object_or_404(ProjectVersion,
                                        versioned_id=project_id,
                                        version_number=version_number)

            project = version.instance()

        panels = []

        # Requested project, either assignment or composition
        request.public = True

        resource = ProjectResource(record_viewer=request.user,
                                   is_viewer_faculty=False,
                                   editable=False)
        project_context = resource.render_one(request, project, version_number)
        panel = {
            'panel_state': 'open',
            'panel_state_label': "Version View",
            'context': project_context,
            'template': 'project'
        }
        panels.append(panel)

        data['panels'] = panels

        return HttpResponse(json.dumps(data, indent=2),
                            mimetype='application/json')
コード例 #13
0
    def get(self, request, *args, **kwargs):
        project = get_object_or_404(Project, pk=kwargs.get('project_id', None))
        assignment = project.assignment()
        if not assignment or not assignment.is_essay_assignment():
            return HttpResponseForbidden('')

        panels = []

        lst = Vocabulary.objects.filter(course=request.course)
        lst = lst.prefetch_related('term_set')
        vocabulary = VocabularyResource().render_list(request, lst)

        owners = UserResource().render_list(request, request.course.members)

        is_faculty = request.course.is_faculty(request.user)
        can_edit = project.can_edit(request.course, request.user)
        feedback_discussion = project.feedback_discussion() \
            if is_faculty or can_edit else None

        parent = project.assignment()

        # Requested project, can be either an assignment or composition
        resource = ProjectResource(record_viewer=request.user,
                                   is_viewer_faculty=is_faculty,
                                   editable=can_edit)
        project_context = resource.render_one(request, project)

        # only editing if it's new
        project_context['editing'] = \
            True if can_edit and len(project.body) < 1 else False

        project_context['create_instructor_feedback'] = \
            is_faculty and parent and not feedback_discussion

        project_revisions_url = reverse('project-revisions',
                                        args=[request.course.pk, project.id])

        panel = {
            'is_faculty':
            is_faculty,
            'show_feedback':
            feedback_discussion is not None,
            'create_feedback_url':
            reverse('discussion-create', args=[request.course.pk]),
            'project_revisions_url':
            project_revisions_url,
            'context':
            project_context,
            'template':
            'project_response',
            'owners':
            owners,
            'vocabulary':
            vocabulary
        }
        panels.append(panel)

        # If feedback exists for the requested project
        if feedback_discussion:
            # 3rd pane is the instructor feedback, if it exists
            panel = {
                'template': 'project_feedback',
                'owners': owners,
                'vocabulary': vocabulary,
                'context': threaded_comment_json(request, feedback_discussion)
            }
            panels.append(panel)

        # Create a place for asset editing
        panel = {
            'template': 'asset_quick_edit',
            'update_history': False,
            'owners': owners,
            'vocabulary': vocabulary,
            'context': {
                'type': 'asset'
            }
        }
        panels.append(panel)

        data = {'space_owner': request.user.username, 'panels': panels}

        return self.render_to_json_response(data)
コード例 #14
0
ファイル: views.py プロジェクト: coati-00/mediathread
def project_workspace(request, project_id, feedback=None):
    """
    A multi-panel editable view for the specified project
    Legacy note: Ideally, this function would be named project_view but
    StructuredCollaboration requires the view name
    to be  <class>-view to do a reverse lookup

    Panel 1: Parent Assignment (if applicable)
    Panel 2: Project
    Panel 3: Instructor Feedback (if applicable & exists)

    Keyword arguments:
    project_id -- the model id
    """
    project = get_object_or_404(Project, pk=project_id)

    if not project.can_read(request):
        return HttpResponseForbidden("forbidden")

    show_feedback = feedback == "feedback"
    data = {'space_owner': request.user.username,
            'show_feedback': show_feedback}

    if not request.is_ajax():
        data['project'] = project
        return render_to_response('projects/project.html',
                                  data,
                                  context_instance=RequestContext(request))
    else:
        panels = []

        vocabulary = VocabularyResource().render_list(
            request, Vocabulary.objects.get_for_object(request.course))

        owners = UserResource().render_list(request, request.course.members)

        is_faculty = request.course.is_faculty(request.user)
        can_edit = project.can_edit(request)
        feedback_discussion = project.feedback_discussion() \
            if is_faculty or can_edit else None

        # Project Parent (assignment) if exists
        parent_assignment = project.assignment()
        if parent_assignment:
            resource = ProjectResource(
                record_viewer=request.user, is_viewer_faculty=is_faculty,
                editable=parent_assignment.can_edit(request))
            assignment_ctx = resource.render_one(request, parent_assignment)

            panel = {'is_faculty': is_faculty,
                     'panel_state': "open" if (project.title == "Untitled" and
                                               len(project.body) == 0)
                     else "closed",
                     'subpanel_state': 'closed',
                     'context': assignment_ctx,
                     'owners': owners,
                     'vocabulary': vocabulary,
                     'template': 'project'}
            panels.append(panel)

        # Requested project, can be either an assignment or composition
        resource = ProjectResource(record_viewer=request.user,
                                   is_viewer_faculty=is_faculty,
                                   editable=can_edit)
        project_context = resource.render_one(request, project)

        # only editing if it's new
        project_context['editing'] = \
            True if can_edit and len(project.body) < 1 else False

        project_context['create_instructor_feedback'] = \
            is_faculty and parent_assignment and not feedback_discussion

        panel = {'is_faculty': is_faculty,
                 'panel_state': 'closed' if show_feedback else 'open',
                 'context': project_context,
                 'template': 'project',
                 'owners': owners,
                 'vocabulary': vocabulary}
        panels.append(panel)

        # Project Response -- if the requested project is an assignment
        # This is primarily a student view. The student's response should
        # pop up automatically when the parent assignment is viewed.
        if project.is_assignment(request):
            responses = project.responses_by(request, request.user)
            if len(responses) > 0:
                response = responses[0]
                response_can_edit = response.can_edit(request)
                resource = ProjectResource(record_viewer=request.user,
                                           is_viewer_faculty=is_faculty,
                                           editable=response_can_edit)
                response_context = resource.render_one(request, response)

                panel = {'is_faculty': is_faculty,
                         'panel_state': 'closed',
                         'context': response_context,
                         'template': 'project',
                         'owners': owners,
                         'vocabulary': vocabulary}
                panels.append(panel)

                if not feedback_discussion and response_can_edit:
                    feedback_discussion = response.feedback_discussion()

        data['panels'] = panels

        # If feedback exists for the requested project
        if feedback_discussion:
            # 3rd pane is the instructor feedback, if it exists
            panel = {'panel_state': 'open' if show_feedback else 'closed',
                     'panel_state_label': "Instructor Feedback",
                     'template': 'discussion',
                     'owners': owners,
                     'vocabulary': vocabulary,
                     'context': threaded_comment_json(request,
                                                      feedback_discussion)}
            panels.append(panel)

        # Create a place for asset editing
        panel = {'panel_state': 'closed',
                 'panel_state_label': "Item Details",
                 'template': 'asset_quick_edit',
                 'update_history': False,
                 'owners': owners,
                 'vocabulary': vocabulary,
                 'context': {'type': 'asset'}}
        panels.append(panel)

        return HttpResponse(json.dumps(data, indent=2),
                            mimetype='application/json')
コード例 #15
0
ファイル: views.py プロジェクト: coati-00/mediathread
def project_view_readonly(request, project_id, version_number=None):
    """
    A single panel read-only view of the specified project/version combination.
    No assignment, response or feedback access/links.
    Regular access conventions apply. For example, if the project is "private"
    an HTTPResponseForbidden will be returned.

    Used for reviewing old project versions and public project access.

    Keyword arguments:
    project_id -- the model id
    version_number -- a specific project version or
    None for the current version

    """

    project = get_object_or_404(Project, pk=project_id)

    if not project.can_read(request):
        return HttpResponseForbidden("forbidden")

    data = {'space_owner': request.user.username}

    course = request.course
    if not course:
        # public view
        course = request.collaboration_context.content_object
        public_url = project.public_url()
    else:
        # versioned view
        public_url = reverse('project-view-readonly',
                             kwargs={'project_id': project.id,
                                     'version_number': version_number})

    if not request.is_ajax():
        data['project'] = project
        data['version'] = version_number
        data['public_url'] = public_url
        return render_to_response('projects/project.html',
                                  data,
                                  context_instance=RequestContext(request))
    else:
        ProjectVersion = get_model('projects', 'projectversion')

        if version_number:
            version = get_object_or_404(ProjectVersion,
                                        versioned_id=project_id,
                                        version_number=version_number)

            project = version.instance()

        panels = []

        # Requested project, either assignment or composition
        request.public = True

        resource = ProjectResource(record_viewer=request.user,
                                   is_viewer_faculty=False,
                                   editable=False)
        project_context = resource.render_one(request, project, version_number)
        panel = {'panel_state': 'open',
                 'panel_state_label': "Version View",
                 'context': project_context,
                 'template': 'project'}
        panels.append(panel)

        data['panels'] = panels

        return HttpResponse(json.dumps(data, indent=2),
                            mimetype='application/json')
コード例 #16
0
    def get(self, request, *args, **kwargs):
        project = get_object_or_404(Project, pk=kwargs.get('project_id', None))
        data = {'space_owner': request.user.username}

        if not request.is_ajax():
            self.template_name = 'projects/composition.html'
            data['project'] = project
            return self.render_to_response(data)
        else:
            panels = []

            lst = Vocabulary.objects.filter(course=request.course)
            lst = lst.prefetch_related('term_set')
            vocabulary = VocabularyResource().render_list(request, lst)

            owners = UserResource().render_list(request,
                                                request.course.members)

            is_faculty = request.course.is_faculty(request.user)
            can_edit = project.can_edit(request.course, request.user)

            # Requested project, can be either an assignment or composition
            resource = ProjectResource(record_viewer=request.user,
                                       is_viewer_faculty=is_faculty,
                                       editable=can_edit)
            project_context = resource.render_one(request, project)

            # only editing if it's new
            project_context['editing'] = \
                True if can_edit and len(project.body) < 1 else False

            project_context['create_instructor_feedback'] = False

            project_revisions_url = reverse(
                'project-revisions', args=[request.course.pk, project.id])

            panel = {
                'is_faculty': is_faculty,
                'context': project_context,
                'template': 'project',
                'owners': owners,
                'project_revisions_url': project_revisions_url,
                'vocabulary': vocabulary
            }
            panels.append(panel)

            data['panels'] = panels

            # Create a place for asset editing
            panel = {
                'template': 'asset_quick_edit',
                'update_history': False,
                'owners': owners,
                'vocabulary': vocabulary,
                'context': {
                    'type': 'asset'
                }
            }
            panels.append(panel)

            return self.render_to_json_response(data)
コード例 #17
0
ファイル: views.py プロジェクト: c0cky/mediathread
    def get(self, request, project_id, version_number=None):
        """
        A single panel read-only view of the specified project/version combo.
        No assignment, response or feedback access/links.
        Regular access conventions apply. For example, if the project is
        "private" an HTTPResponseForbidden will be returned.

        Used for reviewing old project versions and public project access.

        Keyword arguments:
        project_id -- the model id
        version_number -- a specific project version or
        None for the current version

        """

        project = get_object_or_404(Project, pk=project_id)

        data = {'space_owner': request.user.username}

        if not request.is_ajax():
            course = request.course
            if not course:
                public_url = project.public_url()
            else:
                # versioned view
                public_url = reverse('project-view-readonly',
                                     kwargs={'project_id': project.id,
                                             'version_number': version_number})

            data['project'] = project
            data['version'] = version_number
            data['public_url'] = public_url
            return self.render_to_response(data)
        else:
            if version_number:
                version = get_object_or_404(Version,
                                            object_id=str(project.id),
                                            revision_id=version_number)
                project = version.object_version.object

            panels = []

            is_faculty = (self.request.course and
                          self.request.course.is_faculty(request.user))

            # Requested project, either assignment or composition
            request.public = True

            resource = ProjectResource(record_viewer=request.user,
                                       is_viewer_faculty=False,
                                       editable=False)
            project_context = resource.render_one(request, project,
                                                  version_number)
            panel = {'panel_state': 'open',
                     'panel_state_label': "Version View",
                     'context': project_context,
                     'is_faculty': is_faculty,
                     'template': 'project'}
            panels.append(panel)

            data['panels'] = panels

            return self.render_to_json_response(data)
コード例 #18
0
    def get(self, request, project_id, version_number=None):
        """
        A single panel read-only view of the specified project/version combo.
        No assignment, response or feedback access/links.
        Regular access conventions apply. For example, if the project is
        "private" an HTTPResponseForbidden will be returned.

        Used for reviewing old project versions and public project access.

        Keyword arguments:
        project_id -- the model id
        version_number -- a specific project version or
        None for the current version

        """

        project = get_object_or_404(Project, pk=project_id)

        data = {'space_owner': request.user.username}

        if not request.is_ajax():
            course = request.course
            if not course:
                public_url = project.public_url()
            else:
                # versioned view
                public_url = reverse('project-view-readonly',
                                     kwargs={'project_id': project.id,
                                             'version_number': version_number})

            data['project'] = project
            data['version'] = version_number
            data['public_url'] = public_url
            return self.render_to_response(data)
        else:
            if version_number:
                version = get_object_or_404(Version,
                                            object_id=str(project.id),
                                            revision_id=version_number)
                project = version._object_version.object

            panels = []

            is_faculty = (self.request.course and
                          self.request.course.is_faculty(request.user))

            # Requested project, either assignment or composition
            request.public = True

            resource = ProjectResource(record_viewer=request.user,
                                       is_viewer_faculty=False,
                                       editable=False)
            project_context = resource.render_one(request, project,
                                                  version_number)
            panel = {'panel_state': 'open',
                     'panel_state_label': "Version View",
                     'context': project_context,
                     'is_faculty': is_faculty,
                     'template': 'project'}
            panels.append(panel)

            data['panels'] = panels

            return self.render_to_json_response(data)