mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-03-14 07:00:01 -04:00
Improved logging (winston) and admin-only'd the achievement editor
This commit is contained in:
parent
8d2c62ba84
commit
ed44ab5f7d
6 changed files with 70 additions and 71 deletions
|
@ -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.
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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}"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in a new issue