mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2024-11-29 10:24:20 +01:00
180 lines
5.1 KiB
CoffeeScript
180 lines
5.1 KiB
CoffeeScript
|
|
'use strict'
|
|
|
|
Application.Controllers.controller "CompleteProfileController", ["$scope", "$rootScope", "$state", "$window", "_t", "growl", "CSRF", "Auth", "Member", "settingsPromise", "activeProviderPromise", "groupsPromise", "cguFile", "memberPromise", "Session"
|
|
, ($scope, $rootScope, $state, $window, _t, growl, CSRF, Auth, Member, settingsPromise, activeProviderPromise, groupsPromise, cguFile, memberPromise, Session) ->
|
|
|
|
|
|
|
|
### PUBLIC SCOPE ###
|
|
|
|
## API URL where the form will be posted
|
|
$scope.actionUrl = "/api/members/" + memberPromise.id
|
|
|
|
## Form action on the above URL
|
|
$scope.method = 'patch'
|
|
|
|
## genre of the application name (eg. "_le_ Fablab" or "_la_ Fabrique")
|
|
$scope.nameGenre = settingsPromise.name_genre
|
|
|
|
## name of the current fablab application (eg. "Fablab de la Casemate")
|
|
$scope.fablabName = settingsPromise.fablab_name
|
|
|
|
## informations from the current SSO provider
|
|
$scope.activeProvider = activeProviderPromise
|
|
|
|
## list of user's groups (student/standard/...)
|
|
$scope.groups = groupsPromise
|
|
|
|
## current user, contains informations retrieved from the SSO
|
|
$scope.user = memberPromise
|
|
|
|
## disallow the user to change his password as he connect from SSO
|
|
$scope.preventPassword = true
|
|
|
|
## mapping of fields to disable
|
|
$scope.preventField = {}
|
|
|
|
## CGU
|
|
$scope.cgu = cguFile.custom_asset
|
|
|
|
## Angular-Bootstrap datepicker configuration for birthday
|
|
$scope.datePicker =
|
|
format: Fablab.uibDateFormat
|
|
opened: false # default: datePicker is not shown
|
|
options:
|
|
startingDay: Fablab.weekStartingDay
|
|
|
|
|
|
|
|
##
|
|
# Callback to diplay the datepicker as a dropdown when clicking on the input field
|
|
# @param $event {Object} jQuery event object
|
|
##
|
|
$scope.openDatePicker = ($event) ->
|
|
$event.preventDefault()
|
|
$event.stopPropagation()
|
|
$scope.datePicker.opened = true
|
|
|
|
|
|
|
|
##
|
|
# For use with ngUpload (https://github.com/twilson63/ngUpload).
|
|
# Intended to be the callback when the upload is done: any raised error will be stacked in the
|
|
# $scope.alerts array. If everything goes fine, the user's profile is updated and the user is
|
|
# redirected to the home page
|
|
# @param content {Object} JSON - The upload's result
|
|
##
|
|
$scope.submited = (content) ->
|
|
if !content.id?
|
|
$scope.alerts = []
|
|
angular.forEach content, (v, k)->
|
|
angular.forEach v, (err)->
|
|
$scope.alerts.push
|
|
msg: k+': '+err,
|
|
type: 'danger'
|
|
else
|
|
$scope.user.profile.user_avatar = content.profile.user_avatar
|
|
Auth._currentUser.profile.user_avatar = content.profile.user_avatar
|
|
$scope.user.name = content.name
|
|
Auth._currentUser.name = content.name
|
|
$scope.user = content
|
|
Auth._currentUser = content
|
|
$rootScope.currentUser = content
|
|
$state.go('app.public.home')
|
|
|
|
|
|
|
|
##
|
|
# For use with 'ng-class', returns the CSS class name for the uploads previews.
|
|
# The preview may show a placeholder or the content of the file depending on the upload state.
|
|
# @param v {*} any attribute, will be tested for truthiness (see JS evaluation rules)
|
|
##
|
|
$scope.fileinputClass = (v)->
|
|
if v
|
|
'fileinput-exists'
|
|
else
|
|
'fileinput-new'
|
|
|
|
|
|
|
|
##
|
|
# Merge the current user into the account with the given auth_token
|
|
##
|
|
$scope.registerAuthToken = ->
|
|
Member.merge {id: $rootScope.currentUser.id}, {user: {auth_token: $scope.user.auth_token}}, (user) ->
|
|
$scope.user = user
|
|
Auth._currentUser = user
|
|
$rootScope.currentUser = user
|
|
$state.go('app.public.home')
|
|
, (err) ->
|
|
if err.data.error
|
|
growl.error(err.data.error)
|
|
else
|
|
growl.error(_t('an_unexpected_error_occurred_check_your_authentication_code'))
|
|
console.error(err)
|
|
|
|
|
|
|
|
##
|
|
# Return the email given by the SSO provider, parsed if needed
|
|
# @return {String} E-mail of the current user
|
|
##
|
|
$scope.ssoEmail = ->
|
|
email = memberPromise.email
|
|
if email
|
|
duplicate = email.match(/^<([^>]+)>.{20}-duplicate$/)
|
|
if duplicate
|
|
return duplicate[1]
|
|
email
|
|
|
|
|
|
|
|
##
|
|
# Test if the user's mail is marked as duplicate
|
|
# @return {boolean}
|
|
##
|
|
$scope.hasDuplicate = ->
|
|
email = memberPromise.email
|
|
if email
|
|
return !(email.match(/^<([^>]+)>.{20}-duplicate$/) == null)
|
|
|
|
|
|
|
|
##
|
|
# Disconnect and re-connect the user to the SSO to force the synchronisation of the profile's data
|
|
##
|
|
$scope.syncProfile = ->
|
|
Auth.logout().then (oldUser) ->
|
|
Session.destroy()
|
|
$rootScope.currentUser = null
|
|
$rootScope.toCheckNotifications = false
|
|
$scope.notifications = []
|
|
$window.location.href = activeProviderPromise.link_to_sso_connect
|
|
|
|
|
|
|
|
### PRIVATE SCOPE ###
|
|
|
|
|
|
|
|
##
|
|
# Kind of constructor: these actions will be realized first when the controller is loaded
|
|
##
|
|
initialize = ->
|
|
CSRF.setMetaTags()
|
|
|
|
# init the birth date to JS object
|
|
$scope.user.profile.birthday = moment($scope.user.profile.birthday).toDate()
|
|
|
|
# bind fields protection with sso fields
|
|
angular.forEach activeProviderPromise.mapping, (map) ->
|
|
$scope.preventField[map] = true
|
|
|
|
|
|
|
|
|
|
## !!! MUST BE CALLED AT THE END of the controller
|
|
initialize()
|
|
|
|
] |