diff options
author | Stefan Wintermeyer <stefan.wintermeyer@amooma.de> | 2013-02-16 11:10:02 +0100 |
---|---|---|
committer | Stefan Wintermeyer <stefan.wintermeyer@amooma.de> | 2013-02-16 11:10:02 +0100 |
commit | 5d8ce5f4775ac8bc5f523964e6e36f63ff3c4683 (patch) | |
tree | 49ed889b1d10cda98c475f3453abff1b97afb4e7 | |
parent | c9066760fd1f5f2f892ce2be5cf2a83bb5210246 (diff) | |
parent | 55784bcffc0678ce6102c0b81447434a8030ebd2 (diff) |
Merge branch 'develop'5.1-beta5
135 files changed, 1931 insertions, 316 deletions
@@ -1,6 +1,11 @@ +if RUBY_VERSION =~ /1.9/ + Encoding.default_external = Encoding::UTF_8 + Encoding.default_internal = Encoding::UTF_8 +end + source 'http://rubygems.org' -gem 'rails', '3.2.11' +gem 'rails', '3.2.12' gem 'bcrypt-ruby' gem 'sqlite3' gem 'mysql2' @@ -48,8 +53,9 @@ group :test do gem 'factory_girl_rails' end -gem "haml" -gem "simple_form", '2.0.1' +gem 'haml' +# gem 'simple_form', '~> 2.0.1' +gem 'simple_form', github: 'plataformatec/simple_form', branch: 'v2.1' # Image Upload gem 'carrierwave' diff --git a/Gemfile.lock b/Gemfile.lock index 8491109..d8531cd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,31 +1,40 @@ +GIT + remote: git://github.com/plataformatec/simple_form.git + revision: e3da7301dcf6feb9a1db275ff5cb3f85afce0e80 + branch: v2.1 + specs: + simple_form (2.1.0.dev) + actionpack (~> 3.0) + activemodel (~> 3.0) + GEM remote: http://rubygems.org/ specs: - actionmailer (3.2.11) - actionpack (= 3.2.11) + actionmailer (3.2.12) + actionpack (= 3.2.12) mail (~> 2.4.4) - actionpack (3.2.11) - activemodel (= 3.2.11) - activesupport (= 3.2.11) + actionpack (3.2.12) + activemodel (= 3.2.12) + activesupport (= 3.2.12) builder (~> 3.0.0) erubis (~> 2.7.0) journey (~> 1.0.4) - rack (~> 1.4.0) + rack (~> 1.4.5) rack-cache (~> 1.2) rack-test (~> 0.6.1) sprockets (~> 2.2.1) - activemodel (3.2.11) - activesupport (= 3.2.11) + activemodel (3.2.12) + activesupport (= 3.2.12) builder (~> 3.0.0) - activerecord (3.2.11) - activemodel (= 3.2.11) - activesupport (= 3.2.11) + activerecord (3.2.12) + activemodel (= 3.2.12) + activesupport (= 3.2.12) arel (~> 3.0.2) tzinfo (~> 0.3.29) - activeresource (3.2.11) - activemodel (= 3.2.11) - activesupport (= 3.2.11) - activesupport (3.2.11) + activeresource (3.2.12) + activemodel (= 3.2.12) + activesupport (= 3.2.12) + activesupport (3.2.12) i18n (~> 0.6) multi_json (~> 1.0) acts_as_list (0.1.9) @@ -66,7 +75,7 @@ GEM dalli (2.6.2) delayed_job (3.0.5) activesupport (~> 3.0) - delayed_job_active_record (0.4.0) + delayed_job_active_record (0.4.1) activerecord (>= 2.1.0, < 4) delayed_job (~> 3.0) erubis (2.7.0) @@ -79,7 +88,8 @@ GEM factory_girl (~> 4.2.0) railties (>= 3.0.0) fssm (0.2.10) - haml (3.1.7) + haml (4.0.0) + tilt hike (1.2.1) hirb (0.7.1) http_accept_language (1.0.2) @@ -100,7 +110,7 @@ GEM mime-types (1.21) mini_magick (3.4) subexec (~> 0.2.1) - multi_json (1.5.1) + multi_json (1.6.0) mysql2 (0.3.11) nokogiri (1.5.6) open4 (1.3.0) @@ -114,17 +124,17 @@ GEM rack rack-test (0.6.2) rack (>= 1.0) - rails (3.2.11) - actionmailer (= 3.2.11) - actionpack (= 3.2.11) - activerecord (= 3.2.11) - activeresource (= 3.2.11) - activesupport (= 3.2.11) + rails (3.2.12) + actionmailer (= 3.2.12) + actionpack (= 3.2.12) + activerecord (= 3.2.12) + activeresource (= 3.2.12) + activesupport (= 3.2.12) bundler (~> 1.0) - railties (= 3.2.11) - railties (3.2.11) - actionpack (= 3.2.11) - activesupport (= 3.2.11) + railties (= 3.2.12) + railties (3.2.12) + actionpack (= 3.2.12) + activesupport (= 3.2.12) rack-ssl (~> 1.3.2) rake (>= 0.8.7) rdoc (~> 3.4) @@ -141,9 +151,6 @@ GEM sextant (0.2.3) activesupport (>= 3.2) rails (>= 3.2) - simple_form (2.0.1) - actionpack (~> 3.0) - activemodel (~> 3.0) sprockets (2.2.2) hike (~> 1.2) multi_json (~> 1.0) @@ -211,10 +218,10 @@ DEPENDENCIES mysql2 nokogiri quiet_assets - rails (= 3.2.11) + rails (= 3.2.12) sass-rails sextant - simple_form (= 2.0.1) + simple_form! sqlite3 state_machine strong_parameters diff --git a/app/assets/stylesheets/gemeinschaft-generic.css.scss b/app/assets/stylesheets/gemeinschaft-generic.css.scss index e594d67..fbeaa1f 100644 --- a/app/assets/stylesheets/gemeinschaft-generic.css.scss +++ b/app/assets/stylesheets/gemeinschaft-generic.css.scss @@ -6,6 +6,27 @@ body { padding-top: 60px; padding-bottom: 40px; } + +// Nav +li.display { + line-height: 40px; + img { + vertical-align: middle; + width: 26px; + margin-top: -2px; + } +} + +// SimpleForm Inline Checkbox Fix +.simple-checkbox .checkbox { + text-align: left; + width: auto; + float: none; +} +input, textarea, .uneditable-input { + width: 500px; +} + @media (max-width: 979px) { body { padding-top: 0px; diff --git a/app/controllers/config_snom_controller.rb b/app/controllers/config_snom_controller.rb index 58cced2..76fa633 100644 --- a/app/controllers/config_snom_controller.rb +++ b/app/controllers/config_snom_controller.rb @@ -282,28 +282,31 @@ class ConfigSnomController < ApplicationController @softkeys.push({:context => sip_account_index, :label => softkey.label, :data => "speed f-li-#{softkey.number}"}) when 'conference' @softkeys.push({:context => sip_account_index, :label => softkey.label, :data => "blf <sip:#{softkey.number}@#{sip_account.host}>|f-ta-"}) - when 'call_parking' - @softkeys.push({ - :context => sip_account_index, - :function => softkey.softkey_function.name, - :label => softkey.label, - :softkey => softkey, - :general_type => t("softkeys.functions.#{softkey.softkey_function.name}"), - :subscription => { - :to => "park+#{@softkeys.softkeyable_id}@#{sip_account.host}", - :for => "#{sip_account.auth_name}@#{sip_account.host}" - }, - :actions => [{ - :type => :dial, - :target => "f-tpark-#{@softkeys.softkeyable_id}", - :when => 'on press', - :states => 'connected,holding', - },{ - :type => :dial, - :target => "f-park-#{@softkeys.softkeyable_id}", - :when => 'on press', - }], - }) + when 'parking_stall' + parking_stall = softkey.softkeyable + if parking_stall.class == ParkingStall + @softkeys.push({ + :context => sip_account_index, + :function => softkey.softkey_function.name, + :label => softkey.label, + :softkey => softkey, + :general_type => t("softkeys.functions.#{softkey.softkey_function.name}"), + :subscription => { + :to => "sip:park+#{parking_stall.name}@#{sip_account.host}", + :for => "sip:park+#{parking_stall.name}@#{sip_account.host}", + }, + :actions => [{ + :type => :dial, + :target => "f-cpa-#{parking_stall.name}", + :when => 'on press', + :states => 'connected,holding', + },{ + :type => :dial, + :target => "f-cpa-#{parking_stall.name}", + :when => 'on press', + }], + }) + end when 'call_forwarding' if softkey.softkeyable.class == CallForward then @softkeys.push({ @@ -313,8 +316,8 @@ class ConfigSnomController < ApplicationController :softkey => softkey, :general_type => t("softkeys.functions.#{softkey.softkey_function.name}"), :subscription => { - :to => "f-cftg-#{softkey.softkeyable_id}@#{sip_account.host}", - :for => "#{sip_account.auth_name}@#{sip_account.host}" + :to => "sip:f-cftg-#{softkey.softkeyable_id}@#{sip_account.host}", + :for => "sip:f-cftg-#{softkey.softkeyable_id}@#{sip_account.host}" }, :actions => [{ :type => :url, diff --git a/app/controllers/intruders_controller.rb b/app/controllers/intruders_controller.rb index eb34f2b..147e06d 100644 --- a/app/controllers/intruders_controller.rb +++ b/app/controllers/intruders_controller.rb @@ -1,18 +1,25 @@ class IntrudersController < ApplicationController def index @intruders = Intruder.all + spread_breadcrumbs end def show @intruder = Intruder.find(params[:id]) + if ! params[:whois].blank? + @whois = @intruder.whois(params[:whois]) + end + spread_breadcrumbs end def new @intruder = Intruder.new + spread_breadcrumbs end def create @intruder = Intruder.new(params[:intruder]) + spread_breadcrumbs if @intruder.save redirect_to @intruder, :notice => t('intruders.controller.successfuly_created') else @@ -22,10 +29,12 @@ class IntrudersController < ApplicationController def edit @intruder = Intruder.find(params[:id]) + spread_breadcrumbs end def update @intruder = Intruder.find(params[:id]) + spread_breadcrumbs if @intruder.update_attributes(params[:intruder]) redirect_to @intruder, :notice => t('intruders.controller.successfuly_updated') else @@ -35,7 +44,16 @@ class IntrudersController < ApplicationController def destroy @intruder = Intruder.find(params[:id]) + spread_breadcrumbs @intruder.destroy redirect_to intruders_url, :notice => t('intruders.controller.successfuly_destroyed') end + + private + def spread_breadcrumbs + add_breadcrumb t("intruders.index.page_title"), intruders_path + if @intruder && !@intruder.new_record? + add_breadcrumb @intruder, @intruder + end + end end diff --git a/app/controllers/parking_stalls_controller.rb b/app/controllers/parking_stalls_controller.rb new file mode 100644 index 0000000..d1bc0c7 --- /dev/null +++ b/app/controllers/parking_stalls_controller.rb @@ -0,0 +1,69 @@ +class ParkingStallsController < ApplicationController + + load_resource :tenant + load_resource :user + load_and_authorize_resource :parking_stall, :through => [:user, :tenant ] + + before_filter :set_and_authorize_parent + before_filter :spread_breadcrumbs + + def index + end + + def show + end + + def new + @parking_stall.lot = 'default' + @parking_stall.name = ParkingStall.order(:name).last.try(:name).to_i + 1 + end + + def create + @parking_stall = @parent.parking_stalls.build(params[:parking_stall]) + if @parking_stall.save + redirect_to [@parent, @parking_stall], :notice => t('parking_stalls.controller.successfuly_created') + else + render :new + end + end + + def edit + end + + def update + if @parking_stall.update_attributes(params[:parking_stall]) + redirect_to [@parent, @parking_stall], :notice => t('parking_stalls.controller.successfuly_updated') + else + render :edit + end + end + + def destroy + @parking_stall.destroy + m = method( :"#{@parent.class.name.underscore}_parking_stalls_url" ) + redirect_to m.(@parent), :notice => t('parking_stalls.controller.successfuly_destroyed') + end + + private + def set_and_authorize_parent + @parent = @user || @tenant + authorize! :read, @parent + end + + def spread_breadcrumbs + if @user + add_breadcrumb t("users.index.page_title"), tenant_users_path(@user.current_tenant) + add_breadcrumb @user, tenant_user_path(@user.current_tenant, @user) + add_breadcrumb t("parking_stalls.index.page_title"), user_parking_stalls_path(@user) + if @parking_stall && !@parking_stall.new_record? + add_breadcrumb @parking_stall, user_parking_stall_path(@user, @parking_stall) + end + end + if @tenant + add_breadcrumb t("parking_stalls.index.page_title"), tenant_parking_stalls_path(@tenant) + if @parking_stall && !@parking_stall.new_record? + add_breadcrumb @parking_stall, tenant_parking_stall_path(@tenant, @parking_stall) + end + end + end +end diff --git a/app/controllers/sim_card_providers_controller.rb b/app/controllers/sim_card_providers_controller.rb new file mode 100644 index 0000000..e9a019c --- /dev/null +++ b/app/controllers/sim_card_providers_controller.rb @@ -0,0 +1,47 @@ +class SimCardProvidersController < ApplicationController + load_and_authorize_resource :sim_card_provider + before_filter :spread_breadcrumbs + + def index + end + + def show + end + + def new + end + + def create + if @sim_card_provider.save + redirect_to @sim_card_provider, :notice => t('sim_card_providers.controller.successfuly_created') + else + render :new + end + end + + def edit + end + + def update + if @sim_card_provider.update_attributes(params[:sim_card_provider]) + redirect_to @sim_card_provider, :notice => t('sim_card_providers.controller.successfuly_updated') + else + render :edit + end + end + + def destroy + @sim_card_provider.destroy + redirect_to sim_card_providers_url, :notice => t('sim_card_providers.controller.successfuly_destroyed') + end + + private + + def spread_breadcrumbs + add_breadcrumb t("sim_card_providers.index.page_title"), sim_card_providers_path + if @sim_card_provider && !@sim_card_provider.new_record? + add_breadcrumb @sim_card_provider, sim_card_provider_path(@sim_card_provider) + end + end + +end diff --git a/app/controllers/sim_cards_controller.rb b/app/controllers/sim_cards_controller.rb new file mode 100644 index 0000000..ed46843 --- /dev/null +++ b/app/controllers/sim_cards_controller.rb @@ -0,0 +1,57 @@ +class SimCardsController < ApplicationController + load_and_authorize_resource :sim_card_provider + load_and_authorize_resource :sim_card, :through => [:sim_card_provider] + + before_filter :set_parent + before_filter :spread_breadcrumbs + + def index + end + + def show + end + + def new + @sim_card = @sim_card_provider.sim_cards.build + + @with_phones_connected_sip_account_ids = SipAccount.where(:id => PhoneSipAccount.pluck(:sip_account_id)).pluck(:id) + @with_sim_cards_connected_sip_account_ids = SimCard.pluck(:sip_account_id) + @available_sip_account_ids = SipAccount.pluck(:id) - (@with_phones_connected_sip_account_ids + @with_sim_cards_connected_sip_account_ids) + + @available_sip_accounts = SipAccount.where(:id => @available_sip_account_ids) + + if @available_sip_accounts.count == 0 + redirect_to sim_card_provider_sim_cards_path(@sim_card_provider), :alert => t('sim_cards.controller.no_existing_sip_accounts_warning') + end + + end + + def create + @sim_card = @sim_card_provider.sim_cards.build(params[:sim_card]) + if @sim_card.save + redirect_to [@sim_card_provider, @sim_card], :notice => t('sim_cards.controller.successfuly_created') + else + render :new + end + end + + def destroy + @sim_card.destroy + redirect_to sim_card_provider_sim_cards_url(@sim_card_provider), :notice => t('sim_cards.controller.successfuly_destroyed') + end + + private + def set_parent + @parent = @sim_card_provider + end + + def spread_breadcrumbs + add_breadcrumb t("sim_card_providers.index.page_title"), sim_card_providers_path + add_breadcrumb @sim_card_provider, sim_card_provider_path(@sim_card_provider) + add_breadcrumb t("sim_cards.index.page_title"), sim_card_provider_sim_cards_path(@sim_card_provider) + if @sim_card && !@sim_card.new_record? + add_breadcrumb @sim_card, sim_card_provider_sim_card_path(@sim_card_provider, @sim_card) + end + end + +end diff --git a/app/helpers/parking_stalls_helper.rb b/app/helpers/parking_stalls_helper.rb new file mode 100644 index 0000000..135bfee --- /dev/null +++ b/app/helpers/parking_stalls_helper.rb @@ -0,0 +1,2 @@ +module ParkingStallsHelper +end diff --git a/app/helpers/sim_card_providers_helper.rb b/app/helpers/sim_card_providers_helper.rb new file mode 100644 index 0000000..306f589 --- /dev/null +++ b/app/helpers/sim_card_providers_helper.rb @@ -0,0 +1,2 @@ +module SimCardProvidersHelper +end diff --git a/app/helpers/sim_cards_helper.rb b/app/helpers/sim_cards_helper.rb new file mode 100644 index 0000000..c0df165 --- /dev/null +++ b/app/helpers/sim_cards_helper.rb @@ -0,0 +1,2 @@ +module SimCardsHelper +end diff --git a/app/models/ability.rb b/app/models/ability.rb index 4c0844c..d66577d 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -86,6 +86,10 @@ class Ability # An admin can not destroy his/her account # cannot [:destroy], User, :id => user.id + + # SIM cards + # + cannot [:edit, :update], SimCard else # Any user can do the following stuff. # diff --git a/app/models/fax_document.rb b/app/models/fax_document.rb index be689e2..564d3bb 100644 --- a/app/models/fax_document.rb +++ b/app/models/fax_document.rb @@ -18,8 +18,8 @@ class FaxDocument < ActiveRecord::Base has_many :fax_thumbnails, :order => :position, :dependent => :destroy - after_create :render_thumbnails after_create :convert_pdf_to_tiff + after_create :render_thumbnails # Scopes scope :inbound, where(:state => 'inbound') @@ -47,23 +47,25 @@ class FaxDocument < ActiveRecord::Base transition [:new] => :inbound end end - + def to_s - name + "#{self.remote_station_id}-#{self.created_at}-#{self.id}".gsub(/[^a-zA-Z0-9]/,'') end - + def render_thumbnails - directory = "/tmp/GS-#{GsParameter.get('GEMEINSCHAFT_VERSION')}/fax_thumbnails/#{self.id}" - system('mkdir -p ' + directory) - system("cd #{directory} && convert #{Rails.root.to_s}/public#{self.document.to_s}[0-100] -colorspace Gray PNG:'fax_page.png'") - number_of_thumbnails = Dir["#{directory}/fax_page-*.png"].count - (0..(number_of_thumbnails-1)).each do |i| + self.delay.create_thumbnails_and_save_them + end + + def create_thumbnails_and_save_them + tmp_dir = "/tmp/fax_convertions/#{self.id}" + FileUtils.mkdir_p tmp_dir + system("cd #{tmp_dir} && convert #{self.document.path} -colorspace Gray PNG:'fax_page.png'") + Dir.glob("#{tmp_dir}/fax_page*.png").each do |thumbnail| fax_thumbnail = self.fax_thumbnails.build - fax_thumbnail.thumbnail = File.open("#{directory}/fax_page-#{i}.png") - fax_thumbnail.save! + fax_thumbnail.thumbnail = File.open(thumbnail) + fax_thumbnail.save end - system("rm -rf #{directory}") - self.update_attributes(:document_total_pages => number_of_thumbnails) if self.document_total_pages.nil? + FileUtils.rm_rf tmp_dir end private @@ -71,12 +73,12 @@ class FaxDocument < ActiveRecord::Base page_size_a4 = '595 842' page_size_command = "<< /Policies << /PageSize 3 >> /InputAttributes currentpagedevice /InputAttributes get dup { pop 1 index exch undef } forall dup 0 << /PageSize [ #{page_size_a4} ] >> put >> setpagedevice" directory = "/tmp/GS-#{GsParameter.get('GEMEINSCHAFT_VERSION')}/faxes/#{self.id}" - system('mkdir -p ' + directory) + FileUtils.mkdir_p directory tiff_file_name = File.basename(self.document.to_s.downcase, ".pdf") + '.tiff' system "cd #{directory} && gs -q -r#{self.fax_resolution.resolution_value} -dNOPAUSE -dBATCH -dSAFER -sDEVICE=tiffg3 -sOutputFile=\"#{tiff_file_name}\" -c \"#{page_size_command}\" -- \"#{Rails.root.to_s}/public#{self.document.to_s}\"" self.tiff = File.open("#{directory}/#{tiff_file_name}") self.save - system("rm -rf #{directory}") + FileUtils.rm_rf directory end end diff --git a/app/models/intruder.rb b/app/models/intruder.rb index db14bf8..249fffc 100644 --- a/app/models/intruder.rb +++ b/app/models/intruder.rb @@ -17,11 +17,14 @@ class Intruder < ActiveRecord::Base before_validation :set_key_if_empty + def to_s + key + end - def whois - if ! self.contact_ip.blank? + def whois(ip_address = self.contact_ip) + if ! ip_address.blank? begin - return Whois.whois(self.contact_ip) + return Whois.whois(ip_address).to_s.gsub(/[^\u{0000}-\u{007F}]/, '') rescue return nil end diff --git a/app/models/parking_stall.rb b/app/models/parking_stall.rb new file mode 100644 index 0000000..6af1fcd --- /dev/null +++ b/app/models/parking_stall.rb @@ -0,0 +1,17 @@ +class ParkingStall < ActiveRecord::Base + attr_accessible :name, :lot, :parking_stallable_id, :parking_stallable_type, :comment + + belongs_to :parking_stallable, :polymorphic => true, :touch => true + + validates :name, + :presence => true, + :uniqueness => true + + validates :lot, + :presence => true + + def to_s + name.to_s + end + +end diff --git a/app/models/sim_card.rb b/app/models/sim_card.rb new file mode 100644 index 0000000..2bf7304 --- /dev/null +++ b/app/models/sim_card.rb @@ -0,0 +1,63 @@ +class SimCard < ActiveRecord::Base + attr_accessible :auto_order_card, :sip_account_id, :auth_key, :sim_number + + # Validations + # + validates :sim_card_provider_id, + :presence => true + + belongs_to :sim_card_provider, :touch => true + + validates :sim_card_provider, + :presence => true + + validates :sip_account_id, + :presence => true + + belongs_to :sip_account + + validates :sip_account, + :presence => true + + validates :sim_number, + :presence => true + + after_initialize :set_defaults + + before_validation :upcase_some_values + after_create :active_sim_card + + def to_s + self.sim_number.to_s + end + + private + def set_defaults + self.state ||= 'not activated' + end + + def upcase_some_values + self.sim_number = self.sim_number.to_s.upcase + end + + def active_sim_card + require 'open-uri' + + url = "#{self.sim_card_provider.api_server_url}/app/api/main?cmd=order&ref=#{self.sim_number}&s=#{self.sim_card_provider.sip_server}&u=#{self.sip_account.auth_name}&p=#{self.sip_account.password}&ordercard=0&apiuser=#{self.sim_card_provider.api_username}&apipass=#{self.sim_card_provider.api_password}" + + open(url, "User-Agent" => "Ruby/#{RUBY_VERSION}", + "From" => "admin@localhost", + "Referer" => "http://amooma.com/gemeinschaft/gs5") { |f| + # Save the response body + @response = f.read + } + + if @response.class == String && @response.split(/;/).first == 'OK' + self.state = 'activated' + self.auth_key = @response.split(/;/).last.chomp.split(/=/).last + self.save + end + + end + +end diff --git a/app/models/sim_card_provider.rb b/app/models/sim_card_provider.rb new file mode 100644 index 0000000..854c61a --- /dev/null +++ b/app/models/sim_card_provider.rb @@ -0,0 +1,28 @@ +class SimCardProvider < ActiveRecord::Base + attr_accessible :name, :homepage_url, :docu_url, :api_server_url, :api_username, :api_password, :ref, :sip_server, :include_order_card_function + + # Validations + # + validates :name, + :presence => true, + :uniqueness => true + + validates :api_username, + :presence => true + + validates :api_password, + :presence => true + + validates :api_server_url, + :presence => true + + validates :sip_server, + :presence => true + + has_many :sim_cards, :dependent => :destroy + + def to_s + name.to_s + end + +end diff --git a/app/models/sip_account.rb b/app/models/sip_account.rb index 9ba1f8b..7df8e3b 100644 --- a/app/models/sip_account.rb +++ b/app/models/sip_account.rb @@ -6,7 +6,7 @@ class SipAccount < ActiveRecord::Base attr_accessible :auth_name, :caller_name, :password, :voicemail_pin, :tenant_id, :call_waiting, :clir, :clip_no_screening, :clip, :description, :callforward_rules_act_per_sip_account, - :hotdeskable, :gs_node_id + :hotdeskable, :gs_node_id, :language_code # Associations: # @@ -31,6 +31,8 @@ class SipAccount < ActiveRecord::Base belongs_to :gs_node + belongs_to :language, :foreign_key => 'language_code', :primary_key => 'code' + # Delegations: # delegate :host, :to => :sip_domain, :allow_nil => true diff --git a/app/models/softkey.rb b/app/models/softkey.rb index 83c88ab..4b758e0 100644 --- a/app/models/softkey.rb +++ b/app/models/softkey.rb @@ -48,14 +48,14 @@ class Softkey < ActiveRecord::Base end def to_s - if (['call_forwarding'].include?(self.softkey_function.name)) - "#{self.softkeyable}" - else + if self.softkeyable.blank? if ['log_out', 'log_in'].include?(self.softkey_function.name) I18n.t("softkeys.functions.#{self.softkey_function.name}") else - "#{self.softkey_function.name} : #{self.number.to_s}" + "#{self.softkey_function.name} : #{self.number.to_s}" end + else + "#{self.softkeyable}" end end diff --git a/app/models/tenant.rb b/app/models/tenant.rb index 419ac3a..0622f52 100644 --- a/app/models/tenant.rb +++ b/app/models/tenant.rb @@ -39,6 +39,8 @@ class Tenant < ActiveRecord::Base has_many :automatic_call_distributors, :as => :automatic_call_distributorable, :dependent => :destroy has_many :acd_agents, :through => :automatic_call_distributors + has_many :parking_stalls, :as => :parking_stallable, :dependent => :destroy + # Phone numbers of the tenant. # has_many :phone_number_ranges_phone_numbers, :through => :phone_number_ranges, :source => :phone_numbers, :readonly => true diff --git a/app/models/user.rb b/app/models/user.rb index afb3f04..6c67351 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -87,6 +87,8 @@ class User < ActiveRecord::Base validate :current_tenant_is_included_in_tenants, :if => Proc.new{ |user| user.current_tenant_id } belongs_to :gs_node + + has_many :parking_stalls, :as => :parking_stallable, :dependent => :destroy # Avatar like photo mount_uploader :image, ImageUploader @@ -148,6 +150,10 @@ class User < ActiveRecord::Base self.user_groups.include?(UserGroup.find(2)) end + def sim_cards + SimCard.where(:sip_account_id => self.sip_account_ids) + end + private def hash_new_pin diff --git a/app/uploaders/thumbnail_uploader.rb b/app/uploaders/thumbnail_uploader.rb index a401a91..4b4cc09 100644 --- a/app/uploaders/thumbnail_uploader.rb +++ b/app/uploaders/thumbnail_uploader.rb @@ -34,17 +34,17 @@ class ThumbnailUploader < CarrierWave::Uploader::Base process :resize_to_limit => [75, 75] end - version :thumb do - process :resize_to_limit => [150, 150] - end + # version :thumb do + # process :resize_to_limit => [150, 150] + # end - version :medium do - process :resize_to_limit => [400, 400] - end + # version :medium do + # process :resize_to_limit => [400, 400] + # end - version :big do - process :resize_to_limit => [800, 800] - end + # version :big do + # process :resize_to_limit => [800, 800] + # end # Add a white list of extensions which are allowed to be uploaded. diff --git a/app/views/access_authorizations/_form.html.haml b/app/views/access_authorizations/_form.html.haml index fa417d9..fba4297 100644 --- a/app/views/access_authorizations/_form.html.haml +++ b/app/views/access_authorizations/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('access_authorizations.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('access_authorizations.form.submit') diff --git a/app/views/acd_agents/_form.html.haml b/app/views/acd_agents/_form.html.haml index 3b78bac..df1c2ef 100644 --- a/app/views/acd_agents/_form.html.haml +++ b/app/views/acd_agents/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('acd_agents.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('acd_agents.form.submit') diff --git a/app/views/addresses/_form.html.haml b/app/views/addresses/_form.html.haml index eff9930..4c58009 100644 --- a/app/views/addresses/_form.html.haml +++ b/app/views/addresses/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('addresses.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('addresses.form.submit') diff --git a/app/views/automatic_call_distributors/_form.html.haml b/app/views/automatic_call_distributors/_form.html.haml index fcf133c..d4cf97c 100644 --- a/app/views/automatic_call_distributors/_form.html.haml +++ b/app/views/automatic_call_distributors/_form.html.haml @@ -4,5 +4,5 @@ = render "form_core", :f => f, :join_on => @join_on, :leave_on => @leave_on, :strategies => @strategies - .actions - = f.button :submit, conditional_t('automatic_call_distributors.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('automatic_call_distributors.form.submit') diff --git a/app/views/backup_jobs/_form.html.haml b/app/views/backup_jobs/_form.html.haml index e0adceb..41d0dc8 100644 --- a/app/views/backup_jobs/_form.html.haml +++ b/app/views/backup_jobs/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('backup_jobs.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('backup_jobs.form.submit') diff --git a/app/views/call_forwards/_form.html.haml b/app/views/call_forwards/_form.html.haml index 7310af3..58ffd78 100644 --- a/app/views/call_forwards/_form.html.haml +++ b/app/views/call_forwards/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('call_forwards.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('call_forwards.form.submit') diff --git a/app/views/call_routes/_form.html.haml b/app/views/call_routes/_form.html.haml index 1415852..0a96060 100644 --- a/app/views/call_routes/_form.html.haml +++ b/app/views/call_routes/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('call_routes.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('call_routes.form.submit') diff --git a/app/views/callthroughs/_form.html.haml b/app/views/callthroughs/_form.html.haml index 99f92d0..870d3f0 100644 --- a/app/views/callthroughs/_form.html.haml +++ b/app/views/callthroughs/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions + .form-actions = f.button :submit, conditional_t('callthroughs.form.submit') diff --git a/app/views/conference_invitees/_form.html.haml b/app/views/conference_invitees/_form.html.haml index 400580d..6ec987b 100644 --- a/app/views/conference_invitees/_form.html.haml +++ b/app/views/conference_invitees/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('conference_invitees.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('conference_invitees.form.submit') diff --git a/app/views/conferences/_form.html.haml b/app/views/conferences/_form.html.haml index 4bee1a4..0a88a00 100644 --- a/app/views/conferences/_form.html.haml +++ b/app/views/conferences/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('conferences.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('conferences.form.submit') diff --git a/app/views/config_snom/show.xml.haml b/app/views/config_snom/show.xml.haml index 33204dc..3d0edf1 100644 --- a/app/views/config_snom/show.xml.haml +++ b/app/views/config_snom/show.xml.haml @@ -90,6 +90,23 @@ %backlight_idle{:perm => 'RW'}= '0' %dim_timer{:perm => 'RW'}= '300' + / LED + %led_on{:perm => 'RW'}= 'ON BUSY IN_A_CALL CALLING IN_A_MEETING URGENT_INTERRUPTIONS_ONLY HOLDING DND ACTIVE INACTIVE BE_RIGHT_BACK AWAY UNAVAILABLE AVAILABLE PhoneHasCall CurrentIdentityHasVoiceMessages PhoneHasVoiceMessages' + %led_blink_slow{:perm => 'RW'}= 'PARKED HOLDING_BOSSADMIN Wrap-Up' + %led_blink_medium{:perm => 'RW'}= '' + %led_blink_fast{:perm => 'RW'}= 'RINGING PhoneHasCallInStateRinging' + %led_blink_short_off{:perm => 'RW'}= 'PhoneHasMissedCalls' + %led_red{:perm => 'RW'}= 'BUSY IN_A_CALL CALLING IN_A_MEETING URGENT_INTERRUPTIONS_ONLY HOLDING DND' + %led_green{:perm => 'RW'}= 'Wrap-Up' + %led_orange{:perm => 'RW'}= 'AWAY INACTIVE BE_RIGHT_BACK INACTIVE' + %led_blue{:perm => 'RW'}= '' + %led_red_green{:perm => 'RW'}= '' + %led_red_orange{:perm => 'RW'}= '' + %led_green_orange{:perm => 'RW'}= '' + %led_call_indicator_usage{:perm => 'RW'}= 'PhoneHasCallInStateRinging PhoneHasCall PhoneHasMissedCalls' + %led_message_usage{:perm => 'RW'}= 'CurrentIdentityHasVoiceMessages PhoneHasVoiceMessages' + + - if @phone.phone_model.name == 'Snom 870' / Snom 870 idle icons %idle_icon_01{:perm => 'RW'}= '9' @@ -165,9 +182,9 @@ - if softkey[:subscription] %subscription{:type => 'dialog', :to => softkey[:subscription][:to], :for => softkey[:subscription][:for]} %NotifyParsingRules{:type => 'applies'} - %level1{:translates_to => 'OK'}= "/dialog-info[@entity=\"sip:#{softkey[:subscription][:to]}\"]" + %level1{:translates_to => 'OK'}= "/dialog-info[@entity=\"#{softkey[:subscription][:to]}\"]" %NotifyParsingRules{:type => 'state'} - %level1{:translates_to => 'available'}= '/dialog-info/dialog/state[.="terminated"]' + %level1{:translates_to => 'unknown'}= '/dialog-info/dialog/state[.="terminated"]' %level2{:translates_to => 'ringing'}= '/dialog-info/dialog/state[.="early"]' %level3{:translates_to => 'active'}= '/dialog-info/dialog/state[.="confirmed"]' %level4{:fetch_content => 'true'}= '/dialog-info/dialog/state' @@ -176,7 +193,9 @@ %action - softkey[:actions].each do |action| - if action[:type] == :url - %url{:target => action[:target], :when => action[:when]} + %url{:target => action[:target], :when => action[:when], :states => action[:states]} + - elsif action[:type] == :dial + %dial{:target => action[:target], :when => action[:when], :states => action[:states], :request_uri => '$(remote_uri)'} %uploads - if @state_settings_url diff --git a/app/views/fax_accounts/_form.html.haml b/app/views/fax_accounts/_form.html.haml index 0a5a4c0..de66709 100644 --- a/app/views/fax_accounts/_form.html.haml +++ b/app/views/fax_accounts/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('fax_accounts.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('fax_accounts.form.submit') diff --git a/app/views/fax_documents/_form.html.haml b/app/views/fax_documents/_form.html.haml index e240371..1b1c3be 100644 --- a/app/views/fax_documents/_form.html.haml +++ b/app/views/fax_documents/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('fax_documents.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('fax_documents.form.submit') diff --git a/app/views/fax_documents/_index_core.html.haml b/app/views/fax_documents/_index_core.html.haml index 8559f1c..5355521 100644 --- a/app/views/fax_documents/_index_core.html.haml +++ b/app/views/fax_documents/_index_core.html.haml @@ -2,25 +2,34 @@ %thead %tr %th= t('fax_documents.index.sent_at') - %th= t('fax_documents.index.state') - %th= t('fax_documents.index.result') %th = t('fax_documents.index.phone_number') %br = t('fax_documents.index.remote_station_id') %th= t('fax_documents.index.thumbnails') + %th + %th %tbody - for fax_document in fax_documents - %tr{:id => "fax_document_#{fax_document.id}"} - - if fax_document.sent_at - %td - = "#{fax_document.inbound ? '⇨' : '⇦'}".html_safe - = l fax_document.sent_at, :format => :short - %td= t("fax_documents.states.#{fax_document.state}") - %td= t("fax_documents.result_codes.code_#{fax_document.result_code}") + " (#{fax_document.result_code})" + - case fax_document.state + - when 'unsuccessful' + - current_status = 'error' + - when 'sending' + - current_status = 'success' + - when 'queued_for_sending' + - current_status = 'warning' - else - %td{ :colspan => 3 }= t("fax_documents.states.#{fax_document.state}") + - current_status = '' + + %tr{:class => current_status} + %td + - case fax_document.state + - when 'successful' + = "#{fax_document.inbound ? '⇨' : '⇦'}".html_safe + = l fax_document.sent_at, :format => :short + - else + = t("fax_documents.states.#{fax_document.state}") %td - if fax_document.inbound = "#{fax_document.caller_id_number} #{fax_document.caller_id_name}" @@ -28,9 +37,21 @@ = fax_document.destination_phone_number %br = fax_document.remote_station_id - %td - - fax_document.fax_thumbnails.limit(5).each do |fax_thumbnail| - =image_tag fax_thumbnail.thumbnail_url(:mini), :class => 'FaxThumbnail', :alt => "Thumbnail of page \##{fax_thumbnail.position}" - - if can?(:show, fax_document) && !fax_document.document.blank? && File.readable?(fax_document.document.path) - = link_to t('fax_documents.index.actions.download'), fax_account_fax_document_path(@fax_account, fax_document, :format => :pdf), :method => :get + %td + %ul.thumbnails + - fax_document.fax_thumbnails.limit(3).each do |fax_thumbnail| + %li.span1 + %div.thumbnail + %a.thumbnail{:href => fax_thumbnail.thumbnail.url} + =image_tag(fax_thumbnail.thumbnail.url, :alt => "Page #{fax_thumbnail.position}") + %p + %small + = "#{fax_thumbnail.position}/#{fax_document.fax_thumbnails.count}" + + - if fax_document.document? + %p + %a{:href => fax_document.document.url} + %i{:class => 'icon-download'} + = t("fax_documents.index.actions.download_pdf") + " (#{number_to_human_size(fax_document.document.size, :precision => 2)})" + =render :partial => 'shared/index_view_edit_destroy_part', :locals => {:parent => fax_document.fax_account, :child => fax_document} diff --git a/app/views/fax_documents/show.html.haml b/app/views/fax_documents/show.html.haml index 41d3bff..9925c2f 100644 --- a/app/views/fax_documents/show.html.haml +++ b/app/views/fax_documents/show.html.haml @@ -1,36 +1,67 @@ - content_for :title, t("fax_documents.show.page_title") -- child = @fax_document -- parent = @fax_document.fax_account -%p - %strong= t('fax_documents.index.state') + ":" - = t("fax_documents.states.#{@fax_document.state}") +.row + .span12 + %table.table.table-striped + - case @fax_document.state + - when 'unsuccessful' + - current_status = 'error' + - when 'sending' + - current_status = 'success' + - when 'queued_for_sending' + - current_status = 'warning' + - else + - current_status = '' -%p - %strong= t('fax_documents.index.result_code') + ":" - = @fax_document.result_code + %tr{:class => current_status} + %td + %strong= t('fax_documents.index.state') + ":" + %td + = t("fax_documents.states.#{@fax_document.state}") + %tr + %td + %strong= t('fax_documents.index.result_code') + ":" + %td + = @fax_document.result_code + %tr + %td + %strong= t('fax_documents.index.result_text') + ":" + %td + = t("fax_documents.result_codes.code_#{@fax_document.result_code}") + %tr + %td + %strong= t('fax_documents.show.document_transferred_pages') + ":" + %td + = @fax_document.document_transferred_pages + %tr + %td + %strong= t('fax_documents.show.remote_station_id') + ":" + %td + = @fax_document.remote_station_id + %tr + %td + %strong= t('fax_documents.show.fax_resolution') + ":" + %td + = @fax_document.fax_resolution -%p - %strong= t('fax_documents.index.result_text') + ":" - = t("fax_documents.result_codes.code_#{@fax_document.result_code}") + - if @fax_document.document? + %p + %a{:href => @fax_document.document.url} + %i{:class => 'icon-download'} + = t("fax_documents.index.actions.download_pdf") + " (#{number_to_human_size(@fax_document.document.size, :precision => 2)})" -%p - %strong= t('fax_documents.show.document_transferred_pages') + ":" - = @fax_document.document_transferred_pages -%p - %strong= t('fax_documents.show.remote_station_id') + ":" - = @fax_document.remote_station_id -%p - %strong= t('fax_documents.show.fax_resolution') + ":" - = @fax_document.fax_resolution +.row + .span12 + - if @fax_document.fax_thumbnails.any? + %ul.thumbnails + - @fax_document.fax_thumbnails.limit(50).each do |fax_thumbnail| + %li.span4 + %div.thumbnail + %a.thumbnail{:href => fax_thumbnail.thumbnail.url} + =image_tag(fax_thumbnail.thumbnail.url, :alt => "Page #{fax_thumbnail.position}") + %p + = "#{fax_thumbnail.position}/#{@fax_document.fax_thumbnails.count}" -- if @fax_document.fax_thumbnails.count > 0 - - i = @fax_document.fax_thumbnails.count - - i = 10 if i > 10 - - @fax_document.fax_thumbnails.limit(i).each do |fax_thumbnail| - =image_tag fax_thumbnail.thumbnail_url(:medium), :class => 'FaxThumbnail', :alt => "Thumbnail of page \##{fax_thumbnail.position}" - -- if @fax_document.document.path - = link_to t("fax_documents.index.actions.download_pdf"), "#{request.protocol}#{request.host_with_port}#{request.fullpath.split("?")[0]}.pdf" - -= render :partial => 'shared/show_edit_destroy_part', :locals => { :parent => @fax_document.fax_account, :child => @fax_document } +.row + .span12 + = render :partial => 'shared/show_edit_destroy_part', :locals => { :parent => @fax_document.fax_account, :child => @fax_document } diff --git a/app/views/gateway_parameters/_form.html.haml b/app/views/gateway_parameters/_form.html.haml index 79342d2..bb98ce0 100644 --- a/app/views/gateway_parameters/_form.html.haml +++ b/app/views/gateway_parameters/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('gateway_parameters.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('gateway_parameters.form.submit') diff --git a/app/views/gateway_settings/_form.html.haml b/app/views/gateway_settings/_form.html.haml index af26d2a..ad4b34b 100644 --- a/app/views/gateway_settings/_form.html.haml +++ b/app/views/gateway_settings/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions + .form-actions = f.button :submit, conditional_t('gateway_settings.form.submit') diff --git a/app/views/gateways/_form.html.haml b/app/views/gateways/_form.html.haml index 5f6d5dd..705d417 100644 --- a/app/views/gateways/_form.html.haml +++ b/app/views/gateways/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('gateways.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('gateways.form.submit') diff --git a/app/views/gemeinschaft_setups/new.de.html.haml b/app/views/gemeinschaft_setups/new.de.html.haml index f977291..3c215d1 100644 --- a/app/views/gemeinschaft_setups/new.de.html.haml +++ b/app/views/gemeinschaft_setups/new.de.html.haml @@ -26,5 +26,5 @@ = f.simple_fields_for :sip_domain, @sip_domain do |s| = render "sip_domains/form_core", :f => s - .actions - = f.button :submit, conditional_t('gemeinschaft_setups.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('gemeinschaft_setups.form.submit') diff --git a/app/views/gemeinschaft_setups/new.html.haml b/app/views/gemeinschaft_setups/new.html.haml index 44d9c5b..deac19d 100644 --- a/app/views/gemeinschaft_setups/new.html.haml +++ b/app/views/gemeinschaft_setups/new.html.haml @@ -26,5 +26,5 @@ = f.simple_fields_for :sip_domain, @sip_domain do |s| = render "sip_domains/form_core", :f => s - .actions - = f.button :submit, conditional_t('gemeinschaft_setups.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('gemeinschaft_setups.form.submit') diff --git a/app/views/gs_cluster_sync_log_entries/_form.html.haml b/app/views/gs_cluster_sync_log_entries/_form.html.haml index 2c47d88..28f1848 100644 --- a/app/views/gs_cluster_sync_log_entries/_form.html.haml +++ b/app/views/gs_cluster_sync_log_entries/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('gs_cluster_sync_log_entries.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('gs_cluster_sync_log_entries.form.submit') diff --git a/app/views/gs_nodes/_form.html.haml b/app/views/gs_nodes/_form.html.haml index 28a4e5d..5ff6d40 100644 --- a/app/views/gs_nodes/_form.html.haml +++ b/app/views/gs_nodes/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('gs_nodes.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('gs_nodes.form.submit') diff --git a/app/views/gs_parameters/_form.html.haml b/app/views/gs_parameters/_form.html.haml index ea69e95..eb578ff 100644 --- a/app/views/gs_parameters/_form.html.haml +++ b/app/views/gs_parameters/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('gs_parameters.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('gs_parameters.form.submit') diff --git a/app/views/gui_functions/_form.html.haml b/app/views/gui_functions/_form.html.haml index 0b2a201..b1b68f9 100644 --- a/app/views/gui_functions/_form.html.haml +++ b/app/views/gui_functions/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('gui_functions.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('gui_functions.form.submit') diff --git a/app/views/hunt_group_members/_form.html.haml b/app/views/hunt_group_members/_form.html.haml index 1ab7850..7cdef92 100644 --- a/app/views/hunt_group_members/_form.html.haml +++ b/app/views/hunt_group_members/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('hunt_group_members.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('hunt_group_members.form.submit') diff --git a/app/views/hunt_groups/_form.html.haml b/app/views/hunt_groups/_form.html.haml index bc2663b..86cd433 100644 --- a/app/views/hunt_groups/_form.html.haml +++ b/app/views/hunt_groups/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('hunt_groups.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('hunt_groups.form.submit') diff --git a/app/views/intruders/_form.html.haml b/app/views/intruders/_form.html.haml index 26aab1c..02647f0 100644 --- a/app/views/intruders/_form.html.haml +++ b/app/views/intruders/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('intruders.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('intruders.form.submit') diff --git a/app/views/intruders/_index_core.html.haml b/app/views/intruders/_index_core.html.haml index 0070c4d..31bbd11 100644 --- a/app/views/intruders/_index_core.html.haml +++ b/app/views/intruders/_index_core.html.haml @@ -1,37 +1,38 @@ %table.table.table-striped %tr - %th= t('intruders.index.list_type') - %th= t('intruders.index.key') + %th + %th= t('intruders.index.contact_ip') + %th= t('intruders.index.contact_port') %th= t('intruders.index.points') %th= t('intruders.index.bans') %th= t('intruders.index.ban_last') %th= t('intruders.index.ban_end') - %th= t('intruders.index.contact_ip') - %th= t('intruders.index.contact_port') %th= t('intruders.index.contact_count') %th= t('intruders.index.contact_last') %th= t('intruders.index.contacts_per_second') - %th= t('intruders.index.contacts_per_second_max') %th= t('intruders.index.user_agent') %th= t('intruders.index.to_user') - %th= t('intruders.index.comment') - for intruder in intruders %tr - %td= intruder.list_type - %td= intruder.key - %td= intruder.points - %td= intruder.bans - %td= intruder.ban_last - %td= intruder.ban_end + %td= intruder.list_type.chars.first %td= intruder.contact_ip %td= intruder.contact_port + %td= intruder.points + %td= intruder.bans + %td + - if intruder.ban_last + = l intruder.ban_last, :format => :short + %td + - if intruder.ban_end + = l intruder.ban_end, :format => :short + %td= intruder.contact_count - %td= intruder.contact_last + %td + - if intruder.contact_last + = l intruder.contact_last, :format => :short %td= intruder.contacts_per_second - %td= intruder.contacts_per_second_max %td= intruder.user_agent %td= intruder.to_user - %td= intruder.comment - =render :partial => 'shared/index_view_edit_destroy_part', :locals => {:child => intruder}
\ No newline at end of file + =render :partial => 'shared/index_view_edit_destroy_part', :locals => {:child => intruder} diff --git a/app/views/intruders/show.html.haml b/app/views/intruders/show.html.haml index 4941e89..df50872 100644 --- a/app/views/intruders/show.html.haml +++ b/app/views/intruders/show.html.haml @@ -46,7 +46,13 @@ %strong= t('intruders.show.comment') + ":" = @intruder.comment -%p - %pre= @intruder.whois - = render :partial => 'shared/show_edit_destroy_part', :locals => { :child => @intruder } + +- if ! @whois.blank? + %p + %pre= @whois + +- elsif ! @intruder.contact_ip.blank? && Object.const_defined?('Whois') + %a.btn.btn-small.btn-success{ :href => intruder_path(@intruder, :whois => @intruder.contact_ip) } + %i.icon-info-sign.icon-white + = 'Whois' diff --git a/app/views/layouts/_navbar.html.haml b/app/views/layouts/_navbar.html.haml index 7084090..8e09859 100644 --- a/app/views/layouts/_navbar.html.haml +++ b/app/views/layouts/_navbar.html.haml @@ -28,9 +28,9 @@ - if current_user %ul.nav.pull-right - %li + %li.display - if current_user.image? - =image_tag(current_user.image_url(:mini).to_s, :class => 'img-rounded') + = image_tag(current_user.image_url(:mini).to_s, :class => 'img-rounded') - else - if current_user.male? = image_tag 'icons/user-male-16x.png', :class => 'img-rounded' @@ -39,15 +39,15 @@ - if current_page?(tenant_user_path(current_user.current_tenant, current_user)) %li.active - %a.navbar-link{:href => tenant_user_path(current_user.current_tenant, current_user)} + %a.navbar-link{:href => tenant_user_path(current_user.current_tenant, current_user)} = current_user - else %li - %a.navbar-link{:href => tenant_user_path(current_user.current_tenant, current_user)} + %a.navbar-link{:href => tenant_user_path(current_user.current_tenant, current_user)} = current_user - if single_sign_on_system? == false %li - %a.navbar-link{:href => log_out_path} + %a.navbar-link{:href => log_out_path} %i.icon-off.icon-white - + diff --git a/app/views/manufacturers/_form.html.haml b/app/views/manufacturers/_form.html.haml index d89c603..ce4eea4 100644 --- a/app/views/manufacturers/_form.html.haml +++ b/app/views/manufacturers/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('manufacturers.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('manufacturers.form.submit') diff --git a/app/views/parking_stalls/_form.html.haml b/app/views/parking_stalls/_form.html.haml new file mode 100644 index 0000000..f72c190 --- /dev/null +++ b/app/views/parking_stalls/_form.html.haml @@ -0,0 +1,7 @@ += simple_form_for([@parent, @parking_stall]) do |f| + = f.error_notification + + = render "form_core", :f => f + + .form-actions + = f.button :submit, conditional_t('parking_stalls.form.submit') diff --git a/app/views/parking_stalls/_form_core.html.haml b/app/views/parking_stalls/_form_core.html.haml new file mode 100644 index 0000000..add5c53 --- /dev/null +++ b/app/views/parking_stalls/_form_core.html.haml @@ -0,0 +1,4 @@ +.inputs + = f.input :name, :label => t('parking_stalls.form.name.label'), :hint => conditional_hint('parking_stalls.form.name.hint') + = f.input :lot, :label => t('parking_stalls.form.lot.label'), :hint => conditional_hint('parking_stalls.form.lot.hint') + = f.input :comment, :label => t('parking_stalls.form.comment.label'), :hint => conditional_hint('parking_stalls.form.comment.hint') diff --git a/app/views/parking_stalls/_index_core.html.haml b/app/views/parking_stalls/_index_core.html.haml new file mode 100644 index 0000000..9f25217 --- /dev/null +++ b/app/views/parking_stalls/_index_core.html.haml @@ -0,0 +1,13 @@ +%table.table.table-striped + %tr + %th= t('parking_stalls.index.name') + %th= t('parking_stalls.index.lot') + %th= t('parking_stalls.index.comment') + + + - for parking_stall in parking_stalls + %tr + %td= parking_stall.name + %td= parking_stall.lot + %td= parking_stall.comment + =render :partial => 'shared/index_view_edit_destroy_part', :locals => {:parent => parking_stall.parking_stallable, :child => parking_stall}
\ No newline at end of file diff --git a/app/views/parking_stalls/edit.html.haml b/app/views/parking_stalls/edit.html.haml new file mode 100644 index 0000000..ec5d97f --- /dev/null +++ b/app/views/parking_stalls/edit.html.haml @@ -0,0 +1,3 @@ +- content_for :title, t("parking_stalls.edit.page_title") + += render "form"
\ No newline at end of file diff --git a/app/views/parking_stalls/index.html.haml b/app/views/parking_stalls/index.html.haml new file mode 100644 index 0000000..7f82bbe --- /dev/null +++ b/app/views/parking_stalls/index.html.haml @@ -0,0 +1,6 @@ +- content_for :title, t("parking_stalls.index.page_title") + +- if @parking_stalls && @parking_stalls.count > 0 + = render "index_core", :parking_stalls => @parking_stalls + += render :partial => 'shared/create_link', :locals => {:parent => @parent, :child_class => ParkingStall}
\ No newline at end of file diff --git a/app/views/parking_stalls/new.html.haml b/app/views/parking_stalls/new.html.haml new file mode 100644 index 0000000..c068e52 --- /dev/null +++ b/app/views/parking_stalls/new.html.haml @@ -0,0 +1,3 @@ +- content_for :title, t("parking_stalls.new.page_title") + += render "form"
\ No newline at end of file diff --git a/app/views/parking_stalls/show.html.haml b/app/views/parking_stalls/show.html.haml new file mode 100644 index 0000000..583a0ee --- /dev/null +++ b/app/views/parking_stalls/show.html.haml @@ -0,0 +1,13 @@ +- content_for :title, t("parking_stalls.show.page_title") + +%p + %strong= t('parking_stalls.show.name') + ":" + = @parking_stall.name +%p + %strong= t('parking_stalls.show.lot') + ":" + = @parking_stall.lot +%p + %strong= t('parking_stalls.show.comment') + ":" + = @parking_stall.comment + += render :partial => 'shared/show_edit_destroy_part', :locals => { :parent => @parking_stall.parking_stallable, :child => @parking_stall } diff --git a/app/views/phone_book_entries/_form.html.haml b/app/views/phone_book_entries/_form.html.haml index c73d10a..b579bf4 100644 --- a/app/views/phone_book_entries/_form.html.haml +++ b/app/views/phone_book_entries/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('phone_book_entries.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('phone_book_entries.form.submit') diff --git a/app/views/phone_books/_form.html.haml b/app/views/phone_books/_form.html.haml index 245426b..df5d060 100644 --- a/app/views/phone_books/_form.html.haml +++ b/app/views/phone_books/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('phone_books.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('phone_books.form.submit') diff --git a/app/views/phone_models/_form.html.haml b/app/views/phone_models/_form.html.haml index 45c176f..2b09f6d 100644 --- a/app/views/phone_models/_form.html.haml +++ b/app/views/phone_models/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('phone_models.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('phone_models.form.submit') diff --git a/app/views/phone_number_ranges/_form.html.haml b/app/views/phone_number_ranges/_form.html.haml index a86d45b..d624619 100644 --- a/app/views/phone_number_ranges/_form.html.haml +++ b/app/views/phone_number_ranges/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('phone_number_ranges.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('phone_number_ranges.form.submit') diff --git a/app/views/phone_numbers/_form.html.haml b/app/views/phone_numbers/_form.html.haml index 2812e21..8ef1e90 100644 --- a/app/views/phone_numbers/_form.html.haml +++ b/app/views/phone_numbers/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions + .form-actions = f.button :submit, conditional_t('phone_numbers.form.submit') diff --git a/app/views/phone_sip_accounts/_form.html.haml b/app/views/phone_sip_accounts/_form.html.haml index c2558b8..8b214de 100644 --- a/app/views/phone_sip_accounts/_form.html.haml +++ b/app/views/phone_sip_accounts/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('phone_sip_accounts.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('phone_sip_accounts.form.submit') diff --git a/app/views/phones/_form.html.haml b/app/views/phones/_form.html.haml index 9bfa226..3cb62e6 100644 --- a/app/views/phones/_form.html.haml +++ b/app/views/phones/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('phones.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('phones.form.submit') diff --git a/app/views/ringtones/_form.html.haml b/app/views/ringtones/_form.html.haml index 7dbfcb0..789362f 100644 --- a/app/views/ringtones/_form.html.haml +++ b/app/views/ringtones/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('ringtones.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('ringtones.form.submit') diff --git a/app/views/route_elements/_form.html.haml b/app/views/route_elements/_form.html.haml index 8feacaa..b59be36 100644 --- a/app/views/route_elements/_form.html.haml +++ b/app/views/route_elements/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('route_elements.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('route_elements.form.submit') diff --git a/app/views/sessions/new.html.haml b/app/views/sessions/new.html.haml index f386a5d..75dd3de 100644 --- a/app/views/sessions/new.html.haml +++ b/app/views/sessions/new.html.haml @@ -4,5 +4,5 @@ = t.input :login_data, :label => t('sessions.form.email'), :autofocus => true = t.input :password, :label => t('sessions.form.password'), :required => false = t.input :reset_password, :label => t('sessions.form.reset_password'), :as => :boolean - .actions + .form-actions = t.button :submit, :value => 'Login' diff --git a/app/views/sim_card_providers/_form.html.haml b/app/views/sim_card_providers/_form.html.haml new file mode 100644 index 0000000..73953e0 --- /dev/null +++ b/app/views/sim_card_providers/_form.html.haml @@ -0,0 +1,7 @@ += simple_form_for(@sim_card_provider) do |f| + = f.error_notification + + = render "form_core", :f => f + + .form-actions + = f.button :submit, conditional_t('sim_card_providers.form.submit') diff --git a/app/views/sim_card_providers/_form_core.html.haml b/app/views/sim_card_providers/_form_core.html.haml new file mode 100644 index 0000000..fc36579 --- /dev/null +++ b/app/views/sim_card_providers/_form_core.html.haml @@ -0,0 +1,9 @@ +.inputs + = f.input :name, :label => t('sim_card_providers.form.name.label'), :hint => conditional_hint('sim_card_providers.form.name.hint') + = f.input :homepage_url, :label => t('sim_card_providers.form.homepage_url.label'), :hint => conditional_hint('sim_card_providers.form.homepage_url.hint') + = f.input :docu_url, :label => t('sim_card_providers.form.docu_url.label'), :hint => conditional_hint('sim_card_providers.form.docu_url.hint') + = f.input :api_server_url, :label => t('sim_card_providers.form.api_server_url.label'), :hint => conditional_hint('sim_card_providers.form.api_server_url.hint') + = f.input :api_username, :label => t('sim_card_providers.form.api_username.label'), :hint => conditional_hint('sim_card_providers.form.api_username.hint') + = f.input :api_password, :label => t('sim_card_providers.form.api_password.label'), :hint => conditional_hint('sim_card_providers.form.api_password.hint') + = f.input :sip_server, :label => t('sim_card_providers.form.sip_server.label'), :hint => conditional_hint('sim_card_providers.form.sip_server.hint') + = f.input :include_order_card_function, :label => t('sim_card_providers.form.include_order_card_function.label'), :hint => conditional_hint('sim_card_providers.form.include_order_card_function.hint') diff --git a/app/views/sim_card_providers/_index_core.html.haml b/app/views/sim_card_providers/_index_core.html.haml new file mode 100644 index 0000000..6a24695 --- /dev/null +++ b/app/views/sim_card_providers/_index_core.html.haml @@ -0,0 +1,21 @@ +%table.table.table-striped + %tr + %th= t('sim_card_providers.index.name') + %th= t('sim_card_providers.index.api_server_url') + %th= t('sim_card_providers.index.api_username') + %th= t('sim_card_providers.index.api_password') + %th= t('sim_card_providers.index.sip_server') + %th + + - for sim_card_provider in sim_card_providers + %tr + %td + - if sim_card_provider.homepage_url.blank? + = sim_card_provider.name + - else + = link_to sim_card_provider.name, sim_card_provider.homepage_url + %td= sim_card_provider.api_server_url + %td= sim_card_provider.api_username + %td= sim_card_provider.api_password + %td= sim_card_provider.sip_server + =render :partial => 'shared/index_view_edit_destroy_part', :locals => {:child => sim_card_provider}
\ No newline at end of file diff --git a/app/views/sim_card_providers/edit.html.haml b/app/views/sim_card_providers/edit.html.haml new file mode 100644 index 0000000..49b1f93 --- /dev/null +++ b/app/views/sim_card_providers/edit.html.haml @@ -0,0 +1,3 @@ +- content_for :title, t("sim_card_providers.edit.page_title") + += render "form"
\ No newline at end of file diff --git a/app/views/sim_card_providers/index.html.haml b/app/views/sim_card_providers/index.html.haml new file mode 100644 index 0000000..2264e53 --- /dev/null +++ b/app/views/sim_card_providers/index.html.haml @@ -0,0 +1,6 @@ +- content_for :title, t("sim_card_providers.index.page_title") + +- if @sim_card_providers && @sim_card_providers.count > 0 + = render "index_core", :sim_card_providers => @sim_card_providers + += render :partial => 'shared/create_link', :locals => {:child_class => SimCardProvider}
\ No newline at end of file diff --git a/app/views/sim_card_providers/new.html.haml b/app/views/sim_card_providers/new.html.haml new file mode 100644 index 0000000..04c0445 --- /dev/null +++ b/app/views/sim_card_providers/new.html.haml @@ -0,0 +1,3 @@ +- content_for :title, t("sim_card_providers.new.page_title") + += render "form"
\ No newline at end of file diff --git a/app/views/sim_card_providers/show.html.haml b/app/views/sim_card_providers/show.html.haml new file mode 100644 index 0000000..37635d9 --- /dev/null +++ b/app/views/sim_card_providers/show.html.haml @@ -0,0 +1,72 @@ +- content_for :title, t("sim_card_providers.show.page_title") + +.row + .span6 + %table.table.table-striped + %tr + %td + %strong= t('sim_card_providers.show.name') + ":" + %td + = @sim_card_provider.name + %tr + %td + %strong= t('sim_card_providers.show.homepage_url') + ":" + %td + = @sim_card_provider.homepage_url + %tr + %td + %strong= t('sim_card_providers.show.docu_url') + ":" + %td + = @sim_card_provider.docu_url + %tr + %td + %strong= t('sim_card_providers.show.api_server_url') + ":" + %td + = @sim_card_provider.api_server_url + %tr + %td + %strong= t('sim_card_providers.show.api_username') + ":" + %td + = @sim_card_provider.api_username + %tr + %td + %strong= t('sim_card_providers.show.api_password') + ":" + %td + = @sim_card_provider.api_password + %tr + %td + %strong= t('sim_card_providers.show.ref') + ":" + %td + = @sim_card_provider.ref + %tr + %td + %strong= t('sim_card_providers.show.sip_server') + ":" + %td + = @sim_card_provider.sip_server + %tr + %td + %strong= t('sim_card_providers.show.include_order_card_function') + ":" + %td + = @sim_card_provider.include_order_card_function + + = render :partial => 'shared/show_edit_destroy_part', :locals => { :child => @sim_card_provider } + +.row + .span12 + %h2= t("sim_cards.index.page_title") + + %table.table.table-striped + %tr + %th= t('sim_cards.index.sip_account_id') + %th= t('sim_cards.index.auth_key') + %th= t('sim_cards.index.state') + %th + + - for sim_card in @sim_card_provider.sim_cards + %tr + %td= sim_card.sip_account + %td= sim_card.auth_key + %td= sim_card.state + =render :partial => 'shared/index_view_edit_destroy_part', :locals => {:parent => @sim_card_provider, :child => sim_card} + + = render :partial => 'shared/create_link', :locals => {:parent => @sim_card_provider, :child_class => SimCard}
\ No newline at end of file diff --git a/app/views/sim_cards/_form.html.haml b/app/views/sim_cards/_form.html.haml new file mode 100644 index 0000000..7d3cfbe --- /dev/null +++ b/app/views/sim_cards/_form.html.haml @@ -0,0 +1,7 @@ += simple_form_for([@sim_card_provider, @sim_card]) do |f| + = f.error_notification + + = render "form_core", :f => f + + .form-actions + = f.button :submit, conditional_t('sim_cards.form.submit') diff --git a/app/views/sim_cards/_form_core.html.haml b/app/views/sim_cards/_form_core.html.haml new file mode 100644 index 0000000..7223294 --- /dev/null +++ b/app/views/sim_cards/_form_core.html.haml @@ -0,0 +1,3 @@ +.inputs + = f.input :sim_number, :label => t('sim_cards.form.sim_number.label'), :hint => conditional_hint('sim_cards.form.sim_number.hint'), :autofocus => true + = f.association :sip_account, :collection => @available_sip_accounts, :label => t('phone_sip_accounts.form.sip_account_id.label'), :hint => conditional_hint('phone_sip_accounts.form.sip_account_id.hint'), :include_blank => false
\ No newline at end of file diff --git a/app/views/sim_cards/_index_core.html.haml b/app/views/sim_cards/_index_core.html.haml new file mode 100644 index 0000000..16440ff --- /dev/null +++ b/app/views/sim_cards/_index_core.html.haml @@ -0,0 +1,18 @@ +%table.table.table-striped + %tr + %th= t('sim_cards.show.sim_number') + %th= t('sim_cards.index.sip_account_id') + %th= t('sip_accounts.index.phone_numbers') + %th= t('sim_cards.index.auth_key') + %th= t('sim_cards.index.state') + %th + + - for sim_card in sim_cards + %tr + %td= sim_card.sim_number + %td= sim_card.sip_account + %td + = render 'phone_numbers/listing', :phone_numbers => sim_card.sip_account.phone_numbers.order(:number) + %td= sim_card.auth_key + %td= sim_card.state + =render :partial => 'shared/index_view_edit_destroy_part', :locals => {:parent => sim_card.sim_card_provider, :child => sim_card}
\ No newline at end of file diff --git a/app/views/sim_cards/edit.html.haml b/app/views/sim_cards/edit.html.haml new file mode 100644 index 0000000..97ee10e --- /dev/null +++ b/app/views/sim_cards/edit.html.haml @@ -0,0 +1,3 @@ +- content_for :title, t("sim_cards.edit.page_title") + += render "form"
\ No newline at end of file diff --git a/app/views/sim_cards/index.html.haml b/app/views/sim_cards/index.html.haml new file mode 100644 index 0000000..803bd72 --- /dev/null +++ b/app/views/sim_cards/index.html.haml @@ -0,0 +1,6 @@ +- content_for :title, t("sim_cards.index.page_title") + +- if @sim_cards && @sim_cards.count > 0 + = render "index_core", :sim_cards => @sim_cards + += render :partial => 'shared/create_link', :locals => {:parent => @parent, :child_class => SimCard}
\ No newline at end of file diff --git a/app/views/sim_cards/new.html.haml b/app/views/sim_cards/new.html.haml new file mode 100644 index 0000000..1eef168 --- /dev/null +++ b/app/views/sim_cards/new.html.haml @@ -0,0 +1,3 @@ +- content_for :title, t("sim_cards.new.page_title") + += render "form"
\ No newline at end of file diff --git a/app/views/sim_cards/show.html.haml b/app/views/sim_cards/show.html.haml new file mode 100644 index 0000000..4752aab --- /dev/null +++ b/app/views/sim_cards/show.html.haml @@ -0,0 +1,37 @@ +- content_for :title, t("sim_cards.show.page_title") + +.row + .span6 + %table.table.table-striped + %tr + %td + %strong= t('sim_cards.show.sim_number') + ":" + %td + = @sim_card.sim_number + %tr + %td + %strong= t('sim_cards.show.sip_account_id') + ":" + %td + = @sim_card.sip_account + %tr + %td + %strong= t('sip_accounts.index.phone_numbers') + %td + = render 'phone_numbers/listing', :phone_numbers => @sim_card.sip_account.phone_numbers.order(:number) + %tr + %td + %strong= t('sim_cards.show.auth_key') + ":" + %td + = @sim_card.auth_key + %tr + %td + %strong= t('sim_cards.show.state') + ":" + %td + = @sim_card.state + %tr + %td + %strong= t('sim_cards.show.log') + ":" + %td + = @sim_card.log + += render :partial => 'shared/show_edit_destroy_part', :locals => {:parent => @parent, :child => @sim_card }
\ No newline at end of file diff --git a/app/views/sip_accounts/_form.html.haml b/app/views/sip_accounts/_form.html.haml index f209bf4..d40ce10 100644 --- a/app/views/sip_accounts/_form.html.haml +++ b/app/views/sip_accounts/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('sip_accounts.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('sip_accounts.form.submit') diff --git a/app/views/sip_accounts/_form_core.html.haml b/app/views/sip_accounts/_form_core.html.haml index 1b96d27..1a8876a 100644 --- a/app/views/sip_accounts/_form_core.html.haml +++ b/app/views/sip_accounts/_form_core.html.haml @@ -15,3 +15,4 @@ = f.input :clip_no_screening, :label => t('sip_accounts.form.clip_no_screening.label'), :hint => conditional_hint('sip_accounts.form.clip_no_screening.hint') - if CallForward.where(:phone_number_id => @sip_account.phone_number_ids).count == 0 || @sip_account.callforward_rules_act_per_sip_account == true = f.input :callforward_rules_act_per_sip_account, :label => t('sip_accounts.form.callforward_rules_act_per_sip_account.label'), :hint => conditional_hint('sip_accounts.form.callforward_rules_act_per_sip_account.hint') + = f.input :language_code, :collection => Language.all.collect{|l| [l.to_s, l.code]}, :label => t('sip_accounts.form.language_code.label'), :hint => conditional_hint('sip_accounts.form.language_id.hint'), :include_blank => false diff --git a/app/views/sip_domains/_form.html.haml b/app/views/sip_domains/_form.html.haml index 2d662af..83ba7ad 100644 --- a/app/views/sip_domains/_form.html.haml +++ b/app/views/sip_domains/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('sip_domains.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('sip_domains.form.submit') diff --git a/app/views/softkeys/_form.html.haml b/app/views/softkeys/_form.html.haml index 5b799b6..c029ead 100644 --- a/app/views/softkeys/_form.html.haml +++ b/app/views/softkeys/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('softkeys.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('softkeys.form.submit') diff --git a/app/views/tenants/_admin_area.de.html.haml b/app/views/tenants/_admin_area.de.html.haml index 2aed4e1..8acc95d 100644 --- a/app/views/tenants/_admin_area.de.html.haml +++ b/app/views/tenants/_admin_area.de.html.haml @@ -35,6 +35,9 @@ = succeed '.' do =link_to link_to Haml::Engine.new("%i.icon-list").render + ' ' + manufacturer, manufacturer_path(manufacturer) + - if GsParameter.get('SIM_CARDS') == true + = render :partial => 'tenants/table_of_sim_card_providers' + = render :partial => 'call_routes', :locals => {:tenant => tenant} = render :partial => 'gateways', :locals => {:tenant => tenant, :gateways => gateways} diff --git a/app/views/tenants/_admin_area.en.html.haml b/app/views/tenants/_admin_area.en.html.haml index 8e7bfea..c40e3ca 100644 --- a/app/views/tenants/_admin_area.en.html.haml +++ b/app/views/tenants/_admin_area.en.html.haml @@ -35,6 +35,9 @@ = succeed '.' do =link_to link_to Haml::Engine.new("%i.icon-list").render + ' ' + manufacturer, manufacturer_path(manufacturer) + - if GsParameter.get('SIM_CARDS') == true + = render :partial => 'tenants/table_of_sim_card_providers' + = render :partial => 'call_routes', :locals => {:tenant => tenant} = render :partial => 'gateways', :locals => {:tenant => tenant, :gateways => gateways} diff --git a/app/views/tenants/_form.html.haml b/app/views/tenants/_form.html.haml index 1641e78..981293c 100644 --- a/app/views/tenants/_form.html.haml +++ b/app/views/tenants/_form.html.haml @@ -20,5 +20,5 @@ - if GsParameter.get('STRICT_DID_HANDLING') == true = f.input :did_list, :label => t('tenants.form.did_list.label'), :hint => conditional_hint('tenants.form.did_list.hint') - .actions - = f.button :submit, conditional_t('tenants.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('tenants.form.submit') diff --git a/app/views/tenants/_index_core.html.haml b/app/views/tenants/_index_core.html.haml index a220b1b..2430b67 100644 --- a/app/views/tenants/_index_core.html.haml +++ b/app/views/tenants/_index_core.html.haml @@ -13,6 +13,6 @@ - if current_user && current_user.current_tenant != tenant && current_user.tenants.include?(tenant) = simple_form_for([current_user.current_tenant, current_user]) do |f| = f.hidden_field :current_tenant_id, :value => tenant.id - .actions + .form-actions = f.button :submit, conditional_t('tenants.switch_to_tenant') - =render :partial => 'shared/index_view_edit_destroy_part', :locals => {:child => tenant}
\ No newline at end of file + =render :partial => 'shared/index_view_edit_destroy_part', :locals => {:child => tenant} diff --git a/app/views/tenants/_table_of_sim_card_providers.html.haml b/app/views/tenants/_table_of_sim_card_providers.html.haml new file mode 100644 index 0000000..135bb65 --- /dev/null +++ b/app/views/tenants/_table_of_sim_card_providers.html.haml @@ -0,0 +1,7 @@ +- cache(['tenant_show_table_of_sim_card_providers', I18n.locale, SimCardProvider.count, SimCardProvider.reorder(:updated_at).last]) do + -# SIM card providers + -# + %h2= t('sim_card_providers.index.page_title') + - if SimCardProvider.any? + = render "sim_card_providers/index_core", :sim_card_providers => SimCardProvider.all + = render :partial => 'shared/create_link', :locals => {:child_class => SimCardProvider} diff --git a/app/views/user_group_memberships/_form.html.haml b/app/views/user_group_memberships/_form.html.haml index 3c0fee1..e810597 100644 --- a/app/views/user_group_memberships/_form.html.haml +++ b/app/views/user_group_memberships/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('user_group_memberships.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('user_group_memberships.form.submit') diff --git a/app/views/user_groups/_form.html.haml b/app/views/user_groups/_form.html.haml index 3263fdd..5076e74 100644 --- a/app/views/user_groups/_form.html.haml +++ b/app/views/user_groups/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('user_groups.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('user_groups.form.submit') diff --git a/app/views/users/_form.html.haml b/app/views/users/_form.html.haml index 9a75677..90d0e02 100644 --- a/app/views/users/_form.html.haml +++ b/app/views/users/_form.html.haml @@ -4,7 +4,7 @@ = render "form_core", :f => f - .actions + .form-actions = f.button :submit, conditional_t('users.form.submit') - else = simple_form_for(@user) do |f| @@ -12,5 +12,5 @@ = render "form_core", :f => f - .actions + .form-actions = f.button :submit, conditional_t('users.form.submit') diff --git a/app/views/users/show.html.haml b/app/views/users/show.html.haml index c63c791..0f6cc2c 100644 --- a/app/views/users/show.html.haml +++ b/app/views/users/show.html.haml @@ -67,6 +67,12 @@ - cache(['user_show_phones_overview', I18n.locale, @user, @user.phones]) do = render :partial => 'phones', :locals => {:user => @user} + - if GsParameter.get('SIM_CARDS') == true + - cache(['user_show_sim_cards_overview', I18n.locale, @user, @user.sim_cards]) do + %h2=t('sim_cards.index.page_title') + = render :partial => 'sim_cards/index_core', :locals => {:parent => SimCardProvider.first, :sim_cards => @user.sim_cards} + = render :partial => 'shared/create_link', :locals => {:parent => SimCardProvider.first, :child_class => SimCard} + - cache(['user_show_fax_accounts_overview', I18n.locale, @user, @user.fax_accounts]) do = render :partial => 'fax_accounts', :locals => {:user => @user} diff --git a/app/views/voicemail_messages/_index_core.html.haml b/app/views/voicemail_messages/_index_core.html.haml index f03002d..5e82761 100644 --- a/app/views/voicemail_messages/_index_core.html.haml +++ b/app/views/voicemail_messages/_index_core.html.haml @@ -24,18 +24,18 @@ %td - if ! voicemail_message.flags.blank? = t("voicemail_messages.index.flags.#{voicemail_message.flags}") - %td.actions + %td.form-actions - if can?(:show, voicemail_message) && File.readable?(voicemail_message.file_path) = link_to t('voicemail_messages.index.actions.download'), sip_account_voicemail_message_path(@sip_account, voicemail_message, :format => :wav), :method => :get %td.actions - if @sip_account.registration && can?(:call, voicemail_message) = link_to t('voicemail_messages.index.actions.call'), call_sip_account_voicemail_message_path(@sip_account, voicemail_message), :method => :put - %td.actions + %td.form-actions - if can?(:edit, voicemail_message) && voicemail_message.read_epoch > 0 = link_to t('voicemail_messages.index.actions.mark_unread'), mark_unread_sip_account_voicemail_message_path(@sip_account, voicemail_message), :method => :put - else = link_to t('voicemail_messages.index.actions.mark_read'), mark_read_sip_account_voicemail_message_path(@sip_account, voicemail_message), :method => :put - %td.actions + %td.form-actions - if can? :destroy, voicemail_message = link_to t('voicemail_messages.index.actions.destroy'), sip_account_voicemail_message_path(@sip_account, voicemail_message), :method => :delete diff --git a/app/views/voicemail_settings/_form.html.haml b/app/views/voicemail_settings/_form.html.haml index 6d5f845..cd43b2d 100644 --- a/app/views/voicemail_settings/_form.html.haml +++ b/app/views/voicemail_settings/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('voicemail_settings.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('voicemail_settings.form.submit') diff --git a/app/views/whitelists/_form.html.haml b/app/views/whitelists/_form.html.haml index c7f787a..71dbe6b 100644 --- a/app/views/whitelists/_form.html.haml +++ b/app/views/whitelists/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('whitelists.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('whitelists.form.submit') diff --git a/config/initializers/simple_form.rb b/config/initializers/simple_form.rb index 572d58f..062f823 100644 --- a/config/initializers/simple_form.rb +++ b/config/initializers/simple_form.rb @@ -82,6 +82,20 @@ SimpleForm.setup do |config| end end + config.wrappers :checkbox, :tag => 'div', :class => 'control-group', :error_class => 'error' do |b| + b.use :html5 + b.use :placeholder + b.wrapper :tag => 'div', :class => 'controls' do |input| + input.wrapper :tag => 'div', :class => 'simple-checkbox' do |prepend| + prepend.use :label_input + end + input.use :hint, :wrap_with => { :tag => 'span', :class => 'help-block' } + input.use :error, :wrap_with => { :tag => 'span', :class => 'help-inline' } + end + end + + config.wrapper_mappings = { :boolean => :checkbox } + # Wrappers for forms and inputs using the Twitter Bootstrap toolkit. # Check the Bootstrap docs (http://twitter.github.com/bootstrap) # to learn about the different styles for forms and inputs, @@ -95,7 +109,7 @@ SimpleForm.setup do |config| config.boolean_style = :nested # Default class for buttons - config.button_class = 'btn btn-primary' + config.button_class = 'btn' # Method used to tidy up errors. # config.error_method = :first @@ -136,7 +150,7 @@ SimpleForm.setup do |config| config.label_class = 'control-label' # You can define the class to use on all forms. Default is simple_form. - # config.form_class = :simple_form + config.form_class = 'simple_form form-horizontal' # You can define which elements should obtain additional classes # config.generate_additional_classes_for = [:wrapper, :label, :input] @@ -163,7 +177,7 @@ SimpleForm.setup do |config| # config.country_priority = nil # Default size for text inputs. - # config.default_input_size = 50 + config.default_input_size = 150 # When false, do not use translations for labels. # config.translate_labels = true diff --git a/config/locales/views/intruders/de.yml b/config/locales/views/intruders/de.yml index 42ece4b..5b67afe 100644 --- a/config/locales/views/intruders/de.yml +++ b/config/locales/views/intruders/de.yml @@ -11,16 +11,16 @@ de: key: 'Key' points: 'Points' bans: 'Bans' - ban_last: 'Ban last' + ban_last: 'Ban' ban_end: 'Ban end' - contact_ip: 'Contact ip' - contact_port: 'Contact port' - contact_count: 'Contact count' - contact_last: 'Contact last' - contacts_per_second: 'Contacts per second' - contacts_per_second_max: 'Contacts per second max' + contact_ip: 'IP' + contact_port: 'Port' + contact_count: 'Contact' + contact_last: 'Last' + contacts_per_second: 'Contacts/s' + contacts_per_second_max: 'max. Contacts/s' user_agent: 'User agent' - to_user: 'To user' + to_user: 'To' comment: 'Comment' actions: confirm_destroy: 'Sind Sie sicher, dass Sie folgendes löschen möchten: Intruder' diff --git a/config/locales/views/intruders/en.yml b/config/locales/views/intruders/en.yml index 99c2dcb..b9d65f4 100644 --- a/config/locales/views/intruders/en.yml +++ b/config/locales/views/intruders/en.yml @@ -11,16 +11,16 @@ en: key: 'Key' points: 'Points' bans: 'Bans' - ban_last: 'Ban last' + ban_last: 'Ban' ban_end: 'Ban end' - contact_ip: 'Contact ip' - contact_port: 'Contact port' - contact_count: 'Contact count' - contact_last: 'Contact last' - contacts_per_second: 'Contacts per second' - contacts_per_second_max: 'Contacts per second max' + contact_ip: 'IP' + contact_port: 'Port' + contact_count: 'Contact' + contact_last: 'Last' + contacts_per_second: 'Contacts/s' + contacts_per_second_max: 'max. Contacts/s' user_agent: 'User agent' - to_user: 'To user' + to_user: 'To' comment: 'Comment' actions: confirm_destroy: 'Are you sure you want to delete this Intruder?' diff --git a/config/locales/views/parking_stalls/de.yml b/config/locales/views/parking_stalls/de.yml new file mode 100644 index 0000000..44e31c8 --- /dev/null +++ b/config/locales/views/parking_stalls/de.yml @@ -0,0 +1,60 @@ +de: + parking_stalls: + name: 'Parkingstall' + controller: + successfuly_created: 'Parkingstall wurde angelegt.' + successfuly_updated: 'Parkingstall wurde aktualisiert.' + successfuly_destroyed: 'Parkingstall wurde gelöscht.' + index: + page_title: 'Übersicht von Parkingstall' + name: 'Name' + lot: 'Lot' + parking_stallable_id: 'Parking stallable' + parking_stallable_type: 'Parking stallable type' + comment: 'Comment' + actions: + confirm_destroy: 'Sind Sie sicher, dass Sie folgendes löschen möchten: Parkingstall' + destroy: 'Löschen' + edit: 'Bearbeiten' + show: 'Anzeigen' + create: 'Neu anlegen' + create_for: 'Parkingstall neu anlegen für %{resource}' + show: + page_title: 'Parkingstall bearbeiten' + name: 'Name' + lot: 'Lot' + parking_stallable_id: 'Parking stallable' + parking_stallable_type: 'Parking stallable type' + comment: 'Comment' + actions: + confirm_destroy: 'Sind Sie sicher, dass die dieses Element löschen möchten?' + destroy: 'Löschen' + edit: 'Bearbeiten' + view_all: 'Alle anzeigen' + new: + page_title: 'Parkingstall neu anlegen' + actions: + back_to_list: 'Zurück zur Übersicht' + edit: + page_title: 'Parkingstall bearbeiten' + actions: + back_to_list: 'Zurück zur Übersicht' + edit: 'Bearbeiten' + view_all: 'Alle anzeigen' + form: + name: + label: 'Name' + hint: '' + lot: + label: 'Lot' + hint: '' + parking_stallable_id: + label: 'Parking stallable' + hint: '' + parking_stallable_type: + label: 'Parking stallable type' + hint: '' + comment: + label: 'Comment' + hint: '' + submit: 'Absenden'
\ No newline at end of file diff --git a/config/locales/views/parking_stalls/en.yml b/config/locales/views/parking_stalls/en.yml new file mode 100644 index 0000000..6d30b87 --- /dev/null +++ b/config/locales/views/parking_stalls/en.yml @@ -0,0 +1,60 @@ +en: + parking_stalls: + name: 'Parkingstall' + controller: + successfuly_created: 'Successfully created Parkingstall.' + successfuly_updated: 'Successfully updated Parkingstall.' + successfuly_destroyed: 'Successfully destroyed Parkingstall.' + index: + page_title: 'Listing Parkingstall' + name: 'Name' + lot: 'Lot' + parking_stallable_id: 'Parking stallable' + parking_stallable_type: 'Parking stallable type' + comment: 'Comment' + actions: + confirm_destroy: 'Are you sure you want to delete this Parkingstall?' + destroy: 'Delete' + edit: 'Edit' + show: 'View' + create: 'New' + create_for: 'New Parkingstall for %{resource}' + show: + page_title: 'Show Parkingstall' + name: 'Name' + lot: 'Lot' + parking_stallable_id: 'Parking stallable' + parking_stallable_type: 'Parking stallable type' + comment: 'Comment' + actions: + confirm_destroy: 'Are you sure you want to delete this element?' + destroy: 'Delete' + edit: 'Edit' + view_all: 'View All' + new: + page_title: 'New Parkingstall' + actions: + back_to_list: 'Back to Index' + edit: + page_title: 'Editing Parkingstall' + actions: + back_to_list: 'Back to Index' + edit: 'Edit' + view_all: 'View All' + form: + name: + label: 'Name' + hint: '' + lot: + label: 'Lot' + hint: '' + parking_stallable_id: + label: 'Parking stallable' + hint: '' + parking_stallable_type: + label: 'Parking stallable type' + hint: '' + comment: + label: 'Comment' + hint: '' + submit: 'Submit'
\ No newline at end of file diff --git a/config/locales/views/sim_card_providers/de.yml b/config/locales/views/sim_card_providers/de.yml new file mode 100644 index 0000000..7cb19a5 --- /dev/null +++ b/config/locales/views/sim_card_providers/de.yml @@ -0,0 +1,80 @@ +de: + sim_card_providers: + name: 'SIM Karten Provider' + controller: + successfuly_created: 'SIM Karten Provider wurde angelegt.' + successfuly_updated: 'SIM Karten Provider wurde aktualisiert.' + successfuly_destroyed: 'SIM Karten Provider wurde gelöscht.' + index: + page_title: 'Liste SIM Karten Provider' + name: 'Name' + homepage_url: 'Homepage URL' + docu_url: 'Docu URL' + api_server_url: 'API server URL' + api_username: 'API username' + api_password: 'API password' + ref: 'Ref' + sip_server: 'SIP-Server' + include_order_card_function: 'Include order card function' + actions: + confirm_destroy: 'Sind Sie sicher, dass Sie folgendes löschen möchten: SIM Karten Provider' + destroy: 'Löschen' + edit: 'Bearbeiten' + show: 'Anzeigen' + create: 'Neu anlegen' + create_for: 'SIM Karten Provider neu anlegen für %{resource}' + show: + page_title: 'SIM Karten Provider bearbeiten' + name: 'Name' + homepage_url: 'Homepage URL' + docu_url: 'Docu URL' + api_server_url: 'API server URL' + api_username: 'API username' + api_password: 'API password' + ref: 'Ref' + sip_server: 'SIP-Server' + include_order_card_function: 'Include order card function' + actions: + confirm_destroy: 'Sind Sie sicher, dass die dieses Element löschen möchten?' + destroy: 'Löschen' + edit: 'Bearbeiten' + view_all: 'Alle anzeigen' + new: + page_title: 'SIM Karten Provider neu anlegen' + actions: + back_to_list: 'Zurück zur Übersicht' + edit: + page_title: 'SIM Karten Provider bearbeiten' + actions: + back_to_list: 'Zurück zur Übersicht' + edit: 'Bearbeiten' + view_all: 'Alle anzeigen' + form: + name: + label: 'Name' + hint: '' + homepage_url: + label: 'Homepage URL' + hint: '' + docu_url: + label: 'Docu URL' + hint: '' + api_server_url: + label: 'API server URL' + hint: '' + api_username: + label: 'API username' + hint: '' + api_password: + label: 'API password' + hint: '' + ref: + label: 'Ref' + hint: '' + sip_server: + label: 'SIP-Server' + hint: '' + include_order_card_function: + label: 'Include order card function' + hint: '' + submit: 'Absenden'
\ No newline at end of file diff --git a/config/locales/views/sim_card_providers/en.yml b/config/locales/views/sim_card_providers/en.yml new file mode 100644 index 0000000..8b3843c --- /dev/null +++ b/config/locales/views/sim_card_providers/en.yml @@ -0,0 +1,80 @@ +en: + sim_card_providers: + name: 'Simcardprovider' + controller: + successfuly_created: 'Successfully created Simcardprovider.' + successfuly_updated: 'Successfully updated Simcardprovider.' + successfuly_destroyed: 'Successfully destroyed Simcardprovider.' + index: + page_title: 'Listing Simcardprovider' + name: 'Name' + homepage_url: 'Homepage url' + docu_url: 'Docu url' + api_server_url: 'Api server url' + api_username: 'Api username' + api_password: 'Api password' + ref: 'Ref' + sip_server: 'Sip server' + include_order_card_function: 'Include order card function' + actions: + confirm_destroy: 'Are you sure you want to delete this Simcardprovider?' + destroy: 'Delete' + edit: 'Edit' + show: 'View' + create: 'New' + create_for: 'New Simcardprovider for %{resource}' + show: + page_title: 'Show Simcardprovider' + name: 'Name' + homepage_url: 'Homepage url' + docu_url: 'Docu url' + api_server_url: 'Api server url' + api_username: 'Api username' + api_password: 'Api password' + ref: 'Ref' + sip_server: 'Sip server' + include_order_card_function: 'Include order card function' + actions: + confirm_destroy: 'Are you sure you want to delete this element?' + destroy: 'Delete' + edit: 'Edit' + view_all: 'View All' + new: + page_title: 'New Simcardprovider' + actions: + back_to_list: 'Back to Index' + edit: + page_title: 'Editing Simcardprovider' + actions: + back_to_list: 'Back to Index' + edit: 'Edit' + view_all: 'View All' + form: + name: + label: 'Name' + hint: '' + homepage_url: + label: 'Homepage url' + hint: '' + docu_url: + label: 'Docu url' + hint: '' + api_server_url: + label: 'Api server url' + hint: '' + api_username: + label: 'Api username' + hint: '' + api_password: + label: 'Api password' + hint: '' + ref: + label: 'Ref' + hint: '' + sip_server: + label: 'Sip server' + hint: '' + include_order_card_function: + label: 'Include order card function' + hint: '' + submit: 'Submit'
\ No newline at end of file diff --git a/config/locales/views/sim_cards/de.yml b/config/locales/views/sim_cards/de.yml new file mode 100644 index 0000000..4c2a5e4 --- /dev/null +++ b/config/locales/views/sim_cards/de.yml @@ -0,0 +1,70 @@ +de: + sim_cards: + name: 'SIM-Karte' + controller: + successfuly_created: 'SIM-Karte wurde angelegt.' + successfuly_updated: 'SIM-Karte wurde aktualisiert.' + successfuly_destroyed: 'SIM-Karte wurde gelöscht.' + no_existing_sip_accounts_warning: 'Es existiert kein freier SIP-Account zum Anlegen einer neuen SIM-Karte.' + index: + page_title: 'Liste SIM-Karten' + sim_card_provider_id: 'SIM-Karten Provider' + auto_order_card: 'Auto order card' + sip_account_id: 'SIP-Account' + auth_key: 'Auth key' + state: 'Status' + log: 'Log' + actions: + confirm_destroy: 'Sind Sie sicher, dass Sie folgendes löschen möchten: SIM-Karte' + destroy: 'Löschen' + edit: 'Bearbeiten' + show: 'Anzeigen' + create: 'Neu anlegen' + create_for: 'SIM-Karte neu anlegen für %{resource}' + show: + page_title: 'SIM-Karte bearbeiten' + sim_card_provider_id: 'SIM-Karten Provider' + auto_order_card: 'Auto order card' + sip_account_id: 'SIP-Account' + auth_key: 'Auth key' + state: 'Status' + log: 'Log' + sim_number: 'SIM-No.' + actions: + confirm_destroy: 'Sind Sie sicher, dass die dieses Element löschen möchten?' + destroy: 'Löschen' + edit: 'Bearbeiten' + view_all: 'Alle anzeigen' + new: + page_title: 'SIM-Karte neu anlegen' + actions: + back_to_list: 'Zurück zur Übersicht' + edit: + page_title: 'SIM-Karte bearbeiten' + actions: + back_to_list: 'Zurück zur Übersicht' + edit: 'Bearbeiten' + view_all: 'Alle anzeigen' + form: + sim_card_provider_id: + label: 'SIM-Karten Provider' + hint: '' + sim_number: + label: 'SIM-Nr.' + hint: '' + auto_order_card: + label: 'Auto order card' + hint: '' + sip_account_id: + label: 'SIP-Account' + hint: '' + auth_key: + label: 'Auth key' + hint: '' + state: + label: 'Status' + hint: '' + log: + label: 'Log' + hint: '' + submit: 'Absenden'
\ No newline at end of file diff --git a/config/locales/views/sim_cards/en.yml b/config/locales/views/sim_cards/en.yml new file mode 100644 index 0000000..af82295 --- /dev/null +++ b/config/locales/views/sim_cards/en.yml @@ -0,0 +1,70 @@ +en: + sim_cards: + name: 'SIM card' + controller: + successfuly_created: 'Successfully created SIM card.' + successfuly_updated: 'Successfully updated SIM card.' + successfuly_destroyed: 'Successfully destroyed SIM card.' + no_existing_sip_accounts_warning: 'There is no available SIP account to create a new SIM card.' + index: + page_title: 'Listing SIM cards' + sim_card_provider_id: 'SIM card provider' + auto_order_card: 'Auto order card' + sip_account_id: 'Sip account' + auth_key: 'Auth key' + state: 'State' + log: 'Log' + actions: + confirm_destroy: 'Are you sure you want to delete this SIM card?' + destroy: 'Delete' + edit: 'Edit' + show: 'View' + create: 'New' + create_for: 'New SIM card for %{resource}' + show: + page_title: 'Show SIM card' + sim_card_provider_id: 'SIM card provider' + auto_order_card: 'Auto order card' + sip_account_id: 'Sip account' + auth_key: 'Auth key' + state: 'State' + log: 'Log' + sim_number: 'SIM-No.' + actions: + confirm_destroy: 'Are you sure you want to delete this element?' + destroy: 'Delete' + edit: 'Edit' + view_all: 'View All' + new: + page_title: 'New SIM card' + actions: + back_to_list: 'Back to Index' + edit: + page_title: 'Editing SIM card' + actions: + back_to_list: 'Back to Index' + edit: 'Edit' + view_all: 'View All' + form: + sim_card_provider_id: + label: 'SIM card provider' + hint: '' + sim_number: + label: 'SIM-Nr.' + hint: '' + auto_order_card: + label: 'Auto order card' + hint: '' + sip_account_id: + label: 'Sip account' + hint: '' + auth_key: + label: 'Auth key' + hint: '' + state: + label: 'State' + hint: '' + log: + label: 'Log' + hint: '' + submit: 'Submit'
\ No newline at end of file diff --git a/config/locales/views/sip_accounts/de.yml b/config/locales/views/sip_accounts/de.yml index 8fe2300..7a7e540 100644 --- a/config/locales/views/sip_accounts/de.yml +++ b/config/locales/views/sip_accounts/de.yml @@ -81,4 +81,7 @@ de: callforward_rules_act_per_sip_account: label: 'Rufweiterleitungen gelten für das gesamte SIP-Account' hint: '' - submit: 'Absenden'
\ No newline at end of file + language_code: + label: 'Sprache' + hint: '' + submit: 'Absenden' diff --git a/config/locales/views/sip_accounts/en.yml b/config/locales/views/sip_accounts/en.yml index aa934e9..35d5456 100644 --- a/config/locales/views/sip_accounts/en.yml +++ b/config/locales/views/sip_accounts/en.yml @@ -81,4 +81,7 @@ en: hotdeskable: label: 'Hotdeskable' hint: '' - submit: 'Submit'
\ No newline at end of file + language_code: + label: 'Language' + hint: '' + submit: 'Submit' diff --git a/config/routes.rb b/config/routes.rb index 6d7a2ad..65a9ac2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,5 +1,9 @@ Gemeinschaft42c::Application.routes.draw do + resources :sim_card_providers do + resources :sim_cards, :except => [:edit, :update] + end + resources :intruders resources :backup_jobs, :except => [:edit, :update] @@ -197,6 +201,7 @@ Gemeinschaft42c::Application.routes.draw do resources :conferences resources :fax_accounts resources :system_messages, :except => [ :edit, :update, :destroy ] + resources :parking_stalls end resources :user_groups do @@ -224,6 +229,7 @@ Gemeinschaft42c::Application.routes.draw do end resources :hunt_groups resources :automatic_call_distributors + resources :parking_stalls end resources :callthroughs, :only => [] do diff --git a/config/schedule.rb b/config/schedule.rb index 0b5f0ca..94603f1 100644 --- a/config/schedule.rb +++ b/config/schedule.rb @@ -1,24 +1,13 @@ -# Use this file to easily define all of your cron jobs. +# Daily Backup # -# It's helpful, but not entirely necessary to understand cron before proceeding. -# http://en.wikipedia.org/wiki/Cron - -# Example: -# -# set :output, "/path/to/my/cron_log.log" -# -# every 2.hours do -# command "/usr/bin/some_great_command" -# runner "MyModel.some_method" -# rake "some:great:rake:task" -# end -# -# every 4.days do -# runner "AnotherModel.prune_old_records" -# end - every 1.day, :at => '4:00 am' do rake "backup:daily_backup" end +# Auto-Reboot of Phones which should be rebootet +# +every 1.day, :at => '2:30 am' do + command "/opt/GS5/script/logout_phones.sh" +end + # Learn more: http://github.com/javan/whenever diff --git a/db/migrate/20130212120729_create_parking_stalls.rb b/db/migrate/20130212120729_create_parking_stalls.rb new file mode 100644 index 0000000..7620942 --- /dev/null +++ b/db/migrate/20130212120729_create_parking_stalls.rb @@ -0,0 +1,16 @@ +class CreateParkingStalls < ActiveRecord::Migration + def self.up + create_table :parking_stalls do |t| + t.string :name + t.string :lot + t.integer :parking_stallable_id + t.string :parking_stallable_type + t.string :comment + t.timestamps + end + end + + def self.down + drop_table :parking_stalls + end +end diff --git a/db/migrate/20130213082703_add_language_to_sip_account.rb b/db/migrate/20130213082703_add_language_to_sip_account.rb new file mode 100644 index 0000000..24343ef --- /dev/null +++ b/db/migrate/20130213082703_add_language_to_sip_account.rb @@ -0,0 +1,5 @@ +class AddLanguageToSipAccount < ActiveRecord::Migration + def change + add_column :sip_accounts, :language_code, :string + end +end diff --git a/db/migrate/20130213110000_add_sounds_to_parameters.rb b/db/migrate/20130213110000_add_sounds_to_parameters.rb new file mode 100644 index 0000000..8c4cd94 --- /dev/null +++ b/db/migrate/20130213110000_add_sounds_to_parameters.rb @@ -0,0 +1,10 @@ +class AddSoundsToParameters < ActiveRecord::Migration + def up + GsParameter.create(:entity => 'dialplan', :section => 'sounds', :name => 'en', :value => '/opt/freeswitch/sounds/en/us/callie', :class_type => 'String') + GsParameter.create(:entity => 'dialplan', :section => 'sounds', :name => 'de', :value => '/opt/freeswitch/sounds/de/de/callie', :class_type => 'String') + end + + def down + GsParameter.where(:entity => 'dialplan', :section => 'sounds').destroy_all + end +end diff --git a/db/migrate/20130215111526_create_sim_card_providers.rb b/db/migrate/20130215111526_create_sim_card_providers.rb new file mode 100644 index 0000000..b4e0f0e --- /dev/null +++ b/db/migrate/20130215111526_create_sim_card_providers.rb @@ -0,0 +1,20 @@ +class CreateSimCardProviders < ActiveRecord::Migration + def self.up + create_table :sim_card_providers do |t| + t.string :name + t.string :homepage_url + t.string :docu_url + t.string :api_server_url + t.string :api_username + t.string :api_password + t.string :ref + t.string :sip_server + t.boolean :include_order_card_function + t.timestamps + end + end + + def self.down + drop_table :sim_card_providers + end +end diff --git a/db/migrate/20130215112028_create_sim_cards.rb b/db/migrate/20130215112028_create_sim_cards.rb new file mode 100644 index 0000000..8962a1f --- /dev/null +++ b/db/migrate/20130215112028_create_sim_cards.rb @@ -0,0 +1,18 @@ +class CreateSimCards < ActiveRecord::Migration + def self.up + create_table :sim_cards do |t| + t.integer :sim_card_provider_id + t.string :sim_number + t.boolean :auto_order_card + t.integer :sip_account_id + t.string :auth_key + t.string :state + t.text :log + t.timestamps + end + end + + def self.down + drop_table :sim_cards + end +end diff --git a/db/migrate/20130215133749_add_sim_card_gs_parameter.rb b/db/migrate/20130215133749_add_sim_card_gs_parameter.rb new file mode 100644 index 0000000..9b0bbba --- /dev/null +++ b/db/migrate/20130215133749_add_sim_card_gs_parameter.rb @@ -0,0 +1,9 @@ +class AddSimCardGsParameter < ActiveRecord::Migration + def up + GsParameter.create(:name => 'SIM_CARDS', :section => 'System defaults', :value => 'false', :class_type => 'Boolean', :description => 'Should it be possible to use SIM cards as SIP account users.') + end + + def down + GsParameter.where(:name => 'SIM_CARDS').destroy_all + end +end diff --git a/db/schema.rb b/db/schema.rb index fc2b635..df55604 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20130212071000) do +ActiveRecord::Schema.define(:version => 20130215133749) do create_table "access_authorizations", :force => true do |t| t.string "access_authorizationable_type" @@ -701,6 +701,16 @@ ActiveRecord::Schema.define(:version => 20130212071000) do t.datetime "updated_at", :null => false end + create_table "parking_stalls", :force => true do |t| + t.string "name" + t.string "lot" + t.integer "parking_stallable_id" + t.string "parking_stallable_type" + t.string "comment" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + create_table "phone_book_entries", :force => true do |t| t.integer "phone_book_id" t.string "first_name" @@ -876,6 +886,32 @@ ActiveRecord::Schema.define(:version => 20130212071000) do add_index "sessions", ["session_id"], :name => "index_sessions_on_session_id" add_index "sessions", ["updated_at"], :name => "index_sessions_on_updated_at" + create_table "sim_card_providers", :force => true do |t| + t.string "name" + t.string "homepage_url" + t.string "docu_url" + t.string "api_server_url" + t.string "api_username" + t.string "api_password" + t.string "ref" + t.string "sip_server" + t.boolean "include_order_card_function" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "sim_cards", :force => true do |t| + t.integer "sim_card_provider_id" + t.string "sim_number" + t.boolean "auto_order_card" + t.integer "sip_account_id" + t.string "auth_key" + t.string "state" + t.text "log" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + create_table "sip_accounts", :force => true do |t| t.string "sip_accountable_type" t.integer "sip_accountable_id" @@ -899,6 +935,7 @@ ActiveRecord::Schema.define(:version => 20130212071000) do t.integer "gs_node_original_id" t.string "uuid" t.boolean "is_native" + t.string "language_code" end add_index "sip_accounts", ["uuid"], :name => "index_sip_accounts_on_uuid" diff --git a/lib/generators/nifty/authentication/templates/views/haml/_form.html.haml b/lib/generators/nifty/authentication/templates/views/haml/_form.html.haml index 992ee9c..e740959 100644 --- a/lib/generators/nifty/authentication/templates/views/haml/_form.html.haml +++ b/lib/generators/nifty/authentication/templates/views/haml/_form.html.haml @@ -12,5 +12,5 @@ .field = f.label :password_confirmation, "Confirm Password" = f.password_field :password_confirmation - .actions + .form-actions = f.submit (@<%= user_singular_name %>.new_record? ? "Sign up" : "Update") diff --git a/lib/generators/nifty/authentication/templates/views/haml/login.html.haml b/lib/generators/nifty/authentication/templates/views/haml/login.html.haml index 3aebb44..877d8f9 100644 --- a/lib/generators/nifty/authentication/templates/views/haml/login.html.haml +++ b/lib/generators/nifty/authentication/templates/views/haml/login.html.haml @@ -11,7 +11,7 @@ .field = f.label :password = f.password_field :password - .actions + .form-actions = f.submit "Log in" <%- else -%> - form_tag <%= session_plural_name %>_path do @@ -21,6 +21,6 @@ .field = label_tag :password = password_field_tag :password - .actions + .form-actions = submit_tag "Log in" <%- end -%> diff --git a/lib/generators/nifty/scaffold/templates/views/haml/_form.html.haml b/lib/generators/nifty/scaffold/templates/views/haml/_form.html.haml index 57cb828..b12f1cb 100644 --- a/lib/generators/nifty/scaffold/templates/views/haml/_form.html.haml +++ b/lib/generators/nifty/scaffold/templates/views/haml/_form.html.haml @@ -3,5 +3,5 @@ = render "form_core", :f => f - .actions - = f.button :submit, conditional_t('<%= plural_name %>.form.submit')
\ No newline at end of file + .form-actions + = f.button :submit, conditional_t('<%= plural_name %>.form.submit') diff --git a/misc/freeswitch/conf/freeswitch.xml b/misc/freeswitch/conf/freeswitch.xml index a5fe873..4969b07 100644 --- a/misc/freeswitch/conf/freeswitch.xml +++ b/misc/freeswitch/conf/freeswitch.xml @@ -1,8 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <document type="freeswitch/xml"> - <X-PRE-PROCESS cmd="set" data="sound_prefix=/opt/freeswitch/sounds/en/us/callie"/> <section name="languages" description="Language Management"> - <language name="en" say-module="en" sound-prefix="/opt/freeswitch/sounds/en/us/callie"> + <language name="en" say-module="en"> <phrases> <macros> <macro name="voicemail_hello"> @@ -463,10 +462,55 @@ </match> </input> </macro> + <macro name="conference_welcome"> + <input pattern="^(.*)$"> + <match> + <action function="play-file" data="conference/conf-welcome.wav"/> + </match> + </input> + </macro> + <macro name="conference_goodbye"> + <input pattern="^(.*)$"> + <match> + <action function="play-file" data="conference/conf-goodbye.wav"/> + </match> + </input> + </macro> + <macro name="conference_bad_pin"> + <input pattern="^(.*)$"> + <match> + <action function="play-file" data="conference/conf-bad-pin.wav"/> + </match> + </input> + </macro> + <macro name="conference_record_name"> + <input pattern="^(.*)$"> + <match> + <action function="play-file" data="voicemail/vm-record_name1.wav"/> + <action function="play-file" data="tone_stream://%(1000,0,500)"/> + </match> + </input> + </macro> + <macro name="conference_has_joined"> + <input pattern="^(.+)$"> + <match> + <action function="play-file" data="$1"/> + <action function="play-file" data="conference/conf-has_joined.wav"/> + </match> + </input> + </macro> + <macro name="conference_has_left"> + <input pattern="^(.+)$"> + <match> + <action function="play-file" data="$1"/> + <action function="play-file" data="conference/conf-has_left.wav"/> + </match> + </input> + </macro> </macros> </phrases> </language> - <language name="de" say-module="de" sound-prefix="/opt/freeswitch/sounds/de/de/callie"> + <language name="de" say-module="de"> <phrases> <macros> <macro name="voicemail_hello"> @@ -927,6 +971,51 @@ </match> </input> </macro> + <macro name="conference_welcome"> + <input pattern="^(.*)$"> + <match> + <action function="play-file" data="conference/conf-welcome.wav"/> + </match> + </input> + </macro> + <macro name="conference_goodbye"> + <input pattern="^(.*)$"> + <match> + <action function="play-file" data="conference/conf-goodbye.wav"/> + </match> + </input> + </macro> + <macro name="conference_bad_pin"> + <input pattern="^(.*)$"> + <match> + <action function="play-file" data="conference/conf-bad-pin.wav"/> + </match> + </input> + </macro> + <macro name="conference_record_name"> + <input pattern="^(.*)$"> + <match> + <action function="play-file" data="voicemail/vm-record_name1.wav"/> + <action function="play-file" data="tone_stream://%(1000,0,500)"/> + </match> + </input> + </macro> + <macro name="conference_has_joined"> + <input pattern="^(.+)$"> + <match> + <action function="play-file" data="$1"/> + <action function="play-file" data="conference/conf-has_joined.wav"/> + </match> + </input> + </macro> + <macro name="conference_has_left"> + <input pattern="^(.+)$"> + <match> + <action function="play-file" data="$1"/> + <action function="play-file" data="conference/conf-has_left.wav"/> + </match> + </input> + </macro> </macros> </phrases> </language> diff --git a/misc/freeswitch/scripts/common/conference.lua b/misc/freeswitch/scripts/common/conference.lua index ca5fa62..f6a4d87 100644 --- a/misc/freeswitch/scripts/common/conference.lua +++ b/misc/freeswitch/scripts/common/conference.lua @@ -157,7 +157,7 @@ function Conference.enter(self, caller, domain) caller:answer(); caller:sleep(1000); - caller.session:streamFile('conference/conf-welcome.wav'); + caller.session:sayPhrase('conference_welcome'); if pin and pin ~= "" then local digits = ""; @@ -165,12 +165,12 @@ function Conference.enter(self, caller, domain) if digits == pin then break elseif digits ~= "" then - caller.session:streamFile('conference/conf-bad-pin.wav'); + caller.session:sayPhrase('conference_bad_pin'); end digits = caller.session:read(PIN_LENGTH_MIN, PIN_LENGTH_MAX, 'conference/conf-enter_conf_pin.wav', PIN_TIMEOUT, '#'); end if digits ~= pin then - caller.session:streamFile("conference/conf-goodbye.wav"); + caller.session:sayPhrase('conference_goodbye'); return "CALL_REJECTED"; end end @@ -192,8 +192,7 @@ function Conference.enter(self, caller, domain) if common.str.to_b(self.record.announce_new_member_by_name) or common.str.to_b(self.record.announce_left_member_by_name) then local uid = session:get_uuid(); name_file = "/tmp/conference_caller_name_" .. uid .. ".wav"; - caller.session:streamFile("voicemail/vm-record_name1.wav"); - caller.session:execute("playback", "tone_stream://%(1000,0,500)"); + caller.session:sayPhrase('conference_record_name'); session:recordFile(name_file, ANNOUNCEMENT_MAX_LEN, ANNOUNCEMENT_SILENCE_THRESHOLD, ANNOUNCEMENT_SILENCE_LEN); caller.session:streamFile(name_file); end @@ -209,7 +208,7 @@ function Conference.enter(self, caller, domain) local result = caller.session:execute('conference', self.record.id .. "@profile_" .. self.record.id .. "++flags{" .. table.concat(flags, '|') .. "}"); self.log:debug('exited conference - result: ' .. tostring(result)); - caller.session:streamFile("conference/conf-goodbye.wav") + caller.session:sayPhrase('conference_goodbye'); -- Play leaving caller's name if recorded if name_file then diff --git a/misc/freeswitch/scripts/common/sip_account.lua b/misc/freeswitch/scripts/common/sip_account.lua index d023f20..5b1ea56 100644 --- a/misc/freeswitch/scripts/common/sip_account.lua +++ b/misc/freeswitch/scripts/common/sip_account.lua @@ -38,6 +38,7 @@ function SipAccount.find_by_sql(self, where) `a`.`sip_accountable_id`, \ `a`.`hotdeskable`, \ `a`.`gs_node_id`, \ + `a`.`language_code`, \ `b`.`host`, \ `c`.`sip_host`, \ `c`.`profile_name` \ diff --git a/misc/freeswitch/scripts/dialplan/call_parking.lua b/misc/freeswitch/scripts/dialplan/call_parking.lua new file mode 100644 index 0000000..cc2cf4b --- /dev/null +++ b/misc/freeswitch/scripts/dialplan/call_parking.lua @@ -0,0 +1,83 @@ +-- Gemeinschaft 5 module: call parking class +-- (c) AMOOMA GmbH 2013 +-- + +module(...,package.seeall) + +PARKING_STALL_FORMAT = '[0-9A-Z_%+%-]+'; +UUID_FORMAT = '[0-9a-f%-]+'; + +CallParking = {} + +-- create acd object +function CallParking.new(self, arg) + arg = arg or {} + object = arg.object or {} + setmetatable(object, self); + self.__index = self; + self.class = 'parkingstall'; + self.log = arg.log; + self.database = arg.database; + self.lot = arg.lot or 'default'; + self.caller = arg.caller; + return object; +end + + +function CallParking.find_by_name(self, name) + local sql_query = 'SELECT * FROM `parking_stalls` WHERE `name`= '.. self.database:escape(name, '"') .. ' LIMIT 1'; + local parking_stall = nil; + + self.database:query(sql_query, function(entry) + parking_stall = CallParking:new(self); + parking_stall.record = entry; + parking_stall.id = tonumber(entry.id); + parking_stall.name = entry.name; + end) + + return parking_stall; +end + + +function CallParking.list_occupied(self, lot) + lot = lot or self.lot; + + require 'common.fapi' + local valet_info = common.fapi.FApi:new{ log = self.log }:execute('valet_info', lot); + + local parking_stalls = {}; + tostring(valet_info):gsub('<extension uuid="(' .. UUID_FORMAT .. ')">(' .. PARKING_STALL_FORMAT .. ')</extension>', function(channel_uuid, parking_stall) + parking_stalls[parking_stall] = channel_uuid; + end); + + return parking_stalls; +end + + +function CallParking.occupied(self) + local occupied_stalls = self:list_occupied(); + if occupied_stalls then + return occupied_stalls[self.name]; + end +end + + +function CallParking.park_retrieve(self) + self.caller:execute("valet_park", self.lot .. ' ' .. self.name); +end + + +function CallParking.park(self) + if self:occupied() then + return false; + end + self.caller:execute("valet_park", self.lot .. ' ' .. self.name); +end + + +function CallParking.retrieve(self) + if not self:occupied() then + return false; + end + self.caller:execute("valet_park", self.lot .. ' ' .. self.name); +end diff --git a/misc/freeswitch/scripts/dialplan/dialplan.lua b/misc/freeswitch/scripts/dialplan/dialplan.lua index 72503e5..b27bb9d 100644 --- a/misc/freeswitch/scripts/dialplan/dialplan.lua +++ b/misc/freeswitch/scripts/dialplan/dialplan.lua @@ -270,7 +270,10 @@ function Dialplan.retrieve_caller_data(self) for index, caller_number in ipairs(self.caller.caller_phone_numbers) do self.caller.caller_phone_numbers_hash[caller_number] = true; end - self.log:info('CALLER_DATA - caller account: ', self.caller.account.class, '=', self.caller.account.id, '/', self.caller.account.uuid, ', phone_numbers: ', #self.caller.caller_phone_numbers); + if not common.str.blank(self.caller.account.record.language_code) then + self.caller.language = self.caller.account.record.language_code; + end + self.log:info('CALLER_DATA - caller account: ', self.caller.account.class, '=', self.caller.account.id, '/', self.caller.account.uuid, ', phone_numbers: ', #self.caller.caller_phone_numbers, ', language: ', self.caller.language); if self.caller.account.owner then self.log:info('CALLER_DATA - caller owner: ', self.caller.account.owner.class, '=', self.caller.account.owner.id, '/', self.caller.account.owner.uuid); else @@ -859,7 +862,6 @@ function Dialplan.run(self, destination) self.caller:set_variable('hangup_after_bridge', false); self.caller:set_variable('bridge_early_media', 'true'); - self.caller:set_variable('default_language', self.default_language); self.caller:set_variable('gs_save_cdr', true); self.caller:set_variable('gs_call_service', 'dial'); self.caller.session:setAutoHangup(false); @@ -876,6 +878,8 @@ function Dialplan.run(self, destination) self:retrieve_caller_data(); self.route_failover = common.configuration_table.get(self.database, 'call_route', 'failover'); + self.caller.language = self.caller.language or self.default_language; + if not destination or destination.type == 'unknown' then local route = nil; if self.caller.gateway then @@ -937,7 +941,9 @@ function Dialplan.run(self, destination) end end - self.log:info('DIALPLAN start - caller_id: ',self.caller.caller_id_number, ' "', self.caller.caller_id_name, '" , number: ', destination.number); + self.caller:set_variable('default_language', self.caller.language); + self.caller:set_variable('sound_prefix', common.str.try(self.config, 'sounds.' .. tostring(self.caller.language))); + self.log:info('DIALPLAN start - caller_id: ',self.caller.caller_id_number, ' "', self.caller.caller_id_name, '" , number: ', destination.number, ', language: ', self.caller.language); local result = { continue = false }; local loop = self.caller.loop_count; diff --git a/misc/freeswitch/scripts/dialplan/functions.lua b/misc/freeswitch/scripts/dialplan/functions.lua index 4430be1..acfa336 100644 --- a/misc/freeswitch/scripts/dialplan/functions.lua +++ b/misc/freeswitch/scripts/dialplan/functions.lua @@ -111,8 +111,8 @@ function Functions.dialplan_function(self, caller, dialed_number) result = "+" .. tostring(parameters[3]); elseif fid == "hangup" then result = self:hangup(caller, parameters[3], parameters[4]); - elseif fid == "park" then - result = self:park(caller, parameters[3]); + elseif fid == "cpa" then + result = self:call_parking_inout(caller, parameters[3], parameters[4]); end return result; @@ -898,6 +898,7 @@ function Functions.acd_membership_toggle(self, caller, agent_id, phone_number) return { continue = false, code = 200, phrase = 'OK', no_cdr = true } end + function Functions.hangup(self, caller, code, phrase) require 'common.str' @@ -914,8 +915,20 @@ function Functions.hangup(self, caller, code, phrase) return { continue = false, code = code, phrase = phrase:gsub('_', ' '), no_cdr = true } end -function Functions.park(self, caller, lot) - self.log:info("FUNCTION_PARK lot: ", lot); - caller:execute("valet_park", 'valet_lot ' .. lot); + +function Functions.call_parking_inout(self, caller, stall_name, lot_name) + require 'dialplan.call_parking'; + local parking_stall = dialplan.call_parking.CallParking:new{ log = self.log, database = self.database, caller = caller }:find_by_name(stall_name); + + if not parking_stall then + return { continue = false, code = 404, phrase = 'Parking stall not found', no_cdr = true } + end + + if lot_name and parking_stall.lot ~= lot_name then + return { continue = false, code = 404, phrase = 'Parking lot not found', no_cdr = true } + end + + parking_stall:park_retrieve(); + return { continue = false, code = 200, phrase = 'OK', no_cdr = true } end diff --git a/test/functional/parking_stalls_controller_test.rb b/test/functional/parking_stalls_controller_test.rb new file mode 100644 index 0000000..8596a48 --- /dev/null +++ b/test/functional/parking_stalls_controller_test.rb @@ -0,0 +1,49 @@ +require 'test_helper' + +class ParkingStallsControllerTest < ActionController::TestCase + setup do + @parking_stall = parking_stalls(:one) + end + + test "should get index" do + get :index + assert_response :success + assert_not_nil assigns(:parking_stalls) + end + + test "should get new" do + get :new + assert_response :success + end + + test "should create parking_stall" do + assert_difference('ParkingStall.count') do + post :create, parking_stall: @parking_stall.attributes + end + + assert_redirected_to parking_stall_path(assigns(:parking_stall)) + end + + test "should show parking_stall" do + get :show, id: @parking_stall.to_param + assert_response :success + end + + test "should get edit" do + get :edit, id: @parking_stall.to_param + assert_response :success + end + + test "should update parking_stall" do + put :update, id: @parking_stall.to_param, parking_stall: @parking_stall.attributes + assert_redirected_to parking_stall_path(assigns(:parking_stall)) + end + + test "should destroy parking_stall" do + assert_difference('ParkingStall.count', -1) do + delete :destroy, id: @parking_stall.to_param + end + + assert_redirected_to parking_stalls_path + end +end diff --git a/test/functional/sim_card_providers_controller_test.rb b/test/functional/sim_card_providers_controller_test.rb new file mode 100644 index 0000000..2dd9f3c --- /dev/null +++ b/test/functional/sim_card_providers_controller_test.rb @@ -0,0 +1,49 @@ +require 'test_helper' + +class SimCardProvidersControllerTest < ActionController::TestCase + setup do + @sim_card_provider = sim_card_providers(:one) + end + + test "should get index" do + get :index + assert_response :success + assert_not_nil assigns(:sim_card_providers) + end + + test "should get new" do + get :new + assert_response :success + end + + test "should create sim_card_provider" do + assert_difference('SimCardProvider.count') do + post :create, sim_card_provider: @sim_card_provider.attributes + end + + assert_redirected_to sim_card_provider_path(assigns(:sim_card_provider)) + end + + test "should show sim_card_provider" do + get :show, id: @sim_card_provider.to_param + assert_response :success + end + + test "should get edit" do + get :edit, id: @sim_card_provider.to_param + assert_response :success + end + + test "should update sim_card_provider" do + put :update, id: @sim_card_provider.to_param, sim_card_provider: @sim_card_provider.attributes + assert_redirected_to sim_card_provider_path(assigns(:sim_card_provider)) + end + + test "should destroy sim_card_provider" do + assert_difference('SimCardProvider.count', -1) do + delete :destroy, id: @sim_card_provider.to_param + end + + assert_redirected_to sim_card_providers_path + end +end diff --git a/test/functional/sim_cards_controller_test.rb b/test/functional/sim_cards_controller_test.rb new file mode 100644 index 0000000..72436c9 --- /dev/null +++ b/test/functional/sim_cards_controller_test.rb @@ -0,0 +1,49 @@ +require 'test_helper' + +class SimCardsControllerTest < ActionController::TestCase + setup do + @sim_card = sim_cards(:one) + end + + test "should get index" do + get :index + assert_response :success + assert_not_nil assigns(:sim_cards) + end + + test "should get new" do + get :new + assert_response :success + end + + test "should create sim_card" do + assert_difference('SimCard.count') do + post :create, sim_card: @sim_card.attributes + end + + assert_redirected_to sim_card_path(assigns(:sim_card)) + end + + test "should show sim_card" do + get :show, id: @sim_card.to_param + assert_response :success + end + + test "should get edit" do + get :edit, id: @sim_card.to_param + assert_response :success + end + + test "should update sim_card" do + put :update, id: @sim_card.to_param, sim_card: @sim_card.attributes + assert_redirected_to sim_card_path(assigns(:sim_card)) + end + + test "should destroy sim_card" do + assert_difference('SimCard.count', -1) do + delete :destroy, id: @sim_card.to_param + end + + assert_redirected_to sim_cards_path + end +end diff --git a/test/unit/parking_stall_test.rb b/test/unit/parking_stall_test.rb new file mode 100644 index 0000000..db3bcf3 --- /dev/null +++ b/test/unit/parking_stall_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class ParkingStallTest < ActiveSupport::TestCase + def test_should_be_valid + assert ParkingStall.new.valid? + end +end diff --git a/test/unit/sim_card_provider_test.rb b/test/unit/sim_card_provider_test.rb new file mode 100644 index 0000000..c9ef142 --- /dev/null +++ b/test/unit/sim_card_provider_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class SimCardProviderTest < ActiveSupport::TestCase + def test_should_be_valid + assert SimCardProvider.new.valid? + end +end diff --git a/test/unit/sim_card_test.rb b/test/unit/sim_card_test.rb new file mode 100644 index 0000000..2f9ba16 --- /dev/null +++ b/test/unit/sim_card_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class SimCardTest < ActiveSupport::TestCase + def test_should_be_valid + assert SimCard.new.valid? + end +end |