On 08/17/2009 10:02 AM, Jiri Suchomel wrote:
> ref: refs/heads/master
> commit 89703cf8f4b2848c1bfbdb71de8df8414d0f5a96
> Author: Jiri Suchomel <[email protected]>
> Date: Mon Aug 17 10:02:18 2009 +0200
>
> custom-services client
> ---
> plugins/custom_services/README | 7 ++
> plugins/custom_services/Rakefile | 10 +++
> .../app/controllers/custom_services_controller.rb | 67 ++++++++++++++++++
> .../app/views/custom_services/_result.rhtml | 20 ++++++
> .../app/views/custom_services/index.rhtml | 70 +++++++++++++++++++
> plugins/custom_services/config/rails_parent.rb | 15 ++++
> plugins/custom_services/init.rb | 12 +++
> plugins/custom_services/install.rb | 1 +
> .../yast2-webclient-custom-services.changes | 4 +
> .../package/yast2-webclient-custom-services.spec | 73
> ++++++++++++++++++++
> plugins/custom_services/shortcuts.yml | 8 ++
> .../tasks/custom_services_tasks.rake | 6 ++
> .../custom_services/test/custom_services_test.rb | 8 ++
> .../functional/custom_services_controller_test.rb | 45 ++++++++++++
> plugins/custom_services/test/test_helper.rb | 19 +++++
> plugins/custom_services/uninstall.rb | 1 +
> 16 files changed, 366 insertions(+), 0 deletions(-)
>
> diff --git a/plugins/custom_services/README b/plugins/custom_services/README
> new file mode 100644
> index 0000000..afbf229
> --- /dev/null
> +++ b/plugins/custom_services/README
> @@ -0,0 +1,7 @@
> +Services
> +=========
> +
> +Plugin for hanling custom vendor service.
> +
> +
> +Copyright (c) 2009 Novell, released under the MIT license
> diff --git a/plugins/custom_services/Rakefile
> b/plugins/custom_services/Rakefile
> new file mode 100644
> index 0000000..ca63e76
> --- /dev/null
> +++ b/plugins/custom_services/Rakefile
> @@ -0,0 +1,10 @@
> +require 'rake'
> +require 'rake/testtask'
> +require 'rake/rdoctask'
> +require File.join(File.dirname(__FILE__), 'config', 'rails_parent')
> +require File.join(RailsParent.parent, 'config', 'boot')
> +require 'tasks/rails'
> +
> +desc 'Default: run unit tests.'
> +task :default => :test
> +
> diff --git
> a/plugins/custom_services/app/controllers/custom_services_controller.rb
> b/plugins/custom_services/app/controllers/custom_services_controller.rb
> new file mode 100644
> index 0000000..518bccd
> --- /dev/null
> +++ b/plugins/custom_services/app/controllers/custom_services_controller.rb
> @@ -0,0 +1,67 @@
> +require 'yast/service_resource'
> +
> +class CustomServicesController < ApplicationController
> + before_filter :login_required
> + layout 'main'
> +
> + private
> + def client_permissions
> + @client =
> YaST::ServiceResource.proxy_for('org.opensuse.yast.modules.yapi.services')
> + unless @client
> + flash[:notice] = _("Invalid session, please login again.")
> + redirect_to( logout_path ) and return
> + end
> + @permissions = @client.permissions
> + end
I recommend using proxy_loader library. That handle properly all stuff
with loading proxy and also ensure same behavior for all plugins. It is
well documented with examplanation example.
> +
> + # Initialize GetText and Content-Type.
> + init_gettext "yast_webclient_custom_service" # textdomain,
> options(:charset, :content_type)
> +
> + public
> +
> + def initialize
> + end
> +
> + # GET /services
> + # GET /services.xml
> + def index
> + return unless client_permissions
> + @services = []
> +logger.debug "-------------------------------- index"
> +
> + begin
> + @services = @client.find(:all)
> + rescue ActiveResource::ClientError => e
> + flash[:error] = YaST::ServiceResource.error(e)
> + end
> +logger.debug @services.inspect
> +
> + respond_to do |format|
> + format.html # index.html.erb
> + format.xml { render :xml => @services }
> + end
> + end
> +
> + def execute
> + return unless client_permissions
> + @service = @client.find(params[:service_id])
> +
> + response = @client.put(params[:service_id], :execute => params[:id])
> +
> + # we get a hash with exit, stderr, stdout
> + ret = Hash.from_xml(response.body)
> + ret = ret["hash"]
> + logger.debug "returns #{ret.inspect}"
> +
> + @result_string = ""
> + @result_string << ret["stdout"] if ret["stdout"]
> + @result_string << ret["stderr"] if ret["stderr"]
> + @error_string = ret["exit"].to_s
> + if ret["exit"] == 0
> + @error_string = _("success")
> + end
> + render(:partial =>'result')
> + end
> +
> +
> +end
> diff --git a/plugins/custom_services/app/views/custom_services/_result.rhtml
> b/plugins/custom_services/app/views/custom_services/_result.rhtml
> new file mode 100644
> index 0000000..3af3d5f
> --- /dev/null
> +++ b/plugins/custom_services/app/views/custom_services/_result.rhtml
> @@ -0,0 +1,20 @@
> + <div class="box">
> + <div class="table">
> + <img src="images/bg-th-left.gif" width="8" height="7" alt=""
> class="left" />
> + <img src="images/bg-th-right.gif" width="7" height="7" alt=""
> class="right" />
> + <table class="listing form" cellpadding="0" cellspacing="0">
> + <tr>
> + <th class="full" colspan="2"><%=_("Service Call Result")%></th>
> + </tr>
> + <tr>
> + <td class="first"
> width="120"><strong><%=_("Result")%></strong></td>
> + <td class="last"><%=h @error_string %></td>
> + </tr>
> + <tr class="bg">
> + <td class="first"><strong><%=_("Description")%></strong></td>
> + <td class="last"><%=h @result_string %></td>
> + </tr>
> + </table>
> + <p><a href="services" class="button"><%=_("Back")%></a></p>
> + </div>
> + </div>
> \ No newline at end of file
> diff --git a/plugins/custom_services/app/views/custom_services/index.rhtml
> b/plugins/custom_services/app/views/custom_services/index.rhtml
> new file mode 100644
> index 0000000..7498013
> --- /dev/null
> +++ b/plugins/custom_services/app/views/custom_services/index.rhtml
> @@ -0,0 +1,70 @@
> +<%= javascript_include_tag :defaults %>
I think you don't want this, this is helper for AJAX stuff (loads all
necessary libs for working AJAX helpers) . Your library I think is
included already from template.
> +
> +<script language="javascript">
> +
> + YAHOO.namespace('yuiresult');
> +
> + function initResultDialog() {
> + var handleCancel = function() {
> + this.cancel();
> + }
> +
> + YAHOO.yuiresult.resultDialog = new YAHOO.widget.Dialog("resultdlg", {
> + width: "625px",
> + modal: true,
> + visible: false,
> + fixedcenter: true,
> + constraintoviewport: true,
> + draggable: true });
> +
> + YAHOO.yuiresult.resultDialog.render();
> + }
> +
> + function showResultDialog() {
> + YAHOO.yuiresult.resultDialog.show();
> + }
> +
> + YAHOO.util.Event.addListener(window, "load", initResultDialog);
> +</script>
> +
We have YAHOO js lib? I think we remove it. At least it should be good
if we document what libraries is used in webyast and what should other
module use.
> +<!-- begin: dialog box -->
> +<div id="resultdlg">
> +</div>
> +<!-- end: dialog box -->
> +
> +<div class='plugin-icon'><img src='/icons/yast-online_update.png'/></div>
> +<div class='plugin-content'>
> +
> +<h2><%=_("The full name of vendor service here")%></h2>
> +<br>
> +
> +<% if ! @permissions[:execute] %>
unless is common in ruby
> +<p><%=_("You do not have permission to execute the service. The links are
> disabled.")%></p>
> +<% end %>
> +
> +<ul>
> +<% @services.each do |service| %>
> +<li><b><%=h service.name %></b>
> + <% [ "start", "stop" ].each do |cmd|
> + if @permissions[:execute] %>
> + <%=
> + link_to_remote cmd,
> + :update => "resultdlg",
> + :url=>{ :id=> cmd,
> + :action => "execute",
> + :service_id=> service.name
> + }
> +# :loading => "Element.show('progress')"
> +# :complete => "Element.hide('progress');
> showResultDialog();"
> + %>
> + <%
> + else %>
> + <span style="color: #BDBDBD"><%="#{cmd}" -%></span>
I think we should not use hardcoded style, I think better is send mail
to robert and choose some class for this case.
> + <%
> + end
> + end %>
> +</li>
> +<% end %>
> +</ul>
> +
> +</div>
--
Josef Reidinger
YaST team
maintainer of perl-Bootloader, YaST2-Repair, webyast modules language
and time
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]