knitkit 2.1.15 → 3.0.0

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.
Files changed (209) hide show
  1. checksums.yaml +7 -0
  2. data/app/controllers/knitkit/base_controller.rb +1 -1
  3. data/app/controllers/knitkit/comments_controller.rb +7 -2
  4. data/app/controllers/knitkit/erp_app/desktop/app_controller.rb +78 -98
  5. data/app/controllers/knitkit/erp_app/desktop/articles_controller.rb +65 -45
  6. data/app/controllers/knitkit/erp_app/desktop/content_controller.rb +22 -12
  7. data/app/controllers/knitkit/erp_app/desktop/file_assets_controller.rb +1 -1
  8. data/app/controllers/knitkit/erp_app/desktop/image_assets_controller.rb +28 -16
  9. data/app/controllers/knitkit/erp_app/desktop/inquiries_controller.rb +15 -49
  10. data/app/controllers/knitkit/erp_app/desktop/online_document_sections_controller.rb +4 -3
  11. data/app/controllers/knitkit/erp_app/desktop/position_controller.rb +69 -11
  12. data/app/controllers/knitkit/erp_app/desktop/theme_controller.rb +63 -60
  13. data/app/controllers/knitkit/erp_app/desktop/website_controller.rb +98 -82
  14. data/app/controllers/knitkit/erp_app/desktop/website_host_controller.rb +77 -0
  15. data/app/controllers/knitkit/erp_app/desktop/website_nav_controller.rb +64 -44
  16. data/app/controllers/knitkit/erp_app/desktop/website_nav_item_controller.rb +147 -0
  17. data/app/controllers/knitkit/erp_app/desktop/website_section_controller.rb +81 -45
  18. data/app/controllers/knitkit/mobile_controller.rb +15 -0
  19. data/app/controllers/knitkit/online_document_sections_controller.rb +2 -1
  20. data/app/controllers/knitkit/unauthorized_controller.rb +0 -1
  21. data/app/controllers/knitkit/website_sections_controller.rb +7 -4
  22. data/app/mailers/website_inquiry_mailer.rb +8 -7
  23. data/app/models/content.rb +11 -2
  24. data/app/models/document.rb +2 -17
  25. data/app/models/published_website.rb +96 -59
  26. data/app/models/theme.rb +100 -14
  27. data/app/models/website.rb +260 -28
  28. data/app/models/website_inquiry.rb +5 -12
  29. data/app/models/website_section.rb +9 -1
  30. data/app/views/knitkit/blogs/_add_comment.html.erb +44 -23
  31. data/app/views/knitkit/blogs/_comment.html.erb +4 -6
  32. data/app/views/knitkit/blogs/index.html.erb +63 -49
  33. data/app/views/knitkit/blogs/show.html.erb +17 -12
  34. data/app/views/knitkit/mobile/index.html.erb +162 -0
  35. data/app/views/knitkit/online_document_sections/index.html.erb +7 -5
  36. data/app/views/knitkit/unauthorized/index.html.erb +8 -4
  37. data/app/views/knitkit/website_sections/index.html.erb +8 -4
  38. data/app/views/layouts/knitkit/base.html.erb +79 -63
  39. data/app/views/layouts/knitkit/online_document_sections.html.erb +74 -52
  40. data/app/views/menus/knitkit/_default_menu.html.erb +4 -4
  41. data/app/views/menus/knitkit/_default_section_menu.html.erb +22 -23
  42. data/app/views/shared/knitkit/_bread_crumb.html.erb +10 -7
  43. data/app/views/shared/knitkit/_footer.html.erb +2 -2
  44. data/app/views/website_inquiry_mailer/inquiry.erb +23 -2
  45. data/app/widgets/contact_us/base.rb +25 -50
  46. data/app/widgets/contact_us/javascript/contact_us.js +7 -7
  47. data/app/widgets/contact_us/views/error.html.erb +6 -8
  48. data/app/widgets/contact_us/views/index.html.erb +28 -1
  49. data/app/widgets/contact_us/views/layouts/base.html.erb +9 -6
  50. data/app/widgets/contact_us/views/success.html.erb +3 -3
  51. data/app/widgets/google_map/views/index.html.erb +36 -36
  52. data/app/widgets/login/base.rb +1 -0
  53. data/app/widgets/login/javascript/login.js +3 -3
  54. data/app/widgets/login/views/index.html.erb +46 -26
  55. data/app/widgets/login/views/layouts/base.html.erb +15 -13
  56. data/app/widgets/login/views/login_header.html.erb +7 -9
  57. data/app/widgets/manage_profile/base.rb +116 -164
  58. data/app/widgets/manage_profile/views/_address.html.erb +184 -0
  59. data/app/widgets/manage_profile/views/_contact_information_form.html.erb +23 -192
  60. data/app/widgets/manage_profile/views/_email_address.html.erb +163 -0
  61. data/app/widgets/manage_profile/views/_password_form.html.erb +23 -20
  62. data/app/widgets/manage_profile/views/_phone_number.html.erb +165 -0
  63. data/app/widgets/manage_profile/views/_user_information_form.html.erb +49 -33
  64. data/app/widgets/manage_profile/views/error.html.erb +6 -0
  65. data/app/widgets/manage_profile/views/index.html.erb +44 -46
  66. data/app/widgets/manage_profile/views/layouts/base.html.erb +3 -1
  67. data/app/widgets/manage_profile/views/success.html.erb +5 -0
  68. data/app/widgets/reset_password/views/index.html.erb +33 -28
  69. data/app/widgets/reset_password/views/layouts/base.html.erb +10 -1
  70. data/app/widgets/search/base.rb +37 -25
  71. data/app/widgets/search/views/_inline_search_form.html.erb +12 -0
  72. data/app/widgets/search/views/_search_form.html.erb +41 -0
  73. data/app/widgets/search/views/index.html.erb +5 -3
  74. data/app/widgets/search/views/layouts/base.html.erb +13 -23
  75. data/app/widgets/search/views/show.html.erb +32 -47
  76. data/app/widgets/signup/base.rb +1 -1
  77. data/app/widgets/signup/javascript/signup.js +7 -9
  78. data/app/widgets/signup/views/_signup_form.html.erb +34 -29
  79. data/app/widgets/signup/views/error.html.erb +11 -11
  80. data/app/widgets/signup/views/index.html.erb +3 -2
  81. data/app/widgets/signup/views/layouts/base.html.erb +8 -5
  82. data/app/widgets/signup/views/success.html.erb +5 -4
  83. data/config/routes.rb +39 -28
  84. data/db/data_migrations/20120809020508_update_website_and_configuration.rb +3 -0
  85. data/db/migrate/20110211002317_setup_knitkit.rb +0 -1
  86. data/db/migrate/20131112013052_add_knitkit_missing_indexes.rb +33 -0
  87. data/db/migrate/20140622212723_update_website_inquiries.rb +22 -0
  88. data/db/migrate/20140911185022_add_publishing_to_website.rb +5 -0
  89. data/db/migrate/20141013073349_add_custom_fields_to_documents.rb +12 -0
  90. data/db/migrate/20141016101936_upgrade_remove_dynamic_attributes.rb +13 -0
  91. data/lib/knitkit.rb +0 -1
  92. data/lib/knitkit/engine.rb +1 -0
  93. data/lib/knitkit/extensions.rb +4 -0
  94. data/lib/knitkit/extensions/active_record/acts_as_commentable.rb +33 -0
  95. data/lib/knitkit/extensions/active_record/acts_as_document.rb +0 -12
  96. data/lib/knitkit/extensions/active_record/acts_as_publishable.rb +7 -10
  97. data/lib/knitkit/extensions/compass_ae/widgets/base.rb +2 -4
  98. data/lib/knitkit/extensions/compass_ae/widgets/widget_proxy_controller.rb +4 -1
  99. data/lib/knitkit/extensions/railties/action_view/helpers/blog_helper.rb +16 -13
  100. data/lib/knitkit/extensions/railties/action_view/helpers/content_helper.rb +10 -8
  101. data/lib/knitkit/extensions/railties/theme_support/asset_tag_helper.rb +123 -108
  102. data/lib/knitkit/extensions/will_paginate/link_renderer.rb +67 -0
  103. data/lib/knitkit/routing_filter/section_router.rb +10 -8
  104. data/lib/knitkit/syntax_validator.rb +2 -2
  105. data/lib/knitkit/version.rb +7 -3
  106. data/public/images/inline_edit/close.png +0 -0
  107. data/public/images/knitkit/close_window.png +0 -0
  108. data/public/images/knitkit/logo.png +0 -0
  109. data/public/images/knitkit/splash/images/add-site.png +0 -0
  110. data/public/images/knitkit/splash/images/adjust-site.png +0 -0
  111. data/public/images/knitkit/splash/images/browse-site.png +0 -0
  112. data/public/images/knitkit/splash/images/find-themes.png +0 -0
  113. data/public/images/knitkit/splash/images/settings.png +0 -0
  114. data/public/images/knitkit/splash/images/tutorials.png +0 -0
  115. data/public/images/knitkit/splash/splash.png +0 -0
  116. data/public/javascripts/erp_app/desktop/applications/knitkit/articles_grid_panel.js +656 -627
  117. data/public/javascripts/erp_app/desktop/applications/knitkit/center_region.js +444 -333
  118. data/public/javascripts/erp_app/desktop/applications/knitkit/{east_region.js → east_region/east_region.js} +33 -33
  119. data/public/javascripts/erp_app/desktop/applications/knitkit/east_region/file_assets_panel.js +332 -0
  120. data/public/javascripts/erp_app/desktop/applications/knitkit/east_region/image_assets_data_view.js +144 -0
  121. data/public/javascripts/erp_app/desktop/applications/knitkit/east_region/image_assets_panel.js +335 -0
  122. data/public/javascripts/erp_app/desktop/applications/knitkit/{widgets_panel.js → east_region/widgets_panel.js} +55 -55
  123. data/public/javascripts/erp_app/desktop/applications/knitkit/inquiries_grid_panel.js +150 -37
  124. data/public/javascripts/erp_app/desktop/applications/knitkit/module.js +228 -96
  125. data/public/javascripts/erp_app/desktop/applications/knitkit/publish_window.js +89 -85
  126. data/public/javascripts/erp_app/desktop/applications/knitkit/published_grid_panel.js +238 -217
  127. data/public/javascripts/erp_app/desktop/applications/knitkit/select_roles_window.js +59 -54
  128. data/public/javascripts/erp_app/desktop/applications/knitkit/splash_screen.js +170 -0
  129. data/public/javascripts/erp_app/desktop/applications/knitkit/top_menu/main_menu.js +1168 -0
  130. data/public/javascripts/erp_app/desktop/applications/knitkit/top_menu/websites_combo.js +71 -0
  131. data/public/javascripts/erp_app/desktop/applications/knitkit/versions_grid_panel.js +301 -306
  132. data/public/javascripts/erp_app/desktop/applications/knitkit/west_region/helpers/article.js +216 -0
  133. data/public/javascripts/erp_app/desktop/applications/knitkit/west_region/helpers/document.js +182 -153
  134. data/public/javascripts/erp_app/desktop/applications/knitkit/west_region/helpers/host.js +48 -65
  135. data/public/javascripts/erp_app/desktop/applications/knitkit/west_region/helpers/menu.js +93 -94
  136. data/public/javascripts/erp_app/desktop/applications/knitkit/west_region/helpers/section.js +523 -197
  137. data/public/javascripts/erp_app/desktop/applications/knitkit/west_region/helpers/website_nav_items.js +20 -34
  138. data/public/javascripts/erp_app/desktop/applications/knitkit/west_region/hosts_tree_panel.js +74 -0
  139. data/public/javascripts/erp_app/desktop/applications/knitkit/west_region/menu_tree_panel.js +245 -0
  140. data/public/javascripts/erp_app/desktop/applications/knitkit/west_region/site_contents_tree_panel.js +360 -0
  141. data/public/javascripts/erp_app/desktop/applications/knitkit/west_region/themes_tree_panel.js +348 -0
  142. data/public/javascripts/erp_app/desktop/applications/knitkit/west_region/west_region.js +106 -1132
  143. data/public/javascripts/knitkit/bootstrap-datepicker.js +474 -0
  144. data/public/javascripts/knitkit/bootstrap.min.js +7 -0
  145. data/public/javascripts/knitkit/confirm-bootstrap.js +110 -0
  146. data/public/javascripts/knitkit/inline_editing.js +73 -50
  147. data/public/javascripts/knitkit/jquery.maskedinput.min.js +7 -0
  148. data/public/javascripts/knitkit/mobile/app/view/Main.js +108 -0
  149. data/public/javascripts/knitkit/mobile/ux/slidenavigation/View.js +734 -0
  150. data/public/javascripts/knitkit/theme.js +76 -0
  151. data/public/stylesheets/erp_app/desktop/applications/knitkit/knitkit.css +95 -35
  152. data/public/stylesheets/knitkit/bootstrap-responsive.min.css +10 -0
  153. data/public/stylesheets/knitkit/bootstrap.min.css +7 -0
  154. data/public/stylesheets/knitkit/custom.css +122 -0
  155. data/public/stylesheets/knitkit/datepicker.css +182 -0
  156. data/public/stylesheets/knitkit/inline_editing.css +58 -58
  157. data/spec/controllers/knitkit/erp_app/desktop/website_section_controller_spec.rb +1 -1
  158. data/spec/dummy/config/application.rb +1 -1
  159. data/spec/models/article_spec.rb +3 -3
  160. data/spec/models/content_spec.rb +9 -9
  161. data/spec/models/website_spec.rb +1 -1
  162. metadata +100 -114
  163. data/app/helpers/application_helper.rb +0 -134
  164. data/app/views/knitkit/articles/index.html.erb +0 -3
  165. data/app/views/knitkit/articles/show.html.erb +0 -4
  166. data/app/views/menus/knitkit/_default_sub_menu.html.erb +0 -43
  167. data/app/views/menus/knitkit/_default_sub_section_menu.html.erb +0 -47
  168. data/app/widgets/contact_us/views/_contact_form.html.erb +0 -36
  169. data/app/widgets/dynamic_forms/base.rb +0 -139
  170. data/app/widgets/dynamic_forms/javascript/dynamic_forms.js +0 -110
  171. data/app/widgets/dynamic_forms/views/error.html.erb +0 -5
  172. data/app/widgets/dynamic_forms/views/index.html.erb +0 -8
  173. data/app/widgets/dynamic_forms/views/success.html.erb +0 -4
  174. data/app/widgets/dynamic_grid/base.rb +0 -130
  175. data/app/widgets/dynamic_grid/helpers/controller/dynamic_grid_controller_helper.rb +0 -3
  176. data/app/widgets/dynamic_grid/helpers/view/dynamic_grid_view_helper.rb +0 -3
  177. data/app/widgets/dynamic_grid/javascript/dynamic_grid.js +0 -177
  178. data/app/widgets/dynamic_grid/views/index.html.erb +0 -14
  179. data/app/widgets/login/views/reset_password.html.erb +0 -26
  180. data/app/widgets/manage_profile/views/default_type_error.html.erb +0 -5
  181. data/app/widgets/scaffold/base.rb +0 -87
  182. data/app/widgets/scaffold/helpers/controller/scaffold_controller_helper.rb +0 -3
  183. data/app/widgets/scaffold/helpers/view/scaffold_view_helper.rb +0 -3
  184. data/app/widgets/scaffold/javascript/scaffold.js +0 -337
  185. data/app/widgets/scaffold/views/index.html.erb +0 -15
  186. data/app/widgets/search/views/_search.html.erb +0 -39
  187. data/public/images/knitkit/bullet.png +0 -0
  188. data/public/images/knitkit/close.png +0 -0
  189. data/public/images/knitkit/content.png +0 -0
  190. data/public/images/knitkit/footer.png +0 -0
  191. data/public/images/knitkit/graphic.png +0 -0
  192. data/public/images/knitkit/greyFadeDown.png +0 -0
  193. data/public/images/knitkit/link.png +0 -0
  194. data/public/images/knitkit/menu.png +0 -0
  195. data/public/images/knitkit/menu_select.png +0 -0
  196. data/public/images/knitkit/search.png +0 -0
  197. data/public/images/knitkit/tooltip.gif +0 -0
  198. data/public/javascripts/ajax_pagination.js +0 -33
  199. data/public/javascripts/datepicker.js +0 -445
  200. data/public/javascripts/erp_app/desktop/applications/knitkit/file_assets_panel.js +0 -341
  201. data/public/javascripts/erp_app/desktop/applications/knitkit/image_assets_data_view.js +0 -31
  202. data/public/javascripts/erp_app/desktop/applications/knitkit/image_assets_panel.js +0 -263
  203. data/public/javascripts/erp_app/desktop/applications/knitkit/section_articles_grid_panel.js +0 -722
  204. data/public/javascripts/erp_app/desktop/applications/knitkit/themes_tree_panel.js +0 -585
  205. data/public/javascripts/erp_app/desktop/applications/knitkit/west_region/helpers/website.js +0 -155
  206. data/public/javascripts/knitkit/helpers.js +0 -26
  207. data/public/stylesheets/datepicker.css +0 -121
  208. data/public/stylesheets/extjs/resources/css/knitkit_extjs_4.css +0 -233
  209. data/public/stylesheets/knitkit/style.css +0 -426
@@ -1,9 +1,7 @@
1
- <div style="float:left;font-size:15px;">
2
- <% unless @authenticated %>
3
- <span>
4
- <a href="<%=@login_url%>">Login</a>&nbsp;|&nbsp;<a href="<%=@signup_url%>">Sign Up</a>
5
- </span>
6
- <% else %>
7
- <span>Welcome <%= @user.party.description %>&nbsp;|&nbsp;<a href="/session/sign_out?login_url=<%=@login_url%>">Logout</a></span>
8
- <% end %>
9
- </div>
1
+ <span class="login-header">
2
+ <% unless @authenticated -%>
3
+ <a href="<%= @login_url %>"><span>Login</span></a>
4
+ <% else %>
5
+ <a href="/session/sign_out?login_url=<%= @login_url %>"><span>Logout</span></a>
6
+ <% end %>
7
+ </span>
@@ -2,7 +2,7 @@ module Widgets
2
2
  module ManageProfile
3
3
  class Base < ErpApp::Widgets::Base
4
4
 
5
- def load_profile_data
5
+ def index
6
6
  @user = User.find(current_user)
7
7
  @individual = @user.party.business_party
8
8
  @email_addresses = @user.party.find_all_contacts_by_contact_mechanism(EmailAddress)
@@ -28,10 +28,6 @@ module Widgets
28
28
  states.each do |s|
29
29
  @states_id << [s.zone_name, s.id]
30
30
  end
31
- end
32
-
33
- def index
34
- load_profile_data
35
31
 
36
32
  render
37
33
  end
@@ -39,29 +35,14 @@ module Widgets
39
35
  def update_user_information
40
36
  #### Get appropriate models ####
41
37
 
42
- @user=User.find(current_user)
43
- @individual= @user.party.business_party
44
-
45
- #### Formating the date for sqlite. Will probably need diffrent formating for production ####
46
- if params[:date][:day].to_i < 10
47
- day="0#{params[:date][:day]}"
48
- else
49
- day= params[:date][:day]
50
- end
51
-
52
- if params[:date][:month].to_i < 10
53
- month="0#{params[:date][:month]}"
54
- else
55
- month= params[:date][:month]
56
- end
57
-
58
- formated_date= "#{params[:date][:year]}-#{month}-#{day}"
38
+ @user = User.find(current_user)
39
+ @individual = @user.party.business_party
59
40
 
60
- @individual.current_first_name= params[:first_name]
61
- @individual.current_last_name= params[:last_name]
62
- @individual.current_middle_name= params[:middle_name]
63
- @individual.gender= params[:gender]
64
- @individual.birth_date= formated_date
41
+ @individual.current_first_name = params[:first_name]
42
+ @individual.current_last_name = params[:last_name]
43
+ @individual.current_middle_name = params[:middle_name]
44
+ @individual.gender = params[:gender]
45
+ @individual.birth_date = Date.strptime(params[:birth_date], '%m/%d/%Y')
65
46
  @user.email = params[:email]
66
47
 
67
48
  #### check validation then save and render message ####
@@ -70,15 +51,16 @@ module Widgets
70
51
  @user.save
71
52
  @individual.save
72
53
  @message = "User Information Updated"
73
- load_profile_data
74
- render :update => {:id => "#{@uuid}_result", :view => :index}
54
+
55
+ render :update => {:id => "#{@uuid}_result", :view => :success}
75
56
  else
76
57
  @message_cls = 'sexyerror'
77
58
  @message = "Error Updating User Information"
78
- render :update => {:id => "#{@uuid}_result", :view => :index}
59
+ render :update => {:id => "#{@uuid}_result", :view => :error}
79
60
  end
80
61
  else
81
- render :update => {:id => "#{@uuid}_result", :view => :index}
62
+ @message = "User Information Updated"
63
+ render :update => {:id => "#{@uuid}_result", :view => :success}
82
64
  end
83
65
 
84
66
  end
@@ -86,7 +68,6 @@ module Widgets
86
68
 
87
69
  def update_password
88
70
  if @user = User.authenticate(current_user.username, params[:old_password])
89
- load_profile_data
90
71
 
91
72
  if !params[:new_password].blank? && !params[:password_confirmation].blank? && params[:new_password] == params[:password_confirmation]
92
73
 
@@ -94,179 +75,150 @@ module Widgets
94
75
 
95
76
  if @user.change_password!(params[:new_password])
96
77
  @message = "Password Updated"
97
-
98
- render :update => {:id => "#{@uuid}_result", :view => :index}
78
+
79
+ render :update => {:id => "#{@uuid}_result", :view => :success}
99
80
  else
100
81
  @message = "Error Updating Password"
101
- @message_cls = 'sexyerror'
82
+
102
83
  #### validation failed ####
103
- render :update => {:id => "#{@uuid}_result", :view => :index}
84
+ render :update => {:id => "#{@uuid}_result", :view => :error}
104
85
  end
105
86
 
106
87
  else
107
88
  #### password and password confirmation cant be blank or unequal ####
108
89
  @message = "Password Confirmation Must Match Password"
109
- @message_cls = 'sexyerror'
110
- render :update => {:id => "#{@uuid}_result", :view => :index}
90
+
91
+ render :update => {:id => "#{@uuid}_result", :view => :error}
111
92
  end
112
93
  else
113
- load_profile_data
114
94
  #### old password wrong ####
115
95
  @message = "Invalid Old Password"
116
- @message_cls = 'sexyerror'
117
- render :update => {:id => "#{@uuid}_result", :view => :index}
118
- end
119
-
120
- end
121
96
 
122
- def update_contact_information
123
- @user= User.find(current_user)
124
- @email_addresses= @user.party.find_all_contacts_by_contact_mechanism(EmailAddress)
125
- @phone_numbers= @user.party.find_all_contacts_by_contact_mechanism(PhoneNumber)
126
- @postal_addresses= @user.party.find_all_contacts_by_contact_mechanism(PostalAddress)
127
- contact_type_in_use=false
128
-
129
- #### Updates email records ####
130
- @email_addresses.each_with_index do |e, i|
131
- if e.email_address != params[:email_addresses][i.to_s]
132
- email_address_args={:email_address => params[:email_addresses][i.to_s]}
133
- @user.party.update_or_add_contact_with_purpose(EmailAddress,
134
- ContactPurpose.find_by_internal_identifier(params[:email_address_contact_purposes][i.to_s]),
135
- email_address_args)
136
- end
97
+ render :update => {:id => "#{@uuid}_result", :view => :error}
137
98
  end
138
99
 
139
- #### Updates Phone Numbers ####
140
- @phone_numbers.each_with_index do |p, i|
141
- if p.phone_number != params[:phone_numbers][i.to_s]
142
- phone_number_args={:phone_number => params[:phone_numbers][i.to_s]}
143
- @user.party.update_or_add_contact_with_purpose(PhoneNumber,
144
- ContactPurpose.find_by_internal_identifier(params[:phone_number_contact_purposes][i.to_s]),
145
- phone_number_args)
146
- end
147
- end
100
+ end
148
101
 
149
- #### Updates Postal Addresses
150
- @postal_addresses.each_with_index do |a, i|
151
- postal_address_args= {}
102
+ def add_email_address
103
+ begin
104
+ email_address = params[:email_address].strip
105
+ contact_purpose = params[:contact_purpose]
152
106
 
153
- if a.address_line_1 != params[:postal_addresses][i.to_s][:address_line_1]
154
- postal_address_args[:address_line_1]= params[:postal_addresses][i.to_s][:address_line_1]
155
- end
107
+ email = current_user.party.add_contact(EmailAddress,
108
+ {email_address: email_address},
109
+ ContactPurpose.find_by_internal_identifier(contact_purpose))
156
110
 
157
- if a.address_line_2 != params[:postal_addresses][i.to_s][:address_line_2]
158
- postal_address_args[:address_line_2]= params[:postal_addresses][i.to_s][:address_line_2]
159
- end
111
+ {:json => {success: true, message: 'Email added', email: email.to_hash(:only => [:id, :email_address],
112
+ :contact_purpose => email.contact_purpose.description)}}
113
+ rescue => ex
114
+ Rails.logger.error ex.message
115
+ Rails.logger.error ex.backtrace.join("\n")
116
+ #TODO send out notification
160
117
 
161
- if a.city != params[:postal_addresses][i.to_s][:city]
162
- postal_address_args[:city]= params[:postal_addresses][i.to_s][:city]
163
- end
118
+ {:json => {success: false, message: 'Could not add email'}}
119
+ end
120
+ end
164
121
 
165
- if a.geo_zone_id != params[:postal_addresses][i.to_s][:state_id].to_i
166
- postal_address_args[:geo_zone_id]= params[:postal_addresses][i.to_s][:state_id].to_i
167
- postal_address_args[:state]= GeoZone.find(params[:postal_addresses][i.to_s][:state_id]).zone_name
168
- end
122
+ def remove_email_address
123
+ begin
124
+ email_address_id = params[:email_address_id].strip
169
125
 
170
- if a.zip != params[:postal_addresses][i.to_s][:zip]
171
- postal_address_args[:zip]= params[:postal_addresses][i.to_s][:zip]
172
- end
126
+ EmailAddress.find(email_address_id).destroy
173
127
 
174
- if a.geo_country_id != params[:postal_addresses][i.to_s][:country_id].to_i
175
- postal_address_args[:geo_country_id]= params[:postal_addresses][i.to_s][:country_id].to_i
176
- postal_address_args[:country]= GeoCountry.find(params[:postal_addresses][i.to_s][:country_id]).name
177
- end
128
+ {:json => {success: true, message: 'Email removed'}}
129
+ rescue => ex
130
+ Rails.logger.error ex.message
131
+ Rails.logger.error ex.backtrace.join("\n")
132
+ #TODO send out notification
178
133
 
179
- if !postal_address_args.empty?
180
- @user.party.update_or_add_contact_with_purpose(PostalAddress,
181
- ContactPurpose.find_by_internal_identifier(params[:postal_address_contact_purposes][i.to_s]),
182
- postal_address_args)
183
- end
134
+ {:json => {success: false, message: 'Could not remove email'}}
184
135
  end
136
+ end
185
137
 
186
- #### Adds new email address ####
187
- if params[:new_email_address] != nil && params[:new_email_address] != ""
188
- if !contact_purpose_in_use?(@email_addresses, params[:new_email_address_contact_purpose])
189
- @user.party.update_or_add_contact_with_purpose(EmailAddress,
190
- ContactPurpose.find_by_internal_identifier(params[:new_email_address_contact_purpose]),
191
- :email_address => params[:new_email_address])
192
- else
193
- contact_type_in_use=true
194
- end
195
- end
138
+ def add_phone_number
139
+ begin
140
+ phone_number = params[:phone_number].strip
141
+ contact_purpose = params[:contact_purpose]
196
142
 
197
- #### Adds new phone number ####
198
- if params[:new_phone_number] != nil && params[:new_phone_number] != ""
199
- if !contact_purpose_in_use?(@phone_numbers, params[:new_phone_number_contact_purpose])
200
- @user.party.update_or_add_contact_with_purpose(PhoneNumber,
201
- ContactPurpose.find_by_internal_identifier(params[:new_phone_number_contact_purpose]),
202
- :phone_number => params[:new_phone_number])
203
- else
204
- contact_type_in_use=true
205
- end
206
- end
143
+ phone_number = current_user.party.add_contact(PhoneNumber,
144
+ {phone_number: phone_number},
145
+ ContactPurpose.find_by_internal_identifier(contact_purpose))
207
146
 
208
- #### Adds new postal address ####
209
- new_postal_address_args= {}
147
+ {:json => {success: true, message: 'Phone number added', phone: phone_number.to_hash(:only => [:id, :phone_number],
148
+ :contact_purpose => phone_number.contact_purpose.description)}}
149
+ rescue => ex
150
+ Rails.logger.error ex.message
151
+ Rails.logger.error ex.backtrace.join("\n")
152
+ #TODO send out notification
210
153
 
211
- if params[:new_postal_address][:address_line_1] != "Address Line 1"
212
- new_postal_address_args[:address_line_1]= params[:new_postal_address][:address_line_1]
213
- end
214
-
215
- if params[:new_postal_address][:address_line_2] != "Address Line 2"
216
- new_postal_address_args[:address_line_2]= params[:new_postal_address][:address_line_2]
154
+ {:json => {success: false, message: 'Could not add phone number'}}
217
155
  end
156
+ end
218
157
 
219
- if params[:new_postal_address][:city] != "City"
220
- new_postal_address_args[:city]= params[:new_postal_address][:city]
221
- end
158
+ def remove_phone_number
159
+ begin
160
+ phone_number_id = params[:phone_number_id].strip
222
161
 
223
- if !params[:new_postal_address][:state_id].blank? and params[:new_postal_address][:state_id] != "default"
224
- new_postal_address_args[:geo_zone_id]= params[:new_postal_address][:state_id].to_i
225
- new_postal_address_args[:state]= GeoZone.find(params[:new_postal_address][:state_id]).zone_name
226
- end
162
+ PhoneNumber.find(phone_number_id).destroy
227
163
 
228
- if params[:new_postal_address][:zip] != "Zipcode"
229
- new_postal_address_args[:zip]= params[:new_postal_address][:zip]
230
- end
164
+ {:json => {success: true, message: 'Phone number removed'}}
165
+ rescue => ex
166
+ Rails.logger.error ex.message
167
+ Rails.logger.error ex.backtrace.join("\n")
168
+ #TODO send out notification
231
169
 
232
- if !params[:new_postal_address][:country_id].blank? and params[:new_postal_address][:country_id] != "default"
233
- new_postal_address_args[:geo_country_id]= params[:new_postal_address][:country_id].to_i
234
- new_postal_address_args[:country]= GeoCountry.find(params[:new_postal_address][:country_id]).name
170
+ {:json => {success: false, message: 'Could not remove phone number'}}
235
171
  end
172
+ end
236
173
 
237
- if !new_postal_address_args.empty?
238
- if !contact_purpose_in_use?(@postal_addresses, params[:new_postal_address_contact_purpose])
239
- @user.party.update_or_add_contact_with_purpose(PostalAddress,
240
- ContactPurpose.find_by_internal_identifier(params[:new_postal_address_contact_purpose]),
241
- new_postal_address_args)
242
- else
243
- contact_type_in_use=true
244
- end
174
+ def add_address
175
+ begin
176
+ address_line_1 = params[:address_line_1].strip
177
+ address_line_2 = params[:address_line_2].strip
178
+ city = params[:city].strip
179
+ geo_zone_id = params[:state].strip
180
+ postal_code = params[:postal_code].strip
181
+ contact_purpose = params[:contact_purpose]
182
+
183
+ postal_address = current_user.party.add_contact(PostalAddress,
184
+ {
185
+ address_line_1: address_line_1,
186
+ address_line_2: address_line_2,
187
+ city: city,
188
+ geo_zone_id: geo_zone_id,
189
+ state: GeoZone.find(geo_zone_id).zone_name,
190
+ zip: postal_code,
191
+ },
192
+ ContactPurpose.find_by_internal_identifier(contact_purpose))
193
+
194
+ {:json => {success: true,
195
+ message: 'Address added',
196
+ address: postal_address.to_hash(:only => [:id, :address_line_1, :address_line_2,
197
+ :city, :state, :zip],
198
+ :contact_purpose => postal_address.contact_purpose.description)}}
199
+ rescue => ex
200
+ Rails.logger.error ex.message
201
+ Rails.logger.error ex.backtrace.join("\n")
202
+ #TODO send out notification
203
+
204
+ {:json => {success: false, message: 'Could not add address'}}
245
205
  end
206
+ end
246
207
 
247
- load_profile_data
208
+ def remove_address
209
+ begin
210
+ address_id = params[:address_id].strip
248
211
 
249
- #### Renders proper error or success message ####
250
- if contact_type_in_use
251
- @message = "New contacts cannot have the same contact type as old contacts"
252
- @message_cls = 'sexyerror'
253
- render :update => {:id => "#{@uuid}_result", :view => :index}
254
- else
255
- @message = "Your Contact Information Was Updated"
256
- render :update => {:id => "#{@uuid}_result", :view => :index}
257
- end
212
+ PostalAddress.find(address_id).destroy
258
213
 
259
- end
214
+ {:json => {success: true, message: 'address removed'}}
215
+ rescue => ex
216
+ Rails.logger.error ex.message
217
+ Rails.logger.error ex.backtrace.join("\n")
218
+ #TODO send out notification
260
219
 
261
- def contact_purpose_in_use?(contacts, purpose)
262
- result = false
263
- contacts.each do |e|
264
- if e.contact.contact_purposes[0].internal_identifier == purpose
265
- result = true
266
- break
267
- end
220
+ {:json => {success: false, message: 'Could not remove address'}}
268
221
  end
269
- result
270
222
  end
271
223
 
272
224
  #should not be modified
@@ -0,0 +1,184 @@
1
+ <div style="margin-top:5px;" id="addressMessageArea"></div>
2
+ <table class="table table-striped" id="addressesTable">
3
+ <thead>
4
+ <tr>
5
+ <th>Address Line 1</th>
6
+ <th>Address Line 2</th>
7
+ <th>City</th>
8
+ <th>State</th>
9
+ <th>Postal Code</th>
10
+ <th>Contact Type</th>
11
+ <th>&nbsp;</th>
12
+ </tr>
13
+ </thead>
14
+ <tbody>
15
+ <% @postal_addresses.each do |p| %>
16
+ <tr id="address<%= p.id %>">
17
+ <td><%= p.address_line_1 %></td>
18
+ <td><%= p.address_line_2 %></td>
19
+ <td><%= p.city %></td>
20
+ <td><%= p.state %></td>
21
+ <td><%= p.zip %></td>
22
+ <td><%= p.contact.contact_purposes.first.description %></td>
23
+ <td>
24
+ <button type="button"
25
+ class="addressDeleteBtn btn btn-danger"
26
+ data-id="<%= p.id %>">Delete
27
+ </button>
28
+ </td>
29
+ </tr>
30
+ <% end %>
31
+ </tbody>
32
+ </table>
33
+
34
+ <button type="button" id="addAddressBtn" class="btn btn-success">Add Address</button>
35
+
36
+ <div id="addAddressDiv" style="display:none;">
37
+ <%= form_remote_tag build_widget_url(:add_address), :id => 'address_form', :role => 'form' do %>
38
+ <div class="form-group">
39
+ <%= label_tag :address_line_1 %>
40
+ <%= text_field_tag :address_line_1, nil, class: 'form-control', required: true %>
41
+
42
+ <%= label_tag :address_line_2 %>
43
+ <%= text_field_tag :address_line_2, nil, class: 'form-control' %>
44
+
45
+ <%= label_tag :city %>
46
+ <%= text_field_tag :city, nil, class: 'form-control', required: true %>
47
+
48
+ <%= label_tag :state %>
49
+ <%= select_tag("state", options_for_select(@states_id, :selected => "default", :disabled => "default"), :class => "form-control") %>
50
+
51
+ <%= label_tag :postal_code %>
52
+ <%= text_field_tag :postal_code, nil, class: 'form-control', required: true %>
53
+
54
+ <%= label_tag :contact_purpose %>
55
+ <%= select_tag("contact_purpose", options_for_select(@purpose_hash, :selected => "default"), :class => "form-control") %>
56
+ </div>
57
+ <button id="submitAddressBtn" type="submit" class="btn btn-primary">Submit</button>
58
+ <button id="cancelAddressBtn" type="button" class="btn btn-default">Cancel</button>
59
+ <% end %>
60
+ </div>
61
+
62
+ <script type="text/javascript">
63
+
64
+ addressesPanel = {
65
+ setup: function () {
66
+ jQuery('#addAddressBtn').click(function () {
67
+ var addBtn = jQuery(this);
68
+
69
+ addBtn.css('display', 'none');
70
+ jQuery('#addAddressDiv').css('display', '');
71
+ });
72
+
73
+ jQuery('#cancelAddressBtn').click(function () {
74
+ var addBtn = jQuery('#addAddressBtn');
75
+
76
+ addBtn.css('display', '');
77
+ jQuery('#addAddressDiv').css('display', 'none');
78
+ });
79
+
80
+ jQuery('#address_form').bind('ajax:success', function (e, response) {
81
+ var html = '';
82
+
83
+ if (response.success) {
84
+ html = [
85
+ '<div class="alert alert-success" >',
86
+ '<button type="button" class="close" data-dismiss="alert">&times;</button>',
87
+ response.message,
88
+ '</div>'
89
+ ].join('');
90
+
91
+ var newRowHtml = [
92
+ '<tr id="address' + response.address.id + '">',
93
+ '<td>' + response.address.address_line_1 + '</td>',
94
+ '<td>' + response.address.address_line_2 + '</td>',
95
+ '<td>' + response.address.city + '</td>',
96
+ '<td>' + response.address.state + '</td>',
97
+ '<td>' + response.address.zip + '</td>',
98
+ '<td>' + response.address.contact_purpose + '</td>',
99
+ '<td>',
100
+ '<button type="button" class="addressDeleteBtn btn btn-danger" data-id="' + response.address.id + '" >Delete</button>',
101
+ '</td>',
102
+ '</tr>'
103
+ ].join('');
104
+
105
+ jQuery('#addressesTable > tbody:last').append(newRowHtml);
106
+ var newDeleteBtn = jQuery('#addressesTable > tbody:last > tr:last > td:last > button');
107
+
108
+ newDeleteBtn.confirmModal({
109
+ confirmCallback: addressesPanel.deleteAddress,
110
+ confirmMessage : 'Are you sure you want to remove this address ?'
111
+ });
112
+
113
+ jQuery('#addAddressBtn').css('display', '');
114
+ jQuery('#addAddressDiv').css('display', 'none');
115
+ jQuery('#address_form')[0].reset();
116
+ }
117
+ else {
118
+ html = [
119
+ '<div class="alert alert-danger" >',
120
+ '<button type="button" class="close" data-dismiss="alert">&times;</button>',
121
+ response.message,
122
+ '</div>'
123
+ ].join('');
124
+ }
125
+
126
+ jQuery('#addressMessageArea').html(html);
127
+ });
128
+
129
+ window['addressesPanel'].bindDeleteBtn();
130
+ },
131
+
132
+ bindDeleteBtn: function () {
133
+ jQuery('.addressDeleteBtn').confirmModal({
134
+ confirmCallback: addressesPanel.deleteAddress,
135
+ confirmMessage : 'Are you sure you want to remove this address ?'
136
+ });
137
+ },
138
+
139
+ deleteAddress: function (link, data) {
140
+ var id = data.id;
141
+
142
+ jQuery.ajax({
143
+ url: '<%= build_widget_url(:remove_address) %>',
144
+ data: {address_id: id},
145
+ success: function (data) {
146
+ if (data.success) {
147
+ html = [
148
+ '<div class="alert alert-success" >',
149
+ '<button type="button" class="close" data-dismiss="alert">&times;</button>',
150
+ data.message,
151
+ '</div>'
152
+ ].join('');
153
+
154
+ jQuery('#addressMessageArea').html(html);
155
+
156
+ jQuery('#address' + id).remove();
157
+ }
158
+ else {
159
+ html = [
160
+ '<div class="alert alert-danger" >',
161
+ '<button type="button" class="close" data-dismiss="alert">&times;</button>',
162
+ data.message,
163
+ '</div>'
164
+ ].join('');
165
+
166
+ jQuery('#addressMessageArea').html(html);
167
+ }
168
+ },
169
+ error: function () {
170
+ html = [
171
+ '<div class="alert alert-danger" >',
172
+ '<button type="button" class="close" data-dismiss="alert">&times;</button>',
173
+ 'Could not remove address',
174
+ '</div>'
175
+ ].join('');
176
+
177
+ jQuery('#addressMessageArea').html(html);
178
+ }
179
+ });
180
+ }
181
+ };
182
+
183
+ addressesPanel.setup();
184
+ </script>