diff --git a/app/templates/account/profile.jade b/app/templates/account/profile.jade index 37ff7ef85..a178413ce 100644 --- a/app/templates/account/profile.jade +++ b/app/templates/account/profile.jade @@ -7,7 +7,7 @@ block content |Please a.auth-button login | to view this profile. - else + else if user.loaded if allowedToEditJobProfile .profile-control-bar if editing @@ -486,8 +486,9 @@ block content span(data-i18n="account_profile.profile_for_prefix") Profile for span= user.get('name') || "Anonymous Wizard" span(data-i18n="account_profile.profile_for_suffix") - - img.profile-photo(src=user.getPhotoURL(256)) + + if user.loaded + img.profile-photo(src=user.getPhotoURL(256)) p To see a private user profile, you may need to log in. diff --git a/app/views/kinds/UserView.coffee b/app/views/kinds/UserView.coffee index 90f1bed11..d73e9cc7f 100644 --- a/app/views/kinds/UserView.coffee +++ b/app/views/kinds/UserView.coffee @@ -9,15 +9,14 @@ module.exports = class UserView extends RootView constructor: (@userID, options) -> super options - @userID ?= me.id @listenTo @, 'userNotFound', @ifUserNotFound @fetchUser @userID - fetchUser: (id) -> + fetchUser: -> if @isMe() @user = me @onLoaded() - @user = new User _id: id + @user = new User _id: @userID @supermodel.loadModel @user, 'user' getRenderData: -> @@ -29,8 +28,12 @@ module.exports = class UserView extends RootView isMe: -> @userID is me.id onLoaded: -> + @onUserLoaded @user if @user.loaded and not @userLoaded super() + onUserLoaded: -> + @userLoaded = true + ifUserNotFound: -> console.warn 'user not found' @render() diff --git a/app/views/user/JobProfileView.coffee b/app/views/user/JobProfileView.coffee index 831b30d6a..836b75676 100644 --- a/app/views/user/JobProfileView.coffee +++ b/app/views/user/JobProfileView.coffee @@ -54,7 +54,7 @@ module.exports = class JobProfileView extends UserView 'change #admin-contact': 'onAdminContactChanged' 'click .session-link': 'onSessionLinkPressed' - constructor: (userID, options) -> + constructor: (options, userID) -> @onJobProfileNotesChanged = _.debounce @onJobProfileNotesChanged, 1000 @onRemarkChanged = _.debounce @onRemarkChanged, 1000 @authorizedWithLinkedIn = IN?.User?.isAuthorized() @@ -63,7 +63,7 @@ module.exports = class JobProfileView extends UserView window.contractCallback = => @authorizedWithLinkedIn = IN?.User?.isAuthorized() @render() - super options, userID + super userID, options onLoaded: -> @finishInit() unless @destroyed @@ -530,7 +530,7 @@ module.exports = class JobProfileView extends UserView console.log 'Saved UserRemark', @remark, 'with response', response updateProgress: (highlightNext) -> - return unless @user?.loaded + return unless @user?.loaded and @sessions?.loaded completed = 0 totalWeight = 0 next = null diff --git a/server/lib/utils.coffee b/server/lib/utils.coffee new file mode 100644 index 000000000..d0fd9d09e --- /dev/null +++ b/server/lib/utils.coffee @@ -0,0 +1,3 @@ + +module.exports = + isID: (id) -> _.isString(id) and id.length is 24 and id.match(/[a-f0-9]/gi)?.length is 24 diff --git a/server/plugins/plugins.coffee b/server/plugins/plugins.coffee index 238bcce3d..918055042 100644 --- a/server/plugins/plugins.coffee +++ b/server/plugins/plugins.coffee @@ -1,6 +1,7 @@ mongoose = require('mongoose') textSearch = require('mongoose-text-search') log = require 'winston' +utils = require '../lib/utils' module.exports.MigrationPlugin = (schema, migrations) -> # Property name migrations made EZ @@ -31,9 +32,13 @@ module.exports.NamedPlugin = (schema) -> schema.add({name: String, slug: String}) schema.index({'slug': 1}, {unique: true, sparse: true, name: 'slug index'}) - schema.statics.getBySlug = (slug, done) -> + schema.statics.findBySlug = (slug, done) -> @findOne {slug: slug}, done + schema.statics.findBySlugOrId = (slugOrID, done) -> + return @findById slugOrID, done if utils.isID slugOrID + @findOne {slug: slugOrID}, done + schema.pre('save', (next) -> if schema.uses_coco_versions v = @get('version') diff --git a/server/users/user_handler.coffee b/server/users/user_handler.coffee index 917a43c0c..c87073cd8 100644 --- a/server/users/user_handler.coffee +++ b/server/users/user_handler.coffee @@ -208,7 +208,7 @@ UserHandler = class UserHandler extends Handler @sendSuccess(res, {result: 'success'}) avatar: (req, res, id) -> - @modelClass.findById(id).exec (err, document) => + @modelClass.findBySlugOrId(id).exec (err, document) => return @sendDatabaseError(res, err) if err return @sendNotFoundError(res) unless document photoURL = document?.get('photoURL') @@ -232,7 +232,7 @@ UserHandler = class UserHandler extends Handler IDify: (idOrSlug, done) -> return done null, idOrSlug if Handler.isID idOrSlug - User.getBySlug idOrSlug, (err, user) -> done err, user?.get '_id' + User.findBySlug idOrSlug, (err, user) -> done err, user?.get '_id' getLevelSessions: (req, res, userIDOrSlug) -> @IDify userIDOrSlug, (err, userID) =>