summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/index.html3
-rw-r--r--client/js/controllers/image/edit.js24
-rw-r--r--client/js/controllers/image/image.js7
-rw-r--r--client/js/services/Image.js28
-rw-r--r--client/partials/image/edit.html46
-rw-r--r--client/partials/image/image.html57
-rw-r--r--client/partials/image/upload.html5
-rwxr-xr-xserver/core/LibOverride/projectTokenData/demo2
8 files changed, 140 insertions, 32 deletions
diff --git a/client/index.html b/client/index.html
index 45bee7f..d941857 100644
--- a/client/index.html
+++ b/client/index.html
@@ -24,6 +24,7 @@
<div ng-include="'./partials/home/machineDetails.html'"></div>
<div ng-include="'./partials/loading.html'"></div>
<div ng-include="'./partials/image/upload.html'"></div>
+ <div ng-include="'./partials/image/edit.html'"></div>
<!-- MAIN GRID -->
@@ -93,6 +94,8 @@
<script src="./js/controllers/network/network.js"></script>
<script src="./js/controllers/image/image.js"></script>
<script src="./js/controllers/image/upload.js"></script>
+ <script src="./js/controllers/image/edit.js"></script>
+
diff --git a/client/js/controllers/image/edit.js b/client/js/controllers/image/edit.js
new file mode 100644
index 0000000..14c1949
--- /dev/null
+++ b/client/js/controllers/image/edit.js
@@ -0,0 +1,24 @@
+/**
+ * The image controller
+ *
+ * @param {$scope} $scope The $scope service from angular
+ */
+mainApp.controller('editImageCtrl', ['$scope', 'Image', 'Loading', 'Identity', 'upload', function ($scope, Image, Loading, Identity, upload)
+ {
+ $scope.$on('editImageEvent', function (eventName, image, axioms) {
+ $scope.image = image;
+ $scope.axioms = axioms;
+ $('#editImageModal').modal('show');
+ console.log(image)
+ });
+ $scope.data = {};
+ $scope.data.visibility = "public";
+ $scope.data.protected = false;
+
+ $scope.updateImage = function (image) {
+ image.visibility = $scope.data.visibility;
+ image.protected = $scope.data.protected;
+ Image.updateImage(image, function(){});
+
+ };
+ }]);
diff --git a/client/js/controllers/image/image.js b/client/js/controllers/image/image.js
index d0578d7..1702cb3 100644
--- a/client/js/controllers/image/image.js
+++ b/client/js/controllers/image/image.js
@@ -3,7 +3,7 @@
*
* @param {$scope} $scope The $scope service from angular
*/
-mainApp.controller('imageCtrl', ['$scope', 'Image', 'Loading', 'Identity', function ($scope, Image, Loading, Identity)
+mainApp.controller('imageCtrl', ['$scope', 'Image', 'Loading', 'Identity','$rootScope', function ($scope, Image, Loading, Identity, $rootScope)
{
// Update view
@@ -21,4 +21,9 @@ mainApp.controller('imageCtrl', ['$scope', 'Image', 'Loading', 'Identity', funct
callMeAfterGetImage();
}
}
+
+ $scope.edit=function(image){
+ $rootScope.$broadcast("editImageEvent", image, Image.getData().axioms);
+
+ }
}]);
diff --git a/client/js/services/Image.js b/client/js/services/Image.js
index 795f85e..4dc835e 100644
--- a/client/js/services/Image.js
+++ b/client/js/services/Image.js
@@ -4,7 +4,9 @@ mainApp.factory('Image', ['$http', 'Identity', function ($http, Identity) {
// Data object
var data = {};
data.images = null; // Images
-
+ data.axioms = {};
+ data.axioms.protected = [true, false];
+ data.axioms.visibility = ["public", "private"];
/**
* Parse uploadImage anwser
* @param {type} response
@@ -54,6 +56,29 @@ mainApp.factory('Image', ['$http', 'Identity', function ($http, Identity) {
};
/**
+ * Update image
+ * @param {type} image
+ * @param {type} callback
+ * @returns {undefined}
+ */
+ var updateImage = function (image, callback) {
+
+ var result = $http.post('../server/index.php',
+ $.param({"token": Identity.getToken(), "task": "image", 'action': 'updateImage', 'id': image.id, 'opt': image}));
+
+ // Wait and handle the response
+ result.then(function (response) {
+ callback();
+ }, function (response) {
+ alert(response)
+ });
+
+
+ };
+
+
+
+ /**
* Upload an image
* @param {type} fileToUpload
* @param {type} callback
@@ -106,6 +131,7 @@ mainApp.factory('Image', ['$http', 'Identity', function ($http, Identity) {
// Return services objects
return {
getImages: getImages,
+ updateImage: updateImage,
getData: getData,
uploadImage: uploadImage
};
diff --git a/client/partials/image/edit.html b/client/partials/image/edit.html
new file mode 100644
index 0000000..32c6958
--- /dev/null
+++ b/client/partials/image/edit.html
@@ -0,0 +1,46 @@
+<div class="modal fade" id="editImageModal" ng-controller="editImageCtrl">
+ <div class="modal-dialog">
+ <div class="modal-content"></div>
+ </div>
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <!--<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>-->
+ <h4 class="modal-title">Edit Image</h4>
+
+ </div>
+
+ <div class="modal-body">
+
+ <form class="form-horizontal" role="form">
+ <div class="form-group">
+ <label class="control-label col-sm-2">Name</label>
+ <div class="col-sm-20">
+ <p class="form-control-static">{{ image.name}}</p>
+ </div>
+
+ </div>
+ <fieldset class="form-group">
+ <label class="control-label col-sm-2">Visibility</label>
+ <select class="col-sm-20" id="visibilitySelected" ng-model="data.visibility">
+ <option ng-repeat="visibility in axioms.visibility" ng-selected="image.visibility == visibility">{{ visibility}}</option>
+ </select>
+ </fieldset>
+ <fieldset class="form-group">
+ <label class="control-label col-sm-2">Protected</label>
+ <select class="col-sm-20" id="protectedSelected" ng-model="data.protected">
+ <option ng-repeat="protected in axioms.protected" ng-selected="image.protected == protected">{{ protected}}</option>
+ </select>
+ </fieldset>
+
+ </form>
+ <div class="modal-footer">
+ <!--<a href="#" data-dismiss="modal" class="btn btn-default">Close</a>-->
+
+ <a class="btn btn-lg btn-primary btn-block" ng-click="updateImage(image)" >Apply</a>
+ </div>
+ </div>
+
+ </div>
+ </div>
+</div>
diff --git a/client/partials/image/image.html b/client/partials/image/image.html
index 886a11d..9c17c2f 100644
--- a/client/partials/image/image.html
+++ b/client/partials/image/image.html
@@ -6,33 +6,36 @@
</div>
<div class="panel-body">
-
- <div class="btn-group btn-group-md" role="group" aria-label="...">
- <button type="button" class="btn btn-default" data-toggle="modal" data-target="#uploadImageModal"">Upload</button>
- <button type="button" class="btn btn-default">Download</button>
- </div>
- <p></p>
- <table class="table table-hover">
- <thead>
- <tr>
- <th>Name</th>
- <th>Size</th>
- <th>Action</th>
- </tr>
- </thead>
- <tbody>
- <tr ng-repeat="image in images">
- <td>{{ image.name }}</td>
- <td>{{ (image.size / 1048576).toFixed(2) }} MB</td>
- <td><button type="button" class="btn btn-danger">Remove</button></td>
- </tr>
-
- </tbody>
- </table>
-
-
-
-
+
+ <div class="btn-group btn-group-md" role="group" aria-label="...">
+ <button type="button" class="btn btn-default" data-toggle="modal" data-target="#uploadImageModal">Upload</button>
+ <button type="button" class="btn btn-default">Download</button>
+ </div>
+ <p></p>
+ <table class="table table-hover">
+ <thead>
+ <tr>
+ <th>Name</th>
+ <th>Size</th>
+ <th>Action</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr ng-repeat="image in images">
+ <td>{{ image.name}}</td>
+ <td>{{ (image.size / 1048576).toFixed(2)}} MB</td>
+ <td>
+ <button type="button" class="btn btn-primary" ng-click="edit(image)">Edit</button>
+ <button type="button" class="btn btn-danger">Remove</button>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
</div>
</div>
diff --git a/client/partials/image/upload.html b/client/partials/image/upload.html
index 01c54b2..641646b 100644
--- a/client/partials/image/upload.html
+++ b/client/partials/image/upload.html
@@ -16,11 +16,12 @@
<input type="hidden" name="task" value="image" />
<input type="hidden" name="token" value="{{ token }}" />
<input type="hidden" name="action" value="uploadImage" />
- <input type="hidden" name="id" value="2564" />
+ <input type="hidden" name="id" value="60ed9403-419e-4ea8-933f-dd1750d97360" />
+ <input type="hidden" name="file_name" value="bob.iso" />
<input name="file" type="file" />
<input type="submit" value="Upload" />
</form>
-
+
<div class="modal-footer">
<!--<a href="#" data-dismiss="modal" class="btn btn-default">Close</a>-->
diff --git a/server/core/LibOverride/projectTokenData/demo b/server/core/LibOverride/projectTokenData/demo
index 95d1e10..deca791 100755
--- a/server/core/LibOverride/projectTokenData/demo
+++ b/server/core/LibOverride/projectTokenData/demo
@@ -1 +1 @@
-a:2:{s:7:"project";a:7:{s:8:"domainId";s:2:"N;";s:8:"parentId";s:2:"N;";s:7:"enabled";s:2:"N;";s:11:"description";s:2:"N;";s:2:"id";s:40:"s:32:"bdb42ccd0a074d15a9808ed0d2f09ce7";";s:5:"links";s:2:"N;";s:4:"name";s:4:"demo";}s:7:"catalog";a:4:{s:40:"s:32:"52c1f2e9782b47a697df38185d72a3f9";";a:5:{s:4:"name";s:14:"s:7:"neutron";";s:11:"description";s:2:"N;";s:4:"type";s:14:"s:7:"network";";s:9:"endpoints";a:3:{s:40:"s:32:"2c765b2eb502467fba360a1188174f6a";";a:6:{s:9:"interface";s:15:"s:8:"internal";";s:4:"name";s:2:"N;";s:9:"serviceId";s:2:"N;";s:6:"region";s:16:"s:9:"RegionOne";";s:5:"links";s:2:"N;";s:3:"url";s:30:"s:22:"http://controller:9696";";}s:40:"s:32:"499dc9aeb1c3438fb23b0168d75bbef1";";a:6:{s:9:"interface";s:13:"s:6:"public";";s:4:"name";s:2:"N;";s:9:"serviceId";s:2:"N;";s:6:"region";s:16:"s:9:"RegionOne";";s:5:"links";s:2:"N;";s:3:"url";s:32:"s:24:"http://148.60.11.31:9696";";}s:40:"s:32:"d0672225fe1a4fce89794f3825deec2b";";a:6:{s:9:"interface";s:12:"s:5:"admin";";s:4:"name";s:2:"N;";s:9:"serviceId";s:2:"N;";s:6:"region";s:16:"s:9:"RegionOne";";s:5:"links";s:2:"N;";s:3:"url";s:30:"s:22:"http://controller:9696";";}}s:5:"links";s:2:"N;";}s:40:"s:32:"5d48cf5c41b9412a8bfcf87e4b6b4bb4";";a:5:{s:4:"name";s:13:"s:6:"glance";";s:11:"description";s:2:"N;";s:4:"type";s:12:"s:5:"image";";s:9:"endpoints";a:3:{s:40:"s:32:"03aed8cd676d4b1b8b6ed69ba7750d72";";a:6:{s:9:"interface";s:15:"s:8:"internal";";s:4:"name";s:2:"N;";s:9:"serviceId";s:2:"N;";s:6:"region";s:16:"s:9:"RegionOne";";s:5:"links";s:2:"N;";s:3:"url";s:30:"s:22:"http://controller:9292";";}s:40:"s:32:"06ba5f2c1cb24eaebe3ef3b258ff0841";";a:6:{s:9:"interface";s:13:"s:6:"public";";s:4:"name";s:2:"N;";s:9:"serviceId";s:2:"N;";s:6:"region";s:16:"s:9:"RegionOne";";s:5:"links";s:2:"N;";s:3:"url";s:32:"s:24:"http://148.60.11.31:9292";";}s:40:"s:32:"32dd6e5e7acd44d88c1e89a4d805a355";";a:6:{s:9:"interface";s:12:"s:5:"admin";";s:4:"name";s:2:"N;";s:9:"serviceId";s:2:"N;";s:6:"region";s:16:"s:9:"RegionOne";";s:5:"links";s:2:"N;";s:3:"url";s:30:"s:22:"http://controller:9292";";}}s:5:"links";s:2:"N;";}s:40:"s:32:"be984e9e4da645449c645a3dad056d6b";";a:5:{s:4:"name";s:15:"s:8:"keystone";";s:11:"description";s:2:"N;";s:4:"type";s:15:"s:8:"identity";";s:9:"endpoints";a:3:{s:40:"s:32:"0f292b615b544869841c349dbbfead32";";a:6:{s:9:"interface";s:13:"s:6:"public";";s:4:"name";s:2:"N;";s:9:"serviceId";s:2:"N;";s:6:"region";s:16:"s:9:"RegionOne";";s:5:"links";s:2:"N;";s:3:"url";s:36:"s:28:"http://148.60.11.31:5000/2.0";";}s:40:"s:32:"6a01f770c4014bec933cccc28d378c78";";a:6:{s:9:"interface";s:12:"s:5:"admin";";s:4:"name";s:2:"N;";s:9:"serviceId";s:2:"N;";s:6:"region";s:16:"s:9:"RegionOne";";s:5:"links";s:2:"N;";s:3:"url";s:36:"s:28:"http://controller:35357/v2.0";";}s:40:"s:32:"d94955c39c784602a1ab49003056a4a4";";a:6:{s:9:"interface";s:15:"s:8:"internal";";s:4:"name";s:2:"N;";s:9:"serviceId";s:2:"N;";s:6:"region";s:16:"s:9:"RegionOne";";s:5:"links";s:2:"N;";s:3:"url";s:35:"s:27:"http://controller:5000/v2.0";";}}s:5:"links";s:2:"N;";}s:40:"s:32:"edc16c0a3e4042b7b396727fa8e57e7e";";a:5:{s:4:"name";s:11:"s:4:"nova";";s:11:"description";s:2:"N;";s:4:"type";s:14:"s:7:"compute";";s:9:"endpoints";a:3:{s:40:"s:32:"0d61ec232f3b4975b3e3d32f2b7a6122";";a:6:{s:9:"interface";s:13:"s:6:"public";";s:4:"name";s:2:"N;";s:9:"serviceId";s:2:"N;";s:6:"region";s:16:"s:9:"RegionOne";";s:5:"links";s:2:"N;";s:3:"url";s:68:"s:60:"http://148.60.11.31:8774/v2/bdb42ccd0a074d15a9808ed0d2f09ce7";";}s:40:"s:32:"20ac63e325274a5bbde914f3bb582c45";";a:6:{s:9:"interface";s:12:"s:5:"admin";";s:4:"name";s:2:"N;";s:9:"serviceId";s:2:"N;";s:6:"region";s:16:"s:9:"RegionOne";";s:5:"links";s:2:"N;";s:3:"url";s:66:"s:58:"http://controller:8774/v2/bdb42ccd0a074d15a9808ed0d2f09ce7";";}s:40:"s:32:"749e7483b9b04dceb1838095dd877aa8";";a:6:{s:9:"interface";s:15:"s:8:"internal";";s:4:"name";s:2:"N;";s:9:"serviceId";s:2:"N;";s:6:"region";s:16:"s:9:"RegionOne";";s:5:"links";s:2:"N;";s:3:"url";s:66:"s:58:"http://controller:8774/v2/bdb42ccd0a074d15a9808ed0d2f09ce7";";}}s:5:"links";s:2:"N;";}}} \ No newline at end of file
+a:2:{s:7:"project";a:7:{s:8:"domainId";s:2:"N;";s:8:"parentId";s:2:"N;";s:7:"enabled";s:2:"N;";s:11:"description";s:2:"N;";s:2:"id";s:40:"s:32:"bdb42ccd0a074d15a9808ed0d2f09ce7";";s:5:"links";s:2:"N;";s:4:"name";s:4:"demo";}s:7:"catalog";a:4:{s:32:"52c1f2e9782b47a697df38185d72a3f9";a:5:{s:4:"name";s:14:"s:7:"neutron";";s:11:"description";s:2:"N;";s:4:"type";s:14:"s:7:"network";";s:9:"endpoints";a:3:{s:32:"2c765b2eb502467fba360a1188174f6a";a:6:{s:9:"interface";s:15:"s:8:"internal";";s:4:"name";s:2:"N;";s:9:"serviceId";s:2:"N;";s:6:"region";s:16:"s:9:"RegionOne";";s:5:"links";s:2:"N;";s:3:"url";s:30:"s:22:"http://controller:9696";";}s:32:"499dc9aeb1c3438fb23b0168d75bbef1";a:6:{s:9:"interface";s:13:"s:6:"public";";s:4:"name";s:2:"N;";s:9:"serviceId";s:2:"N;";s:6:"region";s:16:"s:9:"RegionOne";";s:5:"links";s:2:"N;";s:3:"url";s:32:"s:24:"http://148.60.11.31:9696";";}s:32:"d0672225fe1a4fce89794f3825deec2b";a:6:{s:9:"interface";s:12:"s:5:"admin";";s:4:"name";s:2:"N;";s:9:"serviceId";s:2:"N;";s:6:"region";s:16:"s:9:"RegionOne";";s:5:"links";s:2:"N;";s:3:"url";s:30:"s:22:"http://controller:9696";";}}s:5:"links";s:2:"N;";}s:32:"5d48cf5c41b9412a8bfcf87e4b6b4bb4";a:5:{s:4:"name";s:13:"s:6:"glance";";s:11:"description";s:2:"N;";s:4:"type";s:12:"s:5:"image";";s:9:"endpoints";a:3:{s:32:"03aed8cd676d4b1b8b6ed69ba7750d72";a:6:{s:9:"interface";s:15:"s:8:"internal";";s:4:"name";s:2:"N;";s:9:"serviceId";s:2:"N;";s:6:"region";s:16:"s:9:"RegionOne";";s:5:"links";s:2:"N;";s:3:"url";s:30:"s:22:"http://controller:9292";";}s:32:"06ba5f2c1cb24eaebe3ef3b258ff0841";a:6:{s:9:"interface";s:13:"s:6:"public";";s:4:"name";s:2:"N;";s:9:"serviceId";s:2:"N;";s:6:"region";s:16:"s:9:"RegionOne";";s:5:"links";s:2:"N;";s:3:"url";s:32:"s:24:"http://148.60.11.31:9292";";}s:32:"32dd6e5e7acd44d88c1e89a4d805a355";a:6:{s:9:"interface";s:12:"s:5:"admin";";s:4:"name";s:2:"N;";s:9:"serviceId";s:2:"N;";s:6:"region";s:16:"s:9:"RegionOne";";s:5:"links";s:2:"N;";s:3:"url";s:30:"s:22:"http://controller:9292";";}}s:5:"links";s:2:"N;";}s:32:"be984e9e4da645449c645a3dad056d6b";a:5:{s:4:"name";s:15:"s:8:"keystone";";s:11:"description";s:2:"N;";s:4:"type";s:15:"s:8:"identity";";s:9:"endpoints";a:3:{s:32:"0f292b615b544869841c349dbbfead32";a:6:{s:9:"interface";s:13:"s:6:"public";";s:4:"name";s:2:"N;";s:9:"serviceId";s:2:"N;";s:6:"region";s:16:"s:9:"RegionOne";";s:5:"links";s:2:"N;";s:3:"url";s:36:"s:28:"http://148.60.11.31:5000/2.0";";}s:32:"6a01f770c4014bec933cccc28d378c78";a:6:{s:9:"interface";s:12:"s:5:"admin";";s:4:"name";s:2:"N;";s:9:"serviceId";s:2:"N;";s:6:"region";s:16:"s:9:"RegionOne";";s:5:"links";s:2:"N;";s:3:"url";s:36:"s:28:"http://controller:35357/v2.0";";}s:32:"d94955c39c784602a1ab49003056a4a4";a:6:{s:9:"interface";s:15:"s:8:"internal";";s:4:"name";s:2:"N;";s:9:"serviceId";s:2:"N;";s:6:"region";s:16:"s:9:"RegionOne";";s:5:"links";s:2:"N;";s:3:"url";s:35:"s:27:"http://controller:5000/v2.0";";}}s:5:"links";s:2:"N;";}s:32:"edc16c0a3e4042b7b396727fa8e57e7e";a:5:{s:4:"name";s:11:"s:4:"nova";";s:11:"description";s:2:"N;";s:4:"type";s:14:"s:7:"compute";";s:9:"endpoints";a:3:{s:32:"0d61ec232f3b4975b3e3d32f2b7a6122";a:6:{s:9:"interface";s:13:"s:6:"public";";s:4:"name";s:2:"N;";s:9:"serviceId";s:2:"N;";s:6:"region";s:16:"s:9:"RegionOne";";s:5:"links";s:2:"N;";s:3:"url";s:68:"s:60:"http://148.60.11.31:8774/v2/bdb42ccd0a074d15a9808ed0d2f09ce7";";}s:32:"20ac63e325274a5bbde914f3bb582c45";a:6:{s:9:"interface";s:12:"s:5:"admin";";s:4:"name";s:2:"N;";s:9:"serviceId";s:2:"N;";s:6:"region";s:16:"s:9:"RegionOne";";s:5:"links";s:2:"N;";s:3:"url";s:66:"s:58:"http://controller:8774/v2/bdb42ccd0a074d15a9808ed0d2f09ce7";";}s:32:"749e7483b9b04dceb1838095dd877aa8";a:6:{s:9:"interface";s:15:"s:8:"internal";";s:4:"name";s:2:"N;";s:9:"serviceId";s:2:"N;";s:6:"region";s:16:"s:9:"RegionOne";";s:5:"links";s:2:"N;";s:3:"url";s:66:"s:58:"http://controller:8774/v2/bdb42ccd0a074d15a9808ed0d2f09ce7";";}}s:5:"links";s:2:"N;";}}} \ No newline at end of file