ifd_tools 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README.md +28 -0
- data/Rakefile +40 -0
- data/app/admin/emergency_messages.rb +33 -0
- data/app/admin/notifier_updates.rb +42 -0
- data/app/admin/software_updates.rb +42 -0
- data/app/admin/users.rb +48 -0
- data/app/assets/javascripts/ifd_tools/base.js +4 -0
- data/app/assets/javascripts/ifd_tools/fusion_charts.js +361 -0
- data/app/assets/stylesheets/ifd_tools/active_admin/_analytics.scss +32 -0
- data/app/assets/stylesheets/ifd_tools/active_admin/_cleanup.scss +15 -0
- data/app/assets/stylesheets/ifd_tools/active_admin/_footer.scss +87 -0
- data/app/assets/stylesheets/ifd_tools/active_admin/_square_admin_buttons.scss +27 -0
- data/app/assets/stylesheets/ifd_tools/base.scss +4 -0
- data/app/assets/swfs/FCF_Area2D.swf +0 -0
- data/app/assets/swfs/usa_map.swf +0 -0
- data/app/controllers/ifd_tools/application_controller.rb +4 -0
- data/app/helpers/ifd_tools/application_helper.rb +30 -0
- data/app/models/ifd_tools/emergency_message.rb +27 -0
- data/app/models/ifd_tools/notifier_update.rb +28 -0
- data/app/models/ifd_tools/software_update.rb +28 -0
- data/app/models/ifd_tools/tracking/application_event.rb +6 -0
- data/app/models/ifd_tools/tracking/event.rb +51 -0
- data/app/models/ifd_tools/tracking.rb +7 -0
- data/app/uploaders/software_uploader.rb +18 -0
- data/app/views/admin/customers/_trend.html.haml +7 -0
- data/app/views/admin/customers/_trend_info_sidebar.html.haml +11 -0
- data/app/views/admin/customers/demographic_data.builder +11 -0
- data/app/views/admin/customers/events_data.builder +6 -0
- data/app/views/admin/customers/filter_events.js.erb +6 -0
- data/app/views/admin/customers/trends.html.haml +11 -0
- data/app/views/admin/dashboard/_line_graph.html.haml +11 -0
- data/app/views/admin/dashboard/_usa_map.html.haml +2 -0
- data/app/views/admin/emergency_messages/_form.html.haml +6 -0
- data/app/views/admin/notifier_updates/_form.html.haml +9 -0
- data/app/views/admin/shared/_footer.html.haml +6 -0
- data/app/views/admin/software_updates/_form.html.haml +9 -0
- data/app/views/admin/users/_form.html.haml +9 -0
- data/app/views/api/emergency_messages.builder +12 -0
- data/app/views/api/notifier_updates.builder +15 -0
- data/app/views/api/software_updates.builder +15 -0
- data/app/views/api/track.builder +6 -0
- data/app/views/layouts/ifd_tools/application.html.erb +14 -0
- data/config/routes.rb +2 -0
- data/db/migrate/20121010183004_create_ifd_tools_emergency_messages.rb +11 -0
- data/db/migrate/20121011150939_create_ifd_tools_notifier_updates.rb +14 -0
- data/db/migrate/20121011151124_create_ifd_tools_software_updates.rb +14 -0
- data/db/migrate/20121011205911_devise_create_users.rb +57 -0
- data/db/migrate/20121012123505_create_customers.rb +52 -0
- data/db/migrate/20121012133303_create_ifd_tools_tracking_events.rb +14 -0
- data/lib/generators/ifd_tools/install/USAGE +5 -0
- data/lib/generators/ifd_tools/install/install_generator.rb +153 -0
- data/lib/generators/ifd_tools/install/templates/admin/customers.rb +108 -0
- data/lib/generators/ifd_tools/install/templates/admin/dashboard.rb +47 -0
- data/lib/generators/ifd_tools/install/templates/assets/active_admin.css.scss +7 -0
- data/lib/generators/ifd_tools/install/templates/assets/active_admin.js +2 -0
- data/lib/generators/ifd_tools/install/templates/assets/application.css.scss +46 -0
- data/lib/generators/ifd_tools/install/templates/assets/application.js +2 -0
- data/lib/generators/ifd_tools/install/templates/assets/ckeditor.js.coffee +13 -0
- data/lib/generators/ifd_tools/install/templates/capistrano/Capfile +5 -0
- data/lib/generators/ifd_tools/install/templates/capistrano/deploy/production.rb +2 -0
- data/lib/generators/ifd_tools/install/templates/capistrano/deploy/staging.rb +2 -0
- data/lib/generators/ifd_tools/install/templates/capistrano/deploy.rb +50 -0
- data/lib/generators/ifd_tools/install/templates/config/en.yml +17 -0
- data/lib/generators/ifd_tools/install/templates/config/ifd_tools.rb +4 -0
- data/lib/generators/ifd_tools/install/templates/config/schedule.rb.erb +28 -0
- data/lib/generators/ifd_tools/install/templates/controllers/api_controller.rb +8 -0
- data/lib/generators/ifd_tools/install/templates/controllers/application_controller.rb +19 -0
- data/lib/generators/ifd_tools/install/templates/controllers/customer_session_controller.rb +39 -0
- data/lib/generators/ifd_tools/install/templates/foreman/Procfile +2 -0
- data/lib/generators/ifd_tools/install/templates/layouts/application.html.haml +29 -0
- data/lib/generators/ifd_tools/install/templates/layouts/application_logged_out.html.haml +21 -0
- data/lib/generators/ifd_tools/install/templates/models/ability.rb +23 -0
- data/lib/generators/ifd_tools/install/templates/models/customer.rb +60 -0
- data/lib/generators/ifd_tools/install/templates/models/settings.rb +5 -0
- data/lib/generators/ifd_tools/install/templates/models/user.rb +31 -0
- data/lib/generators/ifd_tools/install/templates/settings/application.yml +16 -0
- data/lib/generators/ifd_tools/install/templates/views/customers/_form.html.haml +8 -0
- data/lib/ifd_tools/active_admin/base.rb +18 -0
- data/lib/ifd_tools/api_controller/emergency_messages.rb +9 -0
- data/lib/ifd_tools/api_controller/notifier_updates.rb +9 -0
- data/lib/ifd_tools/api_controller/software_updates.rb +9 -0
- data/lib/ifd_tools/api_controller/tracking.rb +44 -0
- data/lib/ifd_tools/api_controller_extensions.rb +18 -0
- data/lib/ifd_tools/configure.rb +27 -0
- data/lib/ifd_tools/date_time_additions.rb +11 -0
- data/lib/ifd_tools/engine.rb +17 -0
- data/lib/ifd_tools/states.rb +59 -0
- data/lib/ifd_tools/tracking/customer_tracking.rb +143 -0
- data/lib/ifd_tools/tracking/trackable.rb +28 -0
- data/lib/ifd_tools/validations/phone.rb +17 -0
- data/lib/ifd_tools/version.rb +3 -0
- data/lib/ifd_tools.rb +26 -0
- data/lib/tasks/ifd_tools_tasks.rake +2 -0
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/application.js +15 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/config/application.rb +59 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +4 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/schema.rb +24 -0
- data/test/dummy/log/development.log +15 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/fixtures/ifd_tools/emergency_messages.yml +11 -0
- data/test/fixtures/ifd_tools/notifier_updates.yml +17 -0
- data/test/fixtures/ifd_tools/software_updates.yml +17 -0
- data/test/fixtures/ifd_tools/tracking/events.yml +17 -0
- data/test/ifd_tools_test.rb +7 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/test_helper.rb +15 -0
- data/test/unit/ifd_tools/emergency_message_test.rb +9 -0
- data/test/unit/ifd_tools/notifier_update_test.rb +9 -0
- data/test/unit/ifd_tools/software_update_test.rb +9 -0
- data/test/unit/ifd_tools/tracking/event_test.rb +9 -0
- metadata +464 -0
@@ -0,0 +1,87 @@
|
|
1
|
+
#site_footer {
|
2
|
+
|
3
|
+
&:last-child {
|
4
|
+
display: none;
|
5
|
+
}
|
6
|
+
|
7
|
+
left:0px;
|
8
|
+
background: #e7e7e7;
|
9
|
+
border-top: 1px solid darken($secondary-color, 5%);
|
10
|
+
@include gradient(darken($secondary-color, 5%), darken($secondary-color, 15%));
|
11
|
+
@include text-shadow(#000);
|
12
|
+
@include shadow(0, -1px, 20px, #666);
|
13
|
+
font-size: 1.1em;
|
14
|
+
line-height: 140%;
|
15
|
+
margin: 0;
|
16
|
+
color: #CDCDCD;
|
17
|
+
position:fixed;
|
18
|
+
padding:25px 0px 25px 1%;
|
19
|
+
width:100%;
|
20
|
+
bottom:0px;
|
21
|
+
z-index:10;
|
22
|
+
&:hover {
|
23
|
+
@include gradient(darken($secondary-color, 15%), darken($secondary-color, 25%));
|
24
|
+
}
|
25
|
+
|
26
|
+
a, a:link, a:visited, a:hover {
|
27
|
+
font-size: 1.1em;
|
28
|
+
color:#333132;
|
29
|
+
text-decoration: none;
|
30
|
+
@include text-shadow(#eee);
|
31
|
+
}
|
32
|
+
|
33
|
+
a:hover {
|
34
|
+
text-decoration: underline;
|
35
|
+
}
|
36
|
+
|
37
|
+
#footer_logo {
|
38
|
+
position:absolute;
|
39
|
+
right:50px;
|
40
|
+
bottom:15px;
|
41
|
+
}
|
42
|
+
|
43
|
+
}
|
44
|
+
|
45
|
+
#footerNav {
|
46
|
+
|
47
|
+
padding-bottom:15px;
|
48
|
+
|
49
|
+
form {
|
50
|
+
position:absolute;
|
51
|
+
right:30px;
|
52
|
+
font-weight:bold;
|
53
|
+
|
54
|
+
label {
|
55
|
+
font-size:11px;
|
56
|
+
margin-right:3px;
|
57
|
+
}
|
58
|
+
|
59
|
+
}
|
60
|
+
|
61
|
+
ul {
|
62
|
+
position:absolute;
|
63
|
+
left:30px;
|
64
|
+
margin:0px;
|
65
|
+
padding:0px;
|
66
|
+
}
|
67
|
+
|
68
|
+
li {
|
69
|
+
color: #79797a;
|
70
|
+
padding: 0px 5px;
|
71
|
+
position: relative;
|
72
|
+
text-decoration: none;
|
73
|
+
display:inline;
|
74
|
+
list-style:none;
|
75
|
+
font-size:10px;
|
76
|
+
}
|
77
|
+
|
78
|
+
}
|
79
|
+
|
80
|
+
#active_admin_content #main_content_wrapper {
|
81
|
+
padding-bottom:66px !important;
|
82
|
+
}
|
83
|
+
|
84
|
+
.footer {
|
85
|
+
height:80px;
|
86
|
+
clear:both;
|
87
|
+
}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
body.active_admin {
|
2
|
+
#header ul#tabs > li {
|
3
|
+
|
4
|
+
&.has_nested:hover > a {
|
5
|
+
@include rounded-top(5px);
|
6
|
+
}
|
7
|
+
|
8
|
+
ul {
|
9
|
+
@include rounded-all(0,5px,5px,5px);
|
10
|
+
}
|
11
|
+
|
12
|
+
a {
|
13
|
+
@include border-radius(5px);
|
14
|
+
}
|
15
|
+
}
|
16
|
+
|
17
|
+
form {
|
18
|
+
&.filter_form a.clear_filters_btn, input[type=submit], fieldset.buttons li.cancel a {
|
19
|
+
@include border-radius(5px);
|
20
|
+
}
|
21
|
+
}
|
22
|
+
|
23
|
+
#title_bar .action_items .action_item > a {
|
24
|
+
@include border-radius(5px);
|
25
|
+
}
|
26
|
+
|
27
|
+
}
|
Binary file
|
Binary file
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module IfdTools
|
2
|
+
module ApplicationHelper
|
3
|
+
|
4
|
+
def phone_number(num)
|
5
|
+
number_to_phone num, area_code: true, delimiter: "."
|
6
|
+
end
|
7
|
+
|
8
|
+
def cleanse_for_flash(str)
|
9
|
+
|
10
|
+
s = str.gsub(%r{>\s+}, ">").gsub(%r{</p>}, "</p><br />")
|
11
|
+
|
12
|
+
replacements = []
|
13
|
+
replacements << { find: %w(&trade; ™), replace: "™" }
|
14
|
+
replacements << { find: %w(&copy; ©), replace: "©" }
|
15
|
+
replacements << { find: %w(&reg; ®), replace: "®" }
|
16
|
+
replacements << { find: %w(&rsquo; ’), replace: "'" }
|
17
|
+
replacements << { find: %w(&rdquo; ”), replace: '"' }
|
18
|
+
replacements << { find: %w(&bull; •), replace: "•" }
|
19
|
+
replacements << { find: %w(&hellip; …), replace: "..." }
|
20
|
+
replacements << { find: %w(&ndash; – &mdash; —), replace: "-" }
|
21
|
+
|
22
|
+
replacements.map do |repl|
|
23
|
+
repl[:find].map { |find| s.gsub! find, repl[:replace] }
|
24
|
+
end
|
25
|
+
|
26
|
+
s
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module IfdTools
|
2
|
+
class EmergencyMessage < ActiveRecord::Base
|
3
|
+
|
4
|
+
include ActionView::Helpers::TextHelper
|
5
|
+
|
6
|
+
attr_accessible :active, :body, :title
|
7
|
+
|
8
|
+
after_save :ensure_one_active_record
|
9
|
+
|
10
|
+
validates :title, :body, presence: true
|
11
|
+
validates :active, inclusion: { in: [true, false] }
|
12
|
+
|
13
|
+
scope :active, where(active: true)
|
14
|
+
scope :inactive, where(active: false)
|
15
|
+
|
16
|
+
def display_name
|
17
|
+
truncate title, length: 45
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def ensure_one_active_record
|
23
|
+
self.class.where("id != ?", id).update_all(active: false) if active?
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module IfdTools
|
2
|
+
class NotifierUpdate < ActiveRecord::Base
|
3
|
+
|
4
|
+
attr_accessible :current_release, :mac, :pc, :release_date, :release_notes, :release_version
|
5
|
+
|
6
|
+
mount_uploader :mac, SoftwareUploader
|
7
|
+
mount_uploader :pc, SoftwareUploader
|
8
|
+
|
9
|
+
validates :release_date, :release_version, :release_notes, :mac, :pc, presence: true
|
10
|
+
validates :current_release, inclusion: { in: [true,false] }
|
11
|
+
|
12
|
+
after_save :ensure_one_current_release
|
13
|
+
|
14
|
+
scope :current, where(current_release: true)
|
15
|
+
scope :previous, where(current_release: false)
|
16
|
+
|
17
|
+
def display_name
|
18
|
+
"Version: #{release_version}"
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def ensure_one_current_release
|
24
|
+
self.class.where("id != ?", id).update_all(current_release: false) if current_release?
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module IfdTools
|
2
|
+
class SoftwareUpdate < ActiveRecord::Base
|
3
|
+
|
4
|
+
attr_accessible :current_release, :mac, :pc, :release_date, :release_notes, :release_version
|
5
|
+
|
6
|
+
mount_uploader :mac, SoftwareUploader
|
7
|
+
mount_uploader :pc, SoftwareUploader
|
8
|
+
|
9
|
+
validates :release_date, :release_version, :release_notes, :mac, :pc, presence: true
|
10
|
+
validates :current_release, inclusion: { in: [true,false] }
|
11
|
+
|
12
|
+
after_save :ensure_one_current_release
|
13
|
+
|
14
|
+
scope :current, where(current_release: true)
|
15
|
+
scope :previous, where(current_release: false)
|
16
|
+
|
17
|
+
def display_name
|
18
|
+
"Version: #{release_version}"
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def ensure_one_current_release
|
24
|
+
self.class.where("id != ?", id).update_all(current_release: false) if current_release?
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module IfdTools
|
2
|
+
class Tracking::Event < ActiveRecord::Base
|
3
|
+
|
4
|
+
set_table_name "ifd_tools_tracking_events"
|
5
|
+
|
6
|
+
belongs_to :customer
|
7
|
+
belongs_to :trackable, polymorphic: true
|
8
|
+
|
9
|
+
attr_accessible :ip_address, :platform, :timestamp, :type, :customer_id
|
10
|
+
|
11
|
+
validates :customer, presence: true
|
12
|
+
|
13
|
+
default_scope order(:timestamp)
|
14
|
+
|
15
|
+
def assign_trackable_item_by_id(id)
|
16
|
+
# self.trackable = AssociatedClass.find(id)
|
17
|
+
raise "Must implement 'assign_trackable_item_by_id' in each IfdTools::Tracking::Event subclass to set association"
|
18
|
+
end
|
19
|
+
|
20
|
+
after_initialize do
|
21
|
+
self.timestamp ||= Time.now if new_record?
|
22
|
+
end
|
23
|
+
|
24
|
+
# Class Methods
|
25
|
+
class << self
|
26
|
+
|
27
|
+
def event_types
|
28
|
+
Dir["#{Rails.root}/app/models/ifd_tools/tracking/*.rb"].each { |f| require f }
|
29
|
+
Dir[File.expand_path(File.join(File.dirname(__FILE__), "/*.rb"))].delete_if { |f| f.end_with? "/event.rb" }.each { |f| require f }
|
30
|
+
subclasses
|
31
|
+
end
|
32
|
+
|
33
|
+
def platform_for_request(request)
|
34
|
+
if request.headers["HTTP_USER_AGENT"] =~ /Macintosh|iPad|iPhone/
|
35
|
+
"mac"
|
36
|
+
else
|
37
|
+
"pc"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def top_content
|
42
|
+
content = self.where("type != ?", "IfdTools::Tracking::ApplicationEvent").group(:trackable_id).order("count(trackable_id) desc").limit(25).collect do |e|
|
43
|
+
e.trackable_type.constantize.find(e.trackable_id) rescue nil
|
44
|
+
end
|
45
|
+
content.compact.sort { |a,b| b.trackable_activity <=> a.trackable_activity }
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
class SoftwareUploader < ::CarrierWave::Uploader::Base
|
3
|
+
|
4
|
+
# Include the Sprockets helpers for Rails 3.1+ asset pipeline compatibility:
|
5
|
+
include ::Sprockets::Helpers::RailsHelper
|
6
|
+
include ::Sprockets::Helpers::IsolatedHelper
|
7
|
+
|
8
|
+
def store_dir
|
9
|
+
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
|
10
|
+
end
|
11
|
+
|
12
|
+
# Add a white list of extensions which are allowed to be uploaded.
|
13
|
+
# For images you might use something like this:
|
14
|
+
def extension_white_list
|
15
|
+
%w(exe dmg)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
.attributes_table.trends
|
2
|
+
%table
|
3
|
+
%tr
|
4
|
+
%th Registered
|
5
|
+
%td= @registration_date.humanize
|
6
|
+
%tr
|
7
|
+
%th Application Launches
|
8
|
+
%td= @application_launches
|
9
|
+
%tr
|
10
|
+
%th Explanation
|
11
|
+
%td User trends shows the 75 most recent actions taken by this customer, in descending order.
|
@@ -0,0 +1,6 @@
|
|
1
|
+
xml.instruct!
|
2
|
+
xml.graph(caption: @caption, subcaption: @subcaption, bgAlpha: 0, canvasBorderColor: IfdTools::Configure.dashboard_graph_main_color, baseFontColor: IfdTools::Configure.dashboard_graph_main_color, hoverCapBgColor: "E7EFF6", formatNumberScale: "0", decimalPrecision: "0", showvalues: "0", numdivlines: "3", numVdivlines: "0", yAxisMaxValue: "5", rotateNames: "1", showAlternateHGridColor: "1", alternateHGridAlpha: "10", alternateHGridColor: IfdTools::Configure.dashboard_graph_color) do
|
3
|
+
@events.each do |date, value|
|
4
|
+
xml.set(name: date, value: value, color: @color)
|
5
|
+
end
|
6
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
#line_graph
|
2
|
+
#FCF_Area2D
|
3
|
+
= swf_tag "FCF_Area2D", height: 350, width: 569, flashvars: { chartWidth: 569, chartHeight: 350, DOMid: "FCF_Area2D", dataURL: events_data_admin_customers_url(format: :xml) }, params: { wmode: :transparent, quality: :high }, attributes: { }
|
4
|
+
|
5
|
+
#line_graph_controls.sidebar_section
|
6
|
+
= form_for IfdTools::Tracking::Event.metasearch(params[:q]), url: filter_events_admin_customers_path(format: :js), remote: true, html: { method: :post, class: :filter_form }, builder: ::ActiveAdmin::Filters::FormBuilder, as: :q do |f|
|
7
|
+
- f.filter :type, as: :select, collection: IfdTools::Tracking::Event.event_types.collect(&:name), member_label: proc { |t| t.gsub("IfdTools::Tracking::", "").titleize }
|
8
|
+
- f.filter :platform, as: :select, collection: %w(mac pc), member_label: proc { |i| i == "pc" ? "PC" : "Mac" }
|
9
|
+
= f.filter :timestamp
|
10
|
+
.buttons
|
11
|
+
= f.submit("Filter")
|
@@ -0,0 +1,9 @@
|
|
1
|
+
= semantic_form_for [:admin, @notifier_update], html: { :class => "filter_form" } do |f|
|
2
|
+
= f.inputs "Notifier Update" do
|
3
|
+
= f.input :release_date, label: "Release Date", as: :string, input_html: { class: "datepicker" }, wrapper_html: { class: "filter_form_field filter_date_range" }
|
4
|
+
= f.input :release_version, label: "Release Version"
|
5
|
+
= f.input :current_release, label: "Current Release?", as: :radio
|
6
|
+
= f.input :mac, label: "Mac Updater Script"
|
7
|
+
= f.input :pc, label: "PC Updater Script"
|
8
|
+
= f.input :release_notes, label: "Release Notes", input_html: { class: :ckeditor }
|
9
|
+
= f.actions
|
@@ -0,0 +1,9 @@
|
|
1
|
+
= semantic_form_for [:admin, @software_update], html: { :class => "filter_form" } do |f|
|
2
|
+
= f.inputs "Software Update" do
|
3
|
+
= f.input :release_date, label: "Release Date", as: :string, input_html: { class: "datepicker" }, wrapper_html: { class: "filter_form_field filter_date_range" }
|
4
|
+
= f.input :release_version, label: "Release Version"
|
5
|
+
= f.input :current_release, label: "Current Release?", as: :radio
|
6
|
+
= f.input :mac, label: "Mac Updater Script"
|
7
|
+
= f.input :pc, label: "PC Updater Script"
|
8
|
+
= f.input :release_notes, label: "Release Notes", input_html: { class: :ckeditor }
|
9
|
+
= f.actions
|
@@ -0,0 +1,9 @@
|
|
1
|
+
= semantic_form_for [:admin, @user] do |f|
|
2
|
+
= f.inputs "User Information" do
|
3
|
+
= f.input :email
|
4
|
+
= f.input :first_name, label: "First Name"
|
5
|
+
= f.input :last_name, label: "Last Name"
|
6
|
+
= f.input :time_zone, :label => "Time Zone", :default => Rails.application.config.time_zone
|
7
|
+
- if current_user.super_admin?
|
8
|
+
= f.input :role, label: "User Role", as: :select, collection: User::Roles, member_label: :titleize
|
9
|
+
= f.actions
|
@@ -0,0 +1,15 @@
|
|
1
|
+
xml.instruct!
|
2
|
+
xml.update(xmlns: "http://ns.riaspace.com/air/framework/update/description/1.1") do
|
3
|
+
if @notifier_update
|
4
|
+
xml.dmg do |dmg|
|
5
|
+
dmg.version @notifier_update.release_version
|
6
|
+
dmg.url request.protocol + request.host_with_port + @notifier_update.mac.url
|
7
|
+
dmg.description { xml.cdata! @notifier_update.release_notes }
|
8
|
+
end
|
9
|
+
xml.exe do |exe|
|
10
|
+
exe.version @notifier_update.release_version
|
11
|
+
exe.url request.protocol + request.host_with_port + @notifier_update.pc.url
|
12
|
+
exe.description { xml.cdata! @notifier_update.release_notes }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
xml.instruct!
|
2
|
+
xml.update(xmlns: "http://ns.riaspace.com/air/framework/update/description/1.1") do
|
3
|
+
if @software_update
|
4
|
+
xml.dmg do |dmg|
|
5
|
+
dmg.version @software_update.release_version
|
6
|
+
dmg.url request.protocol + request.host_with_port + @software_update.mac.url
|
7
|
+
dmg.description { xml.cdata! @software_update.release_notes }
|
8
|
+
end
|
9
|
+
xml.exe do |exe|
|
10
|
+
exe.version @software_update.release_version
|
11
|
+
exe.url request.protocol + request.host_with_port + @software_update.pc.url
|
12
|
+
exe.description { xml.cdata! @software_update.release_notes }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>IfdTools</title>
|
5
|
+
<%= stylesheet_link_tag "ifd_tools/application", :media => "all" %>
|
6
|
+
<%= javascript_include_tag "ifd_tools/application" %>
|
7
|
+
<%= csrf_meta_tags %>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
|
11
|
+
<%= yield %>
|
12
|
+
|
13
|
+
</body>
|
14
|
+
</html>
|
data/config/routes.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
class CreateIfdToolsNotifierUpdates < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :ifd_tools_notifier_updates do |t|
|
4
|
+
t.date :release_date
|
5
|
+
t.string :release_version
|
6
|
+
t.string :mac
|
7
|
+
t.string :pc
|
8
|
+
t.boolean :current_release, default: false
|
9
|
+
t.text :release_notes
|
10
|
+
|
11
|
+
t.timestamps
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class CreateIfdToolsSoftwareUpdates < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :ifd_tools_software_updates do |t|
|
4
|
+
t.date :release_date
|
5
|
+
t.string :release_version
|
6
|
+
t.string :mac
|
7
|
+
t.string :pc
|
8
|
+
t.boolean :current_release, default: false
|
9
|
+
t.text :release_notes
|
10
|
+
|
11
|
+
t.timestamps
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
class DeviseCreateUsers < ActiveRecord::Migration
|
2
|
+
def migrate(direction)
|
3
|
+
super
|
4
|
+
User.create!(:email => 'matt@dmgx.com', :password => 'P@$$w0rd', :password_confirmation => 'P@$ww0rd', first_name: "Matt", last_name: "Brewer", role: :super_admin) if direction == :up
|
5
|
+
end
|
6
|
+
|
7
|
+
def change
|
8
|
+
create_table(:users) do |t|
|
9
|
+
## Database authenticatable
|
10
|
+
t.string :email, :null => false, :default => ""
|
11
|
+
t.string :encrypted_password, :null => false, :default => ""
|
12
|
+
|
13
|
+
## Recoverable
|
14
|
+
t.string :reset_password_token
|
15
|
+
t.datetime :reset_password_sent_at
|
16
|
+
|
17
|
+
## Rememberable
|
18
|
+
t.datetime :remember_created_at
|
19
|
+
|
20
|
+
## Trackable
|
21
|
+
t.integer :sign_in_count, :default => 0
|
22
|
+
t.datetime :current_sign_in_at
|
23
|
+
t.datetime :last_sign_in_at
|
24
|
+
t.string :current_sign_in_ip
|
25
|
+
t.string :last_sign_in_ip
|
26
|
+
|
27
|
+
## Confirmable
|
28
|
+
t.string :confirmation_token
|
29
|
+
t.datetime :confirmed_at
|
30
|
+
t.datetime :confirmation_sent_at
|
31
|
+
t.string :unconfirmed_email # Only if using reconfirmable
|
32
|
+
|
33
|
+
## Lockable
|
34
|
+
# t.integer :failed_attempts, :default => 0 # Only if lock strategy is :failed_attempts
|
35
|
+
# t.string :unlock_token # Only if unlock strategy is :email or :both
|
36
|
+
# t.datetime :locked_at
|
37
|
+
|
38
|
+
## Token authenticatable
|
39
|
+
t.string :authentication_token
|
40
|
+
|
41
|
+
# Additional Fields
|
42
|
+
t.string :first_name
|
43
|
+
t.string :last_name
|
44
|
+
t.string :time_zone
|
45
|
+
t.string :role, default: :admin
|
46
|
+
|
47
|
+
t.timestamps
|
48
|
+
end
|
49
|
+
|
50
|
+
add_index :users, :email, :unique => true
|
51
|
+
add_index :users, :reset_password_token, :unique => true
|
52
|
+
add_index :users, :confirmation_token, :unique => true
|
53
|
+
# add_index :users, :unlock_token, :unique => true
|
54
|
+
add_index :users, :authentication_token, :unique => true
|
55
|
+
add_index :users, :role
|
56
|
+
end
|
57
|
+
end
|