Added geo calendar support.
This commit is contained in:
parent
de7039b2b5
commit
56288aba42
2 changed files with 111 additions and 0 deletions
67
lib/service/geo_calendar.rb
Normal file
67
lib/service/geo_calendar.rb
Normal file
|
@ -0,0 +1,67 @@
|
|||
# Copyright (C) 2012-2013 Zammad Foundation, http://zammad-foundation.org/
|
||||
|
||||
module Service
|
||||
class GeoCalendar
|
||||
include ApplicationLib
|
||||
|
||||
=begin
|
||||
|
||||
lookup calendar based on ip or hostname
|
||||
|
||||
result = Service::GeoCalendar.location( '99.99.99.99' )
|
||||
|
||||
lookup calendar based on own system ip
|
||||
|
||||
result = Service::GeoCalendar.location
|
||||
|
||||
returns
|
||||
|
||||
result = {
|
||||
"name" => 'Country Name',
|
||||
"timezone" => 'time zone of ip',
|
||||
"business_hours" => {
|
||||
"mon" => {
|
||||
"active" => true,
|
||||
"timeframes" => [["09:00","17:00"]]
|
||||
},
|
||||
"tue" => {
|
||||
"active" => true,
|
||||
"timeframes" => [["09:00","17:00"]]
|
||||
},
|
||||
"wed":{
|
||||
"active" => true,
|
||||
"timeframes" => [["09:00","17:00"]]
|
||||
},
|
||||
"thu":{
|
||||
"active" => true,
|
||||
"timeframes" => [["09:00","17:00"]]
|
||||
},
|
||||
"fri":{
|
||||
"active" => true,
|
||||
"timeframes" => [["09:00","17:00"]]
|
||||
},
|
||||
"sat":{
|
||||
"active" => false,
|
||||
"timeframes" => [["09:00","17:00"]]
|
||||
},
|
||||
"sun":{
|
||||
"active" => false,
|
||||
"timeframes" => [["09:00","17:00"]]
|
||||
}
|
||||
},
|
||||
"ical_url" => "",
|
||||
}
|
||||
|
||||
=end
|
||||
|
||||
def self.location(address = nil)
|
||||
|
||||
# load backend
|
||||
backend = load_adapter_by_setting( 'geo_calendar_backend' )
|
||||
return if !backend
|
||||
|
||||
# db lookup
|
||||
backend.location(address)
|
||||
end
|
||||
end
|
||||
end
|
44
lib/service/geo_calendar/zammad.rb
Normal file
44
lib/service/geo_calendar/zammad.rb
Normal file
|
@ -0,0 +1,44 @@
|
|||
# Copyright (C) 2012-2013 Zammad Foundation, http://zammad-foundation.org/
|
||||
|
||||
require 'cache'
|
||||
|
||||
class Service::GeoCalendar::Zammad
|
||||
def self.location(address)
|
||||
|
||||
# check cache
|
||||
cache_key = "zammadgeocalendar::#{address}"
|
||||
cache = Cache.get( cache_key )
|
||||
return cache if cache
|
||||
|
||||
# do lookup
|
||||
host = 'https://geo.zammad.com'
|
||||
if address
|
||||
url = "/calendar?ip=#{CGI.escape address}"
|
||||
else
|
||||
url = '/calendar'
|
||||
end
|
||||
data = {}
|
||||
begin
|
||||
response = UserAgent.get(
|
||||
"#{host}#{url}",
|
||||
{},
|
||||
{
|
||||
json: true,
|
||||
open_timeout: 2,
|
||||
read_timeout: 4,
|
||||
},
|
||||
)
|
||||
if !response.success? && response.code.to_s !~ /^40.$/
|
||||
fail "ERROR: #{response.code}/#{response.body}"
|
||||
end
|
||||
|
||||
data = response.data
|
||||
|
||||
Cache.write( cache_key, data, { expires_in: 1.day } )
|
||||
rescue => e
|
||||
Rails.logger.error "#{host}#{url}: #{e.inspect}"
|
||||
Cache.write( cache_key, data, { expires_in: 1.minutes } )
|
||||
end
|
||||
data
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue