From 240cf243acb939d0b5952f0b9d0ff3222b43f4c1 Mon Sep 17 00:00:00 2001
From: Joseph Schorr <jschorr@gmail.com>
Date: Fri, 27 Sep 2013 15:26:16 -0400
Subject: [PATCH] Get permission changing working

---
 static/css/quay.css             | 22 +++++++++++++++++
 static/js/controllers.js        | 28 ++++++++++++++++++++--
 static/partials/repo-admin.html | 42 +++++++++++++++++++++++++++++++--
 3 files changed, 88 insertions(+), 4 deletions(-)

diff --git a/static/css/quay.css b/static/css/quay.css
index 99fc35f7b..13e149f7e 100644
--- a/static/css/quay.css
+++ b/static/css/quay.css
@@ -98,3 +98,25 @@ p.editable:hover i {
   margin-top: 6px;
   padding-left: 36px;
 }
+
+.repo-admin .panel {
+  display: inline-block;
+}
+
+.repo-admin .user i {
+  margin-right: 6px;
+}
+
+.repo-admin .user {
+  font-size: 1.2em;
+  min-width: 300px;
+}
+
+.repo-admin thead td {
+  padding: 4px;
+  color: #999;
+}
+
+.repo-admin td {
+  padding: 6px;
+}
\ No newline at end of file
diff --git a/static/js/controllers.js b/static/js/controllers.js
index 0d33b3d10..30bc73c00 100644
--- a/static/js/controllers.js
+++ b/static/js/controllers.js
@@ -45,6 +45,30 @@ function RepoCtrl($scope, Restangular, $routeParams, $rootScope) {
   });
 }
 
-function RepoAdminCtrl() {
-  
+function RepoAdminCtrl($scope, Restangular, $routeParams, $rootScope) {
+  var namespace = $routeParams.namespace;
+  var name = $routeParams.name;
+
+  $scope.setRole = function(username, role) {
+    var permission = $scope.permissions[username];
+    permission.role = role;
+
+    var permissionPut = Restangular.one('repository/' + namespace + '/' + name + '/permissions/' + username);
+    permissionPut.customPUT(permission);
+  };
+
+  var permissionsFetch = Restangular.one('repository/' + namespace + '/' + name + '/permissions');
+  permissionsFetch.get().then(function(resp) {
+    $rootScope.title = 'Permissions - ' + namespace + '/' + name;
+    $scope.repo = {
+	'namespace': namespace,
+	'name': name
+    };
+
+    $scope.permissions = resp.permissions;
+  }, function() {
+    $scope.repo = null;
+    $scope.permissions = null;
+    $rootScope.title = 'Unknown Repository';
+  });
 }
\ No newline at end of file
diff --git a/static/partials/repo-admin.html b/static/partials/repo-admin.html
index e34141637..2cfb65390 100644
--- a/static/partials/repo-admin.html
+++ b/static/partials/repo-admin.html
@@ -1,3 +1,41 @@
-<div class="container">
-  <h2>Permissions</h2>
+<div class="container" ng-show="!repo || !permissions">
+  No repository found
+</div>
+
+<div class="container repo repo-admin" ng-show="repo && permissions">
+  <div class="header">
+    <h3>
+      <i class="icon-hdd icon-large"></i> <span style="color: #aaa;"> {{repo.namespace}}</span> <span style="color: #ccc">/</span> {{repo.name}}
+    </h3>
+   </div>
+
+  <div class="panel panel-default">
+    <div class="panel-heading">Access Permissions</div>
+    <div class="panel-body">
+
+	<table class="permissions">
+	  <thead>
+	    <tr>
+	      <td>User</td>
+	      <td>Permissions</td>
+	    </tr>
+	  </thead>
+    
+	  <tr ng-repeat="(username, permission) in permissions">
+	    <td class="user">
+	      <i class="icon-user"></i> 
+	      <span>{{username}}</span>
+            </td>
+            <td class="user-permissions">
+              <div class="btn-group btn-group-sm">
+                <button type="button" class="btn btn-default" ng-click="setRole(username, 'read')" ng-class="{read: 'active', write: '', admin: ''}[permission.role]">Read only</button>
+                <button type="button" class="btn btn-default" ng-click="setRole(username, 'write')" ng-class="{read: '', write: 'active', admin: ''}[permission.role]">Write</button>
+                <button type="button" class="btn btn-default" ng-click="setRole(username, 'admin')" ng-class="{read: '', write: '', admin: 'active'}[permission.role]">Admin</button>
+	      </div>
+	    </td>
+	  </tr>
+	</table>
+    </div>
+  </div>
+
 </div>