Improved logging (winston) and admin-only'd the achievement editor

This commit is contained in:
Ruben Vereecken 2014-05-31 23:55:26 +02:00
parent 8d2c62ba84
commit ed44ab5f7d
6 changed files with 70 additions and 71 deletions

View file

@ -1,25 +1,29 @@
extends /templates/base
block content
div
ol.breadcrumb
li
a(href="/editor", data-i18n="editor.main_title") CodeCombat Editors
li
a(href="/editor/achievement", data-i18n="editor.achievement_title") Achievement Editor
li.active
| #{achievement.attributes.name}
if me.isAdmin()
div
ol.breadcrumb
li
a(href="/editor", data-i18n="editor.main_title") CodeCombat Editors
li
a(href="/editor/achievement", data-i18n="editor.achievement_title") Achievement Editor
li.active
| #{achievement.attributes.name}
button(data-i18n="common.save", disabled=authorized === true ? undefined : "true").btn.btn-primary#save-button Save
button(data-i18n="common.save", disabled=authorized === true ? undefined : "true").btn.btn-primary#save-button Save
h3(data-i18n="achievement.edit_achievement_title") Edit Achievement
span
|: "#{achievement.attributes.name}"
h3(data-i18n="achievement.edit_achievement_title") Edit Achievement
span
|: "#{achievement.attributes.name}"
#achievement-treema
#achievement-treema
#achievement-view
#achievement-view
hr
hr
div#error-view
div#error-view
else
.alert.alert-danger
span Admin only. Turn around.

View file

@ -14,4 +14,4 @@ block tableBody
a(href="/editor/achievement/#{data.slug || data._id}")
| #{data.name}
td #{data.description}
td #{data.collection}
td #{data.collection}

View file

@ -1,38 +1,43 @@
extends /templates/base
block content
div
ol.breadcrumb
li
a(href="/editor", data-i18n="editor.main_title") CodeCombat Editors
li.active(data-i18n="#{currentEditor}")
| #{currentEditor}
if !unauthorized
div
ol.breadcrumb
li
a(href="/editor", data-i18n="editor.main_title") CodeCombat Editors
li.active(data-i18n="#{currentEditor}")
| #{currentEditor}
if me.get('anonymous')
a.btn.btn-primary.open-modal-button(data-toggle="coco-modal", data-target="modal/auth", role="button", data-i18n="#{currentNewSignup}") Log in to Create a New Content
if me.get('anonymous')
a.btn.btn-primary.open-modal-button(data-toggle="coco-modal", data-target="modal/auth", role="button", data-i18n="#{currentNewSignup}") Log in to Create a New Content
else
a.btn.btn-primary.open-modal-button(href='#new-model-modal', role="button", data-toggle="modal", data-i18n="#{currentNew}") Create a New Something
input#search(data-i18n="[placeholder]#{currentSearch}")
hr
div.results
table
// TODO: make this into a ModalView subview
div.modal.fade#new-model-modal
.modal-dialog
.background-wrapper
.modal-content
.modal-header
h3(data-i18n="#{currentNew}") Create New #{modelLabel}
.modal-body
form.form
.form-group
label.control-label(for="name", data-i18n="general.name") Name
input#name.form-control(name="name", type="text")
.modal-footer
button.btn(data-dismiss="modal", data-i18n="common.cancel") Cancel
button.btn.btn-primary.new-model-submit(data-i18n="common.create") Create
.modal-body.wait.secret
h3(data-i18n="play_level.tip_reticulating") Reticulating Splines...
.progress.progress-striped.active
.progress-bar
else
a.btn.btn-primary.open-modal-button(href='#new-model-modal', role="button", data-toggle="modal", data-i18n="#{currentNew}") Create a New Something
input#search(data-i18n="[placeholder]#{currentSearch}")
hr
div.results
table
// TODO: make this into a ModalView subview
div.modal.fade#new-model-modal
.modal-dialog
.background-wrapper
.modal-content
.modal-header
h3(data-i18n="#{currentNew}") Create New #{modelLabel}
.modal-body
form.form
.form-group
label.control-label(for="name", data-i18n="general.name") Name
input#name.form-control(name="name", type="text")
.modal-footer
button.btn(data-dismiss="modal", data-i18n="common.cancel") Cancel
button.btn.btn-primary.new-model-submit(data-i18n="common.create") Create
.modal-body.wait.secret
h3(data-i18n="play_level.tip_reticulating") Reticulating Splines...
.progress.progress-striped.active
.progress-bar
.alert.alert-danger
span Admin only. Turn around.
// TODO Ruben prettify

View file

@ -1,5 +1,4 @@
View = require 'views/kinds/RootView'
ErrorView = require '../../error_view'
template = require 'templates/editor/achievement/edit'
Achievement = require 'models/Achievement'
@ -16,7 +15,6 @@ module.exports = class AchievementEditView extends View
constructor: (options, @achievementID) ->
super options
console.log @achievementID
@achievement = new Achievement(_id: @achievementID)
@achievement.saveBackups = true
@ -48,7 +46,6 @@ module.exports = class AchievementEditView extends View
@treema = @$el.find('#achievement-treema').treema(options)
@treema.build()
console.log @treema
pushChangesToPreview: =>
'TODO' # TODO might want some intrinsic preview thing
@ -69,8 +66,8 @@ module.exports = class AchievementEditView extends View
res = @achievement.save()
res.error =>
console.log 'Failed to save achievement'
res.error (collection, response, options) =>
console.error response
res.success =>
url = "/editor/achievement/#{@achievement.get('slug') or @achievement.id}"

View file

@ -8,18 +8,12 @@ module.exports = class AchievementSearchView extends SearchView
tableTemplate: require 'templates/editor/achievement/table'
projection: ['name', 'description', 'collection', 'slug']
initialize: ->
console.log me.isAdmin()
unless me.isAdmin()
NotFoundView = require '../../not_found'
return new NotFoundView
else super()
getRenderData: ->
context = super()
context.currentEditor = 'editor.achievement_title'
context.currentNew = 'editor.new_achievement_title'
context.currentNewSignup = 'editor.new_achievement_title_login'
context.currentSearch = 'editor.achievement_search_title'
context.unauthorized = true unless me.isAdmin()
@$el.i18n()
context

View file

@ -4,6 +4,7 @@ EarnedAchievement = require '../achievements/EarnedAchievement'
User = require '../users/User'
LocalMongo = require '../../app/lib/LocalMongo'
util = require '../../app/lib/utils'
log = require 'winston'
achievements = {}
@ -20,8 +21,6 @@ loadAchievements()
module.exports = AchievablePlugin = (schema, options) ->
checkForAchievement = (doc) ->
collectionName = doc.constructor.modelName
for achievement in achievements[collectionName]
console.log achievement.get 'name'
before = {}
@ -41,9 +40,9 @@ module.exports = AchievablePlugin = (schema, options) ->
isRepeatable = achievement.get('proportionalTo')?
alreadyAchieved = if isNew then false else LocalMongo.matchesQuery originalDocObj, query
newlyAchieved = LocalMongo.matchesQuery(docObj, query)
console.log 'isRepeatable: ' + isRepeatable
console.log 'alreadyAchieved: ' + alreadyAchieved
console.log 'newlyAchieved: ' + newlyAchieved
log.debug 'isRepeatable: ' + isRepeatable
log.debug 'alreadyAchieved: ' + alreadyAchieved
log.debug 'newlyAchieved: ' + newlyAchieved
userObjectID = doc.get(achievement.get('userField'))
userID = if _.isObject userObjectID then userObjectID.toHexString() else userObjectID # Standardize! Use strings, not ObjectId's
@ -62,7 +61,7 @@ module.exports = AchievablePlugin = (schema, options) ->
)
if isRepeatable
console.log 'Upserting repeatable achievement called \'' + (achievement.get 'name') + '\' for ' + userID
log.debug 'Upserting repeatable achievement called \'' + (achievement.get 'name') + '\' for ' + userID
proportionalTo = achievement.get 'proportionalTo'
originalAmount = util.getByPath(originalDocObj, proportionalTo) or 0
newAmount = docObj[proportionalTo]
@ -72,16 +71,16 @@ module.exports = AchievablePlugin = (schema, options) ->
earned.achievedAmount = newAmount
earned.changed = Date.now()
EarnedAchievement.findOneAndUpdate({achievement:earned.achievement, user:earned.user}, earned, upsert:true, (err, docs) ->
return console.log err if err?
return log.debug err if err?
)
earnedPoints = achievement.get('worth') * (newAmount - originalAmount)
wrapUp()
else # not alreadyAchieved
console.log 'Creating a new earned achievement called \'' + (achievement.get 'name') + '\' for ' + userID
log.debug 'Creating a new earned achievement called \'' + (achievement.get 'name') + '\' for ' + userID
(new EarnedAchievement(earned)).save (err, doc) ->
return console.log err if err?
return log.debug err if err?
earnedPoints = achievement.get('worth')
wrapUp()