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)
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)
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 )
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)
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)
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
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
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
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 )
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
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)
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)
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)
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)