| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- let ProjectEditorHandler
- const _ = require('lodash')
- const Path = require('path')
- const Features = require('../../infrastructure/Features')
- module.exports = ProjectEditorHandler = {
- trackChangesAvailable: false,
- buildProjectModelView(
- project,
- ownerMember,
- members,
- invites,
- isRestrictedUser
- ) {
- const result = {
- _id: project._id,
- name: project.name,
- rootDoc_id: project.rootDoc_id,
- mainBibliographyDoc_id: project.mainBibliographyDoc_id,
- rootFolder: [this.buildFolderModelView(project.rootFolder[0])],
- publicAccesLevel: project.publicAccesLevel,
- dropboxEnabled: !!project.existsInDropbox,
- compiler: project.compiler,
- description: project.description,
- spellCheckLanguage: project.spellCheckLanguage,
- deletedByExternalDataSource: project.deletedByExternalDataSource || false,
- imageName:
- project.imageName != null
- ? Path.basename(project.imageName)
- : undefined,
- }
- if (isRestrictedUser) {
- result.owner = { _id: project.owner_ref }
- result.members = []
- result.invites = []
- } else {
- result.owner = this.buildUserModelView(ownerMember)
- result.members = members.map(this.buildUserModelView)
- result.invites = this.buildInvitesView(invites)
- }
- result.features = _.defaults(ownerMember?.user?.features || {}, {
- collaborators: -1, // Infinite
- versioning: false,
- dropbox: false,
- compileTimeout: 60,
- compileGroup: 'standard',
- templates: false,
- references: false,
- referencesSearch: false,
- mendeley: false,
- trackChanges: false,
- trackChangesVisible: ProjectEditorHandler.trackChangesAvailable,
- symbolPalette: false,
- })
- if (result.features.trackChanges) {
- result.trackChangesState = project.track_changes || false
- }
- // Originally these two feature flags were both signalled by the now-deprecated `references` flag.
- // For older users, the presence of the `references` feature flag should still turn on these features.
- result.features.referencesSearch =
- result.features.referencesSearch || result.features.references
- result.features.mendeley =
- result.features.mendeley || result.features.references
- return result
- },
- buildUserModelView(member) {
- const user = member.user
- return {
- _id: user._id,
- first_name: user.first_name,
- last_name: user.last_name,
- email: user.email,
- privileges: member.privilegeLevel,
- signUpDate: user.signUpDate,
- pendingEditor: member.pendingEditor,
- pendingReviewer: member.pendingReviewer,
- }
- },
- buildFolderModelView(folder) {
- const fileRefs = _.filter(folder.fileRefs || [], file => file != null)
- return {
- _id: folder._id,
- name: folder.name,
- folders: (folder.folders || []).map(childFolder =>
- this.buildFolderModelView(childFolder)
- ),
- fileRefs: fileRefs.map(file => this.buildFileModelView(file)),
- docs: (folder.docs || []).map(doc => this.buildDocModelView(doc)),
- }
- },
- buildFileModelView(file) {
- const additionalFileProperties = {}
- if (Features.hasFeature('project-history-blobs')) {
- additionalFileProperties.hash = file.hash
- }
- return {
- _id: file._id,
- name: file.name,
- linkedFileData: file.linkedFileData,
- created: file.created,
- ...additionalFileProperties,
- }
- },
- buildDocModelView(doc) {
- return {
- _id: doc._id,
- name: doc.name,
- }
- },
- buildInvitesView(invites) {
- if (invites == null) {
- return []
- }
- return invites.map(invite => _.pick(invite, ['_id', 'email', 'privileges']))
- },
- }
|