I think this return is needed to prevent sending the i18n query results twice and crashing the server.

This commit is contained in:
Nick Winter 2014-10-27 22:54:50 -07:00
parent cea04d27ad
commit 68ac412f2b
2 changed files with 15 additions and 14 deletions
app/views/i18n
server/commons

View file

@ -13,30 +13,30 @@ PAGE_SIZE = 100
module.exports = class I18NHomeView extends RootView module.exports = class I18NHomeView extends RootView
id: "i18n-home-view" id: "i18n-home-view"
template: template template: template
events: events:
'change #language-select': 'onLanguageSelectChanged' 'change #language-select': 'onLanguageSelectChanged'
constructor: (options) -> constructor: (options) ->
super(options) super(options)
@selectedLanguage = me.get('preferredLanguage', true) @selectedLanguage = me.get('preferredLanguage', true)
#- #-
@aggregateModels = new Backbone.Collection() @aggregateModels = new Backbone.Collection()
project = ['name', 'components.original', 'i18nCoverage', 'slug'] project = ['name', 'components.original', 'i18nCoverage', 'slug']
@thangTypes = new CocoCollection([], { url: '/db/thang.type?view=i18n-coverage', project: project, model: ThangType }) @thangTypes = new CocoCollection([], { url: '/db/thang.type?view=i18n-coverage', project: project, model: ThangType })
@components = new CocoCollection([], { url: '/db/level.component?view=i18n-coverage', project: project, model: LevelComponent }) @components = new CocoCollection([], { url: '/db/level.component?view=i18n-coverage', project: project, model: LevelComponent })
@levels = new CocoCollection([], { url: '/db/level?view=i18n-coverage', project: project, model: Level }) @levels = new CocoCollection([], { url: '/db/level?view=i18n-coverage', project: project, model: Level })
@achievements = new CocoCollection([], { url: '/db/achievement?view=i18n-coverage', project: project, model: Achievement }) @achievements = new CocoCollection([], { url: '/db/achievement?view=i18n-coverage', project: project, model: Achievement })
for c in [@thangTypes, @components, @levels, @achievements] for c in [@thangTypes, @components, @levels, @achievements]
c.skip = 0 c.skip = 0
c.fetch({data: {skip: 0, limit: PAGE_SIZE}, cache:false}) c.fetch({data: {skip: 0, limit: PAGE_SIZE}, cache:false})
@supermodel.loadCollection(c, 'documents') @supermodel.loadCollection(c, 'documents')
@listenTo c, 'sync', @onCollectionSynced @listenTo c, 'sync', @onCollectionSynced
onCollectionSynced: (collection) -> onCollectionSynced: (collection) ->
for model in collection.models for model in collection.models
model.i18nURLBase = switch model.constructor.className model.i18nURLBase = switch model.constructor.className
@ -51,7 +51,7 @@ module.exports = class I18NHomeView extends RootView
if getMore if getMore
collection.skip += PAGE_SIZE collection.skip += PAGE_SIZE
collection.fetch({data: {skip: collection.skip, limit: PAGE_SIZE}}) collection.fetch({data: {skip: collection.skip, limit: PAGE_SIZE}})
getRenderData: -> getRenderData: ->
c = super() c = super()
@updateCoverage() @updateCoverage()
@ -59,25 +59,25 @@ module.exports = class I18NHomeView extends RootView
c.selectedLanguage = @selectedLanguage c.selectedLanguage = @selectedLanguage
c.collection = @aggregateModels c.collection = @aggregateModels
c c
updateCoverage: -> updateCoverage: ->
selectedBase = @selectedLanguage[..2] selectedBase = @selectedLanguage[..2]
relatedLanguages = (l for l in languages when l.startsWith(selectedBase) and l isnt @selectedLanguage) relatedLanguages = (l for l in languages when l.startsWith(selectedBase) and l isnt @selectedLanguage)
for model in @aggregateModels.models for model in @aggregateModels.models
@updateCoverageForModel(model, relatedLanguages) @updateCoverageForModel(model, relatedLanguages)
model.generallyCovered = true if @selectedLanguage.startsWith 'en' model.generallyCovered = true if @selectedLanguage.startsWith 'en'
updateCoverageForModel: (model, relatedLanguages) -> updateCoverageForModel: (model, relatedLanguages) ->
model.specificallyCovered = true model.specificallyCovered = true
model.generallyCovered = true model.generallyCovered = true
coverage = model.get('i18nCoverage') coverage = model.get('i18nCoverage')
if @selectedLanguage not in coverage if @selectedLanguage not in coverage
model.specificallyCovered = false model.specificallyCovered = false
if not _.any((l in coverage for l in relatedLanguages)) if not _.any((l in coverage for l in relatedLanguages))
model.generallyCovered = false model.generallyCovered = false
return return
afterRender: -> afterRender: ->
super() super()
@addLanguagesToSelect(@$el.find('#language-select'), @selectedLanguage) @addLanguagesToSelect(@$el.find('#language-select'), @selectedLanguage)

View file

@ -33,14 +33,14 @@ module.exports = class Handler
hasAccess: (req) -> true hasAccess: (req) -> true
hasAccessToDocument: (req, document, method=null) -> hasAccessToDocument: (req, document, method=null) ->
return true if req.user?.isAdmin() return true if req.user?.isAdmin()
if @modelClass.schema.uses_coco_translation_coverage and (method or req.method).toLowerCase() is 'put' if @modelClass.schema.uses_coco_translation_coverage and (method or req.method).toLowerCase() is 'put'
return true if @isJustFillingTranslations(req, document) return true if @isJustFillingTranslations(req, document)
if @modelClass.schema.uses_coco_permissions if @modelClass.schema.uses_coco_permissions
return document.hasPermissionsForMethod?(req.user, method or req.method) return document.hasPermissionsForMethod?(req.user, method or req.method)
return true return true
isJustFillingTranslations: (req, document) -> isJustFillingTranslations: (req, document) ->
differ = deltasLib.makeJSONDiffer() differ = deltasLib.makeJSONDiffer()
omissions = ['original'].concat(deltasLib.DOC_SKIP_PATHS) omissions = ['original'].concat(deltasLib.DOC_SKIP_PATHS)
@ -121,6 +121,7 @@ module.exports = class Handler
return @sendDatabaseError(res, err) if err return @sendDatabaseError(res, err) if err
documents = (@formatEntity(req, doc) for doc in documents) documents = (@formatEntity(req, doc) for doc in documents)
@sendSuccess(res, documents) @sendSuccess(res, documents)
return
specialParameters = ['term', 'project', 'conditions'] specialParameters = ['term', 'project', 'conditions']