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:&nbsp;
>> +    = link_to "All", @url_params.merge(:select =>  'all')
>> +    %span>  ,&nbsp;
>> +    = 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

Reply via email to