Advertisement
Guest User

Untitled

a guest
Jan 20th, 2016
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.25 KB | None | 0 0
  1. import ember from 'ember'
  2. import base from 'cnc-base/base/controller'
  3. import config from 'totem/config'
  4. import totem_scope from 'totem/scope'
  5. import ns from 'totem/ns'
  6.  
  7. export default base.extend
  8. ## Domain Properties
  9. universities: null
  10. genders: null
  11. ethnicities: null
  12. disciplines: null
  13. disciplines_by_category: null
  14. disciplines_by_category_hash: null
  15. university_roles: null
  16. interests: null
  17. interests_by_category: null
  18.  
  19. ## User Properties
  20. selected_university: null
  21. selected_university_role: null
  22. selected_disciplines: null
  23. selected_interests: null
  24. selected_gender: null
  25. selected_ethnicity: null
  26. selected_new_service: null
  27. channels: null
  28. ownerable: null #Used for serializing channel data to api
  29. all_channels: null
  30.  
  31. is_updating: false
  32.  
  33. ## components
  34. c_channel_edit: ns.to_p 'socials', 'channel-edit'
  35. c_user_interest_button: ns.to_p 'common', 'shared', 'user-interest-button'
  36. c_file_upload: ns.to_p 'common', 'shared', 'file-upload'
  37. c_text: ns.to_p 'common', 'shared', 'cnc-text'
  38. c_checkbox: ns.to_p 'common', 'shared', 'cnc-checkbox'
  39.  
  40. can_update_university: ember.computed 'model.has_university', -> @totem_scope.get_current_user().get('super_user') or !@get('model.has_university')
  41. cannot_update_university: ember.computed.not 'can_update_university'
  42.  
  43. can_edit: ember.computed 'session.user.super_user', ->
  44. return @get('session.user.super_user')
  45.  
  46. cannot_edit: ember.computed.not 'can_edit'
  47.  
  48. is_super_user_label: ember.computed 'model.super_user', -> if @get('model.super_user') then 'This user is a super user.' else 'This user is not a super user'
  49. ## Used to sort the interests by category as per the signup-3 design of 11/12.
  50. # TODO: The titles here may need to be on i18n, this would be statically coded to en.
  51. core_idea_interests: ember.computed.filterBy 'interests','category.title','Core Ideas'
  52. teaching_interests: ember.computed.filterBy 'interests','category.title','Teaching Interests'
  53. miscellaneous_interests: ember.computed.filterBy 'interests','category.title','Miscellaneous'
  54. discipline_interests: ember.computed.filterBy 'interests','category.title','Discipline Fields'
  55.  
  56.  
  57.  
  58. # ### file upload
  59.  
  60. upload_avatar_form_action: ember.computed 'model', -> "/api/cnc/common/users/#{@get('model.id')}/avatar"
  61. upload_avatar_model_path: 'cnc/common/user'
  62. upload_avatar_params: ember.computed 'model', -> {id: @get('model.id')}
  63. upload_avatar_btn_text: 'Change Picture'
  64. upload_avatar_loading_text: 'Uploading picture..'
  65. upload_avatar_select_text: 'Select File'
  66.  
  67. initialize: ->
  68. new ember.RSVP.Promise (resolve, reject) =>
  69. user = @get('model')
  70.  
  71. email = user.get('email')
  72. password = user.get('password')
  73. first_name = user.get('first_name')
  74. last_name = user.get('last_name')
  75. research_permission = user.get('research_permission')
  76.  
  77. promises =
  78. universities: user.get 'universities'
  79. genders: user.get 'genders'
  80. ethnicities: user.get 'ethnicities'
  81. university_roles: user.get 'university_roles'
  82. disciplines: user.get 'disciplines'
  83. interests: user.get 'interests'
  84. channels: user.get 'channels'
  85.  
  86. ember.RSVP.hash(promises).then (results) =>
  87.  
  88. selected_disciplines = []
  89. results.disciplines.forEach (discipline) =>
  90. selected_disciplines.pushObject(discipline)
  91.  
  92. selected_interests = []
  93. results.interests.forEach (interest) =>
  94. selected_interests.pushObject(interest)
  95.  
  96. all_channels = []
  97. @get('services').forEach (service) =>
  98. @get_or_create_channels(results.channels, service).then (new_channel) =>
  99. all_channels.pushObject(new_channel) unless all_channels.contains(new_channel)
  100. @set('all_channels', all_channels)
  101.  
  102. @set('selected_university', results.universities.get('firstObject'))
  103. @set('selected_gender', results.genders.get('firstObject'))
  104. @set('selected_ethnicity', results.ethnicities.get('firstObject'))
  105. @set('selected_university_role', results.university_roles.get('firstObject'))
  106. @set('selected_disciplines', selected_disciplines)
  107. @set('selected_interests', selected_interests)
  108. @set('research_permission', research_permission)
  109. resolve()
  110.  
  111. get_or_create_channels: (user_channels, service) ->
  112.  
  113. channel_promise = new ember.RSVP.Promise (resolve, reject) =>
  114. user_channels = user_channels.toArray()
  115.  
  116. ember.RSVP.filter(user_channels, (channel) =>
  117. channel.get('service').then (channel_service) =>
  118. return channel_service == service
  119. ).then (results) =>
  120. if ember.isEmpty(results) ## No user channels matched the given service
  121. new_channel = @store.createRecord ns.to_p 'channel'
  122. new_channel.set('service', service)
  123. new_channel.set_ownerable(@get('model'))
  124. @totem_scope.set_record_ownerable_attributes(new_channel)
  125. resolve(new_channel)
  126. else ## Results contains the user_channel matching the given service
  127. resolve(results.get('firstObject'))
  128.  
  129. update_member: ->
  130. @set 'is_updating', true
  131. user = @get('model')
  132. university = @get('selected_university')
  133. gender = @get('selected_gender')
  134. ethnicity = @get('selected_ethnicity')
  135. selected_disciplines = @get('selected_disciplines')
  136. university_role = @get('selected_university_role')
  137. selected_interests = @get('selected_interests')
  138.  
  139. promises =
  140. universities: user.get 'universities'
  141. genders: user.get 'genders'
  142. ethnicities: user.get 'ethnicities'
  143. university_roles: user.get 'university_roles'
  144. disciplines: user.get 'disciplines'
  145. interests: user.get 'interests'
  146.  
  147. user_promise = new ember.RSVP.Promise (resolve, reject) =>
  148. ember.RSVP.hash(promises).then (results) =>
  149. universities = results.universities
  150. genders = results.genders
  151. ethnicities = results.ethnicities
  152. university_roles = results.university_roles
  153. disciplines = results.disciplines
  154. interests = results.interests
  155.  
  156. ## Clear previous user relationship arrays
  157. for key, value of results
  158. value.clear()
  159.  
  160. universities.pushObject(university) unless universities.contains(university) or not ember.isPresent(university)
  161. genders.pushObject(gender) unless genders.contains(gender) or not ember.isPresent(gender)
  162. ethnicities.pushObject(ethnicity) unless ethnicities.contains(ethnicity) or not ember.isPresent(ethnicity)
  163. university_roles.pushObject(university_role) unless university_roles.contains(university_role) or not ember.isPresent(university_role)
  164.  
  165. selected_disciplines.forEach (discipline) =>
  166. disciplines.pushObject(discipline) unless disciplines.contains(discipline) or not ember.isPresent(discipline)
  167.  
  168. selected_interests.forEach (interest) =>
  169. interests.pushObject(interest) unless interests.contains(interest) or not ember.isPresent(interest)
  170.  
  171. user.save().then (saved_user) =>
  172. channel_promises = []
  173. @get('all_channels').forEach (channel) =>
  174. if channel.get('isDirty')
  175. channel.set_ownerable(saved_user)
  176. @totem_scope.set_record_ownerable_attributes(channel)
  177. channel_promises.pushObject channel.save()
  178.  
  179. ember.RSVP.Promise.all(channel_promises).then (channels) =>
  180. @set 'is_updating', false
  181. resolve(saved_user)
  182.  
  183. actions:
  184. save_and_exit: ->
  185. @update_member().then (user) =>
  186. @transitionToRoute('cnc/member/members.show', @get('model'))
  187.  
  188. select_interest: (interest) ->
  189. interests = @get('selected_interests')
  190. if interests.contains(interest) then interests.removeObject(interest) else interests.pushObject(interest)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement