Beispiel #1
0
def threaded_comment_json(request, comment):
    viewer = request.user
    coll = ContentType.objects.get_for_model(Collaboration)
    all_comments = ThreadedComment.objects.filter(
        content_type=coll,
        object_pk=comment.content_object.pk,
        site__pk=settings.SITE_ID)
    all_comments = fill_tree(all_comments)
    all_comments = list(annotate_tree_properties(all_comments))

    rand = ''.join([choice(letters) for i in range(5)])
    citations = threaded_comment_citations(all_comments, viewer)

    asset_resource = AssetResource()
    sherd_resource = SherdNoteResource()

    return {
        'type':
        'discussion',
        'form':
        comments.get_form()(comment.content_object).__unicode__(),
        'editing':
        True,
        'can_edit':
        True,
        'discussion': {
            'id':
            comment.id,
            'max_length':
            COMMENT_MAX_LENGTH,
            'thread': [{
                'open':
                obj.open if hasattr(obj, "open") else None,
                'close':
                [i for i in obj.close] if hasattr(obj, "close") else None,
                'id':
                obj.id,
                'author':
                obj.name,
                'author_username':
                obj.user.username,
                'submit_date':
                pretty_date(obj.submit_date),
                'title':
                obj.title,
                'content':
                obj.comment,
                'can_edit':
                True if obj.user == viewer else False
            } for obj in all_comments]
        },
        'assets':
        dict([('%s_%s' % (rand, ann.asset.pk),
               asset_resource.render_one(request, ann.asset))
              for ann in citations if (ann.title != "Annotation Deleted"
                                       and ann.title != 'Asset Deleted')]),
        'annotations':
        [sherd_resource.render_one(request, ann, rand) for ann in citations],
    }
Beispiel #2
0
    def related_assets_notes(self, request, project):

        asset_resource = AssetResource()
        sherd_resource = SherdNoteResource()

        rand = ''.join([choice(letters) for i in range(5)])

        assets = {}
        notes = []
        for note in project.citations():
            notes.append(sherd_resource.render_one(request, note, rand))
            if (note.title not in ["Annotation Deleted", 'Asset Deleted']):
                key = '%s_%s' % (rand, note.asset.pk)
                if key not in assets.keys():
                    assets[key] = \
                        asset_resource.render_one(request, note.asset)

        return assets, notes
Beispiel #3
0
    def related_assets_notes(self, request, project):

        asset_resource = AssetResource()
        sherd_resource = SherdNoteResource()

        rand = ''.join([choice(ascii_letters) for i in range(5)])  # nosec

        assets = {}
        notes = []
        for note in project.citations():
            notes.append(sherd_resource.render_one(request, note, rand))
            if (note.title not in ["Annotation Deleted", 'Asset Deleted']):
                key = '%s_%s' % (rand, note.asset.pk)
                if key not in assets.keys():
                    assets[key] = \
                        asset_resource.render_one(request, note.asset)

        return assets, notes
Beispiel #4
0
def threaded_comment_json(request, comment):
    viewer = request.user
    coll = ContentType.objects.get_for_model(Collaboration)
    all_comments = ThreadedComment.objects.filter(
        content_type=coll, object_pk=comment.content_object.pk,
        site__pk=settings.SITE_ID)
    all_comments = fill_tree(all_comments)
    all_comments = list(annotate_tree_properties(all_comments))

    rand = ''.join([choice(letters) for i in range(5)])
    citations = threaded_comment_citations(all_comments, viewer)

    asset_resource = AssetResource()
    sherd_resource = SherdNoteResource()

    return {
        'type': 'discussion',
        'form': django_comments.get_form()(
            comment.content_object).__unicode__(),
        'editing': True,
        'can_edit': True,
        'discussion': {
            'id': comment.id,
            'max_length': COMMENT_MAX_LENGTH,
            'thread': [{'open': obj.open if hasattr(obj, "open") else None,
                        'close': [i for i in obj.close]
                        if hasattr(obj, "close") else None,
                        'id': obj.id,
                        'author': obj.name,
                        'author_username': obj.user.username,
                        'submit_date': pretty_date(obj.submit_date),
                        'title': obj.title,
                        'content': obj.comment,
                        'can_edit': True if obj.user == viewer else False}
                       for obj in all_comments]
        },
        'assets': dict([('%s_%s' % (rand, ann.asset.pk),
                        asset_resource.render_one(request, ann.asset))
                        for ann in citations
                        if (ann.title != "Annotation Deleted" and
                            ann.title != 'Asset Deleted')]),
        'annotations': [sherd_resource.render_one(request, ann, rand)
                        for ann in citations],
    }
Beispiel #5
0
    def render_one(self, request, project, version_number=None):
        bundle = self.build_bundle(obj=project, request=request)
        dehydrated = self.full_dehydrate(bundle)
        project_ctx = self._meta.serializer.to_simple(dehydrated, None)
        project_ctx["body"] = project.body
        project_ctx["public_url"] = project.public_url()
        project_ctx["current_version"] = version_number
        project_ctx["visibility"] = project.visibility_short()
        project_ctx["type"] = "assignment" if project.is_assignment(request) else "composition"

        rand = "".join([choice(letters) for i in range(5)])

        asset_resource = AssetResource()
        sherd_resource = SherdNoteResource()

        assets = {}
        notes = []
        for note in project.citations():
            notes.append(sherd_resource.render_one(request, note, rand))
            if note.title not in ["Annotation Deleted", "Asset Deleted"]:
                key = "%s_%s" % (rand, note.asset.pk)
                if key not in assets.keys():
                    assets[key] = asset_resource.render_one(request, note.asset)

        data = {
            "project": project_ctx,
            "type": "project",
            "can_edit": self.editable,
            "annotations": notes,
            "assets": assets,
        }

        data["responses"] = []
        for response in project.responses(request):
            if response.can_read(request):
                obj = {
                    "url": response.get_absolute_url(),
                    "title": response.title,
                    "modified": response.modified.strftime(self.date_fmt),
                    "attribution_list": [],
                }

                last = len(response.attribution_list()) - 1
                for idx, author in enumerate(response.attribution_list()):
                    obj["attribution_list"].append({"name": get_public_name(author, request), "last": idx == last})

                data["responses"].append(obj)
        data["response_count"] = len(data["responses"])

        my_responses = []
        for response in project.responses_by(request, request.user):
            obj = {
                "url": response.get_absolute_url(),
                "title": response.title,
                "modified": response.modified.strftime(self.date_fmt),
                "attribution_list": [],
            }

            last = len(response.attribution_list()) - 1
            for idx, author in enumerate(response.attribution_list()):
                obj["attribution_list"].append({"name": get_public_name(author, request), "last": idx == last})

            my_responses.append(obj)

        if len(my_responses) == 1:
            data["my_response"] = my_responses[0]
        elif len(my_responses) > 1:
            data["my_responses"] = my_responses
            data["my_responses_count"] = len(my_responses)

        if project.is_participant(request.user):
            data["revisions"] = [
                {
                    "version_number": v.version_number,
                    "versioned_id": v.versioned_id,
                    "author": get_public_name(v.instance().author, request),
                    "modified": v.modified.strftime("%m/%d/%y %I:%M %p"),
                }
                for v in project.versions.order_by("-change_time")
            ]

        if self.editable:
            projectform = ProjectForm(request, instance=project)
            data["form"] = {
                "participants": projectform["participants"].__unicode__(),
                "publish": projectform["publish"].__unicode__(),
            }

        return data
Beispiel #6
0
    def render_one(self, request, project, version_number=None):
        bundle = self.build_bundle(obj=project, request=request)
        dehydrated = self.full_dehydrate(bundle)
        project_ctx = self._meta.serializer.to_simple(dehydrated, None)
        project_ctx['body'] = project.body
        project_ctx['public_url'] = project.public_url()
        project_ctx['current_version'] = version_number
        project_ctx['visibility'] = project.visibility_short()
        project_ctx['type'] = ('assignment' if project.is_assignment(request)
                               else 'composition')

        rand = ''.join([choice(letters) for i in range(5)])

        asset_resource = AssetResource()
        sherd_resource = SherdNoteResource()

        assets = {}
        notes = []
        for note in project.citations():
            notes.append(sherd_resource.render_one(request, note, rand))
            if (note.title not in ["Annotation Deleted", 'Asset Deleted']):
                key = '%s_%s' % (rand, note.asset.pk)
                if key not in assets.keys():
                    assets[key] = \
                        asset_resource.render_one(request, note.asset)

        data = {
            'project': project_ctx,
            'type': 'project',
            'can_edit': self.editable,
            'annotations': notes,
            'assets': assets
        }

        data['responses'] = []
        for response in project.responses(request):
            if response.can_read(request):
                obj = {
                    'url': response.get_absolute_url(),
                    'title': response.title,
                    'modified': response.modified.strftime(self.date_fmt),
                    'attribution_list': []
                }

                last = len(response.attribution_list()) - 1
                for idx, author in enumerate(response.attribution_list()):
                    obj['attribution_list'].append({
                        'name':
                        get_public_name(author, request),
                        'last':
                        idx == last
                    })

                data['responses'].append(obj)
        data['response_count'] = len(data['responses'])

        my_responses = []
        for response in project.responses_by(request, request.user):
            obj = {
                'url': response.get_absolute_url(),
                'title': response.title,
                'modified': response.modified.strftime(self.date_fmt),
                'attribution_list': []
            }

            last = len(response.attribution_list()) - 1
            for idx, author in enumerate(response.attribution_list()):
                obj['attribution_list'].append({
                    'name':
                    get_public_name(author, request),
                    'last':
                    idx == last
                })

            my_responses.append(obj)

        if len(my_responses) == 1:
            data['my_response'] = my_responses[0]
        elif len(my_responses) > 1:
            data['my_responses'] = my_responses
            data['my_responses_count'] = len(my_responses)

        if project.is_participant(request.user):
            data['revisions'] = [{
                'version_number':
                v.version_number,
                'versioned_id':
                v.versioned_id,
                'author':
                get_public_name(v.instance().author, request),
                'modified':
                v.modified.strftime("%m/%d/%y %I:%M %p")
            } for v in project.versions.order_by('-change_time')]

        if self.editable:
            projectform = ProjectForm(request, instance=project)
            data['form'] = {
                'participants': projectform['participants'].__unicode__(),
                'publish': projectform['publish'].__unicode__()
            }

        return data