diff options
| -rw-r--r-- | client/index.html | 3 | ||||
| -rw-r--r-- | client/js/controllers/image/edit.js | 24 | ||||
| -rw-r--r-- | client/js/controllers/image/image.js | 7 | ||||
| -rw-r--r-- | client/js/services/Image.js | 28 | ||||
| -rw-r--r-- | client/partials/image/edit.html | 46 | ||||
| -rw-r--r-- | client/partials/image/image.html | 57 | ||||
| -rw-r--r-- | client/partials/image/upload.html | 5 | ||||
| -rwxr-xr-x | server/core/LibOverride/projectTokenData/demo | 2 |
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 |
