On 12/22/2010 09:18 PM, steve linabery wrote: > On Wed, Dec 22, 2010 at 07:15:29PM +0100, [email protected] wrote: >> From: Tomas Sedovic<[email protected]> >> >> --- >> .../admin/provider_accounts_controller.rb | 126 >> ++++++++++++++++++++ >> src/app/controllers/cloud_accounts_controller.rb | 4 +- >> .../admin/provider_accounts/_credentials.haml | 3 + >> src/app/views/admin/provider_accounts/_form.haml | 52 ++++++++ >> .../views/admin/provider_accounts/_history.haml | 3 + >> src/app/views/admin/provider_accounts/_list.haml | 18 +++ >> .../admin/provider_accounts/_permissions.haml | 3 + >> .../views/admin/provider_accounts/_properties.haml | 5 + >> src/app/views/admin/provider_accounts/edit.haml | 13 ++ >> src/app/views/admin/provider_accounts/index.haml | 3 +- >> src/app/views/admin/provider_accounts/new.haml | 16 +++ >> src/app/views/admin/provider_accounts/show.haml | 5 + >> src/config/routes.rb | 3 +- >> 13 files changed, 250 insertions(+), 4 deletions(-) >> create mode 100644 src/app/views/admin/provider_accounts/_credentials.haml >> create mode 100644 src/app/views/admin/provider_accounts/_form.haml >> create mode 100644 src/app/views/admin/provider_accounts/_history.haml >> create mode 100644 src/app/views/admin/provider_accounts/_list.haml >> create mode 100644 src/app/views/admin/provider_accounts/_permissions.haml >> create mode 100644 src/app/views/admin/provider_accounts/_properties.haml >> create mode 100644 src/app/views/admin/provider_accounts/edit.haml >> create mode 100644 src/app/views/admin/provider_accounts/new.haml >> create mode 100644 src/app/views/admin/provider_accounts/show.haml >> >> diff --git a/src/app/controllers/admin/provider_accounts_controller.rb >> b/src/app/controllers/admin/provider_accounts_controller.rb >> index dda74ae..25ed002 100644 >> --- a/src/app/controllers/admin/provider_accounts_controller.rb >> +++ b/src/app/controllers/admin/provider_accounts_controller.rb >> @@ -1,6 +1,132 @@ >> class Admin::ProviderAccountsController< ApplicationController >> before_filter :require_user >> + before_filter :load_accounts, :only => [:index, :show] >> >> def index >> end >> + >> + def show >> + @tab_captions = ['Properties', 'Credentials', 'History', 'Permissions'] >> + @account = CloudAccount.find(params[:id]) >> + @details_tab = params[:details_tab].blank? ? 'properties' : >> params[:details_tab] >> + >> + if params.delete :test_account >> + test_account(@account) >> + render :action => 'show' and return >> + end >> + >> + respond_to do |format| >> + format.js do >> + if @url_params.delete :details_pane >> + render :partial => 'layouts/details_pane' and return >> + end >> + render :partial => @details_tab and return >> + end >> + format.html { render :action => 'show'} >> + end >> + end >> + >> + def new >> + @cloud_account = CloudAccount.new >> + @quota = Quota.new >> + @providers = Provider.all >> + end >> + >> + def create >> + @provider = Provider.find(params[:provider_id]) >> + require_privilege(Privilege::ACCOUNT_MODIFY, @provider) >> + >> + @providers = Provider.all >> + @cloud_account = CloudAccount.new(params[:cloud_account]) >> + @cloud_account.provider = @provider >> + @cloud_account.quota = @quota = Quota.new >> + >> + if params.delete :test_account >> + test_account(@cloud_account) >> + render :action => 'new' and return >> + end >> + >> + limit = params[:quota][:maximum_running_instances] if params[:quota] >> + @cloud_account.quota.set_maximum_running_instances(limit) >> + >> + if @cloud_account.invalid? >> + if not @cloud_account.valid_credentials? >> + flash.now[:error] = "The entered credential information is >> incorrect" >> + elsif @cloud_account.errors.on(:username) >> + flash.now[:error] = "The access key >> '#{params[:cloud_account][:username]}' has already been taken." >> + else >> + flash.now[:error] = "You must fill in all the required fields" >> + end >> + render :action => 'new' and return >> + end >> + >> + @cloud_account.zones<< Zone.default >> + @cloud_account.save! >> + if @cloud_account.populate_realms >> + flash[:notice] = "Provider account added." >> + end >> + redirect_to admin_provider_account_path(@cloud_account) >> + kick_condor >> + end >> + >> + def edit >> + @cloud_account = CloudAccount.find(params[:id]) >> + @quota = @cloud_account.quota >> + @provider = @cloud_account.provider >> + require_privilege(Privilege::ACCOUNT_MODIFY,@provider) >> + end >> + >> + def update >> + @cloud_account = CloudAccount.find(params[:id]) >> + @provider = @cloud_account.provider >> + require_privilege(Privilege::ACCOUNT_MODIFY, @provider) >> + @quota = @cloud_account.quota >> + >> + if params.delete :test_account >> + test_account(@cloud_account) >> + render :action => 'new' and return >> + end >> + >> + limit = params[:quota][:maximum_running_instances] if params[:quota] >> + @cloud_account.quota.set_maximum_running_instances(limit) >> + if @cloud_account.update_attributes(params[:cloud_account]) >> + flash[:notice] = "Cloud Account updated!" >> + redirect_to admin_provider_account_path(@cloud_account) >> + else >> + render :action => :edit >> + end >> + end >> + >> + def multi_destroy >> + if (not params[:accounts_selected]) or >> (params[:accounts_selected].length == 0) >> + flash[:notice] = "You must select some accounts first." >> + else >> + CloudAccount.destroy(params[:accounts_selected]) >> + end >> + redirect_to admin_provider_accounts_url >> + end >> + >> + protected >> + >> + def test_account(account) >> + if account.valid_credentials? >> + flash.now[:notice] = "Test Connection Success: Valid Account Details" >> + else >> + flash.now[:error] = "Test Connection Failed: Invalid Account Details" >> + end >> + rescue >> + flash.now[:error] = "Test Connection Failed: Could not connect to >> provider" >> + end >> + >> + def load_accounts >> + @header = [ >> + { :name => "Name", :sort_attr => :name }, >> + { :name => "Username", :sort_attr => :username}, >> + ] >> + @accounts = CloudAccount.paginate(:all, >> + :page => params[:page] || 1, >> + :order => (params[:order_field] || 'label') +' '+ >> (params[:order_dir] || 'asc') >> + ) >> + @url_params = params >> + end >> end >> diff --git a/src/app/controllers/cloud_accounts_controller.rb >> b/src/app/controllers/cloud_accounts_controller.rb >> index ae0a224..d21d532 100644 >> --- a/src/app/controllers/cloud_accounts_controller.rb >> +++ b/src/app/controllers/cloud_accounts_controller.rb >> @@ -48,9 +48,9 @@ class CloudAccountsController< ApplicationController >> @cloud_account.provider = @provider >> @cloud_account.quota = @quota = Quota.new >> >> - if params[:test_account] >> + if params.delete :test_account >> test_account(@cloud_account) >> - render :action => 'new' and return >> + redirect_to admin_provider_account_path(@cloud_account) and return >> end >> >> limit = params[:quota][:maximum_running_instances] if params[:quota] >> diff --git a/src/app/views/admin/provider_accounts/_credentials.haml >> b/src/app/views/admin/provider_accounts/_credentials.haml >> new file mode 100644 >> index 0000000..9d31c8d >> --- /dev/null >> +++ b/src/app/views/admin/provider_accounts/_credentials.haml >> @@ -0,0 +1,3 @@ >> +%h3 >> + Credentials for >> + = @account.name >> diff --git a/src/app/views/admin/provider_accounts/_form.haml >> b/src/app/views/admin/provider_accounts/_form.haml >> new file mode 100644 >> index 0000000..853d348 >> --- /dev/null >> +++ b/src/app/views/admin/provider_accounts/_form.haml >> @@ -0,0 +1,52 @@ >> += error_messages_for 'cloud_account' >> +%fieldset.clearfix.nomargin >> + %label.grid_4.la.alpha >> + = t('cloud_accounts.form.account_name') >> + %span.required * >> + %label.grid_3.la >> + = t('cloud_accounts.form.user_name') >> + %span.required * >> + %label.grid_3.la >> + = t('cloud_accounts.form.password') >> + %span.required * >> + %label.grid_3.la.omega >> + = t('cloud_accounts.form.quota_instances') >> + %span.required * >> +%fieldset.nomargin.clearfix >> + = f.text_field :label, :title => t('cloud_accounts.form.account_name'), >> :class => "grid_4 alpha" >> + = f.text_field :username, :title => t('cloud_accounts.form.user_name'), >> :class => "grid_3" >> + = f.password_field :password, :title => >> t('cloud_accounts.form.password'), :class => "grid_3" >> + = text_field "quota", :maximum_running_instances, :title => >> t('cloud_accounts.form.quota_instances'), :value => >> @quota.maximum_running_instances || "unlimited", :id => "quota_instances", >> :class => "grid_3 omega" >> +%fieldset.nomargin.clearfix >> + .grid_3.prefix_10.alpha.omega >> + ( >> + %button.linkbutton.nospace{ :type => 'button', :onclick => >> "set_unlimited_quota(\"quota_instances\");" }<> >> + = t('cloud_accounts.form.unlimited_quota') >> + ) >> +%fieldset.clearfix.nomargin >> + %label.grid_4.la.alpha >> + = t('cloud_accounts.form.account_number') >> + %span.required * >> + %label.grid_3.la >> + = t('cloud_accounts.form.account_private_cert') >> + %span.required * >> + %label.grid_3.la >> + = t('cloud_accounts.form.account_public_cert') >> + %span.required * >> + .grid_3.omega >> +%fieldset.clearfix.nomargin >> + = f.text_field :account_number, :title => >> t('cloud_accounts.form.account_number'), :class => "grid_4 alpha" >> + .grid_3 >> + = f.file_field :x509_cert_priv_file, :title => >> t('cloud_accounts.form.account_private_cert') >> + .grid_3 >> + = f.file_field :x509_cert_pub_file, :title => >> t('cloud_accounts.form.account_public_cert') >> + .grid_3.omega >> + ( >> + %button.linkbutton.nospace{ :type => 'submit', :value => >> t('cloud_accounts.form.test_account'), :name => 'test_account', :id => >> 'test_account' }<> >> + = t('cloud_accounts.form.test_account') >> + ) >> + >> +:javascript >> + function set_unlimited_quota(elem_id) { >> + $("#" + elem_id)[0].value = "unlimited"; >> + } >> diff --git a/src/app/views/admin/provider_accounts/_history.haml >> b/src/app/views/admin/provider_accounts/_history.haml >> new file mode 100644 >> index 0000000..429320a >> --- /dev/null >> +++ b/src/app/views/admin/provider_accounts/_history.haml >> @@ -0,0 +1,3 @@ >> +%h3 >> + History for >> + = @account.name >> diff --git a/src/app/views/admin/provider_accounts/_list.haml >> b/src/app/views/admin/provider_accounts/_list.haml >> new file mode 100644 >> index 0000000..17c982f >> --- /dev/null >> +++ b/src/app/views/admin/provider_accounts/_list.haml >> @@ -0,0 +1,18 @@ >> +- form_tag do >> + = link_to "New Account", new_admin_provider_account_path, :class => >> 'button' >> + = restful_submit_tag "Delete", "delete", >> multi_destroy_admin_provider_accounts_path, 'DELETE' >> + %p >> + Select: >> + = link_to "All", @url_params.merge(:select => 'all') >> + %span> , >> + = link_to "None", @url_params.merge(:select => 'none') >> + %table >> + = sortable_table_header @header >> + - @accounts.each do |account| >> + %tr >> + %td >> + - selected = @url_params[:select] == 'all' >> + %input{:name => 'accounts_selected[]', :type => 'checkbox', >> :value => account.id, :id => "account_checkbox_#{account.id}", :checked => >> selected } >> + = link_to account.name, admin_provider_account_path(account) >> + %td >> + =account.username >> diff --git a/src/app/views/admin/provider_accounts/_permissions.haml >> b/src/app/views/admin/provider_accounts/_permissions.haml >> new file mode 100644 >> index 0000000..92ad7a5 >> --- /dev/null >> +++ b/src/app/views/admin/provider_accounts/_permissions.haml >> @@ -0,0 +1,3 @@ >> +%h3 >> + Permissions for >> + = @account.name >> diff --git a/src/app/views/admin/provider_accounts/_properties.haml >> b/src/app/views/admin/provider_accounts/_properties.haml >> new file mode 100644 >> index 0000000..6371968 >> --- /dev/null >> +++ b/src/app/views/admin/provider_accounts/_properties.haml >> @@ -0,0 +1,5 @@ >> +%h3 >> + Properties for >> + = @account.name >> += link_to "Edit", edit_admin_provider_account_path(@account), { :class => >> 'button' } >> += link_to "Test", admin_provider_account_path(@account, {:test_account => >> true}), { :class => 'button' } >> diff --git a/src/app/views/admin/provider_accounts/edit.haml >> b/src/app/views/admin/provider_accounts/edit.haml >> new file mode 100644 >> index 0000000..9a55d84 >> --- /dev/null >> +++ b/src/app/views/admin/provider_accounts/edit.haml >> @@ -0,0 +1,13 @@ >> +#details.grid_13 >> + %h2 >> + = t('cloud_accounts.edit.edit_provider_account') >> + - form_for @cloud_account, :url => admin_provider_account_path, :html => >> { :method => :put, :multipart => true } do |f| >> + = render :partial => 'form', :locals => { :f => f } >> + %fieldset.clearfix >> + .grid_13.alpha.omega >> + = submit_tag t(:edit), :class => "ra nomargin dialogbutton" >> + %section >> + %p.requirement >> + %span.required * >> + \- >> + = t('cloud_accounts.edit.required_field') >> diff --git a/src/app/views/admin/provider_accounts/index.haml >> b/src/app/views/admin/provider_accounts/index.haml >> index 72c0ee2..62ccbc6 100644 >> --- a/src/app/views/admin/provider_accounts/index.haml >> +++ b/src/app/views/admin/provider_accounts/index.haml >> @@ -1 +1,2 @@ >> -admin/provider_accounts/index.haml >> +- content_for :list do >> + = render :partial => 'list' >> diff --git a/src/app/views/admin/provider_accounts/new.haml >> b/src/app/views/admin/provider_accounts/new.haml >> new file mode 100644 >> index 0000000..e567bce >> --- /dev/null >> +++ b/src/app/views/admin/provider_accounts/new.haml >> @@ -0,0 +1,16 @@ >> +#details.grid_13 >> + %h2 >> + = t('cloud_accounts.new.new_provider_account') >> + - form_for @cloud_account, :url => admin_provider_accounts_path, :html >> => { :multipart => true } do |f| >> + %label{ :for => :provider_id } >> + Provider >> + = select_tag :provider_id, options_for_select(@providers.map{ |p| >> [p.name, p.id] }) >> + = render :partial => 'form', :locals => { :f => f } >> + %fieldset.clearfix >> + .grid_13.alpha.omega >> + = submit_tag t(:add), :class => "ra nomargin dialogbutton" >> + %section >> + %p.requirement >> + %span.required * >> + \- >> + = t('cloud_accounts.new.required_field') >> diff --git a/src/app/views/admin/provider_accounts/show.haml >> b/src/app/views/admin/provider_accounts/show.haml >> new file mode 100644 >> index 0000000..05eeedd >> --- /dev/null >> +++ b/src/app/views/admin/provider_accounts/show.haml >> @@ -0,0 +1,5 @@ >> +- content_for :list do >> + = render :partial => 'list' >> + >> +- content_for :details do >> + = render :partial => 'layouts/details_pane' >> diff --git a/src/config/routes.rb b/src/config/routes.rb >> index 99af504..3344058 100644 >> --- a/src/config/routes.rb >> +++ b/src/config/routes.rb >> @@ -44,8 +44,9 @@ ActionController::Routing::Routes.draw do |map| >> map.connect '/set_layout', :controller => 'application', :action => >> 'set_layout' >> >> map.namespace 'admin' do |r| >> - r.resources :hardware_profiles, :pool_families, :providers, >> :provider_accounts, :realms, :roles, :settings >> + r.resources :hardware_profiles, :pool_families, :providers, :realms, >> :roles, :settings >> r.resources :users, :collection => { :multi_destroy => :delete } >> + r.resources :provider_accounts, :collection => { :multi_destroy => >> :delete } >> end >> >> map.resources :pools >> -- >> 1.7.3.3 >> >> _______________________________________________ >> deltacloud-devel mailing list >> [email protected] >> https://fedorahosted.org/mailman/listinfo/deltacloud-devel > > While testing this, I notice that on the 'new' form the columns and text > fields are not nicely arranged. I don't know if this is due to a flawed local > setup on my part or not. Please advise? > > Thanks, > Steve
Hey Steve, That is a remnant of the old design -- I didn't get to fixing the CSS yet and the current styling breaks with the new layout. I'll fix it asap, but right now the patch is more about the functionality. Sorry, I should have mentioned it sooner. Thomas _______________________________________________ deltacloud-devel mailing list [email protected] https://fedorahosted.org/mailman/listinfo/deltacloud-devel
