Exemplo n.º 1
0
 def send_document(self):
     response = dict()
     response['type'] = 'doc_data'
     doc_owner = self.doc['db'].owner
     response['doc_info'] = {
         'id': self.doc['id'],
         'is_owner': self.user_info.is_owner,
         'access_rights': self.user_info.access_rights,
         'owner': {
             'id': doc_owner.id,
             'name': doc_owner.readable_name,
             'username': doc_owner.username,
             'avatar': get_user_avatar_url(doc_owner),
             'team_members': []
         }
     }
     response['doc'] = {
         'v': self.doc['version'],
         'contents': self.doc['contents'],
         'bibliography': self.doc['bibliography'],
         'template': self.doc['template'],
         'images': {}
     }
     response['time'] = int(time()) * 1000
     for dimage in DocumentImage.objects.filter(document_id=self.doc['id']):
         image = dimage.image
         field_obj = {
             'id': image.id,
             'title': dimage.title,
             'image': image.image.url,
             'file_type': image.file_type,
             'added': mktime(image.added.timetuple()) * 1000,
             'checksum': image.checksum,
             'cats': []
         }
         if image.thumbnail:
             field_obj['thumbnail'] = image.thumbnail.url
             field_obj['height'] = image.height
             field_obj['width'] = image.width
         response['doc']['images'][image.id] = field_obj
     if self.user_info.access_rights == 'read-without-comments':
         response['doc']['comments'] = []
     elif self.user_info.access_rights == 'review':
         # Reviewer should only get his/her own comments
         filtered_comments = {}
         for key, value in list(self.doc["comments"].items()):
             if value["user"] == self.user_info.user.id:
                 filtered_comments[key] = value
         response['doc']['comments'] = filtered_comments
     else:
         response['doc']['comments'] = self.doc["comments"]
     for team_member in doc_owner.leader.all():
         tm_object = dict()
         tm_object['id'] = team_member.member.id
         tm_object['name'] = team_member.member.readable_name
         tm_object['username'] = team_member.member.get_username()
         tm_object['avatar'] = get_user_avatar_url(team_member.member)
         response['doc_info']['owner']['team_members'].append(tm_object)
     response['doc_info']['session_id'] = self.id
     self.send_message(response)
Exemplo n.º 2
0
def get_access_rights(request):
    response = {}
    status = 405
    if request.is_ajax() and request.method == 'POST':
        status = 200
        ar_qs = AccessRight.objects.filter(document__owner=request.user)
        in_qs = AccessRightInvite.objects.filter(document__owner=request.user)
        doc_ids = request.POST.getlist('document_ids[]')
        if len(doc_ids) > 0:
            ar_qs = ar_qs.filter(document_id__in=doc_ids)
            in_qs = in_qs.filter(document_id__in=doc_ids)
        access_rights = []
        for ar in ar_qs:
            access_rights.append({
                'document_id': ar.document.id,
                'user_id': ar.user.id,
                'user_name': ar.user.readable_name,
                'rights': ar.rights,
                'avatar': get_user_avatar_url(ar.user)
            })
        response['access_rights'] = access_rights
        invites = []
        for inv in in_qs:
            invites.append({
                'document_id': inv.document.id,
                'email': inv.email,
                'rights': inv.rights
            })
        response['invites'] = invites
    return JsonResponse(response, status=status)
Exemplo n.º 3
0
def get_documentlist(request):
    response = {}
    status = 200
    response['documents'] = documents_list(request)
    response['team_members'] = []
    for team_member in request.user.leader.all():
        tm_object = {}
        tm_object['id'] = team_member.member.id
        tm_object['name'] = team_member.member.readable_name
        tm_object['username'] = team_member.member.get_username()
        tm_object['avatar'] = get_user_avatar_url(team_member.member)
        response['team_members'].append(tm_object)
    serializer = PythonWithURLSerializer()
    doc_styles = serializer.serialize(
        DocumentStyle.objects.filter(
            Q(document_template__user=None) |
            Q(document_template__user=request.user)
        ),
        use_natural_foreign_keys=True,
        fields=['title', 'slug', 'contents', 'documentstylefile_set']
    )
    response['document_styles'] = [obj['fields'] for obj in doc_styles]
    doc_templates = DocumentTemplate.objects.filter(
        Q(user=request.user) | Q(user=None)
    ).order_by(F('user').desc(nulls_first=True))
    response['document_templates'] = {}
    for obj in doc_templates:
        response['document_templates'][obj.import_id] = {
            'title': obj.title,
            'id': obj.id
        }
    return JsonResponse(
        response,
        status=status
    )
Exemplo n.º 4
0
def get_documentlist_js(request):
    response = {}
    status = 405
    if request.is_ajax() and request.method == 'POST':
        status = 200
        response['documents'] = documents_list(request)
        response['team_members'] = []
        for team_member in request.user.leader.all():
            tm_object = {}
            tm_object['id'] = team_member.member.id
            tm_object['name'] = team_member.member.readable_name
            tm_object['username'] = team_member.member.get_username()
            tm_object['avatar'] = get_user_avatar_url(
                team_member.member)['url']
            response['team_members'].append(tm_object)
        serializer = PythonWithURLSerializer()
        export_temps = serializer.serialize(ExportTemplate.objects.all())
        response['export_templates'] = [obj['fields'] for obj in export_temps]
        cit_styles = serializer.serialize(CitationStyle.objects.all())
        response['citation_styles'] = [obj['fields'] for obj in cit_styles]
        cit_locales = serializer.serialize(CitationLocale.objects.all())
        response['citation_locales'] = [obj['fields'] for obj in cit_locales]
        doc_styles = serializer.serialize(DocumentStyle.objects.all(),
                                          use_natural_foreign_keys=True)
        response['document_styles'] = [obj['fields'] for obj in doc_styles]
        response['access_rights'] = get_accessrights(
            AccessRight.objects.filter(document__owner=request.user))
        doc_templates = DocumentTemplate.objects.filter(
            Q(user=request.user) | Q(user=None))
        response['document_templates'] = [{
            'id': obj.id,
            'title': obj.title
        } for obj in doc_templates]

    return JsonResponse(response, status=status)
Exemplo n.º 5
0
def configuration(request):
    """
    Load the configuration options of the page that are request dependent.
    """
    socialaccount_providers = []
    for provider in providers.registry.get_list():
        socialaccount_providers.append({
            'id':
            provider.id,
            'name':
            provider.name,
            'login_url':
            provider.get_login_url(request)
        })
    response = {
        'language': request.LANGUAGE_CODE,
        'socialaccount_providers': socialaccount_providers
    }
    if request.user.is_authenticated:
        response['user'] = {
            'id': request.user.id,
            'username': request.user.username,
            'first_name': request.user.first_name,
            'name': request.user.readable_name,
            'last_name': request.user.last_name,
            'avatar': userutil.get_user_avatar_url(request.user),
            'emails': [],
            'socialaccounts': [],
            'is_authenticated': True
        }

        for emailaddress in request.user.emailaddress_set.all():
            email = {
                'address': emailaddress.email,
            }
            if emailaddress.primary:
                email['primary'] = True
            if emailaddress.verified:
                email['verified'] = True
            response['user']['emails'].append(email)
        for account in request.user.socialaccount_set.all():
            try:
                provider_account = account.get_provider_account()
                response['user']['socialaccounts'].append({
                    'id':
                    account.id,
                    'provider':
                    account.provider,
                    'name':
                    provider_account.to_str()
                })
            except KeyError:
                # Social account provider has been removed.
                pass

    else:
        response['user'] = {'is_authenticated': False}
    return JsonResponse(response, status=200)
Exemplo n.º 6
0
def documents_list(request):
    documents = Document.objects.filter(
        Q(owner=request.user) | Q(accessright__user=request.user),
        listed=True
    ).order_by('-updated')
    output_list = []
    for document in documents:
        if document.owner == request.user:
            access_right = 'write'
        else:
            access_right = AccessRight.objects.get(
                user=request.user,
                document=document
            ).rights
        if (
            request.user.is_staff or
            document.owner == request.user or
            AccessRight.objects.filter(
                document=document,
                user=request.user,
                rights__in=CAN_COMMUNICATE
            ).first()
        ):
            revisions = DocumentRevision.objects.filter(document=document)
            revision_list = []
            for revision in revisions:
                revision_list.append({
                    'date': time.mktime(revision.date.utctimetuple()),
                    'note': revision.note,
                    'file_name': revision.file_name,
                    'pk': revision.pk
                })
        else:
            revision_list = []
        added = time.mktime(document.added.utctimetuple())
        updated = time.mktime(document.updated.utctimetuple())
        is_owner = False
        if document.owner == request.user:
            is_owner = True
        output_list.append({
            'id': document.id,
            'title': document.title,
            'is_owner': is_owner,
            'owner': {
                'id': document.owner.id,
                'name': document.owner.readable_name,
                'avatar': get_user_avatar_url(document.owner)
            },
            'added': added,
            'updated': updated,
            'rights': access_right,
            'revisions': revision_list
        })
    return output_list
Exemplo n.º 7
0
def get_accessrights(ars):
    ret = []
    for ar in ars:
        the_avatar = get_user_avatar_url(ar.user)['url']
        ret.append({
            'document_id': ar.document.id,
            'user_id': ar.user.id,
            'user_name': ar.user.readable_name,
            'rights': ar.rights,
            'avatar': the_avatar
        })
    return ret
Exemplo n.º 8
0
def get_accessrights(ars):
    ret = []
    for ar in ars:
        the_avatar = get_user_avatar_url(ar.user)['url']
        ret.append({
            'document_id': ar.document.id,
            'user_id': ar.user.id,
            'user_name': ar.user.readable_name,
            'rights': ar.rights,
            'avatar': the_avatar
        })
    return ret
Exemplo n.º 9
0
def get_documentlist_js(request):
    response = {}
    status = 405
    if request.is_ajax() and request.method == 'POST':
        status = 200
        response['documents'] = documents_list(request)
        response['team_members'] = []
        for team_member in request.user.leader.all():
            tm_object = {}
            tm_object['id'] = team_member.member.id
            tm_object['name'] = team_member.member.readable_name
            tm_object['username'] = team_member.member.get_username()
            tm_object['avatar'] = get_user_avatar_url(
                team_member.member
            )['url']
            response['team_members'].append(tm_object)
        serializer = PythonWithURLSerializer()
        export_temps = serializer.serialize(
            ExportTemplate.objects.all()
        )
        response['export_templates'] = [obj['fields'] for obj in export_temps]
        cit_styles = serializer.serialize(
            CitationStyle.objects.all()
        )
        response['citation_styles'] = [obj['fields'] for obj in cit_styles]
        cit_locales = serializer.serialize(CitationLocale.objects.all())
        response['citation_locales'] = [obj['fields'] for obj in cit_locales]
        doc_styles = serializer.serialize(
            DocumentStyle.objects.all(),
            use_natural_foreign_keys=True
        )
        response['document_styles'] = [obj['fields'] for obj in doc_styles]
        response['access_rights'] = get_accessrights(
            AccessRight.objects.filter(document__owner=request.user))
        doc_templates = DocumentTemplate.objects.filter(
            Q(user=request.user) | Q(user=None)
        )
        response['document_templates'] = [
            {'id': obj.id, 'title': obj.title} for obj in doc_templates
        ]

    return JsonResponse(
        response,
        status=status
    )
Exemplo n.º 10
0
def documents_list(request):
    documents = Document.objects.filter(
        Q(owner=request.user) | Q(accessright__user=request.user),
        listed=True
    ).order_by('-updated')
    output_list = []
    for document in documents:
        if document.owner == request.user:
            access_right = 'write'
        else:
            access_right = AccessRight.objects.get(
                user=request.user,
                document=document
            ).rights
        revisions = DocumentRevision.objects.filter(document=document)
        revision_list = []
        for revision in revisions:
            revision_list.append({
                'date': time.mktime(revision.date.utctimetuple()),
                'note': revision.note,
                'file_name': revision.file_name,
                'pk': revision.pk
            })

        added = time.mktime(document.added.utctimetuple())
        updated = time.mktime(document.updated.utctimetuple())
        is_owner = False
        if document.owner == request.user:
            is_owner = True
        output_list.append({
            'id': document.id,
            'title': document.title,
            'is_owner': is_owner,
            'owner': {
                'id': document.owner.id,
                'name': document.owner.readable_name,
                'avatar': get_user_avatar_url(document.owner)['url']
            },
            'added': added,
            'updated': updated,
            'rights': access_right,
            'revisions': revision_list
        })
    return output_list
Exemplo n.º 11
0
 def send_participant_list(cls, document_id):
     if document_id in WebSocket.sessions:
         participant_list = []
         for session_id, waiter in list(cls.sessions[
             document_id
         ]['participants'].items()):
             access_rights = waiter.user_info.access_rights
             if access_rights not in CAN_COMMUNICATE:
                 continue
             participant_list.append({
                 'session_id': session_id,
                 'id': waiter.user_info.user.id,
                 'name': waiter.user_info.user.readable_name,
                 'avatar': get_user_avatar_url(waiter.user_info.user)
             })
         message = {
             "participant_list": participant_list,
             "type": 'connections'
         }
         WebSocket.send_updates(message, document_id)
Exemplo n.º 12
0
 def send_participant_list(cls, document_id):
     if document_id in WebSocket.sessions:
         participant_list = []
         for session_id, waiter in list(cls.sessions[
             document_id
         ]['participants'].items()):
             access_rights = waiter.user_info.access_rights
             if access_rights not in CAN_COMMUNICATE:
                 continue
             participant_list.append({
                 'session_id': session_id,
                 'id': waiter.user_info.user.id,
                 'name': waiter.user_info.user.readable_name,
                 'avatar': get_user_avatar_url(waiter.user_info.user)['url']
             })
         message = {
             "participant_list": participant_list,
             "type": 'connections'
         }
         WebSocket.send_updates(message, document_id)
Exemplo n.º 13
0
def get_documentlist(request):
    response = {}
    status = 405
    if request.is_ajax() and request.method == 'POST':
        status = 200
        response['documents'] = documents_list(request)
        response['team_members'] = []
        for team_member in request.user.leader.all():
            tm_object = {}
            tm_object['id'] = team_member.member.id
            tm_object['name'] = team_member.member.readable_name
            tm_object['username'] = team_member.member.get_username()
            '''
            tm_object['avatar'] = get_user_avatar_url(
                team_member.member
            )['url']
            '''
            tm_object['avatar'] = get_user_avatar_url(team_member.member)
            response['team_members'].append(tm_object)
        serializer = PythonWithURLSerializer()
        export_temps = serializer.serialize(
            ExportTemplate.objects.filter(
                Q(document_template__user=None)
                | Q(document_template__user=request.user)),
            fields=['file_type', 'template_file', 'title'])
        response['export_templates'] = [obj['fields'] for obj in export_temps]
        doc_styles = serializer.serialize(
            DocumentStyle.objects.filter(
                Q(document_template__user=None)
                | Q(document_template__user=request.user)),
            use_natural_foreign_keys=True,
            fields=['title', 'slug', 'contents', 'documentstylefile_set'])
        response['document_styles'] = [obj['fields'] for obj in doc_styles]
        doc_templates = DocumentTemplate.objects.filter(
            Q(user=request.user) | Q(user=None))
        response['document_templates'] = [{
            'id': obj.id,
            'title': obj.title
        } for obj in doc_templates]

    return JsonResponse(response, status=status)
Exemplo n.º 14
0
 def send_document(self):
     response = dict()
     response['type'] = 'doc_data'
     doc_owner = self.doc['db'].owner
     response['doc_info'] = {
         'id': self.doc['id'],
         'is_owner': self.user_info.is_owner,
         'access_rights': self.user_info.access_rights,
         'owner': {
             'id': doc_owner.id,
             'name': doc_owner.readable_name,
             'username': doc_owner.username,
             'avatar': get_user_avatar_url(doc_owner)['url'],
             'team_members': []
         }
     }
     response['doc'] = {
         'v': self.doc['version'],
         'contents': self.doc['contents'],
         'bibliography': self.doc['bibliography'],
         'template': self.doc['template'],
         'images': {}
     }
     response['time'] = int(time()) * 1000
     for dimage in DocumentImage.objects.filter(document_id=self.doc['id']):
         image = dimage.image
         field_obj = {
             'id': image.id,
             'title': dimage.title,
             'image': image.image.url,
             'file_type': image.file_type,
             'added': mktime(image.added.timetuple()) * 1000,
             'checksum': image.checksum,
             'cats': []
         }
         if image.thumbnail:
             field_obj['thumbnail'] = image.thumbnail.url
             field_obj['height'] = image.height
             field_obj['width'] = image.width
         response['doc']['images'][image.id] = field_obj
     if self.user_info.access_rights == 'read-without-comments':
         response['doc']['comments'] = []
     elif self.user_info.access_rights == 'review':
         # Reviewer should only get his/her own comments
         filtered_comments = {}
         for key, value in list(self.doc["comments"].items()):
             if value["user"] == self.user_info.user.id:
                 filtered_comments[key] = value
         response['doc']['comments'] = filtered_comments
     else:
         response['doc']['comments'] = self.doc["comments"]
     for team_member in doc_owner.leader.all():
         tm_object = dict()
         tm_object['id'] = team_member.member.id
         tm_object['name'] = team_member.member.readable_name
         tm_object['username'] = team_member.member.get_username()
         tm_object['avatar'] = get_user_avatar_url(
             team_member.member
         )['url']
         response['doc_info']['owner']['team_members'].append(tm_object)
     collaborators = get_accessrights(
         AccessRight.objects.filter(document__owner=doc_owner)
     )
     response['doc_info']['collaborators'] = collaborators
     response['doc_info']['session_id'] = self.id
     self.send_message(response)