Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import ember from 'ember'
- import base from 'cnc-base/base/controller'
- import config from 'totem/config'
- import totem_scope from 'totem/scope'
- import ns from 'totem/ns'
- export default base.extend
- ## Domain Properties
- universities: null
- genders: null
- ethnicities: null
- disciplines: null
- disciplines_by_category: null
- disciplines_by_category_hash: null
- university_roles: null
- interests: null
- interests_by_category: null
- ## User Properties
- selected_university: null
- selected_university_role: null
- selected_disciplines: null
- selected_interests: null
- selected_gender: null
- selected_ethnicity: null
- selected_new_service: null
- channels: null
- ownerable: null #Used for serializing channel data to api
- all_channels: null
- is_updating: false
- ## components
- c_channel_edit: ns.to_p 'socials', 'channel-edit'
- c_user_interest_button: ns.to_p 'common', 'shared', 'user-interest-button'
- c_file_upload: ns.to_p 'common', 'shared', 'file-upload'
- c_text: ns.to_p 'common', 'shared', 'cnc-text'
- c_checkbox: ns.to_p 'common', 'shared', 'cnc-checkbox'
- can_update_university: ember.computed 'model.has_university', -> @totem_scope.get_current_user().get('super_user') or !@get('model.has_university')
- cannot_update_university: ember.computed.not 'can_update_university'
- can_edit: ember.computed 'session.user.super_user', ->
- return @get('session.user.super_user')
- cannot_edit: ember.computed.not 'can_edit'
- 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'
- ## Used to sort the interests by category as per the signup-3 design of 11/12.
- # TODO: The titles here may need to be on i18n, this would be statically coded to en.
- core_idea_interests: ember.computed.filterBy 'interests','category.title','Core Ideas'
- teaching_interests: ember.computed.filterBy 'interests','category.title','Teaching Interests'
- miscellaneous_interests: ember.computed.filterBy 'interests','category.title','Miscellaneous'
- discipline_interests: ember.computed.filterBy 'interests','category.title','Discipline Fields'
- # ### file upload
- upload_avatar_form_action: ember.computed 'model', -> "/api/cnc/common/users/#{@get('model.id')}/avatar"
- upload_avatar_model_path: 'cnc/common/user'
- upload_avatar_params: ember.computed 'model', -> {id: @get('model.id')}
- upload_avatar_btn_text: 'Change Picture'
- upload_avatar_loading_text: 'Uploading picture..'
- upload_avatar_select_text: 'Select File'
- initialize: ->
- new ember.RSVP.Promise (resolve, reject) =>
- user = @get('model')
- email = user.get('email')
- password = user.get('password')
- first_name = user.get('first_name')
- last_name = user.get('last_name')
- research_permission = user.get('research_permission')
- promises =
- universities: user.get 'universities'
- genders: user.get 'genders'
- ethnicities: user.get 'ethnicities'
- university_roles: user.get 'university_roles'
- disciplines: user.get 'disciplines'
- interests: user.get 'interests'
- channels: user.get 'channels'
- ember.RSVP.hash(promises).then (results) =>
- selected_disciplines = []
- results.disciplines.forEach (discipline) =>
- selected_disciplines.pushObject(discipline)
- selected_interests = []
- results.interests.forEach (interest) =>
- selected_interests.pushObject(interest)
- all_channels = []
- @get('services').forEach (service) =>
- @get_or_create_channels(results.channels, service).then (new_channel) =>
- all_channels.pushObject(new_channel) unless all_channels.contains(new_channel)
- @set('all_channels', all_channels)
- @set('selected_university', results.universities.get('firstObject'))
- @set('selected_gender', results.genders.get('firstObject'))
- @set('selected_ethnicity', results.ethnicities.get('firstObject'))
- @set('selected_university_role', results.university_roles.get('firstObject'))
- @set('selected_disciplines', selected_disciplines)
- @set('selected_interests', selected_interests)
- @set('research_permission', research_permission)
- resolve()
- get_or_create_channels: (user_channels, service) ->
- channel_promise = new ember.RSVP.Promise (resolve, reject) =>
- user_channels = user_channels.toArray()
- ember.RSVP.filter(user_channels, (channel) =>
- channel.get('service').then (channel_service) =>
- return channel_service == service
- ).then (results) =>
- if ember.isEmpty(results) ## No user channels matched the given service
- new_channel = @store.createRecord ns.to_p 'channel'
- new_channel.set('service', service)
- new_channel.set_ownerable(@get('model'))
- @totem_scope.set_record_ownerable_attributes(new_channel)
- resolve(new_channel)
- else ## Results contains the user_channel matching the given service
- resolve(results.get('firstObject'))
- update_member: ->
- @set 'is_updating', true
- user = @get('model')
- university = @get('selected_university')
- gender = @get('selected_gender')
- ethnicity = @get('selected_ethnicity')
- selected_disciplines = @get('selected_disciplines')
- university_role = @get('selected_university_role')
- selected_interests = @get('selected_interests')
- promises =
- universities: user.get 'universities'
- genders: user.get 'genders'
- ethnicities: user.get 'ethnicities'
- university_roles: user.get 'university_roles'
- disciplines: user.get 'disciplines'
- interests: user.get 'interests'
- user_promise = new ember.RSVP.Promise (resolve, reject) =>
- ember.RSVP.hash(promises).then (results) =>
- universities = results.universities
- genders = results.genders
- ethnicities = results.ethnicities
- university_roles = results.university_roles
- disciplines = results.disciplines
- interests = results.interests
- ## Clear previous user relationship arrays
- for key, value of results
- value.clear()
- universities.pushObject(university) unless universities.contains(university) or not ember.isPresent(university)
- genders.pushObject(gender) unless genders.contains(gender) or not ember.isPresent(gender)
- ethnicities.pushObject(ethnicity) unless ethnicities.contains(ethnicity) or not ember.isPresent(ethnicity)
- university_roles.pushObject(university_role) unless university_roles.contains(university_role) or not ember.isPresent(university_role)
- selected_disciplines.forEach (discipline) =>
- disciplines.pushObject(discipline) unless disciplines.contains(discipline) or not ember.isPresent(discipline)
- selected_interests.forEach (interest) =>
- interests.pushObject(interest) unless interests.contains(interest) or not ember.isPresent(interest)
- user.save().then (saved_user) =>
- channel_promises = []
- @get('all_channels').forEach (channel) =>
- if channel.get('isDirty')
- channel.set_ownerable(saved_user)
- @totem_scope.set_record_ownerable_attributes(channel)
- channel_promises.pushObject channel.save()
- ember.RSVP.Promise.all(channel_promises).then (channels) =>
- @set 'is_updating', false
- resolve(saved_user)
- actions:
- save_and_exit: ->
- @update_member().then (user) =>
- @transitionToRoute('cnc/member/members.show', @get('model'))
- select_interest: (interest) ->
- interests = @get('selected_interests')
- if interests.contains(interest) then interests.removeObject(interest) else interests.pushObject(interest)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement