[Ovirt-devel] [PATCH] Adding some control over usages in the network creation/edition form
Arthur Clément
aclement at linagora.com
Wed Sep 8 13:14:19 UTC 2010
Pushed
On vendredi 03 septembre 2010 10:43:11 Simon COURTOIS wrote:
> Signed-off-by: Simon COURTOIS <scourtois at linagora.com>
> ---
> src/app/controllers/usages_controller.rb | 13 +++++++
> src/app/models/usage.rb | 2 +-
> src/app/services/usage_service.rb | 23 ++++++++++++
> src/app/views/network/_form.rhtml | 56
> +++++++++++++++++++++++++++++- src/config/routes.rb |
> 1 +
> src/public/stylesheets/components.css | 18 +++++++++
> 6 files changed, 111 insertions(+), 2 deletions(-)
> create mode 100644 src/app/controllers/usages_controller.rb
> create mode 100644 src/app/services/usage_service.rb
>
> diff --git a/src/app/controllers/usages_controller.rb
> b/src/app/controllers/usages_controller.rb new file mode 100644
> index 0000000..0da324e
> --- /dev/null
> +++ b/src/app/controllers/usages_controller.rb
> @@ -0,0 +1,13 @@
> +class UsagesController < ApplicationController
> + include UsageService
> +
> + def create
> + usage = svc_create(params[:usage])
> + render :json => { :success => true, :data => usage }
> + end
> +
> + def remove
> + removed_ids = svc_destroy_all(params[:ids])
> + render :json => { :success => true, :removed => removed_ids }
> + end
> +end
> diff --git a/src/app/models/usage.rb b/src/app/models/usage.rb
> index 59b0e48..883a888 100644
> --- a/src/app/models/usage.rb
> +++ b/src/app/models/usage.rb
> @@ -22,6 +22,6 @@ class Usage < ActiveRecord::Base
> validates_presence_of :label
> validates_presence_of :usage
>
> - validates_uniqueness_of :usage
> + # validates_uniqueness_of :usage
>
> end
> diff --git a/src/app/services/usage_service.rb
> b/src/app/services/usage_service.rb new file mode 100644
> index 0000000..d044631
> --- /dev/null
> +++ b/src/app/services/usage_service.rb
> @@ -0,0 +1,23 @@
> +module UsageService
> + include ApplicationService
> +
> + def authorize
> + authorized!(Privilege::MODIFY,HardwarePool.get_default_pool)
> + end
> +
> + def svc_create(usage_hash)
> + authorize
> + usage_hash[:id] = Usage.maximum(:id) + 1
> + @usage = Usage.new(usage_hash)
> + @usage.save!
> + return @usage
> + end
> +
> + def svc_destroy_all(ids)
> + authorize
> + # prevent destruction of original usages (1, 2 and 3)
> + ids -= ['1','2','3']
> + Usage.destroy(ids)
> + return ids
> + end
> +end
> diff --git a/src/app/views/network/_form.rhtml
> b/src/app/views/network/_form.rhtml index 6c67a0e..d04e450 100644
> --- a/src/app/views/network/_form.rhtml
> +++ b/src/app/views/network/_form.rhtml
> @@ -18,11 +18,20 @@
>
>
> <div class="field_title">Usage:</div>
> -<div class="form_field">
> +<div id="network_usages_infos" class="form_field">
> <select id="network_usages_ids" name="network[usage_ids][]"
> multiple="true"> <%= options_from_collection_for_select @usage_types,
> "id", "label", @network ? @network.usages.collect{ |x| x.id.to_i } : [] %>
> </select>
> + <div class="usage_buttons">
> + <p>
> + <%= text_field_tag 'network_usage_label', nil, :class =>
> 'textfield_effect' %> + <button id="add_usage">Add usage</button>
> + </p>
> + <p>
> + <button id="delete_usages">Remove selected usages</button>
> + </p>
> + </div>
> </div>
>
> <div id="vlan_options"
> @@ -43,4 +52,49 @@ $("#network_type").change(function () {
> $("#vlan_options").hide();
> }
> }).trigger('change');
> +
> +$('#add_usage').click(function() {
> + var label = $('#network_usage_label').val();
> + if (label.length > 0) {
> + $.post(
> + "<%= usages_path :format => 'json' %>",
> + {
> + "usage[label]": label,
> + "usage[usage]": 'management'
> + },
> + function(data, status) {
> + if (data.success) {
> + var usage = data.data.usage;
> + $('#network_usages_ids')
> + .append('<option
> value="'+usage.id+'">'+usage.label+'</option>'); + }
> + },
> + 'json'
> + );
> + }
> + return false;
> +});
> +
> +$('#delete_usages').click(function() {
> + var selected_ids = $('#network_usages_ids').val();
> +
> + $.post(
> + "<%= remove_usages_path :format => 'json' %>",
> + {
> + '_method': 'delete',
> + 'ids[]': selected_ids
> + },
> + function(data, status) {
> + if (data.success) {
> + for (id in data.removed) {
> + $('#network_usages_ids')
> + .find('option:selected[value='+data.removed[id]+']')
> + .remove();
> + }
> + }
> + },
> + 'json'
> + );
> + return false;
> +});
> </script>
> diff --git a/src/config/routes.rb b/src/config/routes.rb
> index 795f022..70fe614 100644
> --- a/src/config/routes.rb
> +++ b/src/config/routes.rb
> @@ -58,4 +58,5 @@ ActionController::Routing::Routes.draw do |map|
> hardware_pools.resources :storage_pools, :controller => 'storage'
> end
> map.resources :vms, :controller => 'vm'
> + map.resources :usages, :only => [ :create ], :collection => { :remove =>
> :delete } end
> diff --git a/src/public/stylesheets/components.css
> b/src/public/stylesheets/components.css index 70cda97..3cdbf49 100644
> --- a/src/public/stylesheets/components.css
> +++ b/src/public/stylesheets/components.css
> @@ -394,3 +394,21 @@
> #vm_network_config_add:hover {
> cursor: pointer;
> }
> +
> +#network_usages_infos {
> + overflow: hidden;
> + width: 100%;
> +}
> +
> +#network_usages_infos select {
> + float: left;
> +}
> +
> +#network_usages_infos .usage_buttons {
> + float: left;
> + margin-left: 1em;
> +}
> +
> +#network_usages_infos .usage_buttons p {
> + margin-top: 0;
> +}
--
Arthur CLEMENT
Linagora Paris
More information about the ovirt-devel
mailing list