caboose-cms 0.3.85 → 0.3.86
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/app/controllers/caboose/login_controller.rb +3 -2
- data/app/controllers/caboose/users_controller.rb +93 -0
- data/app/models/caboose/schema.rb +21 -3
- data/app/models/caboose/timezone.rb +75 -0
- data/app/models/caboose/timezone_abbreviation.rb +5 -0
- data/app/models/caboose/timezone_offset.rb +5 -0
- data/app/views/caboose/users/import_form.html.erb +54 -0
- data/app/views/caboose/users/index.html.erb +5 -0
- data/config/routes.rb +4 -2
- data/lib/caboose.rb +4 -0
- data/lib/caboose/version.rb +1 -1
- data/lib/sample_files/timezone_abbreviations.csv +197 -0
- data/lib/tasks/caboose.rake +14 -0
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YTFiZmFkNWM5MDk2ZTIwOTk5MjMwNWJmMDYxZWEzZjVlNTU5OThmZA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YjQ0NDAzNjc0YmE0ZjQ5ODUxYmQ5NWRiMDk3YTQ5ZDBjZTI3OTFmNQ==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YzNmN2Y5NTdlMjMyNjNjYTYwZTRmODM1OTc4ZTM4NDhmYzc5YjI0YjQxZThh
|
10
|
+
OWM1OGM4ZGRhNTg3ZWNlOTdlZThmNGM1OWU5ZmU5MWFhNThhOGVlM2M4N2Jl
|
11
|
+
ODQ2NWYwMzJiZTUzZTczZDdjMDUzNDZlOGE0MGU5YmM2MzY4Zjg=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
Y2IyMmY5MGEyNzBmMzk5YzU0MGM1NjBmYzk3MmUxMGQzMGM0ZWJmN2QxMTIx
|
14
|
+
Y2JjZDlhODA0ZGZhMjIyMWQwYzRhMmM3NTU1ZTE1MzQ0NjZkNGMzZTA2YjFi
|
15
|
+
ODQ5YTkyYzU0NGI1MmI3OGE1OTdlYzlmZGUwN2JlNzI2NTVhZmU=
|
@@ -31,9 +31,10 @@ module Caboose
|
|
31
31
|
if login_resp.error
|
32
32
|
resp.error = login_resp.error
|
33
33
|
else
|
34
|
-
remember = params[:remember] && (params[:remember] == 1 || params[:remember] == "1")
|
35
|
-
login_user(login_resp.user, remember)
|
34
|
+
remember = params[:remember] && (params[:remember] == 1 || params[:remember] == "1")
|
35
|
+
login_user(login_resp.user, remember)
|
36
36
|
resp.redirect = return_url
|
37
|
+
Caboose.plugin_hook('login_success')
|
37
38
|
end
|
38
39
|
end
|
39
40
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'csv'
|
1
2
|
|
2
3
|
module Caboose
|
3
4
|
class UsersController < ApplicationController
|
@@ -71,6 +72,25 @@ module Caboose
|
|
71
72
|
@users = @gen.items
|
72
73
|
end
|
73
74
|
|
75
|
+
# GET /admin/users
|
76
|
+
def index
|
77
|
+
return if !user_is_allowed('users', 'view')
|
78
|
+
|
79
|
+
@gen = PageBarGenerator.new(params, {
|
80
|
+
'first_name_like' => '',
|
81
|
+
'last_name_like' => '',
|
82
|
+
'username_like' => '',
|
83
|
+
'email_like' => '',
|
84
|
+
},{
|
85
|
+
'model' => 'Caboose::User',
|
86
|
+
'sort' => 'last_name, first_name',
|
87
|
+
'desc' => false,
|
88
|
+
'base_url' => '/admin/users',
|
89
|
+
'use_url_params' => false
|
90
|
+
})
|
91
|
+
@users = @gen.items
|
92
|
+
end
|
93
|
+
|
74
94
|
# GET /admin/users/new
|
75
95
|
def new
|
76
96
|
return if !user_is_allowed('users', 'add')
|
@@ -91,6 +111,79 @@ module Caboose
|
|
91
111
|
@edituser = User.find(params[:id])
|
92
112
|
end
|
93
113
|
|
114
|
+
# GET /admin/users/import
|
115
|
+
def import_form
|
116
|
+
return if !user_is_allowed('users', 'edit')
|
117
|
+
end
|
118
|
+
|
119
|
+
def random_string(length)
|
120
|
+
o = [('a'..'z'),('A'..'Z'),('0'..'9')].map { |i| i.to_a }.flatten
|
121
|
+
return (0...length).map { o[rand(o.length)] }.join
|
122
|
+
end
|
123
|
+
|
124
|
+
# POST /admin/users/import
|
125
|
+
def import
|
126
|
+
return if !user_is_allowed('users', 'add')
|
127
|
+
|
128
|
+
resp = StdClass.new
|
129
|
+
csv_data = params[:csv_data]
|
130
|
+
arr = []
|
131
|
+
good_count = 0
|
132
|
+
bad_count = 0
|
133
|
+
csv_data.strip.split("\n").each do |line|
|
134
|
+
data = CSV.parse_line(line)
|
135
|
+
|
136
|
+
if data.count < 3
|
137
|
+
arr << [line, true, "Too few columns"]
|
138
|
+
bad_count = bad_count + 1
|
139
|
+
next
|
140
|
+
end
|
141
|
+
|
142
|
+
first_name = data[0].nil? ? nil : data[0].strip
|
143
|
+
last_name = data[1].nil? ? nil : data[1].strip
|
144
|
+
email = data[2].nil? ? nil : data[2].strip.downcase
|
145
|
+
username = data.count >= 4 && !data[3].nil? ? data[3].strip.downcase : nil
|
146
|
+
password = data.count >= 5 && !data[4].nil? ? data[4].strip : random_string(8)
|
147
|
+
|
148
|
+
first_name = data[0]
|
149
|
+
last_name = data[1]
|
150
|
+
email = data[2]
|
151
|
+
username = data.count >= 4 ? data[3] : nil
|
152
|
+
password = data.count >= 5 ? data[4] : random_string(8)
|
153
|
+
|
154
|
+
if first_name.nil? || first_name.length == 0
|
155
|
+
arr << [line, false, "Missing first name."]
|
156
|
+
bad_count = bad_count + 1
|
157
|
+
elsif last_name.nil? || last_name.length == 0
|
158
|
+
arr << [line, false, "Missing last name."]
|
159
|
+
bad_count = bad_count + 1
|
160
|
+
elsif email.nil? || email.length == 0 || !email.include?('@')
|
161
|
+
arr << [line, false, "Email is invalid."]
|
162
|
+
bad_count = bad_count + 1
|
163
|
+
elsif Caboose::User.where(:email => email).exists?
|
164
|
+
arr << [line, false, "Email already exists."]
|
165
|
+
bad_count = bad_count + 1
|
166
|
+
else
|
167
|
+
Caboose::User.create(
|
168
|
+
:first_name => first_name,
|
169
|
+
:last_name => last_name,
|
170
|
+
:email => email,
|
171
|
+
:username => username,
|
172
|
+
:password => Digest::SHA1.hexdigest(Caboose::salt + password)
|
173
|
+
)
|
174
|
+
good_count = good_count + 1
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
resp.success = "#{good_count} user#{good_count == 1 ? '' : 's'} were added successfully."
|
179
|
+
if bad_count > 0
|
180
|
+
resp.success << "<br />#{bad_count} user#{bad_count == 1 ? '' : 's'} were skipped."
|
181
|
+
resp.success << "<br /><br />Please check the log below for more details."
|
182
|
+
resp.log = arr
|
183
|
+
end
|
184
|
+
render :json => resp
|
185
|
+
end
|
186
|
+
|
94
187
|
# POST /admin/users
|
95
188
|
def create
|
96
189
|
return if !user_is_allowed('users', 'add')
|
@@ -14,7 +14,8 @@ class Caboose::Schema < Caboose::Utilities::Schema
|
|
14
14
|
Caboose::PageBlock => [:block_type, :value, :name],
|
15
15
|
Caboose::PageBlockField => [:model_binder_options],
|
16
16
|
Caboose::AbValue => [:i, :text],
|
17
|
-
Caboose::AbOption => [:text]
|
17
|
+
Caboose::AbOption => [:text],
|
18
|
+
Caboose::User => [:utc_offset, :timezone]
|
18
19
|
}
|
19
20
|
end
|
20
21
|
|
@@ -44,7 +45,9 @@ class Caboose::Schema < Caboose::Utilities::Schema
|
|
44
45
|
[ :zip , :string ],
|
45
46
|
[ :phone , :string ],
|
46
47
|
[ :fax , :string ],
|
47
|
-
[ :utc_offset , :float , { :default => -5 }],
|
48
|
+
#[ :utc_offset , :float , { :default => -5 }],
|
49
|
+
#[ :timezone , :string , { :default => 'America/Chicago' }],
|
50
|
+
[ :timezone_id , :integer , { :defualt => 381 }], # Defaults to 'America/Chicago'
|
48
51
|
[ :password , :string ],
|
49
52
|
[ :password_reset_id , :string ],
|
50
53
|
[ :password_reset_sent , :datetime ],
|
@@ -178,7 +181,22 @@ class Caboose::Schema < Caboose::Utilities::Schema
|
|
178
181
|
Caboose::Setting => [
|
179
182
|
[ :name , :string ],
|
180
183
|
[ :value , :text ]
|
181
|
-
]
|
184
|
+
],
|
185
|
+
Caboose::Timezone => [
|
186
|
+
[ :country_code , :string ],
|
187
|
+
[ :name , :string ]
|
188
|
+
],
|
189
|
+
Caboose::TimezoneAbbreviation => [
|
190
|
+
[ :abbreviation , :string ],
|
191
|
+
[ :name , :string ]
|
192
|
+
],
|
193
|
+
Caboose::TimezoneOffset => [
|
194
|
+
[ :timezone_id , :integer ],
|
195
|
+
[ :abbreviation , :string ],
|
196
|
+
[ :time_start , :integer ],
|
197
|
+
[ :gmt_offset , :integer ],
|
198
|
+
[ :dst , :boolean ]
|
199
|
+
]
|
182
200
|
}
|
183
201
|
|
184
202
|
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
|
3
|
+
class Caboose::Timezone < ActiveRecord::Base
|
4
|
+
self.table_name = "timezones"
|
5
|
+
|
6
|
+
has_many :timezone_offsets, :class_name => 'Caboose::TimezoneOffset'
|
7
|
+
attr_accessible :id, :country_code, :name
|
8
|
+
|
9
|
+
def self.load_zones(temp_dir = '/tmp', country_codes = ['US'])
|
10
|
+
`curl -o #{temp_dir}/timezones.csv.zip http://timezonedb.com/files/timezonedb.csv.zip`
|
11
|
+
`unzip #{temp_dir}/timezones.csv.zip -d #{temp_dir}/timezones`
|
12
|
+
|
13
|
+
#Caboose::Timezone.destroy_all
|
14
|
+
#Caboose::TimezoneOffset.destroy_all
|
15
|
+
|
16
|
+
File.foreach("#{temp_dir}/timezones/zone.csv") do |line|
|
17
|
+
data = CSV.parse_line(line)
|
18
|
+
next if !country_codes.include?(data[1])
|
19
|
+
next if Caboose::Timezone.where(:id => data[0].to_i).exists?
|
20
|
+
Caboose::Timezone.create(
|
21
|
+
:id => data[0].to_i,
|
22
|
+
:country_code => data[1],
|
23
|
+
:name => data[2]
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
File.foreach("#{temp_dir}/timezones/timezone.csv") do |line|
|
28
|
+
data = CSV.parse_line(line)
|
29
|
+
tz_id = data[0].to_i
|
30
|
+
next if !Caboose::Timezone.where(:id => tz_id).exists?
|
31
|
+
next if Caboose::TimezoneOffset.where(:timezone_id => tz_id, :time_start => data[2].to_i).exists?
|
32
|
+
Caboose::TimezoneOffset.create(
|
33
|
+
:timezone_id => data[0].to_i,
|
34
|
+
:abbreviation => data[1],
|
35
|
+
:time_start => data[2],
|
36
|
+
:gmt_offset => data[3],
|
37
|
+
:dst => data[4]
|
38
|
+
)
|
39
|
+
end
|
40
|
+
|
41
|
+
spec = Gem::Specification.find_by_name("caboose-cms")
|
42
|
+
gem_root = spec.gem_dir
|
43
|
+
|
44
|
+
File.foreach(gem_root + '/lib/sample_files/timezone_abbreviations.csv') do |line|
|
45
|
+
data = CSV.parse_line(line)
|
46
|
+
next if Caboose::TimezoneAbbreviation.where(:abbreviation => data[0]).exists?
|
47
|
+
Caboose::TimezoneAbbreviation.create(
|
48
|
+
:abbreviation => data[0],
|
49
|
+
:name => data[1]
|
50
|
+
)
|
51
|
+
end
|
52
|
+
|
53
|
+
`rm -rf #{temp_dir}/timezones`
|
54
|
+
`rm -rf #{temp_dir}/timezones.csv.zip`
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
def local(utc_datetime)
|
59
|
+
tzo = self.timezone_offsets.where('time_start < ?', utc_datetime.to_i).reorder('time_start desc').first
|
60
|
+
return utc_datetime + tzo.gmt_offset.seconds
|
61
|
+
end
|
62
|
+
|
63
|
+
def string_format(d = DateTime.now.utc)
|
64
|
+
tzo = self.timezone_offsets.where('time_start < ?', d.to_i).reorder('time_start desc').first
|
65
|
+
total = tzo.gmt_offset.abs
|
66
|
+
hours = (total/3600).floor
|
67
|
+
x = total - (hours*3600)
|
68
|
+
minutes = x > 0 ? (x/60).floor : 0
|
69
|
+
seconds = total - (hours*3600) - (minutes*60)
|
70
|
+
sign = tzo.gmt_offset >= 0 ? '+' : '-'
|
71
|
+
hours = hours.to_s.rjust(2, '0')
|
72
|
+
return "#{sign}#{hours}#{minutes}"
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
<h1>Import Users</h1>
|
2
|
+
|
3
|
+
<p>In the box below, paste CSV data in the following format:
|
4
|
+
<p>"First Name","Last Name","Email","Username","Password"</p>
|
5
|
+
|
6
|
+
<form action='/admin/users/import' method='post' id='csv_form'>
|
7
|
+
<p><textarea name='csv_data' style='width: 100%; height: 200px'></textarea></p>
|
8
|
+
<div id='message'></div>
|
9
|
+
<p><input type='submit' value='Add Users' onclick="add_users(); return false;" /></p>
|
10
|
+
</form>
|
11
|
+
|
12
|
+
<% content_for :caboose_css do %>
|
13
|
+
<style type='text/css'>
|
14
|
+
|
15
|
+
table.logs { margin: 0; padding: 0; border: 0; border-collapse: collapse; }
|
16
|
+
table.logs td { margin: 0; padding: 4px; border: #fff 1px solid; }
|
17
|
+
tr.good td { background: #009900; color: #fff; }
|
18
|
+
tr.bad td { background: #990000; color: #fff; }
|
19
|
+
|
20
|
+
</style>
|
21
|
+
<% end %>
|
22
|
+
<% content_for :caboose_js do %>
|
23
|
+
<script type='text/javascript'>
|
24
|
+
|
25
|
+
function add_users()
|
26
|
+
{
|
27
|
+
$('#message').html("<p class='loading'>Adding users...</p>");
|
28
|
+
$.ajax({
|
29
|
+
url: '/admin/users/import',
|
30
|
+
type: 'post',
|
31
|
+
data: $('#csv_form').serialize(),
|
32
|
+
success: function(resp) {
|
33
|
+
$('#message').empty();
|
34
|
+
if (resp.error) $('#message').append("<p class='note error'>" + resp.error + "</p>");
|
35
|
+
if (resp.success) $('#message').append("<p class='note success'>" + resp.success + "</p>");
|
36
|
+
if (resp.log)
|
37
|
+
{
|
38
|
+
var tbody = $('<tbody/>');
|
39
|
+
$(resp.log).each(function(i, arr) {
|
40
|
+
tbody.append(
|
41
|
+
$('<tr/>').addClass(arr[1] == true ? 'good' : 'bad')
|
42
|
+
.append($('<td/>').html(arr[2]))
|
43
|
+
.append($('<td/>').html(arr[0]))
|
44
|
+
);
|
45
|
+
});
|
46
|
+
$('#message').append($('<table/>').addClass('logs').append(tbody));
|
47
|
+
}
|
48
|
+
if (resp.redirect) window.location = resp.redirect;
|
49
|
+
}
|
50
|
+
});
|
51
|
+
}
|
52
|
+
|
53
|
+
</script>
|
54
|
+
<% end %>
|
data/config/routes.rb
CHANGED
@@ -23,10 +23,12 @@ Caboose::Engine.routes.draw do
|
|
23
23
|
|
24
24
|
get "admin/users" => "users#index"
|
25
25
|
get "admin/users/options" => "users#options"
|
26
|
-
get "admin/users/new" => "users#new"
|
26
|
+
get "admin/users/new" => "users#new"
|
27
|
+
get "admin/users/import" => "users#import_form"
|
28
|
+
post "admin/users/import" => "users#import"
|
27
29
|
get "admin/users/:id/su" => "users#admin_su"
|
28
30
|
get "admin/users/:id/edit-password" => "users#edit_password"
|
29
|
-
get "admin/users/:id/edit" => "users#edit"
|
31
|
+
get "admin/users/:id/edit" => "users#edit"
|
30
32
|
put "admin/users/:id" => "users#update"
|
31
33
|
post "admin/users" => "users#create"
|
32
34
|
delete "admin/users/:id" => "users#destroy"
|
data/lib/caboose.rb
CHANGED
data/lib/caboose/version.rb
CHANGED
@@ -0,0 +1,197 @@
|
|
1
|
+
"ACDT","Australian Central Daylight Time"
|
2
|
+
"ACST","Australian Central Standard Time"
|
3
|
+
"ACT","ASEAN Common Time"
|
4
|
+
"ADT","Atlantic Daylight Time"
|
5
|
+
"AEDT","Australian Eastern Daylight Time"
|
6
|
+
"AEST","Australian Eastern Standard Time"
|
7
|
+
"AFT","Afghanistan Time"
|
8
|
+
"AKDT","Alaska Daylight Time"
|
9
|
+
"AKST","Alaska Standard Time"
|
10
|
+
"AMST","Amazon Summer Time (Brazil)[1]"
|
11
|
+
"AMST","Armenia Summer Time"
|
12
|
+
"AMT","Amazon Time (Brazil)[2]"
|
13
|
+
"AMT","Armenia Time"
|
14
|
+
"ART","Argentina Time"
|
15
|
+
"AST","Arabia Standard Time"
|
16
|
+
"AST","Atlantic Standard Time"
|
17
|
+
"AWDT","Australian Western Daylight Time"
|
18
|
+
"AWST","Australian Western Standard Time"
|
19
|
+
"AZOST","Azores Standard Time"
|
20
|
+
"AZT","Azerbaijan Time"
|
21
|
+
"BDT","Brunei Time"
|
22
|
+
"BIOT","British Indian Ocean Time"
|
23
|
+
"BIT","Baker Island Time"
|
24
|
+
"BOT","Bolivia Time"
|
25
|
+
"BRT","Brasilia Time"
|
26
|
+
"BST","Bangladesh Standard Time"
|
27
|
+
"BST","British Summer Time (British Standard Time from Feb 1968 to Oct 1971)"
|
28
|
+
"BTT","Bhutan Time"
|
29
|
+
"CAT","Central Africa Time"
|
30
|
+
"CCT","Cocos Islands Time"
|
31
|
+
"CDT","Central Daylight Time (North America)"
|
32
|
+
"CDT","Cuba Daylight Time[3]"
|
33
|
+
"CEDT","Central European Daylight Time"
|
34
|
+
"CEST","Central European Summer Time (Cf. HAEC)"
|
35
|
+
"CET","Central European Time"
|
36
|
+
"CHADT","Chatham Daylight Time"
|
37
|
+
"CHAST","Chatham Standard Time"
|
38
|
+
"CHOT","Choibalsan"
|
39
|
+
"ChST","Chamorro Standard Time"
|
40
|
+
"CHUT","Chuuk Time"
|
41
|
+
"CIST","Clipperton Island Standard Time"
|
42
|
+
"CIT","Central Indonesia Time"
|
43
|
+
"CKT","Cook Island Time"
|
44
|
+
"CLST","Chile Summer Time"
|
45
|
+
"CLT","Chile Standard Time"
|
46
|
+
"COST","Colombia Summer Time"
|
47
|
+
"COT","Colombia Time"
|
48
|
+
"CST","Central Standard Time (North America)"
|
49
|
+
"CST","China Standard Time"
|
50
|
+
"CST","Central Standard Time (Australia)"
|
51
|
+
"CST","Central Summer Time (Australia)"
|
52
|
+
"CST","Cuba Standard Time"
|
53
|
+
"CT","China time"
|
54
|
+
"CVT","Cape Verde Time"
|
55
|
+
"CWST","Central Western Standard Time (Australia) unofficial"
|
56
|
+
"CXT","Christmas Island Time"
|
57
|
+
"DAVT","Davis Time"
|
58
|
+
"DDUT","Dumont d'Urville Time"
|
59
|
+
"DFT","AIX specific equivalent of Central European Time[4]"
|
60
|
+
"EASST","Easter Island Standard Summer Time"
|
61
|
+
"EAST","Easter Island Standard Time"
|
62
|
+
"EAT","East Africa Time"
|
63
|
+
"ECT","Eastern Caribbean Time (does not recognise DST)"
|
64
|
+
"ECT","Ecuador Time"
|
65
|
+
"EDT","Eastern Daylight Time (North America)"
|
66
|
+
"EEDT","Eastern European Daylight Time"
|
67
|
+
"EEST","Eastern European Summer Time"
|
68
|
+
"EET","Eastern European Time"
|
69
|
+
"EGST","Eastern Greenland Summer Time"
|
70
|
+
"EGT","Eastern Greenland Time"
|
71
|
+
"EIT","Eastern Indonesian Time"
|
72
|
+
"EST","Eastern Standard Time (North America)"
|
73
|
+
"EST","Eastern Standard Time (Australia)"
|
74
|
+
"FET","Further-eastern European Time"
|
75
|
+
"FJT","Fiji Time"
|
76
|
+
"FKST","Falkland Islands Standard Time"
|
77
|
+
"FKST","Falkland Islands Summer Time"
|
78
|
+
"FKT","Falkland Islands Time"
|
79
|
+
"FNT","Fernando de Noronha Time"
|
80
|
+
"GALT","Galapagos Time"
|
81
|
+
"GAMT","Gambier Islands"
|
82
|
+
"GET","Georgia Standard Time"
|
83
|
+
"GFT","French Guiana Time"
|
84
|
+
"GILT","Gilbert Island Time"
|
85
|
+
"GIT","Gambier Island Time"
|
86
|
+
"GMT","Greenwich Mean Time"
|
87
|
+
"GST","South Georgia and the South Sandwich Islands"
|
88
|
+
"GST","Gulf Standard Time"
|
89
|
+
"GYT","Guyana Time"
|
90
|
+
"HADT","Hawaii-Aleutian Daylight Time"
|
91
|
+
"HAEC","Heure Avancée d'Europe Centrale francised name for CEST"
|
92
|
+
"HAST","Hawaii-Aleutian Standard Time"
|
93
|
+
"HKT","Hong Kong Time"
|
94
|
+
"HMT","Heard and McDonald Islands Time"
|
95
|
+
"HOVT","Khovd Time"
|
96
|
+
"HST","Hawaii Standard Time"
|
97
|
+
"ICT","Indochina Time"
|
98
|
+
"IDT","Israel Daylight Time"
|
99
|
+
"IOT","Indian Ocean Time"
|
100
|
+
"IRDT","Iran Daylight Time"
|
101
|
+
"IRKT","Irkutsk Time"
|
102
|
+
"IRST","Iran Standard Time"
|
103
|
+
"IST","Indian Standard Time"
|
104
|
+
"IST","Irish Standard Time[5]"
|
105
|
+
"IST","Israel Standard Time"
|
106
|
+
"JST","Japan Standard Time"
|
107
|
+
"KGT","Kyrgyzstan time"
|
108
|
+
"KOST","Kosrae Time"
|
109
|
+
"KRAT","Krasnoyarsk Time"
|
110
|
+
"KST","Korea Standard Time"
|
111
|
+
"LHST","Lord Howe Standard Time"
|
112
|
+
"LHST","Lord Howe Summer Time"
|
113
|
+
"LINT","Line Islands Time"
|
114
|
+
"MAGT","Magadan Time"
|
115
|
+
"MART","Marquesas Islands Time"
|
116
|
+
"MAWT","Mawson Station Time"
|
117
|
+
"MDT","Mountain Daylight Time (North America)"
|
118
|
+
"MET","Middle European Time Same zone as CET"
|
119
|
+
"MEST","Middle European Saving Time Same zone as CEST"
|
120
|
+
"MHT","Marshall Islands"
|
121
|
+
"MIST","Macquarie Island Station Time"
|
122
|
+
"MIT","Marquesas Islands Time"
|
123
|
+
"MMT","Myanmar Time"
|
124
|
+
"MSK","Moscow Time"
|
125
|
+
"MST","Malaysia Standard Time"
|
126
|
+
"MST","Mountain Standard Time (North America)"
|
127
|
+
"MST","Myanmar Standard Time"
|
128
|
+
"MUT","Mauritius Time"
|
129
|
+
"MVT","Maldives Time"
|
130
|
+
"MYT","Malaysia Time"
|
131
|
+
"NCT","New Caledonia Time"
|
132
|
+
"NDT","Newfoundland Daylight Time"
|
133
|
+
"NFT","Norfolk Time"
|
134
|
+
"NPT","Nepal Time"
|
135
|
+
"NST","Newfoundland Standard Time"
|
136
|
+
"NT","Newfoundland Time"
|
137
|
+
"NUT","Niue Time"
|
138
|
+
"NZDT","New Zealand Daylight Time"
|
139
|
+
"NZST","New Zealand Standard Time"
|
140
|
+
"OMST","Omsk Time"
|
141
|
+
"ORAT","Oral Time"
|
142
|
+
"PDT","Pacific Daylight Time (North America)"
|
143
|
+
"PET","Peru Time"
|
144
|
+
"PETT","Kamchatka Time"
|
145
|
+
"PGT","Papua New Guinea Time"
|
146
|
+
"PHOT","Phoenix Island Time"
|
147
|
+
"PHT","Philippine Time"
|
148
|
+
"PKT","Pakistan Standard Time"
|
149
|
+
"PMDT","Saint Pierre and Miquelon Daylight time"
|
150
|
+
"PMST","Saint Pierre and Miquelon Standard Time"
|
151
|
+
"PONT","Pohnpei Standard Time"
|
152
|
+
"PST","Pacific Standard Time (North America)"
|
153
|
+
"PYST","Paraguay Summer Time (South America)[6]"
|
154
|
+
"PYT","Paraguay Time (South America)[7]"
|
155
|
+
"RET","Réunion Time"
|
156
|
+
"ROTT","Rothera Research Station Time"
|
157
|
+
"SAKT","Sakhalin Island time"
|
158
|
+
"SAMT","Samara Time"
|
159
|
+
"SAST","South African Standard Time"
|
160
|
+
"SBT","Solomon Islands Time"
|
161
|
+
"SCT","Seychelles Time"
|
162
|
+
"SGT","Singapore Time"
|
163
|
+
"SLST","Sri Lanka Time"
|
164
|
+
"SRT","Suriname Time"
|
165
|
+
"SST","Samoa Standard Time"
|
166
|
+
"SST","Singapore Standard Time"
|
167
|
+
"SYOT","Showa Station Time"
|
168
|
+
"TAHT","Tahiti Time"
|
169
|
+
"THA","Thailand Standard Time"
|
170
|
+
"TFT","Indian/Kerguelen"
|
171
|
+
"TJT","Tajikistan Time"
|
172
|
+
"TKT","Tokelau Time"
|
173
|
+
"TLT","Timor Leste Time"
|
174
|
+
"TMT","Turkmenistan Time"
|
175
|
+
"TOT","Tonga Time"
|
176
|
+
"TVT","Tuvalu Time"
|
177
|
+
"UCT","Coordinated Universal Time"
|
178
|
+
"ULAT","Ulaanbaatar Time"
|
179
|
+
"UTC","Coordinated Universal Time"
|
180
|
+
"UYST","Uruguay Summer Time"
|
181
|
+
"UYT","Uruguay Standard Time"
|
182
|
+
"UZT","Uzbekistan Time"
|
183
|
+
"VET","Venezuelan Standard Time"
|
184
|
+
"VLAT","Vladivostok Time"
|
185
|
+
"VOLT","Volgograd Time"
|
186
|
+
"VOST","Vostok Station Time"
|
187
|
+
"VUT","Vanuatu Time"
|
188
|
+
"WAKT","Wake Island Time"
|
189
|
+
"WAST","West Africa Summer Time"
|
190
|
+
"WAT","West Africa Time"
|
191
|
+
"WEDT","Western European Daylight Time"
|
192
|
+
"WEST","Western European Summer Time"
|
193
|
+
"WET","Western European Time"
|
194
|
+
"WST","Western Standard Time"
|
195
|
+
"YAKT","Yakutsk Time"
|
196
|
+
"YEKT","Yekaterinburg Time"
|
197
|
+
"Z","Zulu Time (Coordinated Universal Time)"
|
data/lib/tasks/caboose.rake
CHANGED
@@ -56,6 +56,20 @@ namespace :caboose do
|
|
56
56
|
`pg_restore --verbose --clean --no-acl --no-owner -h #{ddb['host']} -U #{ddb['username']} -d #{ddb['database']} #{dump_file}`
|
57
57
|
|
58
58
|
end
|
59
|
+
|
60
|
+
desc "Loads and refreshes the timezones from timezonedb.com"
|
61
|
+
task :load_timezones => :environment do
|
62
|
+
Caboose::Timezone.load_zones('/Users/william/Sites/repconnex/tmp/timezones')
|
63
|
+
end
|
64
|
+
|
65
|
+
desc "Loads and refreshes the timezones from timezonedb.com"
|
66
|
+
task :test_timezones => :environment do
|
67
|
+
|
68
|
+
d = DateTime.strptime("04/01/2014 10:00 am -0500", "%m/%d/%Y %I:%M %P %Z")
|
69
|
+
puts d
|
70
|
+
d = DateTime.strptime("04/01/2014 10:00 am -0700", "%m/%d/%Y %I:%M %P %Z")
|
71
|
+
puts d
|
72
|
+
end
|
59
73
|
|
60
74
|
end
|
61
75
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: caboose-cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.86
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- William Barry
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-04-
|
11
|
+
date: 2014-04-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -279,6 +279,9 @@ files:
|
|
279
279
|
- app/models/caboose/setting.rb
|
280
280
|
- app/models/caboose/states.rb
|
281
281
|
- app/models/caboose/std_class.rb
|
282
|
+
- app/models/caboose/timezone.rb
|
283
|
+
- app/models/caboose/timezone_abbreviation.rb
|
284
|
+
- app/models/caboose/timezone_offset.rb
|
282
285
|
- app/models/caboose/user.rb
|
283
286
|
- app/models/caboose/utilities/schema.rb
|
284
287
|
- app/views/caboose/ab_variants/admin_edit.html.erb
|
@@ -350,6 +353,7 @@ files:
|
|
350
353
|
- app/views/caboose/station/index.html.erb
|
351
354
|
- app/views/caboose/users/edit.html.erb
|
352
355
|
- app/views/caboose/users/edit_password.html.erb
|
356
|
+
- app/views/caboose/users/import_form.html.erb
|
353
357
|
- app/views/caboose/users/index.html.erb
|
354
358
|
- app/views/caboose/users/my_account.html.erb
|
355
359
|
- app/views/caboose/users/new.html.erb
|
@@ -374,6 +378,7 @@ files:
|
|
374
378
|
- lib/caboose.rb
|
375
379
|
- lib/sample_files/layout_default.html.erb
|
376
380
|
- lib/sample_files/login.css
|
381
|
+
- lib/sample_files/timezone_abbreviations.csv
|
377
382
|
- lib/sample_files/tinymce.yml
|
378
383
|
- lib/tasks/caboose.rake
|
379
384
|
- lib/tasks/sequences.rake
|