diff --git a/app/models/CocoModel.coffee b/app/models/CocoModel.coffee index 521c9e148..9227e3032 100644 --- a/app/models/CocoModel.coffee +++ b/app/models/CocoModel.coffee @@ -353,10 +353,10 @@ class CocoModel extends Backbone.Model @pollAchievements: -> CocoCollection = require 'collections/CocoCollection' - Achievement = require 'models/Achievement' + EarnedAchievement = require 'models/EarnedAchievement' class NewAchievementCollection extends CocoCollection - model: Achievement + model: EarnedAchievement initialize: (me = require('core/auth').me) -> @url = "/db/user/#{me.id}/achievements?notified=false" diff --git a/app/views/core/RootView.coffee b/app/views/core/RootView.coffee index f6066311b..22d28c719 100644 --- a/app/views/core/RootView.coffee +++ b/app/views/core/RootView.coffee @@ -38,10 +38,12 @@ module.exports = class RootView extends CocoView showNewAchievement: (achievement, earnedAchievement) -> return if achievement.get('collection') is 'level.sessions' return if @isIE() # Some bugs in IE right now, TODO fix soon! - popup = new AchievementPopup achievement: achievement, earnedAchievement: earnedAchievement + new AchievementPopup achievement: achievement, earnedAchievement: earnedAchievement handleNewAchievements: (e) -> _.each e.earnedAchievements.models, (earnedAchievement) => + earnedAchievement.set('notified', true) + earnedAchievement.patch() achievement = new Achievement(_id: earnedAchievement.get('achievement')) achievement.fetch success: (achievement) => @showNewAchievement?(achievement, earnedAchievement) diff --git a/server/achievements/earned_achievement_handler.coffee b/server/achievements/earned_achievement_handler.coffee index f68c08f68..624f2a2ac 100644 --- a/server/achievements/earned_achievement_handler.coffee +++ b/server/achievements/earned_achievement_handler.coffee @@ -10,11 +10,13 @@ util = require '../../app/core/utils' class EarnedAchievementHandler extends Handler modelClass: EarnedAchievement + + editableProperties: ['notified'] # Don't allow POSTs or anything yet hasAccess: (req) -> return false unless req.user - req.method in ['GET', 'POST'] # or req.user.isAdmin() + req.method in ['GET', 'POST', 'PUT'] # or req.user.isAdmin() get: (req, res) -> return @getByAchievementIDs(req, res) if req.query.view is 'get-by-achievement-ids' diff --git a/server/users/user_handler.coffee b/server/users/user_handler.coffee index 7c8efd2e8..2dd8d2fd2 100644 --- a/server/users/user_handler.coffee +++ b/server/users/user_handler.coffee @@ -318,9 +318,6 @@ UserHandler = class UserHandler extends Handler EarnedAchievement.find(query).sort(changed: -1).exec (err, documents) => return @sendDatabaseError(res, err) if err? cleandocs = (@formatEntity(req, doc) for doc in documents) - for doc in documents # TODO Ruben Maybe move this logic elsewhere - doc.set('notified', true) - doc.save() @sendSuccess(res, cleandocs) getRecentlyPlayed: (req, res, userID) ->