Add proper messaging if an organization has gone over the repo limit. This change also moves plan information into the server

This commit is contained in:
Joseph Schorr 2013-11-01 19:13:58 -04:00
parent 1f0b142535
commit 9fa77aaa48
6 changed files with 226 additions and 99 deletions

View file

@ -156,7 +156,11 @@ function SigninCtrl($scope, $location, $timeout, Restangular, KeyService, UserSe
};
function PlansCtrl($scope, UserService, PlanService) {
$scope.plans = PlanService.planList();
// Load the list of plans.
PlanService.getPlanList(function(plans) {
$scope.plans = plans;
$scope.status = 'ready';
});
$scope.$watch( function () { return UserService.currentUser(); }, function (currentUser) {
$scope.user = currentUser;
@ -169,8 +173,6 @@ function PlansCtrl($scope, UserService, PlanService) {
$('#signinModal').modal({});
}
};
$scope.status = 'ready';
}
function GuideCtrl($scope) {
@ -743,7 +745,10 @@ function RepoAdminCtrl($scope, Restangular, $routeParams, $rootScope) {
}
function UserAdminCtrl($scope, $timeout, Restangular, PlanService, UserService, KeyService, $routeParams) {
$scope.plans = PlanService.planList();
// Load the list of plans.
PlanService.getPlanList(function(plans) {
$scope.plans = plans;
});
$scope.$watch(function () { return UserService.currentUser(); }, function (currentUser) {
$scope.askForPassword = currentUser.askForPassword;
@ -751,28 +756,29 @@ function UserAdminCtrl($scope, $timeout, Restangular, PlanService, UserService,
var subscribedToPlan = function(sub) {
$scope.subscription = sub;
$scope.subscribedPlan = PlanService.getPlan(sub.plan);
$scope.planUsagePercent = sub.usedPrivateRepos * 100 / $scope.subscribedPlan.privateRepos;
PlanService.getPlan(sub.plan, function(subscribedPlan) {
$scope.subscribedPlan = subscribedPlan;
$scope.planUsagePercent = sub.usedPrivateRepos * 100 / $scope.subscribedPlan.privateRepos;
if (sub.usedPrivateRepos > $scope.subscribedPlan.privateRepos) {
$scope.errorMessage = 'You are using more private repositories than your plan allows, please upgrate your subscription to avoid disruptions in your service.';
} else {
$scope.errorMessage = null;
}
if (sub.usedPrivateRepos > $scope.subscribedPlan.privateRepos) {
$scope.errorMessage = 'You are using more private repositories than your plan allows, please upgrate your subscription to avoid disruptions in your service.';
} else {
$scope.errorMessage = null;
}
$scope.planLoading = false;
$scope.planChanging = false;
$scope.planLoading = false;
$scope.planChanging = false;
mixpanel.people.set({
'plan': sub.plan
});
mixpanel.people.set({
'plan': sub.plan
});
});
};
$scope.planLoading = true;
var getSubscription = Restangular.one('user/plan');
getSubscription.get().then(subscribedToPlan, function() {
UserService.getCurrentSubscription(subscribedToPlan, function() {
// User has no subscription
$scope.planLoading = false;
$scope.planChanging = false;
});
$scope.planChanging = false;
@ -782,6 +788,7 @@ function UserAdminCtrl($scope, $timeout, Restangular, PlanService, UserService,
$scope.planChanging = true;
}, function(plan) {
// Subscribed.
UserService.resetCurrentSubscription();
subscribedToPlan(plan);
}, function() {
// Failure.
@ -798,6 +805,7 @@ function UserAdminCtrl($scope, $timeout, Restangular, PlanService, UserService,
plan: planId,
};
UserService.resetCurrentSubscription();
var changeSubscriptionRequest = Restangular.one('user/plan');
changeSubscriptionRequest.customPUT(subscriptionDetails).then(subscribedToPlan, function() {
// Failure
@ -813,9 +821,11 @@ function UserAdminCtrl($scope, $timeout, Restangular, PlanService, UserService,
// Show the subscribe dialog if a plan was requested.
var requested = $routeParams['plan']
if (requested !== undefined && requested !== 'free') {
if (PlanService.getPlan(requested) !== undefined) {
$scope.subscribe(requested);
}
PlanService.getPlan(requested, function(found) {
if (found) {
$scope.subscribe(requested);
}
});
}
$scope.updatingUser = false;
@ -1039,11 +1049,21 @@ function NewRepoCtrl($scope, $location, $http, UserService, Restangular, PlanSer
var subscribedToPlan = function(sub) {
$scope.planChanging = false;
$scope.subscription = sub;
$scope.subscribedPlan = PlanService.getPlan(sub.plan);
$scope.planRequired = null;
if ($scope.subscription.usedPrivateRepos >= $scope.subscribedPlan.privateRepos) {
$scope.planRequired = PlanService.getMinimumPlan($scope.subscription.usedPrivateRepos);
}
PlanService.getPlan(sub.plan, function(subscribedPlan) {
$scope.subscribedPlan = subscribedPlan;
$scope.planRequired = null;
// Check to see if the current plan allows for an additional private repository to
// be created.
var privateAllowed = $scope.subscription.usedPrivateRepos < $scope.subscribedPlan.privateRepos;
if (!privateAllowed) {
// If not, find the minimum repository that does.
PlanService.getMinimumPlan($scope.subscription.usedPrivateRepos + 1, function(minimum) {
$scope.planRequired = minimum;
});
}
});
};
$scope.editDescription = function() {
@ -1109,6 +1129,7 @@ function NewRepoCtrl($scope, $location, $http, UserService, Restangular, PlanSer
$scope.planChanging = true;
}, function(plan) {
// Subscribed.
UserService.resetCurrentSubscription();
subscribedToPlan(plan);
}, function() {
// Failure.
@ -1116,15 +1137,37 @@ function NewRepoCtrl($scope, $location, $http, UserService, Restangular, PlanSer
$scope.planChanging = false;
});
};
// Watch the namespace on the repo. If it changes, we update the plan and the public/private
// accordingly.
$scope.$watch('repo.namespace', function(namespace) {
// Note: Can initially be undefined.
if (!namespace) { return; }
var isUserNamespace = (namespace == $scope.user.username);
$scope.plans = PlanService.planList();
$scope.planRequired = null;
$scope.isUserNamespace = isUserNamespace;
// Load the user's subscription information in case they want to create a private
// repository.
var getSubscription = Restangular.one('user/plan');
getSubscription.get().then(subscribedToPlan, function() {
// User has no subscription
$scope.planRequired = PlanService.getMinimumPlan(1);
if (isUserNamespace) {
// Load the user's subscription information in case they want to create a private
// repository.
UserService.getCurrentSubscription(subscribedToPlan, function() {
PlanService.getMinimumPlan(1, function(minimum) { $scope.planRequired = minimum; });
});
} else {
$scope.planRequired = null;
var checkPrivateAllowed = Restangular.one('organization/' + namespace + '/private');
checkPrivateAllowed.get().then(function(resp) {
$scope.planRequired = resp.privateAllowed ? null : {};
}, function() {
$scope.planRequired = {};
});
// Auto-set to private repo.
$scope.repo.is_public = '0';
}
});
}