ContactController.coffee 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. AuthenticationController = require "../Authentication/AuthenticationController"
  2. ContactManager = require "./ContactManager"
  3. UserGetter = require "../User/UserGetter"
  4. logger = require "logger-sharelatex"
  5. Modules = require "../../infrastructure/Modules"
  6. module.exports = ContactsController =
  7. getContacts: (req, res, next) ->
  8. AuthenticationController.getLoggedInUserId req, (error, user_id) ->
  9. return next(error) if error?
  10. ContactManager.getContactIds user_id, {limit: 50}, (error, contact_ids) ->
  11. return next(error) if error?
  12. UserGetter.getUsers contact_ids, {
  13. email: 1, first_name: 1, last_name: 1, holdingAccount: 1
  14. }, (error, contacts) ->
  15. return next(error) if error?
  16. # UserGetter.getUsers may not preserve order so put them back in order
  17. positions = {}
  18. for contact_id, i in contact_ids
  19. positions[contact_id] = i
  20. contacts.sort (a,b) -> positions[a._id?.toString()] - positions[b._id?.toString()]
  21. # Don't count holding accounts to discourage users from repeating mistakes (mistyped or wrong emails, etc)
  22. contacts = contacts.filter (c) -> !c.holdingAccount
  23. contacts = contacts.map(ContactsController._formatContact)
  24. Modules.hooks.fire "getContacts", user_id, contacts, (error, additional_contacts) ->
  25. return next(error) if error?
  26. contacts = contacts.concat(additional_contacts...)
  27. res.send({
  28. contacts: contacts
  29. })
  30. _formatContact: (contact) ->
  31. return {
  32. id: contact._id?.toString()
  33. email: contact.email
  34. first_name: contact.first_name
  35. last_name: contact.last_name
  36. type: "user"
  37. }