From 1eaab21a246dd655d71ac326e3caba0aad5f8a24 Mon Sep 17 00:00:00 2001 From: Pieter Loubser Date: Fri, 22 Oct 2010 16:15:58 +0100 Subject: [PATCH] Update 0.04 Implemented client and server side validation for all existing plugins. User created plugins will now automatically validate default form fields. All user created plugins will now generate with a validation skeleton in plugin_name.js as function validate[plugin_name]() Fixed issue 6 - Implemented server side validation and exception handling Fix Issue 11 - Fixed return behavior. --- README | 1 + app/controllers/griditems_controller.rb | 7 ++- app/helpers/griditems_helper.rb | 47 +---------------- app/views/griditems/_item.html.erb | 16 +++++- app/views/griditems/index.html.erb | 2 +- .../griditems/plugins/calendar/_calendar.erb | 6 --- .../plugins/calendar/_calendar.html.erb | 12 +++-- .../calendar/_formfor_calendar.html.erb | 2 +- .../plugins/feed/_formfor_feed.html.erb | 1 + .../plugins/gauge/_formfor_gauge.html.erb | 2 +- .../plugins/nagios/_formfor_nagios.html.erb | 2 +- .../griditems/plugins/nagios/_nagios.html.erb | 12 ++++- .../plugins/twitter/_formfor_twitter.html.erb | 3 +- .../plugins/twitter/_twitter.html.erb | 30 ++++++----- .../board_plugin/board_plugin_generator.rb | 2 +- .../templates/lib/javascripts/javascripts.js | 1 - .../lib/views/_formfor_plugin.html.erb | 6 +-- .../templates/tasks/plugin_tasks.rake.erb | 13 +++++ public/javascripts/bernard.js | 50 +++++++++++++------ public/javascripts/calendar.js | 12 ++++- public/javascripts/feed.js | 8 +++ public/javascripts/gauge.js | 13 +++++ public/javascripts/image.js | 13 ++++- public/javascripts/nagios.js | 17 ++++++- public/javascripts/twitter.js | 8 +++ .../plugins/bernard_calendar/lib/calendar.rb | 11 ++-- .../lib/javascripts/calendar.js | 12 ++++- .../lib/views/_calendar.html.erb | 12 +++-- .../lib/views/_formfor_calendar.html.erb | 2 +- .../tasks/calendar_tasks.rake | 12 +++++ .../bernard_feed/lib/javascripts/feed.js | 8 +++ .../lib/views/_formfor_feed.html.erb | 1 + .../bernard_feed/tasks/feed_tasks.rake | 12 +++++ .../bernard_gauge/lib/javascripts/gauge.js | 13 +++++ .../lib/views/_formfor_gauge.html.erb | 2 +- .../bernard_gauge/tasks/gauge_tasks.rake | 13 +++++ .../bernard_image/lib/javascripts/image.js | 13 ++++- .../bernard_image/tasks/image_tasks.rake | 12 +++++ .../bernard_nagios/lib/javascripts/nagios.js | 17 ++++++- vendor/plugins/bernard_nagios/lib/nagios.rb | 21 ++++++-- .../lib/views/_formfor_nagios.html.erb | 2 +- .../bernard_nagios/lib/views/_nagios.html.erb | 12 ++++- .../bernard_nagios/tasks/nagios_tasks.rake | 13 +++++ .../lib/javascripts/twitter.js | 8 +++ .../lib/views/_formfor_twitter.html.erb | 3 +- .../lib/views/_twitter.html.erb | 30 ++++++----- .../bernard_twitter/tasks/twitter_tasks.rake | 12 +++++ 47 files changed, 392 insertions(+), 135 deletions(-) delete mode 100644 app/views/griditems/plugins/calendar/_calendar.erb delete mode 100644 lib/generators/board_plugin/templates/lib/javascripts/javascripts.js diff --git a/README b/README index 6844983..76d82c0 100644 --- a/README +++ b/README @@ -1,4 +1,5 @@ Bernard Board - version 0.03 +CHANGELOG 0.04 Client and server side form validation. CHANGELOG 0.03 Complete reimplementation of plugins. Development Branch diff --git a/app/controllers/griditems_controller.rb b/app/controllers/griditems_controller.rb index 74c5396..2be6e57 100644 --- a/app/controllers/griditems_controller.rb +++ b/app/controllers/griditems_controller.rb @@ -1,7 +1,10 @@ class GriditemsController < ApplicationController protect_from_forgery :only => [:index, :create_grid_item] - # GET /griditems - # GET /griditems.xml + +rescue_from ActionView::TemplateError do |exception| + rescue_action(exception.original_exception) +end + def index @fullscreen = params["fullscreen"] @load_board = params["load_board"] diff --git a/app/helpers/griditems_helper.rb b/app/helpers/griditems_helper.rb index aa58bb2..0441aa0 100644 --- a/app/helpers/griditems_helper.rb +++ b/app/helpers/griditems_helper.rb @@ -3,55 +3,10 @@ module GriditemsHelper require 'uri' require 'rubygems' require 'nokogiri' - - # Helper implements the nagios plugin - def nagios(url, username, password, title) - uri = URI.parse("http://#{url.gsub("http://", "")}") - http = Net::HTTP.new(uri.host, uri.port) - color = "" - - #Get page from nagios - request = Net::HTTP::Get.new(uri.request_uri) -# request.basic_auth 'psy', 'shuChahb' - request.basic_auth username, password - response = http.request(request) - #Parse html response body - html= Nokogiri::HTML(response.body) - - title = title - #Critical - red - #Warning - Yellow - #All good - Green - html.css('tr').each do |e| - if e.to_s =~/.*statusEven.*|.*statusOdd.*/ - if e.inner_text =~/.*CRITICAL.*/ - color = "#FF0000" - elsif e.inner_text =~/.*WARNING.*/ && color != "#FF0000" - color = "#FFFF00" - else - unless (color == "#FFFF00" || color == "#FF0000" ) - color = "#33FF00" - end - end - end - end - - #Circle is defined in /public/stylesheets/bernard.css - html_response = "
#{title}
" - html_response += "
 
" - circle = " - - #{html_response} - -
- " - return circle - end - + def get_remote_file(remote_server, file) Net::HTTP.start(remote_server) do |http| resp = http.get("/#{file}") - RAILS_DEFAULT_LOGGER.debug resp.code return resp.body end end diff --git a/app/views/griditems/_item.html.erb b/app/views/griditems/_item.html.erb index 40a1b9a..a6b4471 100644 --- a/app/views/griditems/_item.html.erb +++ b/app/views/griditems/_item.html.erb @@ -21,10 +21,22 @@ <% if @state == "view" %> <% unless @type == "Gauge"%> <% unless @refresh_rate == 0 %> - <%= periodically_call_remote :url => {:action => :refresh, :id => "item#{@timestamp}", :type => @type, :parameters => @parameter_list, :title => @title}, :frequency => @refresh_rate%> + <%= periodically_call_remote :url => { + :action => :refresh, + :id => "item#{@timestamp}", + :type => @type, + :parameters => @parameter_list, + :title => @title}, :frequency => @refresh_rate%> <% end %> <% else%> - <%= periodically_call_remote :url => {:action => "redraw_gauge", :id => "item#{@timestamp}", :type => @type, :parameters => @parameter_list, :title => @title}, :frequency => @refresh_rate %> + <% unless @refresh_rate == 0 %> + <%= periodically_call_remote :url => { + :action => "redraw_gauge", + :id => "item#{@timestamp}", + :type => @type, + :parameters => @parameter_list, + :title => @title}, :frequency => @refresh_rate %> + <% end %> <% end %> <%= javascript_tag "initItems('item#{@timestamp}', 'content#{@timestamp}', '#{@type}', 'view')" %> <% else %> diff --git a/app/views/griditems/index.html.erb b/app/views/griditems/index.html.erb index b25d790..cf5900b 100644 --- a/app/views/griditems/index.html.erb +++ b/app/views/griditems/index.html.erb @@ -27,7 +27,7 @@

Create new item for bernard to consume

<% plugins = get_plugins %> <% form_tag({},{:id => "select_form"})do %> - <%= select_tag "type", options_for_select(plugins.sort), {:onchange => remote_function(:url => {:action => :render_form}, :with => "'type=' + this.value")}%> + <%= select_tag "type", options_for_select(plugins.sort), {:onchange => remote_function(:url => {:action => :render_form}, :with => "'type=' + this.value"), :id => "type"} %> <% end %>
diff --git a/app/views/griditems/plugins/calendar/_calendar.erb b/app/views/griditems/plugins/calendar/_calendar.erb deleted file mode 100644 index 57c127f..0000000 --- a/app/views/griditems/plugins/calendar/_calendar.erb +++ /dev/null @@ -1,6 +0,0 @@ -
- <%= @title %> -
-<% calendar(@parameters["usrname"], @parameters["passwrd"]).each_with_index do |event, i| %> - <%= event.title %> - <%= event.start_time.strftime("%a %d-%m-%Y %H:%M")%>
-<% end %> diff --git a/app/views/griditems/plugins/calendar/_calendar.html.erb b/app/views/griditems/plugins/calendar/_calendar.html.erb index 57c127f..3b3dd61 100644 --- a/app/views/griditems/plugins/calendar/_calendar.html.erb +++ b/app/views/griditems/plugins/calendar/_calendar.html.erb @@ -1,6 +1,12 @@
<%= @title %>
-<% calendar(@parameters["usrname"], @parameters["passwrd"]).each_with_index do |event, i| %> - <%= event.title %> - <%= event.start_time.strftime("%a %d-%m-%Y %H:%M")%>
-<% end %> +<% calendar_events = calendar(@parameters["usrname"], @parameters["passwrd"]) %> +<% if calendar_events =="error" %> + <%= javascript_tag "alert('Could not create Calendar item. Incorrect username or password.')"%> + <%= javascript_tag "jQuery('##{itemid}').remove();" %> +<% else %> + <% calendar_events.each_with_index do |event, i| %> + <%= event.title %> - <%= event.start_time.strftime("%a %d-%m-%Y %H:%M")%>
+ <% end %> +<%end %> diff --git a/app/views/griditems/plugins/calendar/_formfor_calendar.html.erb b/app/views/griditems/plugins/calendar/_formfor_calendar.html.erb index 2d8cfb3..9c95e05 100644 --- a/app/views/griditems/plugins/calendar/_formfor_calendar.html.erb +++ b/app/views/griditems/plugins/calendar/_formfor_calendar.html.erb @@ -3,7 +3,7 @@ Width : <%= text_field_tag "width", "", :size=>4%>
Height: <%= text_field_tag "height", "", :size=>4%>
User name: <%= text_field_tag "usrname", "", :size=>24 %>
- Password : <%= text_field_tag "passwrd" %>
+ Password : <%= password_field_tag "passwrd" %>
Refresh Rate (in seconds): <%= text_field_tag "refresh_rate" %>
<%= submit_to_remote "create_grid_item", "Create", :url => {:action => "create_grid_item", :type => type}, :html => {:class => "create"}, :condition => "validateForm()"%>
<%= submit_to_remote "update_grid_item", "Update", :url => {:action => "update_grid_item", :type => type}, :html => {:class => "update"}, :condition => "validateForm()"%> diff --git a/app/views/griditems/plugins/feed/_formfor_feed.html.erb b/app/views/griditems/plugins/feed/_formfor_feed.html.erb index d5b7024..1bb4fbc 100644 --- a/app/views/griditems/plugins/feed/_formfor_feed.html.erb +++ b/app/views/griditems/plugins/feed/_formfor_feed.html.erb @@ -3,6 +3,7 @@ Width : <%= text_field_tag "width", "", :size=>4%>
Height: <%= text_field_tag "height", "", :size=>4%>
RSS url: <%= text_field_tag "uri", "", :size=>24 %>
+ Refresh Rate: <%= text_field_tag "refresh_rate" %>
<%= hidden_field_tag "refresh_rate", "0" %> <%= submit_to_remote "create_grid_item", "Create", :url => {:action => "create_grid_item", :type => type}, :html => {:class => "create"}, :condition => "validateForm()" %>
<%= submit_to_remote "update_grid_item", "Update", :url => {:action => "update_grid_item", :type => type}, :html => {:class => "update"}, :condition => "validateForm()" %> diff --git a/app/views/griditems/plugins/gauge/_formfor_gauge.html.erb b/app/views/griditems/plugins/gauge/_formfor_gauge.html.erb index 470e5c2..8a30447 100644 --- a/app/views/griditems/plugins/gauge/_formfor_gauge.html.erb +++ b/app/views/griditems/plugins/gauge/_formfor_gauge.html.erb @@ -8,5 +8,5 @@ Path: <%= text_field_tag "path", "", :size=>24 %>
Refresh: <%= text_field_tag "refresh_rate"%>
<%= submit_to_remote "create_grid_item", "Create", :url => {:action => "create_grid_item", :type => type}, :html => {:class => "create"}, :condition => "validateForm()" %>
- <%= submit_to_remote "update_grid_item", "Update", :url => {:action => "update_grid_item", :type => type}, :html => {:class => "update"} :condition => "validateForm()"%> + <%= submit_to_remote "update_grid_item", "Update", :url => {:action => "update_grid_item", :type => type}, :html => {:class => "update"}, :condition => "validateForm()"%> <% end %> diff --git a/app/views/griditems/plugins/nagios/_formfor_nagios.html.erb b/app/views/griditems/plugins/nagios/_formfor_nagios.html.erb index 5da1d74..d10d8fb 100644 --- a/app/views/griditems/plugins/nagios/_formfor_nagios.html.erb +++ b/app/views/griditems/plugins/nagios/_formfor_nagios.html.erb @@ -4,7 +4,7 @@ Height: <%= text_field_tag "height", "", :size=>4%>
Uri: <%= text_field_tag "uri", "", :size=>24 %>
Nagios User Name : <%= text_field_tag "username"%>
- Nagios Password : <%= text_field_tag "password"%>
+ Nagios Password : <%= password_field_tag "password"%>
Refresh (in seconds): <%= text_field_tag "refresh_rate", "", :size=>10, :id => "height" %>
<%= submit_to_remote "create_grid_item", "Update", :url => {:action => "create_grid_item", :type => type}, :html => {:class => "create"}, :condition => "validateForm()" %>
<%= submit_to_remote "update_grid_item", "Update", :url => {:action => "update_grid_item", :type => type}, :html => {:class => "update"}, :condition => "validateForm()" %> diff --git a/app/views/griditems/plugins/nagios/_nagios.html.erb b/app/views/griditems/plugins/nagios/_nagios.html.erb index e58fded..e877ba6 100644 --- a/app/views/griditems/plugins/nagios/_nagios.html.erb +++ b/app/views/griditems/plugins/nagios/_nagios.html.erb @@ -1,2 +1,10 @@ -<%= nagios(@parameters["uri"], @parameters["username"], @parameters["password"], @title) %> - +<% result = nagios(@parameters["uri"], @parameters["username"], @parameters["password"], @title) %> +<% if result == "error1" %> + <%= javascript_tag "alert('Could not create Nagios item. Please check if the url is correct.')"%> + <%= javascript_tag "jQuery('##{itemid}').remove();" %> +<% elsif result == "error2" %> + <%= javascript_tag "alert('Could not create Nagios item. Please check if your username and password are correct.')"%> + <%= javascript_tag "jQuery('##{itemid}').remove();" %> +<% else %> + <%= result %> +<% end %> diff --git a/app/views/griditems/plugins/twitter/_formfor_twitter.html.erb b/app/views/griditems/plugins/twitter/_formfor_twitter.html.erb index 0ce27cb..3f32749 100644 --- a/app/views/griditems/plugins/twitter/_formfor_twitter.html.erb +++ b/app/views/griditems/plugins/twitter/_formfor_twitter.html.erb @@ -1,8 +1,9 @@ <% form_remote_tag :html => { :action => url_for(:controller => "griditems", :action =>"create_grid_item"), :id => "form_for"} do %> - Following? : <%= text_field_tag "title" %>
+ Title : <%= text_field_tag "title" %>
Width : <%= text_field_tag "width", "", :size=>4%>
Height: <%= text_field_tag "height", "", :size=>4%>
Feed uri: <%= text_field_tag "uri", "", :size=>24 %>
+ Refresh Rate: <%= text_field_tag "refresh_rate"%>
<%= hidden_field_tag "refresh_rate", "0"%> <%= submit_to_remote "create_grid_item", "Create", :url => {:action => "create_grid_item", :type => type}, :html => {:class => "create"}, :condition => "validateForm()" %>
<%= submit_to_remote "update_grid_item", "Update", :url => {:action => "update_grid_item", :type => type}, :html => {:class => "update"}, :condition => "validateForm()" %> diff --git a/app/views/griditems/plugins/twitter/_twitter.html.erb b/app/views/griditems/plugins/twitter/_twitter.html.erb index d5cc9de..95b2990 100644 --- a/app/views/griditems/plugins/twitter/_twitter.html.erb +++ b/app/views/griditems/plugins/twitter/_twitter.html.erb @@ -1,19 +1,23 @@ <% feed = get_feed(@parameters["uri"])%> -
-
- <%= @parameters["title"] %> -
- - <% feed.items.each_with_index do |topic,i| %> - + <%= javascript_tag "update_twitterfeed(#{feed.items.size})"%> +<% end %> diff --git a/lib/generators/board_plugin/board_plugin_generator.rb b/lib/generators/board_plugin/board_plugin_generator.rb index 0f41490..702e3be 100644 --- a/lib/generators/board_plugin/board_plugin_generator.rb +++ b/lib/generators/board_plugin/board_plugin_generator.rb @@ -17,7 +17,7 @@ def manifest m.directory "vendor/plugins/bernard_#{@plugin_name}/lib/javascripts" m.directory "vendor/plugins/bernard_#{@plugin_name}/lib/stylesheets" m.directory "vendor/plugins/bernard_#{@plugin_name}/lib/views" - m.file "lib/javascripts/javascripts.js", "vendor/plugins/bernard_#{@plugin_name}/lib/javascripts/#{@plugin_name}.js" + m.template "lib/javascripts/javascripts.js.erb", "vendor/plugins/bernard_#{@plugin_name}/lib/javascripts/#{@plugin_name}.js" m.file "lib/stylesheets/stylesheets.css", "vendor/plugins/bernard_#{@plugin_name}/lib/stylesheets/#{@plugin_name}.css" m.file "lib/views/_formfor_plugin.html.erb", "vendor/plugins/bernard_#{@plugin_name}/lib/views/_formfor_#{@plugin_name}.html.erb" m.file "lib/views/view.html.erb", "vendor/plugins/bernard_#{@plugin_name}/lib/views/_#{@plugin_name}.html.erb" diff --git a/lib/generators/board_plugin/templates/lib/javascripts/javascripts.js b/lib/generators/board_plugin/templates/lib/javascripts/javascripts.js deleted file mode 100644 index e5305e4..0000000 --- a/lib/generators/board_plugin/templates/lib/javascripts/javascripts.js +++ /dev/null @@ -1 +0,0 @@ -//Your Javascript goes here diff --git a/lib/generators/board_plugin/templates/lib/views/_formfor_plugin.html.erb b/lib/generators/board_plugin/templates/lib/views/_formfor_plugin.html.erb index e170302..4437a5b 100644 --- a/lib/generators/board_plugin/templates/lib/views/_formfor_plugin.html.erb +++ b/lib/generators/board_plugin/templates/lib/views/_formfor_plugin.html.erb @@ -1,4 +1,4 @@ -<% form_remote_tag :html => { :action => url_for(:controller => "griditems", :action =>"create_grid_item"), :id => "form_for"} do %>" +<% form_remote_tag :html => { :action => url_for(:controller => "griditems", :action =>"create_grid_item"), :id => "form_for"} do %> Title : <%= text_field_tag "title" %>
Width : <%= text_field_tag "width", "", :size=>4%>
@@ -7,6 +7,6 @@ - <%= submit_to_remote "create_grid_item", "Create", :url => {:action => "create_grid_item", :type => type}, :html => {:class => "create"}, :condition => "" %>
- <%= submit_to_remote "update_grid_item", "Update", :url => {:action => "update_grid_item", :type => type}, :html => {:class => "update"}, :condition => ""%> + <%= submit_to_remote "create_grid_item", "Create", :url => {:action => "create_grid_item", :type => type}, :html => {:class => "create"}, :condition => "validateForm()" %>
+ <%= submit_to_remote "update_grid_item", "Update", :url => {:action => "update_grid_item", :type => type}, :html => {:class => "update"}, :condition => "validateForm()"%> <% end %> diff --git a/lib/generators/board_plugin/templates/tasks/plugin_tasks.rake.erb b/lib/generators/board_plugin/templates/tasks/plugin_tasks.rake.erb index b7658a5..285b977 100644 --- a/lib/generators/board_plugin/templates/tasks/plugin_tasks.rake.erb +++ b/lib/generators/board_plugin/templates/tasks/plugin_tasks.rake.erb @@ -10,4 +10,17 @@ namespace :<%= plugin_name.to_sym%> do system "echo '\n\nSync failed!" end end + desc "Remove plugin files from Bernard-Board" + task :remove do + a = system "rm -rf app/views/griditems/plugins/<%= plugin_name %>" + a = system "rm public/javascripts/<%= plugin_name %>.js" + a = system "rm public/stylesheets/<%= plugin_name %>.css" + if a == true + system "echo '\n\n<%= plugin_name %> was removed'" + system "echo '\n<%= plugin_name %> source can be deleted from /vendor/plugins/bernard_<%=plugin_name%>' " + else + system "echo '\n\n<%= plugin_name %> could not be removed'" + end + end + end diff --git a/public/javascripts/bernard.js b/public/javascripts/bernard.js index 001a525..692811f 100644 --- a/public/javascripts/bernard.js +++ b/public/javascripts/bernard.js @@ -220,25 +220,45 @@ function positionItem(item, x, y){ jQuery(i).offset({top : y, left : x }) } -//Validate general form fields. -//Annonymous function is behaving strangely. Return is not terminating function. Look at that. +//Validate general form fields. +//Try find a way around using an eval function validateForm(){ - var returnValue = true; - jQuery(':input', '#form_for').each(function(){ - if(this.value == ""){ - alert("Please complete all fields."); - returnValue = false; - return false; - } - }); + var returnVal = true; + + if(jQuery('#form_for input[name=title]').val() == ""){ + alert("Title field cannot be empty"); + returnVal = false; + } + else if(jQuery('#form_for input[name=height]').val() == ""){ + alert("Height field cannot be empty"); + returnVal = false; + } + else if(jQuery('#form_for input[name=width]').val() == ""){ + alert("Width field cannot be empty"); + returnVal = false; + } + else if (jQuery('#form_for input[name=refresh_rate]').val() == ""){ + alert("Refresh rate cannot be empty. (If you do not want the plugin to refresh, set rate to 0)"); + returnVal = false; + } if(isNaN(jQuery('#form_for input[name=width]').val())){ - alert("Width must be a integer value."); - returnValue = false; + alert("Width must be an integer value."); + returnVal = false; } if(isNaN(jQuery('#form_for input[name=height]').val())){ - alert("Height must be a integer value."); - returnValue = false; + alert("Height must be an integer value."); + returnVal = false; + } + if(isNaN(jQuery('#form_for input[name=refresh_rate]').val())){ + alert("Refresh Rate must be an integer value."); + returnVal = false; + } + + if(returnVal != false){ + returnVal = eval("validate" + jQuery('#type').val() + "();") } - return returnValue; + + return returnVal; + } diff --git a/public/javascripts/calendar.js b/public/javascripts/calendar.js index e5305e4..b90ac00 100644 --- a/public/javascripts/calendar.js +++ b/public/javascripts/calendar.js @@ -1 +1,11 @@ -//Your Javascript goes here +function validateCalendar() { + if(jQuery('#form_for input[name=usrname]').val() == ""){ + alert("Username field cannot be empty"); + return false; + } + else if (jQuery('#form_for input[name=passwrd]').val() ==""){ + alert("Password field cannot be empty"); + return false; + } + return true; +} diff --git a/public/javascripts/feed.js b/public/javascripts/feed.js index 25e2e73..27dcb65 100644 --- a/public/javascripts/feed.js +++ b/public/javascripts/feed.js @@ -53,3 +53,11 @@ function resizeText(container, currentFeed){ cheight = jQuery("#fontfit"+ currentFeed).height(); } } + +function validateFeed(){ + if(jQuery('#form_for input[name=uri]').val() == ""){ + alert("RSS url field cannot be empty"); + return false; + } + return true; +} diff --git a/public/javascripts/gauge.js b/public/javascripts/gauge.js index f5d977e..7f3fd84 100644 --- a/public/javascripts/gauge.js +++ b/public/javascripts/gauge.js @@ -1,6 +1,19 @@ var gaugeArray = new Object; google.load('visualization', '1', {packages:['gauge']}); +function validateGauge(){ + if(jQuery('#form_for input[name=remote]').attr("checked") == true && jQuery('#form_for input[name=url]').val() == ""){ + alert("Url field cannot be empty"); + return false; + } + else if(jQuery('#form_for input[name=path]').val() == ""){ + alert("Path field cannot be empty"); + return false; + } + return true; +} + + function drawChart(_height, _width, value, div, title) { gaugeArray[div] = new google.visualization.Gauge(document.getElementById(div)); gaugeArray[div]['data'] = new google.visualization.DataTable(); diff --git a/public/javascripts/image.js b/public/javascripts/image.js index e5305e4..d97e94d 100644 --- a/public/javascripts/image.js +++ b/public/javascripts/image.js @@ -1 +1,12 @@ -//Your Javascript goes here +function validateImage(){ + if(jQuery('#form_for input[name=remote]').attr("checked") == true && jQuery('#form_for input[name=url]').val() == ""){ + alert("Url field cannot be empty"); + return false; + } + else if(jQuery('#form_for input[name=image]').val() == ""){ + alert("Image Location field cannot be empty"); + return false; + } + return true; + +} diff --git a/public/javascripts/nagios.js b/public/javascripts/nagios.js index e5305e4..d78dd5e 100644 --- a/public/javascripts/nagios.js +++ b/public/javascripts/nagios.js @@ -1 +1,16 @@ -//Your Javascript goes here +function validateNagios(){ + if(jQuery('#form_for input[name=uri]').val() == ""){ + alert("Uri field cannot be empty"); + return false; + } + else if(jQuery('#form_for input[name=username]').val() == ""){ + alert("Username field cannot be empty"); + return false; + } + else if(jQuery('#form_for input[name=password]').val() == ""){ + alert("Password field cannot be empty"); + return false; + } + + return true; +} diff --git a/public/javascripts/twitter.js b/public/javascripts/twitter.js index ed9caed..9e5ab95 100644 --- a/public/javascripts/twitter.js +++ b/public/javascripts/twitter.js @@ -1,3 +1,11 @@ +function validateTwitter(){ + if(jQuery('#form_for input[name=uri]').val() == ""){ + alert("Feed Uri field cannot be empty"); + return false; + } + return true; +} + function update_twitterfeed(size){ jQuery('#twitterfeed0').show(); var feedSize = size; diff --git a/vendor/plugins/bernard_calendar/lib/calendar.rb b/vendor/plugins/bernard_calendar/lib/calendar.rb index d6f7612..27c3484 100644 --- a/vendor/plugins/bernard_calendar/lib/calendar.rb +++ b/vendor/plugins/bernard_calendar/lib/calendar.rb @@ -2,8 +2,13 @@ module Calendar require 'gcal4ruby' def calendar(username, password) - service = GCal4Ruby::Service.new - service.authenticate(username, password) - return service.events + + begin + service = GCal4Ruby::Service.new + service.authenticate(username, password) + return service.events + rescue Exception => e + return "error" + end end end diff --git a/vendor/plugins/bernard_calendar/lib/javascripts/calendar.js b/vendor/plugins/bernard_calendar/lib/javascripts/calendar.js index e5305e4..b90ac00 100644 --- a/vendor/plugins/bernard_calendar/lib/javascripts/calendar.js +++ b/vendor/plugins/bernard_calendar/lib/javascripts/calendar.js @@ -1 +1,11 @@ -//Your Javascript goes here +function validateCalendar() { + if(jQuery('#form_for input[name=usrname]').val() == ""){ + alert("Username field cannot be empty"); + return false; + } + else if (jQuery('#form_for input[name=passwrd]').val() ==""){ + alert("Password field cannot be empty"); + return false; + } + return true; +} diff --git a/vendor/plugins/bernard_calendar/lib/views/_calendar.html.erb b/vendor/plugins/bernard_calendar/lib/views/_calendar.html.erb index 57c127f..3b3dd61 100644 --- a/vendor/plugins/bernard_calendar/lib/views/_calendar.html.erb +++ b/vendor/plugins/bernard_calendar/lib/views/_calendar.html.erb @@ -1,6 +1,12 @@
<%= @title %>
-<% calendar(@parameters["usrname"], @parameters["passwrd"]).each_with_index do |event, i| %> - <%= event.title %> - <%= event.start_time.strftime("%a %d-%m-%Y %H:%M")%>
-<% end %> +<% calendar_events = calendar(@parameters["usrname"], @parameters["passwrd"]) %> +<% if calendar_events =="error" %> + <%= javascript_tag "alert('Could not create Calendar item. Incorrect username or password.')"%> + <%= javascript_tag "jQuery('##{itemid}').remove();" %> +<% else %> + <% calendar_events.each_with_index do |event, i| %> + <%= event.title %> - <%= event.start_time.strftime("%a %d-%m-%Y %H:%M")%>
+ <% end %> +<%end %> diff --git a/vendor/plugins/bernard_calendar/lib/views/_formfor_calendar.html.erb b/vendor/plugins/bernard_calendar/lib/views/_formfor_calendar.html.erb index 2d8cfb3..9c95e05 100644 --- a/vendor/plugins/bernard_calendar/lib/views/_formfor_calendar.html.erb +++ b/vendor/plugins/bernard_calendar/lib/views/_formfor_calendar.html.erb @@ -3,7 +3,7 @@ Width : <%= text_field_tag "width", "", :size=>4%>
Height: <%= text_field_tag "height", "", :size=>4%>
User name: <%= text_field_tag "usrname", "", :size=>24 %>
- Password : <%= text_field_tag "passwrd" %>
+ Password : <%= password_field_tag "passwrd" %>
Refresh Rate (in seconds): <%= text_field_tag "refresh_rate" %>
<%= submit_to_remote "create_grid_item", "Create", :url => {:action => "create_grid_item", :type => type}, :html => {:class => "create"}, :condition => "validateForm()"%>
<%= submit_to_remote "update_grid_item", "Update", :url => {:action => "update_grid_item", :type => type}, :html => {:class => "update"}, :condition => "validateForm()"%> diff --git a/vendor/plugins/bernard_calendar/tasks/calendar_tasks.rake b/vendor/plugins/bernard_calendar/tasks/calendar_tasks.rake index 20b46ad..3720a37 100644 --- a/vendor/plugins/bernard_calendar/tasks/calendar_tasks.rake +++ b/vendor/plugins/bernard_calendar/tasks/calendar_tasks.rake @@ -9,4 +9,16 @@ namespace :calendar do system "echo '\n\nSync failed!" end end + + task :remove do + a = system "rm -rf app/views/griditems/plugins/calendar" + a = system "rm public/javascripts/calendar.js" + a = system "rm public/stylesheets/calendar.css" + if a == true + system "echo '\n\ncalendar was removed'" + system "echo '\ncalendar source can be deleted from /vendor/plugins/bernard_calendar' " + else + system "echo '\n\ncalendar could not be removed'" + end + end end diff --git a/vendor/plugins/bernard_feed/lib/javascripts/feed.js b/vendor/plugins/bernard_feed/lib/javascripts/feed.js index 25e2e73..27dcb65 100644 --- a/vendor/plugins/bernard_feed/lib/javascripts/feed.js +++ b/vendor/plugins/bernard_feed/lib/javascripts/feed.js @@ -53,3 +53,11 @@ function resizeText(container, currentFeed){ cheight = jQuery("#fontfit"+ currentFeed).height(); } } + +function validateFeed(){ + if(jQuery('#form_for input[name=uri]').val() == ""){ + alert("RSS url field cannot be empty"); + return false; + } + return true; +} diff --git a/vendor/plugins/bernard_feed/lib/views/_formfor_feed.html.erb b/vendor/plugins/bernard_feed/lib/views/_formfor_feed.html.erb index d5b7024..1bb4fbc 100644 --- a/vendor/plugins/bernard_feed/lib/views/_formfor_feed.html.erb +++ b/vendor/plugins/bernard_feed/lib/views/_formfor_feed.html.erb @@ -3,6 +3,7 @@ Width : <%= text_field_tag "width", "", :size=>4%>
Height: <%= text_field_tag "height", "", :size=>4%>
RSS url: <%= text_field_tag "uri", "", :size=>24 %>
+ Refresh Rate: <%= text_field_tag "refresh_rate" %>
<%= hidden_field_tag "refresh_rate", "0" %> <%= submit_to_remote "create_grid_item", "Create", :url => {:action => "create_grid_item", :type => type}, :html => {:class => "create"}, :condition => "validateForm()" %>
<%= submit_to_remote "update_grid_item", "Update", :url => {:action => "update_grid_item", :type => type}, :html => {:class => "update"}, :condition => "validateForm()" %> diff --git a/vendor/plugins/bernard_feed/tasks/feed_tasks.rake b/vendor/plugins/bernard_feed/tasks/feed_tasks.rake index ee6183f..759ac78 100644 --- a/vendor/plugins/bernard_feed/tasks/feed_tasks.rake +++ b/vendor/plugins/bernard_feed/tasks/feed_tasks.rake @@ -9,4 +9,16 @@ namespace :feed do system "echo '\n\nSync failed!" end end + + task :remove do + a = system "rm -rf app/views/griditems/plugins/feed" + a = system "rm public/javascripts/feed.js" + a = system "rm public/stylesheets/feed.css" + if a == true + system "echo '\n\nfeed was removed'" + system "echo '\nfeed source can be deleted from /vendor/plugins/bernard_feed' " + else + system "echo '\n\nfeed could not be removed'" + end + end end diff --git a/vendor/plugins/bernard_gauge/lib/javascripts/gauge.js b/vendor/plugins/bernard_gauge/lib/javascripts/gauge.js index f5d977e..7f3fd84 100644 --- a/vendor/plugins/bernard_gauge/lib/javascripts/gauge.js +++ b/vendor/plugins/bernard_gauge/lib/javascripts/gauge.js @@ -1,6 +1,19 @@ var gaugeArray = new Object; google.load('visualization', '1', {packages:['gauge']}); +function validateGauge(){ + if(jQuery('#form_for input[name=remote]').attr("checked") == true && jQuery('#form_for input[name=url]').val() == ""){ + alert("Url field cannot be empty"); + return false; + } + else if(jQuery('#form_for input[name=path]').val() == ""){ + alert("Path field cannot be empty"); + return false; + } + return true; +} + + function drawChart(_height, _width, value, div, title) { gaugeArray[div] = new google.visualization.Gauge(document.getElementById(div)); gaugeArray[div]['data'] = new google.visualization.DataTable(); diff --git a/vendor/plugins/bernard_gauge/lib/views/_formfor_gauge.html.erb b/vendor/plugins/bernard_gauge/lib/views/_formfor_gauge.html.erb index 470e5c2..8a30447 100644 --- a/vendor/plugins/bernard_gauge/lib/views/_formfor_gauge.html.erb +++ b/vendor/plugins/bernard_gauge/lib/views/_formfor_gauge.html.erb @@ -8,5 +8,5 @@ Path: <%= text_field_tag "path", "", :size=>24 %>
Refresh: <%= text_field_tag "refresh_rate"%>
<%= submit_to_remote "create_grid_item", "Create", :url => {:action => "create_grid_item", :type => type}, :html => {:class => "create"}, :condition => "validateForm()" %>
- <%= submit_to_remote "update_grid_item", "Update", :url => {:action => "update_grid_item", :type => type}, :html => {:class => "update"} :condition => "validateForm()"%> + <%= submit_to_remote "update_grid_item", "Update", :url => {:action => "update_grid_item", :type => type}, :html => {:class => "update"}, :condition => "validateForm()"%> <% end %> diff --git a/vendor/plugins/bernard_gauge/tasks/gauge_tasks.rake b/vendor/plugins/bernard_gauge/tasks/gauge_tasks.rake index ba4156e..886e60a 100644 --- a/vendor/plugins/bernard_gauge/tasks/gauge_tasks.rake +++ b/vendor/plugins/bernard_gauge/tasks/gauge_tasks.rake @@ -9,4 +9,17 @@ namespace :gauge do system "echo '\n\nSync failed!" end end + + task :remove do + a = system "rm -rf app/views/griditems/plugins/gauge" + a = system "rm public/javascripts/gauge.js" + a = system "rm public/stylesheets/gauge.css" + if a == true + system "echo '\n\ngauge was removed'" + system "echo '\ngauge source can be deleted from /vendor/plugins/bernard_gauge' " + else + system "echo '\n\ngauge could not be removed'" + end + end + end diff --git a/vendor/plugins/bernard_image/lib/javascripts/image.js b/vendor/plugins/bernard_image/lib/javascripts/image.js index e5305e4..d97e94d 100644 --- a/vendor/plugins/bernard_image/lib/javascripts/image.js +++ b/vendor/plugins/bernard_image/lib/javascripts/image.js @@ -1 +1,12 @@ -//Your Javascript goes here +function validateImage(){ + if(jQuery('#form_for input[name=remote]').attr("checked") == true && jQuery('#form_for input[name=url]').val() == ""){ + alert("Url field cannot be empty"); + return false; + } + else if(jQuery('#form_for input[name=image]').val() == ""){ + alert("Image Location field cannot be empty"); + return false; + } + return true; + +} diff --git a/vendor/plugins/bernard_image/tasks/image_tasks.rake b/vendor/plugins/bernard_image/tasks/image_tasks.rake index dc952e0..4e16166 100644 --- a/vendor/plugins/bernard_image/tasks/image_tasks.rake +++ b/vendor/plugins/bernard_image/tasks/image_tasks.rake @@ -9,4 +9,16 @@ namespace :image do system "echo '\n\nSync failed!" end end + + task :remove do + a = system "rm -rf app/views/griditems/plugins/image" + a = system "rm public/javascripts/image.js" + a = system "rm public/stylesheets/image.css" + if a == true + system "echo '\n\nimage was removed'" + system "echo '\nimage source can be deleted from /vendor/plugins/bernard_calendar' " + else + system "echo '\n\nimage could not be removed'" + end + end end diff --git a/vendor/plugins/bernard_nagios/lib/javascripts/nagios.js b/vendor/plugins/bernard_nagios/lib/javascripts/nagios.js index e5305e4..d78dd5e 100644 --- a/vendor/plugins/bernard_nagios/lib/javascripts/nagios.js +++ b/vendor/plugins/bernard_nagios/lib/javascripts/nagios.js @@ -1 +1,16 @@ -//Your Javascript goes here +function validateNagios(){ + if(jQuery('#form_for input[name=uri]').val() == ""){ + alert("Uri field cannot be empty"); + return false; + } + else if(jQuery('#form_for input[name=username]').val() == ""){ + alert("Username field cannot be empty"); + return false; + } + else if(jQuery('#form_for input[name=password]').val() == ""){ + alert("Password field cannot be empty"); + return false; + } + + return true; +} diff --git a/vendor/plugins/bernard_nagios/lib/nagios.rb b/vendor/plugins/bernard_nagios/lib/nagios.rb index 4d6f633..628f0d4 100644 --- a/vendor/plugins/bernard_nagios/lib/nagios.rb +++ b/vendor/plugins/bernard_nagios/lib/nagios.rb @@ -2,22 +2,33 @@ module Nagios require 'nokogiri' def nagios(url, username, password, title) - uri = URI.parse("http://#{url.gsub("http://", "")}") - http = Net::HTTP.new(uri.host, uri.port) + #Check is url is valid. + begin + uri = URI.parse("http://#{url.gsub("http://", "")}") + http = Net::HTTP.new(uri.host, uri.port) + rescue Exception => e + return "error1" + end color = "" - #Get page from nagios + + #Authenticate the user. request = Net::HTTP::Get.new(uri.request_uri) request.basic_auth username, password + #Get page from nagios response = http.request(request) + if response.inspect =~/.*401.*/ + return "error2" + end + #Parse html response body html= Nokogiri::HTML(response.body) #Critical - red - #Warning - Yellow + #Warning - Yellow #All good - Green html.css('tr').each do |e| if e.to_s =~/.*statusEven.*|.*statusOdd.*/ - if e.inner_text =~/.*CRITICAL.*/ + if e.inner_text =~/.*CRITICAL.*/ color = "#FF0000" elsif e.inner_text =~/.*WARNING.*/ && color != "#FF0000" color = "#FFFF00" diff --git a/vendor/plugins/bernard_nagios/lib/views/_formfor_nagios.html.erb b/vendor/plugins/bernard_nagios/lib/views/_formfor_nagios.html.erb index 5da1d74..d10d8fb 100644 --- a/vendor/plugins/bernard_nagios/lib/views/_formfor_nagios.html.erb +++ b/vendor/plugins/bernard_nagios/lib/views/_formfor_nagios.html.erb @@ -4,7 +4,7 @@ Height: <%= text_field_tag "height", "", :size=>4%>
Uri: <%= text_field_tag "uri", "", :size=>24 %>
Nagios User Name : <%= text_field_tag "username"%>
- Nagios Password : <%= text_field_tag "password"%>
+ Nagios Password : <%= password_field_tag "password"%>
Refresh (in seconds): <%= text_field_tag "refresh_rate", "", :size=>10, :id => "height" %>
<%= submit_to_remote "create_grid_item", "Update", :url => {:action => "create_grid_item", :type => type}, :html => {:class => "create"}, :condition => "validateForm()" %>
<%= submit_to_remote "update_grid_item", "Update", :url => {:action => "update_grid_item", :type => type}, :html => {:class => "update"}, :condition => "validateForm()" %> diff --git a/vendor/plugins/bernard_nagios/lib/views/_nagios.html.erb b/vendor/plugins/bernard_nagios/lib/views/_nagios.html.erb index e58fded..e877ba6 100644 --- a/vendor/plugins/bernard_nagios/lib/views/_nagios.html.erb +++ b/vendor/plugins/bernard_nagios/lib/views/_nagios.html.erb @@ -1,2 +1,10 @@ -<%= nagios(@parameters["uri"], @parameters["username"], @parameters["password"], @title) %> - +<% result = nagios(@parameters["uri"], @parameters["username"], @parameters["password"], @title) %> +<% if result == "error1" %> + <%= javascript_tag "alert('Could not create Nagios item. Please check if the url is correct.')"%> + <%= javascript_tag "jQuery('##{itemid}').remove();" %> +<% elsif result == "error2" %> + <%= javascript_tag "alert('Could not create Nagios item. Please check if your username and password are correct.')"%> + <%= javascript_tag "jQuery('##{itemid}').remove();" %> +<% else %> + <%= result %> +<% end %> diff --git a/vendor/plugins/bernard_nagios/tasks/nagios_tasks.rake b/vendor/plugins/bernard_nagios/tasks/nagios_tasks.rake index 1b3797c..9443601 100644 --- a/vendor/plugins/bernard_nagios/tasks/nagios_tasks.rake +++ b/vendor/plugins/bernard_nagios/tasks/nagios_tasks.rake @@ -10,4 +10,17 @@ namespace :nagios do system "echo '\n\nSync failed!" end end + + task :remove do + a = system "rm -rf app/views/griditems/plugins/nagios" + a = system "rm public/javascripts/nagios.js" + a = system "rm public/stylesheets/nagios.css" + if a == true + system "echo '\n\nnagios was removed'" + system "echo '\nnagios source can be deleted from /vendor/plugins/bernard_nagios' " + else + system "echo '\n\nnagios could not be removed'" + end + end + end diff --git a/vendor/plugins/bernard_twitter/lib/javascripts/twitter.js b/vendor/plugins/bernard_twitter/lib/javascripts/twitter.js index ed9caed..9e5ab95 100644 --- a/vendor/plugins/bernard_twitter/lib/javascripts/twitter.js +++ b/vendor/plugins/bernard_twitter/lib/javascripts/twitter.js @@ -1,3 +1,11 @@ +function validateTwitter(){ + if(jQuery('#form_for input[name=uri]').val() == ""){ + alert("Feed Uri field cannot be empty"); + return false; + } + return true; +} + function update_twitterfeed(size){ jQuery('#twitterfeed0').show(); var feedSize = size; diff --git a/vendor/plugins/bernard_twitter/lib/views/_formfor_twitter.html.erb b/vendor/plugins/bernard_twitter/lib/views/_formfor_twitter.html.erb index 0ce27cb..3f32749 100644 --- a/vendor/plugins/bernard_twitter/lib/views/_formfor_twitter.html.erb +++ b/vendor/plugins/bernard_twitter/lib/views/_formfor_twitter.html.erb @@ -1,8 +1,9 @@ <% form_remote_tag :html => { :action => url_for(:controller => "griditems", :action =>"create_grid_item"), :id => "form_for"} do %> - Following? : <%= text_field_tag "title" %>
+ Title : <%= text_field_tag "title" %>
Width : <%= text_field_tag "width", "", :size=>4%>
Height: <%= text_field_tag "height", "", :size=>4%>
Feed uri: <%= text_field_tag "uri", "", :size=>24 %>
+ Refresh Rate: <%= text_field_tag "refresh_rate"%>
<%= hidden_field_tag "refresh_rate", "0"%> <%= submit_to_remote "create_grid_item", "Create", :url => {:action => "create_grid_item", :type => type}, :html => {:class => "create"}, :condition => "validateForm()" %>
<%= submit_to_remote "update_grid_item", "Update", :url => {:action => "update_grid_item", :type => type}, :html => {:class => "update"}, :condition => "validateForm()" %> diff --git a/vendor/plugins/bernard_twitter/lib/views/_twitter.html.erb b/vendor/plugins/bernard_twitter/lib/views/_twitter.html.erb index d5cc9de..95b2990 100644 --- a/vendor/plugins/bernard_twitter/lib/views/_twitter.html.erb +++ b/vendor/plugins/bernard_twitter/lib/views/_twitter.html.erb @@ -1,19 +1,23 @@ <% feed = get_feed(@parameters["uri"])%> -
-
- <%= @parameters["title"] %> -
- - <% feed.items.each_with_index do |topic,i| %> - + <%= javascript_tag "update_twitterfeed(#{feed.items.size})"%> +<% end %> diff --git a/vendor/plugins/bernard_twitter/tasks/twitter_tasks.rake b/vendor/plugins/bernard_twitter/tasks/twitter_tasks.rake index fb5ad4a..36377f4 100644 --- a/vendor/plugins/bernard_twitter/tasks/twitter_tasks.rake +++ b/vendor/plugins/bernard_twitter/tasks/twitter_tasks.rake @@ -9,4 +9,16 @@ namespace :twitter do system "echo '\n\nSync failed!" end end + + task :remove do + a = system "rm -rf app/views/griditems/plugins/twitter" + a = system "rm public/javascripts/twitter.js" + a = system "rm public/stylesheets/twitter.css" + if a == true + system "echo '\n\ntwitter was removed'" + system "echo '\ntwitter source can be deleted from /vendor/plugins/bernard_twitter' " + else + system "echo '\n\ntwitter could not be removed'" + end + end end