Move project group admin and streamline list page

The options to add, edit and delete project groups used to be hidden away on
the admin submenu. This was unintuitive because the other pages (stories and
projects) did not work this way. Moreover, the admin detail page had no simple
option to view a project group's projects and stories at the same time,
while the non-admin list page did not show a group's projects. This patch
simplifies things: there is now one Project Groups list page, which links to a
detail page, both of which have edit options for admin.

Change-Id: Id9ccb22b54158b03a50fb50fb609880e0c58c1d6
This commit is contained in:
Zara 2015-07-27 15:03:33 +00:00
parent ec0f5651cd
commit 653046c29d
14 changed files with 59 additions and 44 deletions

View File

@ -58,26 +58,6 @@ angular.module('sb.admin', [ 'sb.services', 'sb.templates', 'sb.util',
}
}
})
.state('sb.admin.project_group', {
url: '/project_group',
templateUrl: 'app/admin/template/project_group.html',
controller: 'ProjectGroupAdminController'
})
.state('sb.admin.project_group_edit', {
url: '/project_group/:id',
templateUrl: 'app/admin/template/project_group_edit.html',
controller: 'ProjectGroupEditController',
resolve: {
projectGroup: function ($stateParams, ProjectGroup) {
return ProjectGroup.get({id: $stateParams.id}).$promise;
},
projects: function ($stateParams, ProjectGroupItem) {
return ProjectGroupItem.browse(
{projectGroupId: $stateParams.id}
).$promise;
}
}
})
.state('sb.admin.team', {
url: '/team',
templateUrl: 'app/admin/template/team.html'

View File

@ -24,9 +24,4 @@
<i class="fa fa-sb-team fa-lg"></i>
</a>
</li>
<li active-path="^\/admin/project_group.*">
<a href="#!/admin/project_group" title="Project Groups">
<i class="fa fa-sb-project-group fa-lg"></i>
</a>
</li>
</ul>

View File

@ -17,8 +17,8 @@
/**
* Administration controller for project groups.
*/
angular.module('sb.admin').controller('ProjectGroupAdminController',
function ($scope, $modal, ProjectGroup, Preference) {
angular.module('sb.project_group').controller('ProjectGroupAdminController',
function ($scope, $modal, ProjectGroup, Preference, isSuperuser) {
'use strict';
/**
@ -28,6 +28,8 @@ angular.module('sb.admin').controller('ProjectGroupAdminController',
*/
$scope.projectGroups = [];
$scope.is_superuser = isSuperuser;
/**
* The search filter query string.
*
@ -41,7 +43,7 @@ angular.module('sb.admin').controller('ProjectGroupAdminController',
$scope.addProjectGroup = function () {
$scope.modalInstance = $modal.open(
{
templateUrl: 'app/admin/template/project_group_new.html',
templateUrl: 'app/project_group/template/new.html',
controller: 'ProjectGroupNewController'
});
@ -58,7 +60,7 @@ angular.module('sb.admin').controller('ProjectGroupAdminController',
*/
$scope.deleteProjectGroup = function (projectGroup) {
var modalInstance = $modal.open({
templateUrl: 'app/admin/template/project_group_delete.html',
templateUrl: 'app/project_group/template/delete.html',
controller: 'ProjectGroupDeleteController',
resolve: {
projectGroup: function () {

View File

@ -17,7 +17,7 @@
/**
* Controller for the project group delete modal popup.
*/
angular.module('sb.admin').controller('ProjectGroupDeleteController',
angular.module('sb.project_group').controller('ProjectGroupDeleteController',
function ($scope, projectGroup, $modalInstance) {
'use strict';

View File

@ -17,7 +17,7 @@
/**
* New Project Group edit controller.
*/
angular.module('sb.admin').controller('ProjectGroupEditController',
angular.module('sb.project_group').controller('ProjectGroupEditController',
function ($q, $log, $scope, $state, projectGroup, projects, Project,
ProjectGroupItem, ArrayUtil) {
'use strict';
@ -178,7 +178,7 @@ angular.module('sb.admin').controller('ProjectGroupEditController',
// Roll all the promises into one big happy promise.
$q.all(promises).then(
function () {
$state.go('sb.admin.project_group', {});
$state.go('sb.project_group.list', {});
},
function (error) {
$log.error(error);

View File

@ -17,7 +17,7 @@
/**
* Controller for the project group member list.
*/
angular.module('sb.admin').controller('ProjectGroupItemController',
angular.module('sb.project_group').controller('ProjectGroupItemController',
function ($scope, $log, ProjectGroupItem) {
'use strict';

View File

@ -17,7 +17,7 @@
/**
* New Project Group modal controller.
*/
angular.module('sb.admin').controller('ProjectGroupNewController',
angular.module('sb.project_group').controller('ProjectGroupNewController',
function ($q, $log, $scope, $modalInstance, ProjectGroup, ProjectGroupItem,
Project) {
'use strict';

View File

@ -17,7 +17,7 @@
/**
* The StoryBoard project group submodule handles most activity involving
* searching for and reviewing project groups. Administration of project groups
* lives in the admin module.
* has moved from the admin module.
*/
angular.module('sb.project_group',
['ui.router', 'sb.services', 'sb.util', 'sb.auth'])
@ -32,7 +32,8 @@ angular.module('sb.project_group',
.state('sb.project_group', {
abstract: true,
url: '/project_group',
template: '<div ui-view></div>',
templateUrl: 'app/project_group/template/project_group.html',
controller: 'ProjectGroupAdminController',
resolve: {
isSuperuser: PermissionResolver
.resolvePermission('is_superuser', true)
@ -43,8 +44,8 @@ angular.module('sb.project_group',
templateUrl: 'app/project_group/template/list.html',
controller: 'ProjectGroupListController'
})
.state('sb.project_group.detail', {
url: '/{id:[0-9]+}',
.state('sb.project_group_detail', {
url: '/project_group/detail/:id',
templateUrl: 'app/project_group/template/detail.html',
controller: 'ProjectGroupDetailController',
resolve: {
@ -60,6 +61,22 @@ angular.module('sb.project_group',
return deferred.promise;
}
}
});
})
;
})
.state('sb.project_group_edit', {
url: '/project_group/edit/:id',
templateUrl: 'app/project_group/template/edit.html',
controller: 'ProjectGroupEditController',
resolve: {
projectGroup: function ($stateParams, ProjectGroup) {
return ProjectGroup.get({id: $stateParams.id}).$promise;
},
projects: function ($stateParams, ProjectGroupItem) {
return ProjectGroupItem.browse(
{projectGroupId: $stateParams.id}
).$promise;
},
isSuperuser: PermissionResolver
.requirePermission('is_superuser', true)
}
});
});

View File

@ -5,6 +5,11 @@
<h1>
<i class="fa fa-sb-project-group"></i>
{{projectGroup.title}}
<small>
<a href="#!/project_group/edit/{{projectGroup.id}}" permission="is_superuser">
<i class="fa fa-pencil"></i>
</a>
</small>
</h1>
</div>
</div>

View File

@ -130,7 +130,7 @@
ng-disabled="!projectGroupForm.$valid || !projectsForm.$valid || !checkValidProjects() || isSaving">
Save
</button>
<a href="#!/admin/project_group"
<a href="#!/project_group"
ng-disabled="isSaving"
class="btn btn-default">
Cancel

View File

@ -23,6 +23,12 @@
<div class="row">
<div class="col-xs-12">
<view-title>Project Groups</view-title>
<button class="btn btn-primary btn-sm pull-bottom-right"
permission="is_superuser"
ng-click="addProjectGroup()">
<i class="fa fa-plus"></i>
<span class="hidden-xs">Add Project Group</span>
</button>
<h1 class="no-border no-margin-bottom">
<i class="fa fa-sb-project"></i> Project Groups
</h1>

View File

@ -20,6 +20,7 @@
<div class="col-xs-12">
<view-title>Project Group Admin</view-title>
<button class="btn btn-primary btn-sm pull-bottom-right"
permission="is_superuser"
ng-click="addProjectGroup()">
<i class="fa fa-plus"></i>
<span class="hidden-xs">Add Project Group</span>
@ -87,7 +88,7 @@
<tr ng-repeat="projectGroup in projectGroups">
<td class="col-sm-3 col-xs-4">
<i class="fa fa-sb-project-group text-muted"></i>
<a href="#!/admin/project_group/{{projectGroup.id}}">
<a href="#!/project_group/detail/{{projectGroup.id}}">
{{projectGroup.title}}
</a>
</td>
@ -95,10 +96,19 @@
ng-controller="ProjectGroupItemController">
<div class="pull-right btn-group btn-group-xs">
<a class="btn btn-link "
href="#!/admin/project_group/{{projectGroup.id}}">
ng-show="isLoggedIn">
<subscribe
resource="project_group"
resource-id="projectGroup.id">
</subscribe>
</a>
<a class="btn btn-link "
permission="is_superuser"
href="#!/project_group/edit/{{projectGroup.id}}">
<i class="fa fa-edit fa-lg"></i>
</a>
<a class="btn btn-link "
permission="is_superuser"
href=""
ng-click="deleteProjectGroup(projectGroup)">
<i class="fa fa-times fa-lg"></i>