knitkit 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (165) hide show
  1. data/GPL-3-LICENSE +674 -0
  2. data/README.md +6 -0
  3. data/Rakefile +30 -0
  4. data/app/assets/javascripts/knitkit/application.js +9 -0
  5. data/app/assets/stylesheets/knitkit/application.css +7 -0
  6. data/app/controllers/knitkit/articles_controller.rb +7 -0
  7. data/app/controllers/knitkit/base_controller.rb +45 -0
  8. data/app/controllers/knitkit/blogs_controller.rb +27 -0
  9. data/app/controllers/knitkit/comments_controller.rb +18 -0
  10. data/app/controllers/knitkit/erp_app/desktop/app_controller.rb +135 -0
  11. data/app/controllers/knitkit/erp_app/desktop/articles_controller.rb +144 -0
  12. data/app/controllers/knitkit/erp_app/desktop/comments_controller.rb +43 -0
  13. data/app/controllers/knitkit/erp_app/desktop/content_controller.rb +27 -0
  14. data/app/controllers/knitkit/erp_app/desktop/file_assets_controller.rb +145 -0
  15. data/app/controllers/knitkit/erp_app/desktop/image_assets_controller.rb +28 -0
  16. data/app/controllers/knitkit/erp_app/desktop/inquiries_controller.rb +68 -0
  17. data/app/controllers/knitkit/erp_app/desktop/position_controller.rb +20 -0
  18. data/app/controllers/knitkit/erp_app/desktop/theme_controller.rb +272 -0
  19. data/app/controllers/knitkit/erp_app/desktop/versions_controller.rb +135 -0
  20. data/app/controllers/knitkit/erp_app/desktop/website_controller.rb +177 -0
  21. data/app/controllers/knitkit/erp_app/desktop/website_nav_controller.rb +143 -0
  22. data/app/controllers/knitkit/erp_app/desktop/website_section_controller.rb +116 -0
  23. data/app/controllers/knitkit/unauthorized_controller.rb +8 -0
  24. data/app/controllers/knitkit/website_sections_controller.rb +17 -0
  25. data/app/helpers/application_helper.rb +132 -0
  26. data/app/models/article.rb +14 -0
  27. data/app/models/blog.rb +21 -0
  28. data/app/models/comment.rb +24 -0
  29. data/app/models/content.rb +158 -0
  30. data/app/models/extensions/user.rb +5 -0
  31. data/app/models/published_element.rb +9 -0
  32. data/app/models/published_website.rb +118 -0
  33. data/app/models/theme.rb +239 -0
  34. data/app/models/website.rb +457 -0
  35. data/app/models/website_host.rb +3 -0
  36. data/app/models/website_inquiry.rb +11 -0
  37. data/app/models/website_inquiry_mailer.rb +12 -0
  38. data/app/models/website_nav.rb +17 -0
  39. data/app/models/website_nav_item.rb +21 -0
  40. data/app/models/website_section.rb +152 -0
  41. data/app/models/website_section_content.rb +4 -0
  42. data/app/views/knitkit/articles/index.html.erb +3 -0
  43. data/app/views/knitkit/articles/show.html.erb +4 -0
  44. data/app/views/knitkit/blogs/_add_comment.html.erb +28 -0
  45. data/app/views/knitkit/blogs/_comment.html.erb +8 -0
  46. data/app/views/knitkit/blogs/index.html.erb +51 -0
  47. data/app/views/knitkit/blogs/index.rss.builder +23 -0
  48. data/app/views/knitkit/blogs/show.html.erb +22 -0
  49. data/app/views/knitkit/unauthorized/index.html.erb +4 -0
  50. data/app/views/knitkit/website_sections/index.html.erb +6 -0
  51. data/app/views/layouts/knitkit/base.html.erb +59 -0
  52. data/app/views/menus/knitkit/_default_menu.html.erb +23 -0
  53. data/app/views/menus/knitkit/_default_section_menu.html.erb +27 -0
  54. data/app/views/menus/knitkit/_default_sub_menu.html.erb +45 -0
  55. data/app/views/menus/knitkit/_default_sub_section_menu.html.erb +49 -0
  56. data/app/views/shared/knitkit/_bread_crumb.html.erb +7 -0
  57. data/app/views/shared/knitkit/_footer.html.erb +3 -0
  58. data/app/views/website_inquiry_mailer/inquiry.erb +3 -0
  59. data/app/widgets/contact_us/base.rb +86 -0
  60. data/app/widgets/contact_us/javascript/contact_us.js +13 -0
  61. data/app/widgets/contact_us/views/_contact_form.html.erb +36 -0
  62. data/app/widgets/contact_us/views/error.html.erb +10 -0
  63. data/app/widgets/contact_us/views/index.html.erb +1 -0
  64. data/app/widgets/contact_us/views/layouts/base.html.erb +7 -0
  65. data/app/widgets/contact_us/views/success.html.erb +4 -0
  66. data/app/widgets/google_map/base.rb +48 -0
  67. data/app/widgets/google_map/javascript/google_map.js +174 -0
  68. data/app/widgets/google_map/views/index.html.erb +41 -0
  69. data/app/widgets/login/base.rb +61 -0
  70. data/app/widgets/login/javascript/login.js +162 -0
  71. data/app/widgets/login/views/index.html.erb +37 -0
  72. data/app/widgets/login/views/layouts/base.html.erb +14 -0
  73. data/app/widgets/login/views/login_header.html.erb +9 -0
  74. data/app/widgets/login/views/reset_password.html.erb +26 -0
  75. data/app/widgets/manage_profile/base.rb +327 -0
  76. data/app/widgets/manage_profile/javascript/manage_profile.js +11 -0
  77. data/app/widgets/manage_profile/views/_contact_information_form.html.erb +180 -0
  78. data/app/widgets/manage_profile/views/_password_form.html.erb +20 -0
  79. data/app/widgets/manage_profile/views/_user_information_form.html.erb +30 -0
  80. data/app/widgets/manage_profile/views/contact_type_in_use.html.erb +4 -0
  81. data/app/widgets/manage_profile/views/default_type_error.html.erb +5 -0
  82. data/app/widgets/manage_profile/views/error.html.erb +3 -0
  83. data/app/widgets/manage_profile/views/index.html.erb +46 -0
  84. data/app/widgets/manage_profile/views/layouts/base.html.erb +1 -0
  85. data/app/widgets/manage_profile/views/password_blank.html.erb +4 -0
  86. data/app/widgets/manage_profile/views/password_invalid.html.erb +4 -0
  87. data/app/widgets/manage_profile/views/password_success.html.erb +3 -0
  88. data/app/widgets/manage_profile/views/success.html.erb +3 -0
  89. data/app/widgets/reset_password/base.rb +42 -0
  90. data/app/widgets/reset_password/javascript/reset_password.js +13 -0
  91. data/app/widgets/reset_password/views/index.html.erb +31 -0
  92. data/app/widgets/reset_password/views/layouts/base.html.erb +1 -0
  93. data/app/widgets/search/base.rb +80 -0
  94. data/app/widgets/search/javascript/search.js +31 -0
  95. data/app/widgets/search/views/_search.html.erb +39 -0
  96. data/app/widgets/search/views/index.html.erb +3 -0
  97. data/app/widgets/search/views/layouts/base.html.erb +24 -0
  98. data/app/widgets/search/views/show.html.erb +48 -0
  99. data/app/widgets/signup/base.rb +72 -0
  100. data/app/widgets/signup/javascript/signup.js +13 -0
  101. data/app/widgets/signup/views/_signup_form.html.erb +36 -0
  102. data/app/widgets/signup/views/error.html.erb +11 -0
  103. data/app/widgets/signup/views/index.html.erb +1 -0
  104. data/app/widgets/signup/views/layouts/base.html.erb +7 -0
  105. data/app/widgets/signup/views/success.html.erb +4 -0
  106. data/config/environment.rb +0 -0
  107. data/config/routes.rb +41 -0
  108. data/db/data_migrations/20110509223702_add_publisher_role.rb +11 -0
  109. data/db/data_migrations/20110816153456_add_knitkit_application.rb +31 -0
  110. data/db/data_migrations/upgrade/20111011203718_create_paths_for_sections.rb +13 -0
  111. data/db/data_migrations/upgrade/20111216192114_add_secured_models_to_menu_items.rb +18 -0
  112. data/db/data_migrations/upgrade/20111216202819_set_contents_iid_to_permalink_where_null.rb +12 -0
  113. data/db/migrate/20110211002317_setup_knitkit.rb +259 -0
  114. data/db/migrate/upgrade/20111014190442_update_contents.rb +25 -0
  115. data/db/migrate/upgrade/20111014201502_add_published_by_to_published_elements.rb +22 -0
  116. data/db/migrate/upgrade/20111017133851_add_iid_to_section.rb +21 -0
  117. data/db/migrate/upgrade/20111027145006_add_in_menu_to_section.rb +19 -0
  118. data/lib/knitkit.rb +12 -0
  119. data/lib/knitkit/engine.rb +26 -0
  120. data/lib/knitkit/extensions.rb +18 -0
  121. data/lib/knitkit/extensions/action_controller/theme_support/acts_as_themed_controller.rb +88 -0
  122. data/lib/knitkit/extensions/active_record/acts_as_commentable.rb +28 -0
  123. data/lib/knitkit/extensions/active_record/acts_as_publishable.rb +38 -0
  124. data/lib/knitkit/extensions/active_record/theme_support/has_many_themes.rb +34 -0
  125. data/lib/knitkit/extensions/compass/widgets/base.rb +53 -0
  126. data/lib/knitkit/extensions/core/array.rb +5 -0
  127. data/lib/knitkit/extensions/railties/action_view.rb +187 -0
  128. data/lib/knitkit/extensions/railties/theme_support/asset_tag_helper.rb +198 -0
  129. data/lib/knitkit/extensions/railties/theme_support/theme_file_resolver.rb +44 -0
  130. data/lib/knitkit/routing_filter/section_router.rb +55 -0
  131. data/lib/knitkit/syntax_validator.rb +32 -0
  132. data/lib/knitkit/version.rb +3 -0
  133. data/lib/tasks/knitkit_tasks.rake +4 -0
  134. data/public/images/knitkit/bullet.png +0 -0
  135. data/public/images/knitkit/content.png +0 -0
  136. data/public/images/knitkit/footer.png +0 -0
  137. data/public/images/knitkit/graphic.png +0 -0
  138. data/public/images/knitkit/greyFadeDown.png +0 -0
  139. data/public/images/knitkit/link.png +0 -0
  140. data/public/images/knitkit/logo.png +0 -0
  141. data/public/images/knitkit/menu.png +0 -0
  142. data/public/images/knitkit/menu_select.png +0 -0
  143. data/public/images/knitkit/search.png +0 -0
  144. data/public/javascripts/datepicker.js +440 -0
  145. data/public/javascripts/erp_app/desktop/applications/knitkit/articles_grid_panel.js +473 -0
  146. data/public/javascripts/erp_app/desktop/applications/knitkit/center_region.js +576 -0
  147. data/public/javascripts/erp_app/desktop/applications/knitkit/comments_grid_panel.js +217 -0
  148. data/public/javascripts/erp_app/desktop/applications/knitkit/east_region.js +26 -0
  149. data/public/javascripts/erp_app/desktop/applications/knitkit/file_assets_panel.js +109 -0
  150. data/public/javascripts/erp_app/desktop/applications/knitkit/image_assets_data_view.js +30 -0
  151. data/public/javascripts/erp_app/desktop/applications/knitkit/image_assets_panel.js +160 -0
  152. data/public/javascripts/erp_app/desktop/applications/knitkit/inquiries_grid_panel.js +46 -0
  153. data/public/javascripts/erp_app/desktop/applications/knitkit/module.js +46 -0
  154. data/public/javascripts/erp_app/desktop/applications/knitkit/publish_window.js +92 -0
  155. data/public/javascripts/erp_app/desktop/applications/knitkit/published_grid_panel.js +220 -0
  156. data/public/javascripts/erp_app/desktop/applications/knitkit/section_articles_grid_panel.js +613 -0
  157. data/public/javascripts/erp_app/desktop/applications/knitkit/themes_tree_panel.js +573 -0
  158. data/public/javascripts/erp_app/desktop/applications/knitkit/versions_grid_panel.js +664 -0
  159. data/public/javascripts/erp_app/desktop/applications/knitkit/west_region.js +2161 -0
  160. data/public/javascripts/erp_app/desktop/applications/knitkit/widgets_panel.js +52 -0
  161. data/public/stylesheets/datepicker.css +121 -0
  162. data/public/stylesheets/erp_app/desktop/applications/knitkit/knitkit.css +114 -0
  163. data/public/stylesheets/extjs/resources/css/knitkit_extjs_4.css +219 -0
  164. data/public/stylesheets/knitkit/style.css +394 -0
  165. metadata +289 -0
@@ -0,0 +1,41 @@
1
+ <div id='<%=@uuid%>' style='width:<%=@map_width%>px;height:<%=@map_height%>px;border:solid 1px black;'></div>
2
+ <script type='text/javascript'>
3
+ //we do not want to load google libraries more than once.
4
+ window.loadMap_<%=@uuid%> = function(){
5
+ var myOptions = {
6
+ zoom: <%=@zoom%>,
7
+ mapTypeId: google.maps.MapTypeId.<%=@map_type%>
8
+ }
9
+
10
+ var map_<%=@uuid%> = new google.maps.Map(document.getElementById('<%=@uuid%>'), myOptions);
11
+ var dropPins = <%=raw @drop_pins.to_json%>;
12
+ window.codeAddress(dropPins,map_<%=@uuid%>)
13
+ }
14
+
15
+ if(!window.mapJsLoaded){
16
+ Compass.ErpApp.Utility.JsLoader.load('http://maps.google.com/maps/api/js?sensor=false&callback=loadMap_<%=@uuid%>', false);
17
+ window.mapJsLoaded = true;
18
+ }
19
+ else{
20
+ setTimeout(loadMap_<%=@uuid%>,1000);
21
+ }
22
+
23
+ window.codeAddress = function(dropPins, map){
24
+ var geocoder = new google.maps.Geocoder();
25
+ Ext.each(dropPins,function(dropPin){
26
+ geocoder.geocode( { 'address': dropPin['address']}, function(results, status) {
27
+ if (status == google.maps.GeocoderStatus.OK) {
28
+ map.setCenter(results[0].geometry.location);
29
+ new google.maps.Marker({
30
+ map: map,
31
+ animation: google.maps.Animation.DROP,
32
+ position: results[0].geometry.location,
33
+ title:dropPin['title']
34
+ });
35
+ } else {
36
+ alert("Geocode was not successful for the following reason: " + status);
37
+ }
38
+ });
39
+ });
40
+ }
41
+ </script>
@@ -0,0 +1,61 @@
1
+
2
+ module Widgets
3
+ module Login
4
+ class Base < ErpApp::Widgets::Base
5
+
6
+ def index
7
+ @logout_to = params[:logout_to]
8
+ @login_to = params[:login_to]
9
+ @signup_url = params[:signup_url]
10
+ @reset_password_url = params[:reset_password_url]
11
+
12
+ render
13
+ end
14
+
15
+ def login_header
16
+ @login_url = params[:login_url]
17
+ @signup_url = params[:signup_url]
18
+ @authenticated = logged_in?
19
+ @user = current_user if logged_in?
20
+
21
+ render
22
+ end
23
+
24
+ def reset_password
25
+ @login_url = params[:login_url]
26
+
27
+ render
28
+ end
29
+
30
+ #should not be modified
31
+ #modify at your own risk
32
+ def locate
33
+ File.dirname(__FILE__)
34
+ end
35
+
36
+ class << self
37
+ def title
38
+ "Login"
39
+ end
40
+
41
+ def views_location
42
+ File.join(File.dirname(__FILE__),"/views")
43
+ end
44
+
45
+ def widget_name
46
+ File.basename(File.dirname(__FILE__))
47
+ end
48
+
49
+ def base_layout
50
+ begin
51
+ file = File.join(File.dirname(__FILE__),"/views/layouts/base.html.erb")
52
+ IO.read(file)
53
+ rescue
54
+ return nil
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+
@@ -0,0 +1,162 @@
1
+ Compass.ErpApp.Widgets.Login = {
2
+ addLogin:function(){
3
+ var addLoginWidgetWindow = Ext.create("Ext.window.Window",{
4
+ layout:'fit',
5
+ width:375,
6
+ title:'Add Login Widget',
7
+ plain: true,
8
+ buttonAlign:'center',
9
+ items: Ext.create("Ext.form.Panel",{
10
+ labelWidth: 100,
11
+ frame:false,
12
+ bodyStyle:'padding:5px 5px 0',
13
+ defaults: {
14
+ width: 225
15
+ },
16
+ items: [
17
+ {
18
+ width: 150,
19
+ xtype: 'combo',
20
+ forceSelection:true,
21
+ store: [
22
+ [':login_header','Header'],
23
+ [':login_page','Page'],
24
+ ],
25
+ fieldLabel: 'Widget View',
26
+ value:':login_page',
27
+ name: 'widgetLayout',
28
+ allowBlank: false,
29
+ triggerAction: 'all',
30
+ listeners:{
31
+ change:function(field, newValue, oldValue){
32
+ var basicForm = field.findParentByType('form').getForm();
33
+ var loginWidgetLoginToField = basicForm.findField('loginWidgetLoginTo');
34
+ var loginWidgetLogoutToField = basicForm.findField('loginWidgetLogoutTo');
35
+ var loginWidgetLoginUrlField = basicForm.findField('loginWidgetLoginUrl');
36
+ var loginWidgetSignUpUrlField = basicForm.findField('loginWidgetSignUpUrl');
37
+ var loginWidgetResetPasswordUrlField = basicForm.findField('loginWidgetResetPasswordUrl');
38
+ if(newValue == ':login_header'){
39
+ loginWidgetLoginToField.hide();
40
+ loginWidgetLogoutToField.hide();
41
+ loginWidgetLoginUrlField.show();
42
+ loginWidgetResetPasswordUrlField.hide();
43
+ loginWidgetLoginUrlField.setValue('/login');
44
+ loginWidgetSignUpUrlField.setValue('/sign-up');
45
+ loginWidgetResetPasswordUrlField.setValue('/reset-password');
46
+ }
47
+ else{
48
+ loginWidgetLoginToField.show();
49
+ loginWidgetLogoutToField.show();
50
+ loginWidgetLoginUrlField.hide();
51
+ loginWidgetResetPasswordUrlField.show();
52
+ loginWidgetLoginToField.setValue('/home');
53
+ loginWidgetLogoutToField.setValue('/home');
54
+ loginWidgetSignUpUrlField.setValue('/sign-up');
55
+ }
56
+ }
57
+ }
58
+ },
59
+ {
60
+ xtype:'textfield',
61
+ fieldLabel:'Login To',
62
+ allowBlank:false,
63
+ value:'/home',
64
+ id:'loginWidgetLoginTo'
65
+ },
66
+ {
67
+ xtype:'textfield',
68
+ fieldLabel:'Logout To',
69
+ allowBlank:false,
70
+ value:'/home',
71
+ id:'loginWidgetLogoutTo'
72
+ },
73
+ {
74
+ xtype:'textfield',
75
+ fieldLabel:'Login Url',
76
+ allowBlank:false,
77
+ hidden:true,
78
+ value:'/login',
79
+ id:'loginWidgetLoginUrl'
80
+ },
81
+ {
82
+ xtype:'textfield',
83
+ toolTip:'Only needed if Signup widget is setup.',
84
+ fieldLabel:'Sign Up Url',
85
+ allowBlank:true,
86
+ value:'/sign-up',
87
+ id:'loginWidgetSignUpUrl'
88
+ },
89
+ {
90
+ xtype:'textfield',
91
+ toolTip:'Only needed if Reset Password widget is setup.',
92
+ fieldLabel:'Reset Password Url',
93
+ allowBlank:true,
94
+ hidden:true,
95
+ value:'/reset-password',
96
+ id:'loginWidgetResetPasswordUrl'
97
+ }
98
+ ]
99
+ }),
100
+ buttons: [{
101
+ text:'Submit',
102
+ listeners:{
103
+ 'click':function(button){
104
+ var tpl = null;
105
+ var content = null;
106
+ var window = button.findParentByType('window');
107
+ var formPanel = window.query('form')[0];
108
+ var basicForm = formPanel.getForm();
109
+ var action = basicForm.findField('widgetLayout').getValue();
110
+
111
+ var loginWidgetSignUpUrlField = basicForm.findField('loginWidgetSignUpUrl');
112
+ var loginWidgetResetPasswordUrlField = basicForm.findField('loginWidgetResetPasswordUrl');
113
+ var data = {action:action};
114
+ data.loginWidgetSignUpUrl = loginWidgetSignUpUrlField.getValue();
115
+ data.loginWidgetResetPasswordUrl = loginWidgetResetPasswordUrlField.getValue();
116
+ if(action == ':login_header'){
117
+ var loginWidgetLoginUrlField = basicForm.findField('loginWidgetLoginUrl');
118
+ data.loginWidgetLoginUrl = loginWidgetLoginUrlField.getValue();
119
+ tpl = new Ext.XTemplate("<%= render_widget :login,\n",
120
+ " :action => :login_header,\n",
121
+ " :params => {:login_url => '{loginWidgetLoginUrl}',\n",
122
+ " :signup_url => '{loginWidgetSignUpUrl}'}%>");
123
+ content = tpl.apply(data);
124
+ }
125
+ else{
126
+ var loginWidgetLoginToField = basicForm.findField('loginWidgetLoginTo');
127
+ var loginWidgetLogoutToField = basicForm.findField('loginWidgetLogoutTo');
128
+ data.loginWidgetLoginTo = loginWidgetLoginToField.getValue();
129
+ data.loginWidgetLogoutTo = loginWidgetLogoutToField.getValue();
130
+ tpl = new Ext.XTemplate("<%= render_widget :login,\n",
131
+ " :params => {:login_to => '{loginWidgetLoginTo}',\n",
132
+ " :logout_to => '{loginWidgetLogoutTo}',\n",
133
+ " #optional field if Sign Up widget is setup\n",
134
+ " #:signup_url => '{loginWidgetSignUpUrl}',\n",
135
+ " #optional field if Reset Password widget is setup\n",
136
+ " #:reset_password_url => '{loginWidgetResetPasswordUrl}'}%>");
137
+ content = tpl.apply(data);
138
+ }
139
+
140
+ //add rendered template to center region editor
141
+ Ext.getCmp('knitkitCenterRegion').addContentToActiveCodeMirror(content);
142
+ addLoginWidgetWindow.close();
143
+ }
144
+ }
145
+ },{
146
+ text: 'Close',
147
+ handler: function(){
148
+ addLoginWidgetWindow.close();
149
+ }
150
+ }]
151
+ });
152
+ addLoginWidgetWindow.show();
153
+ }
154
+ }
155
+
156
+ Compass.ErpApp.Widgets.AvailableWidgets.push({
157
+ name:'Login',
158
+ iconUrl:'/images/icons/key/key_48x48.png',
159
+ onClick:Compass.ErpApp.Widgets.Login.addLogin
160
+ });
161
+
162
+
@@ -0,0 +1,37 @@
1
+ <div id="<%=widget_result_id%>"></div>
2
+ <div>
3
+ <%= form_tag '/session/sign_in', :remote => true, :id => 'login_form' do %>
4
+ <div class="form_settings">
5
+ <p>
6
+ <span style="width:175px">Username or Email Address</span>
7
+ <%= text_field_tag "login"%>
8
+ </p>
9
+ <p>
10
+ <span style="width:175px">Password</span>
11
+ <%= password_field_tag "password"%>
12
+ </p>
13
+ <input type="hidden" name="logout_to" value="<%=@logout_to%>" />
14
+ <input type="hidden" name="login_to" value="<%=@login_to%>" />
15
+ <p style="padding-top: 15px">
16
+ <span style="width:175px">&nbsp;</span>
17
+ <%= submit_tag "Login", :disable_with => "Please wait...", :class => "submit", :style => 'margin:0px;'%>
18
+ <%unless @signup_url.blank?%> | <%= link_to 'Sign Up', @signup_url %> <%end%> <%unless @reset_password_url.blank?%> | <%= link_to 'Reset Password', @reset_password_url %> <%end%>
19
+ </p>
20
+ </div>
21
+ <% end %>
22
+ </div>
23
+ <script type="text/javascript">
24
+ $('#login_form').bind('ajaxComplete', function(e, xhr, settings){
25
+ var response = jQuery.parseJSON(xhr.responseText);
26
+ if(response.success){
27
+ window.location = '<%=@login_to%>';
28
+ }
29
+ else{
30
+ $('#<%=widget_result_id%>').html('<div class="sexyerror">'+response.errors.reason+'</div>');
31
+ }
32
+ });
33
+ </script>
34
+
35
+
36
+
37
+
@@ -0,0 +1,14 @@
1
+ <h2><%=h @website_section.title %></h2>
2
+
3
+ <% @contents.each do |content| %>
4
+ <%=raw content.body_html %>
5
+ <% end %>
6
+
7
+ <%= render_widget :login,
8
+ :params => {:logout_to => "/login",
9
+ :login_to => "/home",
10
+ #optional field if Sign Up widget is setup
11
+ :signup_url => '/sign-up',
12
+ #optional field if Reset Password widget is setup
13
+ :reset_password_url => '/reset-password'
14
+ } %>
@@ -0,0 +1,9 @@
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>
@@ -0,0 +1,26 @@
1
+ <div id="<%=widget_result_id%>"></div>
2
+ <div>
3
+ <%= form_tag '/users/reset_password', :remote => true, :id => 'reset_password_form' do %>
4
+ <div class="form_settings">
5
+ <p>
6
+ <span style="width:175px">Username or Email Address</span>
7
+ <%= text_field_tag "login"%>
8
+ </p>
9
+ <input type="hidden" name="login_url" value="<%=@login_url%>" />
10
+ <p style="padding-top: 15px">
11
+ <span style="width:175px">&nbsp;</span>
12
+ <%= submit_tag "Reset", :disable_with => "Please wait...", :class => "submit", :style => 'margin:0px;'%>
13
+ </p>
14
+ </div>
15
+ <% end %>
16
+ </div>
17
+ <script type="text/javascript">
18
+ $('#login_form').bind('ajaxComplete', function(e, xhr, settings){
19
+ var response = jQuery.parseJSON(xhr.responseText);
20
+ $('#<%=widget_result_id%>').html('<div class="sexyerror">'+response.message+'</div>');
21
+ });
22
+ </script>
23
+
24
+
25
+
26
+
@@ -0,0 +1,327 @@
1
+
2
+ module Widgets
3
+ module ManageProfile
4
+ class Base < ErpApp::Widgets::Base
5
+ def contact_purpose_in_use?(contacts, purpose)
6
+ result = false
7
+ contacts.each do |e|
8
+ if e.contact.contact_purposes[0].internal_identifier == purpose
9
+ result = true
10
+ else
11
+ result = false
12
+ end
13
+ end
14
+ result
15
+ end
16
+
17
+ def index
18
+ @user = User.find(current_user)
19
+ @individual = @user.party.business_party
20
+ @email_addresses = @user.party.find_all_contacts_by_contact_mechanism(EmailAddress)
21
+ @phone_numbers = @user.party.find_all_contacts_by_contact_mechanism(PhoneNumber)
22
+ @postal_addresses = @user.party.find_all_contacts_by_contact_mechanism(PostalAddress)
23
+
24
+ contact_purposes = ContactPurpose.all
25
+ @purpose_hash={"Type" => "type"}
26
+ contact_purposes.each do |p|
27
+ @purpose_hash[p.description]=p.internal_identifier
28
+ end
29
+
30
+ countries= GeoCountry.all
31
+ @countries_id=[]
32
+ @countries_id << ["Country", "default"]
33
+ countries.each do |c|
34
+ @countries_id << [c.name, c.id]
35
+ end
36
+
37
+ states= GeoZone.all
38
+ @states_id=[]
39
+ @states_id << ["State", "default"]
40
+ states.each do |s|
41
+ @states_id << [s.zone_name, s.id]
42
+ end
43
+
44
+ render
45
+ end
46
+
47
+ def update_user_information
48
+ #### Get appropriate models ####
49
+
50
+ @user=User.find(current_user)
51
+ @individual= @user.party.business_party
52
+
53
+ #### Formating the date for sqlite. Will probably need diffrent formating for production ####
54
+ if params[:date][:day].to_i < 10
55
+ day="0#{params[:date][:day]}"
56
+ else
57
+ day= params[:date][:day]
58
+ end
59
+
60
+ if params[:date][:month].to_i < 10
61
+ month="0#{params[:date][:month]}"
62
+ else
63
+ month= params[:date][:month]
64
+ end
65
+
66
+ formated_date= "#{params[:date][:year]}-#{month}-#{day}"
67
+
68
+
69
+ #### Check if user made changes to info then update ####
70
+ if @individual.current_first_name != params[:first_name]
71
+ @user.first_name= params[:first_name]
72
+ @individual.current_first_name= params[:first_name]
73
+ end
74
+
75
+ if @individual.current_last_name != params[:last_name]
76
+ @user.last_name= params[:last_name]
77
+ @individual.current_last_name= params[:last_name]
78
+ end
79
+
80
+ if @individual.current_middle_name != params[:middle_name]
81
+ @individual.current_middle_name= params[:middle_name]
82
+ end
83
+
84
+ if @individual.gender != params[:gender]
85
+ @individual.gender= params[:gender]
86
+ end
87
+
88
+ if @individual.birth_date != formated_date
89
+ @individual.birth_date= formated_date
90
+ end
91
+
92
+ #### check validation then save and render message ####
93
+ if @user.changed? || @individual.changed?
94
+ if @user.valid? && @individual.valid?
95
+ @user.save
96
+ @individual.save
97
+ render :update => {:id => "#{@uuid}_result", :view => :success}
98
+ else
99
+ render :update => {:id => "#{@uuid}_result", :view => :error}
100
+ end
101
+ else
102
+ render :update => {:id => "#{@uuid}_result", :view => :success}
103
+ end
104
+
105
+ end
106
+
107
+
108
+ def update_password
109
+ if @user = User.authenticate(current_user.username, params[:old_password])
110
+ if !params[:new_password].blank? && !params[:password_confirmation].blank? && params[:new_password] == params[:password_confirmation]
111
+
112
+ @user.password_confirmation= params[:password_confirmation]
113
+
114
+ if @user.change_password!(params[:new_password])
115
+ render :update => {:id => "#{@uuid}_result", :view => :password_success}
116
+ else
117
+ #### validation failed ####
118
+ render :update => {:id => "#{@uuid}_result", :view => :error}
119
+ end
120
+
121
+ else
122
+ #### password and password confirmation cant be blank or unequal ####
123
+ render :update => {:id => "#{@uuid}_result", :view => :password_blank}
124
+ end
125
+ else
126
+ #### old password wrong ####
127
+ render :update => {:id => "#{@uuid}_result", :view => :password_invalid}
128
+ end
129
+
130
+ end
131
+
132
+ def update_contact_information
133
+ @user= User.find(current_user)
134
+ @email_addresses= @user.party.find_all_contacts_by_contact_mechanism(EmailAddress)
135
+ @phone_numbers= @user.party.find_all_contacts_by_contact_mechanism(PhoneNumber)
136
+ @postal_addresses= @user.party.find_all_contacts_by_contact_mechanism(PostalAddress)
137
+ something_changed=false
138
+ contact_type_in_use=false
139
+ default_type_error=false
140
+
141
+ #### Updates email records ####
142
+ @email_addresses.each_with_index do |e, i|
143
+ email_address_args={}
144
+ if e.email_address != params[:email_addresses][i.to_s]
145
+ email_address_args={:email_address => params[:email_addresses][i.to_s]}
146
+ @user.party.update_or_add_contact_with_purpose(EmailAddress,
147
+ ContactPurpose.find_by_internal_identifier(params[:email_address_contact_purposes][i.to_s]),
148
+ email_address_args)
149
+ something_changed=true
150
+ end
151
+ end
152
+
153
+ #### Updates Phone Numbers ####
154
+ @phone_numbers.each_with_index do |p, i|
155
+ phone_number_args={}
156
+ if p.phone_number != params[:phone_numbers][i.to_s]
157
+ phone_number_args={:phone_number => params[:phone_numbers][i.to_s]}
158
+ @user.party.update_or_add_contact_with_purpose(PhoneNumber,
159
+ ContactPurpose.find_by_internal_identifier(params[:phone_number_contact_purposes][i.to_s]),
160
+ phone_number_args)
161
+ something_changed=true
162
+ end
163
+ end
164
+
165
+ #### Updates Postal Addresses
166
+ @postal_addresses.each_with_index do |a, i|
167
+ postal_address_args= {}
168
+
169
+ if a.address_line_1 != params[:postal_addresses][i.to_s][:address_line_1]
170
+ postal_address_args[:address_line_1]= params[:postal_addresses][i.to_s][:address_line_1]
171
+ end
172
+
173
+ if a.address_line_2 != params[:postal_addresses][i.to_s][:address_line_2]
174
+ postal_address_args[:address_line_2]= params[:postal_addresses][i.to_s][:address_line_2]
175
+ end
176
+
177
+ if a.city != params[:postal_addresses][i.to_s][:city]
178
+ postal_address_args[:city]= params[:postal_addresses][i.to_s][:city]
179
+ end
180
+
181
+ if a.geo_zone_id != params[:postal_addresses][i.to_s][:state_id].to_i
182
+ postal_address_args[:geo_zone_id]= params[:postal_addresses][i.to_s][:state_id].to_i
183
+ postal_address_args[:state]= GeoZone.find(params[:postal_addresses][i.to_s][:state_id]).zone_name
184
+ end
185
+
186
+ if a.zip != params[:postal_addresses][i.to_s][:zip]
187
+ postal_address_args[:zip]= params[:postal_addresses][i.to_s][:zip]
188
+ end
189
+
190
+ if a.geo_country_id != params[:postal_addresses][i.to_s][:country_id].to_i
191
+ postal_address_args[:geo_country_id]= params[:postal_addresses][i.to_s][:country_id].to_i
192
+ postal_address_args[:country]= GeoCountry.find(params[:postal_addresses][i.to_s][:country_id]).name
193
+ end
194
+
195
+ if !postal_address_args.empty?
196
+ @user.party.update_or_add_contact_with_purpose(PostalAddress,
197
+ ContactPurpose.find_by_internal_identifier(params[:postal_address_contact_purposes][i.to_s]),
198
+ postal_address_args)
199
+ something_changed=true
200
+ end
201
+ end
202
+
203
+ #### Adds new email address ####
204
+ if params[:new_email_address] != nil && params[:new_email_address] != ""
205
+ if params[:new_email_address_contact_purpose] != "type"
206
+ if !contact_purpose_in_use?(@email_addresses, params[:new_email_address_contact_purpose])
207
+ @user.party.update_or_add_contact_with_purpose(EmailAddress,
208
+ ContactPurpose.find_by_internal_identifier(params[:new_email_address_contact_purpose]),
209
+ :email_address => params[:new_email_address])
210
+ something_changed=true
211
+ else
212
+ contact_type_in_use=true
213
+ #render :view => :contact_type_in_use
214
+ end
215
+ else
216
+ default_type_error=true
217
+ #render :view => :default_type_error
218
+ end
219
+ end
220
+
221
+ #### Adds new phone number ####
222
+ if params[:new_phone_number] != nil && params[:new_phone_number] != ""
223
+ if params[:new_phone_number_contact_purpose] != "type"
224
+ if !contact_purpose_in_use?(@phone_numbers, params[:new_phone_number_contact_purpose])
225
+ @user.party.update_or_add_contact_with_purpose(PhoneNumber,
226
+ ContactPurpose.find_by_internal_identifier(params[:new_phone_number_contact_purpose]),
227
+ :phone_number => params[:new_phone_number])
228
+ something_changed=true
229
+ else
230
+ contact_type_in_use=true
231
+ #render :view => :contact_type_in_use
232
+ end
233
+ else
234
+ default_type_error=true
235
+ #render :view => :default_type_error
236
+ end
237
+ end
238
+
239
+ #### Adds new postal address ####
240
+ new_postal_address_args= {}
241
+
242
+ if params[:new_postal_address][:address_line_1] != "Address Line 1"
243
+ new_postal_address_args[:address_line_1]= params[:new_postal_address][:address_line_1]
244
+ end
245
+
246
+ if params[:new_postal_address][:address_line_2] != "Address Line 2"
247
+ new_postal_address_args[:address_line_2]= params[:new_postal_address][:address_line_2]
248
+ end
249
+
250
+ if params[:new_postal_address][:city] != "City"
251
+ new_postal_address_args[:city]= params[:new_postal_address][:city]
252
+ end
253
+
254
+ if params[:new_postal_address][:state_id] != "default"
255
+ new_postal_address_args[:geo_zone_id]= params[:new_postal_address][:state_id].to_i
256
+ new_postal_address_args[:state]= GeoZone.find(params[:new_postal_address][:state_id]).zone_name
257
+ end
258
+
259
+ if params[:new_postal_address][:zip] != "Zipcode"
260
+ new_postal_address_args[:zip]= params[:new_postal_address][:zip]
261
+ end
262
+
263
+ if params[:new_postal_address][:country_id] != "default"
264
+ new_postal_address_args[:geo_country_id]= params[:new_postal_address][:country_id].to_i
265
+ new_postal_address_args[:country]= GeoCountry.find(params[:new_postal_address][:country_id]).name
266
+ end
267
+
268
+ if !new_postal_address_args.empty?
269
+ if params[:new_postal_address_contact_purpose] != "type"
270
+ if !contact_purpose_in_use?(@postal_addresses, params[:new_postal_address_contact_purpose])
271
+ @user.party.update_or_add_contact_with_purpose(PostalAddress,
272
+ ContactPurpose.find_by_internal_identifier(params[:new_postal_address_contact_purpose]),
273
+ new_postal_address_args)
274
+ something_changed=true
275
+ else
276
+ contact_type_in_use=true
277
+ #render :view => :contact_type_in_use
278
+ end
279
+ else
280
+ default_type_error=true
281
+ #render :view => :default_type_error
282
+ end
283
+ end
284
+
285
+ #### Renders proper error or success message ####
286
+ if default_type_error
287
+ render :update => {:id => "#{@uuid}_result", :view => :default_type_error}
288
+ elsif contact_type_in_use
289
+ render :update => {:id => "#{@uuid}_result", :view => :contact_type_in_use}
290
+ else
291
+ render :update => {:id => "#{@uuid}_result", :view => :success}
292
+ end
293
+
294
+ end
295
+
296
+ #should not be modified
297
+ #modify at your own risk
298
+ def locate
299
+ File.dirname(__FILE__)
300
+ end
301
+
302
+ class << self
303
+ def title
304
+ "Manage Profile"
305
+ end
306
+
307
+ def views_location
308
+ File.join(File.dirname(__FILE__),"/views")
309
+ end
310
+
311
+ def widget_name
312
+ File.basename(File.dirname(__FILE__))
313
+ end
314
+
315
+ def base_layout
316
+ begin
317
+ file = File.join(File.dirname(__FILE__),"/views/layouts/base.html.erb")
318
+ IO.read(file)
319
+ rescue
320
+ return nil
321
+ end
322
+ end
323
+ end
324
+ end
325
+ end
326
+ end
327
+