diff --git a/app/coffee/modules/backlog/main.coffee b/app/coffee/modules/backlog/main.coffee index 5feb2e91..a6374a2c 100644 --- a/app/coffee/modules/backlog/main.coffee +++ b/app/coffee/modules/backlog/main.coffee @@ -200,7 +200,7 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F ]) loadProject: -> - return @rs.projects.get(@scope.projectId).then (project) => + return @rs.projects.getBySlug(@params.pslug).then (project) => @scope.project = project @scope.$emit('project:loaded', project) @scope.points = _.sortBy(project.points, "order") @@ -210,15 +210,13 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F return project loadInitialData: -> - # Resolve project slug - promise = @repo.resolve({pslug: @params.pslug}).then (data) => - @scope.projectId = data.project + promise = @.loadProject() + promise.then (project) => + @scope.projectId = project.id + @.fillUsersAndRoles(project.users, project.roles) @.initializeSubscription() - return data - return promise.then(=> @.loadProject()) - .then(=> @.loadUsersAndRoles()) - .then(=> @.loadBacklog()) + return promise.then(=> @.loadBacklog()) filterVisibleUserstories: -> @scope.visibleUserstories = [] diff --git a/app/coffee/modules/controllerMixins.coffee b/app/coffee/modules/controllerMixins.coffee index 860e3777..fdf176e3 100644 --- a/app/coffee/modules/controllerMixins.coffee +++ b/app/coffee/modules/controllerMixins.coffee @@ -32,6 +32,15 @@ toString = @.taiga.toString ############################################################################# class PageMixin + fillUsersAndRoles: (users, roles) -> + @scope.users = _.sortBy(users, "full_name_display") + @scope.usersById = groupBy(@scope.users, (e) -> e.id) + + @scope.roles = _.sortBy(roles, "order") + availableRoles = _(@scope.project.memberships).map("role").uniq().value() + @scope.computableRoles = _(roles).filter("computable") + .filter((x) -> _.contains(availableRoles, x.id)) + .value() loadUsersAndRoles: -> promise = @q.all([ @rs.projects.usersList(@scope.projectId), @@ -40,16 +49,7 @@ class PageMixin return promise.then (results) => [users, roles] = results - - @scope.users = _.sortBy(users, "full_name_display") - @scope.usersById = groupBy(@scope.users, (e) -> e.id) - - @scope.roles = _.sortBy(roles, "order") - availableRoles = _(@scope.project.memberships).map("role").uniq().value() - @scope.computableRoles = _(roles).filter("computable") - .filter((x) -> _.contains(availableRoles, x.id)) - .value() - + @.fillUsersAndRoles(users, roles) return results taiga.PageMixin = PageMixin diff --git a/app/coffee/modules/issues/detail.coffee b/app/coffee/modules/issues/detail.coffee index ff9f2456..c0aee649 100644 --- a/app/coffee/modules/issues/detail.coffee +++ b/app/coffee/modules/issues/detail.coffee @@ -91,7 +91,7 @@ class IssueDetailController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.onDeleteGoToUrl = @navUrls.resolve("project", ctx) loadProject: -> - return @rs.projects.get(@scope.projectId).then (project) => + return @rs.projects.getBySlug(@params.pslug).then (project) => @scope.project = project @scope.$emit('project:loaded', project) @scope.statusList = project.issue_statuses @@ -106,8 +106,9 @@ class IssueDetailController extends mixOf(taiga.Controller, taiga.PageMixin) return project loadIssue: -> - return @rs.issues.get(@scope.projectId, @scope.issueId).then (issue) => + return @rs.issues.getByRef(@scope.projectId, @params.issueref).then (issue) => @scope.issue = issue + @scope.issueId = issue.id @scope.commentModel = issue if @scope.issue.neighbors.previous.ref? @@ -125,19 +126,12 @@ class IssueDetailController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.nextUrl = @navUrls.resolve("project-issues-detail", ctx) loadInitialData: -> - params = { - pslug: @params.pslug - issueref: @params.issueref - } + promise = @.loadProject() + return promise.then (project) => + @scope.projectId = project.id + @.fillUsersAndRoles(project.users, project.roles) + @.loadIssue() - promise = @repo.resolve(params).then (data) => - @scope.projectId = data.project - @scope.issueId = data.issue - return data - - return promise.then(=> @.loadProject()) - .then(=> @.loadUsersAndRoles()) - .then(=> @.loadIssue()) module.controller("IssueDetailController", IssueDetailController) diff --git a/app/coffee/modules/issues/list.coffee b/app/coffee/modules/issues/list.coffee index b08c3ff3..abcaab35 100644 --- a/app/coffee/modules/issues/list.coffee +++ b/app/coffee/modules/issues/list.coffee @@ -91,7 +91,7 @@ class IssuesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi @rs.issues.storeFilters(@params.pslug, @location.search()) loadProject: -> - return @rs.projects.get(@scope.projectId).then (project) => + return @rs.projects.getBySlug(@params.pslug).then (project) => @scope.project = project @scope.$emit('project:loaded', project) @@ -268,15 +268,12 @@ class IssuesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi return data loadInitialData: -> - promise = @repo.resolve({pslug: @params.pslug}).then (data) => - @scope.projectId = data.project + promise = @.loadProject() + return promise.then (project) => + @scope.projectId = project.id + @.fillUsersAndRoles(project.users, project.roles) @.initializeSubscription() - return data - - return promise.then(=> @.loadProject()) - .then(=> @.loadUsersAndRoles()) - .then(=> @q.all([@.loadFilters(), - @.loadIssues()])) + return @q.all([@.loadFilters(), @.loadIssues()]) saveCurrentFiltersTo: (newFilter) -> deferred = @q.defer() diff --git a/app/coffee/modules/kanban/main.coffee b/app/coffee/modules/kanban/main.coffee index 302277c3..90e657fa 100644 --- a/app/coffee/modules/kanban/main.coffee +++ b/app/coffee/modules/kanban/main.coffee @@ -148,7 +148,7 @@ class KanbanController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi ]) loadProject: -> - return @rs.projects.get(@scope.projectId).then (project) => + return @rs.projects.getBySlug(@params.pslug).then (project) => @scope.project = project @scope.points = _.sortBy(project.points, "order") @scope.pointsById = groupBy(project.points, (x) -> x.id) @@ -166,16 +166,13 @@ class KanbanController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi @.loadUserstories() loadInitialData: -> - # Resolve project slug - promise = @repo.resolve({pslug: @params.pslug}).then (data) => - @scope.projectId = data.project + promise = @.loadProject() + return promise.then (project) => + @scope.projectId = project.id + @.fillUsersAndRoles(project.users, project.roles) @.initializeSubscription() - return data + @.loadKanban().then( => @scope.$broadcast("redraw:wip")) - return promise.then(=> @.loadProject()) - .then(=> @.loadUsersAndRoles()) - .then(=> @.loadKanban()) - .then(=> @scope.$broadcast("redraw:wip")) ## View Mode methods diff --git a/app/coffee/modules/resources/issues.coffee b/app/coffee/modules/resources/issues.coffee index 46c5bc78..c2aab587 100644 --- a/app/coffee/modules/resources/issues.coffee +++ b/app/coffee/modules/resources/issues.coffee @@ -35,6 +35,9 @@ resourceProvider = ($repo, $http, $urls, $storage, $q) -> params.project = projectId return $repo.queryOne("issues", issueId, params) + service.getByRef = (projectId, ref) -> + return $repo.queryOneRaw("issues", "by_ref?project=#{projectId}&ref=#{ref}") + service.list = (projectId, filters, options) -> params = {project: projectId} params = _.extend({}, params, filters or {}) diff --git a/app/coffee/modules/resources/projects.coffee b/app/coffee/modules/resources/projects.coffee index ab506262..d8688a6a 100644 --- a/app/coffee/modules/resources/projects.coffee +++ b/app/coffee/modules/resources/projects.coffee @@ -28,6 +28,9 @@ resourceProvider = ($repo, $http, $urls) -> service.get = (id) -> return $repo.queryOne("projects", id) + service.getBySlug = (slug) -> + return $repo.queryOneRaw("projects", "by_slug?slug=#{slug}") + service.list = -> return $repo.queryMany("projects") diff --git a/app/coffee/modules/resources/tasks.coffee b/app/coffee/modules/resources/tasks.coffee index 3e29f612..f64c6716 100644 --- a/app/coffee/modules/resources/tasks.coffee +++ b/app/coffee/modules/resources/tasks.coffee @@ -35,6 +35,9 @@ resourceProvider = ($repo, $http, $urls, $storage) -> params.project = projectId return $repo.queryOne("tasks", taskId, params) + service.getByRef = (projectId, ref) -> + return $repo.queryOneRaw("tasks", "by_ref?project=#{projectId}&ref=#{ref}") + service.list = (projectId, sprintId=null, userStoryId=null) -> params = {project: projectId} params.milestone = sprintId if sprintId diff --git a/app/coffee/modules/resources/userstories.coffee b/app/coffee/modules/resources/userstories.coffee index d2c926e4..f0bb7204 100644 --- a/app/coffee/modules/resources/userstories.coffee +++ b/app/coffee/modules/resources/userstories.coffee @@ -32,6 +32,9 @@ resourceProvider = ($repo, $http, $urls, $storage) -> params.project = projectId return $repo.queryOne("userstories", usId, params) + service.getByRef = (projectId, ref) -> + return $repo.queryOneRaw("userstories", "by_ref?project=#{projectId}&ref=#{ref}") + service.listUnassigned = (projectId, filters) -> params = {"project": projectId, "milestone": "null"} params = _.extend({}, params, filters or {}) diff --git a/app/coffee/modules/resources/wiki.coffee b/app/coffee/modules/resources/wiki.coffee index 6509f795..9b150084 100644 --- a/app/coffee/modules/resources/wiki.coffee +++ b/app/coffee/modules/resources/wiki.coffee @@ -28,6 +28,9 @@ resourceProvider = ($repo, $http, $urls) -> service.get = (wikiId) -> return $repo.queryOne("wiki", wikiId) + service.getBySlug = (projectId, slug) -> + return $repo.queryOneRaw("wiki", "by_slug?project=#{projectId}&slug=#{slug}") + service.listLinks = (projectId) -> return $repo.queryMany("wiki-links", {project: projectId}) diff --git a/app/coffee/modules/search.coffee b/app/coffee/modules/search.coffee index 1aa77b20..fc413738 100644 --- a/app/coffee/modules/search.coffee +++ b/app/coffee/modules/search.coffee @@ -74,7 +74,7 @@ class SearchController extends mixOf(taiga.Controller, taiga.PageMixin) return defered.promise loadProject: -> - return @rs.projects.get(@scope.projectId).then (project) => + return @rs.projects.getBySlug(@params.pslug).then (project) => @scope.project = project @scope.$emit('project:loaded', project) @scope.issueStatusById = groupBy(project.issue_statuses, (x) -> x.id) @@ -94,12 +94,9 @@ class SearchController extends mixOf(taiga.Controller, taiga.PageMixin) return promise loadInitialData: -> - promise = @repo.resolve({pslug: @params.pslug}).then (data) => - @scope.projectId = data.project - return data - - return promise.then(=> @.loadProject()) - .then(=> @.loadUsersAndRoles()) + return @.loadProject().then (project) => + @scope.projectId = project.id + @.fillUsersAndRoles(project.users, project.roles) module.controller("SearchController", SearchController) diff --git a/app/coffee/modules/tasks/detail.coffee b/app/coffee/modules/tasks/detail.coffee index 0bbe2730..66c63e4e 100644 --- a/app/coffee/modules/tasks/detail.coffee +++ b/app/coffee/modules/tasks/detail.coffee @@ -87,7 +87,7 @@ class TaskDetailController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.onDeleteGoToUrl = @navUrls.resolve("project-userstories-detail", ctx) loadProject: -> - return @rs.projects.get(@scope.projectId).then (project) => + return @rs.projects.getBySlug(@params.pslug).then (project) => @scope.project = project @scope.$emit('project:loaded', project) @scope.statusList = project.task_statuses @@ -96,8 +96,9 @@ class TaskDetailController extends mixOf(taiga.Controller, taiga.PageMixin) return project loadTask: -> - return @rs.tasks.get(@scope.projectId, @scope.taskId).then (task) => + return @rs.tasks.getByRef(@scope.projectId, @params.taskref).then (task) => @scope.task = task + @scope.taskId = task.id @scope.commentModel = task if @scope.task.neighbors.previous.ref? @@ -128,6 +129,7 @@ class TaskDetailController extends mixOf(taiga.Controller, taiga.PageMixin) return us loadInitialData: -> + ### params = { pslug: @params.pslug taskref: @params.taskref @@ -142,6 +144,12 @@ class TaskDetailController extends mixOf(taiga.Controller, taiga.PageMixin) .then(=> @.loadUsersAndRoles()) .then(=> @.loadTask().then(=> @q.all([@.loadUserStory(), @.loadSprint()]))) + ### + promise = @.loadProject() + return promise.then (project) => + @scope.projectId = project.id + @.fillUsersAndRoles(project.users, project.roles) + @.loadTask().then(=> @q.all([@.loadSprint(), @.loadUserStory()])) module.controller("TaskDetailController", TaskDetailController) diff --git a/app/coffee/modules/team/main.coffee b/app/coffee/modules/team/main.coffee index 7e072cd2..bc91a290 100644 --- a/app/coffee/modules/team/main.coffee +++ b/app/coffee/modules/team/main.coffee @@ -88,7 +88,7 @@ class TeamController extends mixOf(taiga.Controller, taiga.PageMixin) return data loadProject: -> - return @rs.projects.get(@scope.projectId).then (project) => + return @rs.projects.getBySlug(@params.pslug).then (project) => @scope.project = project @scope.$emit('project:loaded', project) @@ -127,14 +127,11 @@ class TeamController extends mixOf(taiga.Controller, taiga.PageMixin) return stats loadInitialData: -> - promise = @repo.resolve({pslug: @params.pslug}).then (data) => - @scope.projectId = data.project - return data - - return promise.then(=> @.loadProject()) - .then(=> @.loadUsersAndRoles()) - .then(=> @.loadMembers()) - .then(=> @.loadMemberStats()) + promise = @.loadProject() + return promise.then (project) => + @scope.projectId = project.id + @.fillUsersAndRoles(project.users, project.roles) + return @.loadMembers().then(=> @.loadMemberStats()) module.controller("TeamController", TeamController) diff --git a/app/coffee/modules/userstories/detail.coffee b/app/coffee/modules/userstories/detail.coffee index 66236dd3..5bc0ff1a 100644 --- a/app/coffee/modules/userstories/detail.coffee +++ b/app/coffee/modules/userstories/detail.coffee @@ -93,7 +93,7 @@ class UserStoryDetailController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.onDeleteGoToUrl = @navUrls.resolve("project-kanban", ctx) loadProject: -> - return @rs.projects.get(@scope.projectId).then (project) => + return @rs.projects.getBySlug(@params.pslug).then (project) => @scope.project = project @scope.$emit('project:loaded', project) @scope.statusList = project.us_statuses @@ -105,8 +105,9 @@ class UserStoryDetailController extends mixOf(taiga.Controller, taiga.PageMixin) return project loadUs: -> - return @rs.userstories.get(@scope.projectId, @scope.usId).then (us) => + return @rs.userstories.getByRef(@scope.projectId, @params.usref).then (us) => @scope.us = us + @scope.usId = us.id @scope.commentModel = us if @scope.us.neighbors.previous.ref? @@ -137,20 +138,11 @@ class UserStoryDetailController extends mixOf(taiga.Controller, taiga.PageMixin) return tasks loadInitialData: -> - params = { - pslug: @params.pslug - usref: @params.usref - } - - promise = @repo.resolve(params).then (data) => - @scope.projectId = data.project - @scope.usId = data.us - return data - - return promise.then(=> @.loadProject()) - .then(=> @.loadUsersAndRoles()) - .then(=> @q.all([@.loadUs().then(=> @.loadSprint()), - @.loadTasks()])) + promise = @.loadProject() + return promise.then (project) => + @scope.projectId = project.id + @.fillUsersAndRoles(project.users, project.roles) + @.loadUs().then(=> @q.all([@.loadSprint(), @.loadTasks()])) module.controller("UserStoryDetailController", UserStoryDetailController) diff --git a/app/coffee/modules/wiki/main.coffee b/app/coffee/modules/wiki/main.coffee index 2e26befc..56cb93e1 100644 --- a/app/coffee/modules/wiki/main.coffee +++ b/app/coffee/modules/wiki/main.coffee @@ -69,61 +69,43 @@ class WikiDetailController extends mixOf(taiga.Controller, taiga.PageMixin) promise.then null, @.onInitialDataError.bind(@) loadProject: -> - return @rs.projects.get(@scope.projectId).then (project) => + return @rs.projects.getBySlug(@params.pslug).then (project) => @scope.project = project @scope.$emit('project:loaded', project) @scope.membersById = groupBy(project.memberships, (x) -> x.user) return project loadWiki: -> - if @scope.wikiId - return @rs.wiki.get(@scope.wikiId).then (wiki) => - @scope.wiki = wiki - return wiki + promise = @rs.wiki.getBySlug(@scope.projectId, @params.slug) + promise.then (wiki) => + @scope.wiki = wiki + @scope.wikiId = wiki.id + return @scope.wiki - if @scope.project.my_permissions.indexOf("add_wiki_page") == -1 - return null + promise.then null, (xhr) => + @scope.wikiId = null - data = { - project: @scope.projectId - slug: @scope.wikiSlug - content: "" - } - @scope.wiki = @model.make_model("wiki", data) - return @scope.wiki + if @scope.project.my_permissions.indexOf("add_wiki_page") == -1 + return null + + data = { + project: @scope.projectId + slug: @scope.wikiSlug + content: "" + } + @scope.wiki = @model.make_model("wiki", data) + return @scope.wiki loadWikiLinks: -> return @rs.wiki.listLinks(@scope.projectId).then (wikiLinks) => @scope.wikiLinks = wikiLinks loadInitialData: -> - params = { - pslug: @params.pslug - wikipage: @params.slug - } - - # Resolve project slug - promise = @repo.resolve({pslug: @params.pslug}).then (data) => - @scope.projectId = data.project - return data - - # Resolve wiki slug - # This should be done in two steps because is not same thing - # not found response for project and not found for wiki page - # and they should be hendled separately. - promise = promise.then => - prom = @repo.resolve({wikipage: @params.slug, pslug: @params.pslug}) - - prom = prom.then (data) => - @scope.wikiId = data.wikipage - - return prom.then null, (xhr) => - @scope.wikiId = null - - return promise.then(=> @.loadProject()) - .then(=> @.loadUsersAndRoles()) - .then(=> @q.all([@.loadWikiLinks(), - @.loadWiki()])) + promise = @.loadProject() + return promise.then (project) => + @scope.projectId = project.id + @.fillUsersAndRoles(project.users, project.roles) + @q.all([@.loadWikiLinks(), @.loadWiki()]) delete: -> # TODO: i18n