knitkit 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/GPL-3-LICENSE +674 -0
- data/README.md +6 -0
- data/Rakefile +30 -0
- data/app/assets/javascripts/knitkit/application.js +9 -0
- data/app/assets/stylesheets/knitkit/application.css +7 -0
- data/app/controllers/knitkit/articles_controller.rb +7 -0
- data/app/controllers/knitkit/base_controller.rb +45 -0
- data/app/controllers/knitkit/blogs_controller.rb +27 -0
- data/app/controllers/knitkit/comments_controller.rb +18 -0
- data/app/controllers/knitkit/erp_app/desktop/app_controller.rb +135 -0
- data/app/controllers/knitkit/erp_app/desktop/articles_controller.rb +144 -0
- data/app/controllers/knitkit/erp_app/desktop/comments_controller.rb +43 -0
- data/app/controllers/knitkit/erp_app/desktop/content_controller.rb +27 -0
- data/app/controllers/knitkit/erp_app/desktop/file_assets_controller.rb +145 -0
- data/app/controllers/knitkit/erp_app/desktop/image_assets_controller.rb +28 -0
- data/app/controllers/knitkit/erp_app/desktop/inquiries_controller.rb +68 -0
- data/app/controllers/knitkit/erp_app/desktop/position_controller.rb +20 -0
- data/app/controllers/knitkit/erp_app/desktop/theme_controller.rb +272 -0
- data/app/controllers/knitkit/erp_app/desktop/versions_controller.rb +135 -0
- data/app/controllers/knitkit/erp_app/desktop/website_controller.rb +177 -0
- data/app/controllers/knitkit/erp_app/desktop/website_nav_controller.rb +143 -0
- data/app/controllers/knitkit/erp_app/desktop/website_section_controller.rb +116 -0
- data/app/controllers/knitkit/unauthorized_controller.rb +8 -0
- data/app/controllers/knitkit/website_sections_controller.rb +17 -0
- data/app/helpers/application_helper.rb +132 -0
- data/app/models/article.rb +14 -0
- data/app/models/blog.rb +21 -0
- data/app/models/comment.rb +24 -0
- data/app/models/content.rb +158 -0
- data/app/models/extensions/user.rb +5 -0
- data/app/models/published_element.rb +9 -0
- data/app/models/published_website.rb +118 -0
- data/app/models/theme.rb +239 -0
- data/app/models/website.rb +457 -0
- data/app/models/website_host.rb +3 -0
- data/app/models/website_inquiry.rb +11 -0
- data/app/models/website_inquiry_mailer.rb +12 -0
- data/app/models/website_nav.rb +17 -0
- data/app/models/website_nav_item.rb +21 -0
- data/app/models/website_section.rb +152 -0
- data/app/models/website_section_content.rb +4 -0
- data/app/views/knitkit/articles/index.html.erb +3 -0
- data/app/views/knitkit/articles/show.html.erb +4 -0
- data/app/views/knitkit/blogs/_add_comment.html.erb +28 -0
- data/app/views/knitkit/blogs/_comment.html.erb +8 -0
- data/app/views/knitkit/blogs/index.html.erb +51 -0
- data/app/views/knitkit/blogs/index.rss.builder +23 -0
- data/app/views/knitkit/blogs/show.html.erb +22 -0
- data/app/views/knitkit/unauthorized/index.html.erb +4 -0
- data/app/views/knitkit/website_sections/index.html.erb +6 -0
- data/app/views/layouts/knitkit/base.html.erb +59 -0
- data/app/views/menus/knitkit/_default_menu.html.erb +23 -0
- data/app/views/menus/knitkit/_default_section_menu.html.erb +27 -0
- data/app/views/menus/knitkit/_default_sub_menu.html.erb +45 -0
- data/app/views/menus/knitkit/_default_sub_section_menu.html.erb +49 -0
- data/app/views/shared/knitkit/_bread_crumb.html.erb +7 -0
- data/app/views/shared/knitkit/_footer.html.erb +3 -0
- data/app/views/website_inquiry_mailer/inquiry.erb +3 -0
- data/app/widgets/contact_us/base.rb +86 -0
- data/app/widgets/contact_us/javascript/contact_us.js +13 -0
- data/app/widgets/contact_us/views/_contact_form.html.erb +36 -0
- data/app/widgets/contact_us/views/error.html.erb +10 -0
- data/app/widgets/contact_us/views/index.html.erb +1 -0
- data/app/widgets/contact_us/views/layouts/base.html.erb +7 -0
- data/app/widgets/contact_us/views/success.html.erb +4 -0
- data/app/widgets/google_map/base.rb +48 -0
- data/app/widgets/google_map/javascript/google_map.js +174 -0
- data/app/widgets/google_map/views/index.html.erb +41 -0
- data/app/widgets/login/base.rb +61 -0
- data/app/widgets/login/javascript/login.js +162 -0
- data/app/widgets/login/views/index.html.erb +37 -0
- data/app/widgets/login/views/layouts/base.html.erb +14 -0
- data/app/widgets/login/views/login_header.html.erb +9 -0
- data/app/widgets/login/views/reset_password.html.erb +26 -0
- data/app/widgets/manage_profile/base.rb +327 -0
- data/app/widgets/manage_profile/javascript/manage_profile.js +11 -0
- data/app/widgets/manage_profile/views/_contact_information_form.html.erb +180 -0
- data/app/widgets/manage_profile/views/_password_form.html.erb +20 -0
- data/app/widgets/manage_profile/views/_user_information_form.html.erb +30 -0
- data/app/widgets/manage_profile/views/contact_type_in_use.html.erb +4 -0
- data/app/widgets/manage_profile/views/default_type_error.html.erb +5 -0
- data/app/widgets/manage_profile/views/error.html.erb +3 -0
- data/app/widgets/manage_profile/views/index.html.erb +46 -0
- data/app/widgets/manage_profile/views/layouts/base.html.erb +1 -0
- data/app/widgets/manage_profile/views/password_blank.html.erb +4 -0
- data/app/widgets/manage_profile/views/password_invalid.html.erb +4 -0
- data/app/widgets/manage_profile/views/password_success.html.erb +3 -0
- data/app/widgets/manage_profile/views/success.html.erb +3 -0
- data/app/widgets/reset_password/base.rb +42 -0
- data/app/widgets/reset_password/javascript/reset_password.js +13 -0
- data/app/widgets/reset_password/views/index.html.erb +31 -0
- data/app/widgets/reset_password/views/layouts/base.html.erb +1 -0
- data/app/widgets/search/base.rb +80 -0
- data/app/widgets/search/javascript/search.js +31 -0
- data/app/widgets/search/views/_search.html.erb +39 -0
- data/app/widgets/search/views/index.html.erb +3 -0
- data/app/widgets/search/views/layouts/base.html.erb +24 -0
- data/app/widgets/search/views/show.html.erb +48 -0
- data/app/widgets/signup/base.rb +72 -0
- data/app/widgets/signup/javascript/signup.js +13 -0
- data/app/widgets/signup/views/_signup_form.html.erb +36 -0
- data/app/widgets/signup/views/error.html.erb +11 -0
- data/app/widgets/signup/views/index.html.erb +1 -0
- data/app/widgets/signup/views/layouts/base.html.erb +7 -0
- data/app/widgets/signup/views/success.html.erb +4 -0
- data/config/environment.rb +0 -0
- data/config/routes.rb +41 -0
- data/db/data_migrations/20110509223702_add_publisher_role.rb +11 -0
- data/db/data_migrations/20110816153456_add_knitkit_application.rb +31 -0
- data/db/data_migrations/upgrade/20111011203718_create_paths_for_sections.rb +13 -0
- data/db/data_migrations/upgrade/20111216192114_add_secured_models_to_menu_items.rb +18 -0
- data/db/data_migrations/upgrade/20111216202819_set_contents_iid_to_permalink_where_null.rb +12 -0
- data/db/migrate/20110211002317_setup_knitkit.rb +259 -0
- data/db/migrate/upgrade/20111014190442_update_contents.rb +25 -0
- data/db/migrate/upgrade/20111014201502_add_published_by_to_published_elements.rb +22 -0
- data/db/migrate/upgrade/20111017133851_add_iid_to_section.rb +21 -0
- data/db/migrate/upgrade/20111027145006_add_in_menu_to_section.rb +19 -0
- data/lib/knitkit.rb +12 -0
- data/lib/knitkit/engine.rb +26 -0
- data/lib/knitkit/extensions.rb +18 -0
- data/lib/knitkit/extensions/action_controller/theme_support/acts_as_themed_controller.rb +88 -0
- data/lib/knitkit/extensions/active_record/acts_as_commentable.rb +28 -0
- data/lib/knitkit/extensions/active_record/acts_as_publishable.rb +38 -0
- data/lib/knitkit/extensions/active_record/theme_support/has_many_themes.rb +34 -0
- data/lib/knitkit/extensions/compass/widgets/base.rb +53 -0
- data/lib/knitkit/extensions/core/array.rb +5 -0
- data/lib/knitkit/extensions/railties/action_view.rb +187 -0
- data/lib/knitkit/extensions/railties/theme_support/asset_tag_helper.rb +198 -0
- data/lib/knitkit/extensions/railties/theme_support/theme_file_resolver.rb +44 -0
- data/lib/knitkit/routing_filter/section_router.rb +55 -0
- data/lib/knitkit/syntax_validator.rb +32 -0
- data/lib/knitkit/version.rb +3 -0
- data/lib/tasks/knitkit_tasks.rake +4 -0
- data/public/images/knitkit/bullet.png +0 -0
- data/public/images/knitkit/content.png +0 -0
- data/public/images/knitkit/footer.png +0 -0
- data/public/images/knitkit/graphic.png +0 -0
- data/public/images/knitkit/greyFadeDown.png +0 -0
- data/public/images/knitkit/link.png +0 -0
- data/public/images/knitkit/logo.png +0 -0
- data/public/images/knitkit/menu.png +0 -0
- data/public/images/knitkit/menu_select.png +0 -0
- data/public/images/knitkit/search.png +0 -0
- data/public/javascripts/datepicker.js +440 -0
- data/public/javascripts/erp_app/desktop/applications/knitkit/articles_grid_panel.js +473 -0
- data/public/javascripts/erp_app/desktop/applications/knitkit/center_region.js +576 -0
- data/public/javascripts/erp_app/desktop/applications/knitkit/comments_grid_panel.js +217 -0
- data/public/javascripts/erp_app/desktop/applications/knitkit/east_region.js +26 -0
- data/public/javascripts/erp_app/desktop/applications/knitkit/file_assets_panel.js +109 -0
- data/public/javascripts/erp_app/desktop/applications/knitkit/image_assets_data_view.js +30 -0
- data/public/javascripts/erp_app/desktop/applications/knitkit/image_assets_panel.js +160 -0
- data/public/javascripts/erp_app/desktop/applications/knitkit/inquiries_grid_panel.js +46 -0
- data/public/javascripts/erp_app/desktop/applications/knitkit/module.js +46 -0
- data/public/javascripts/erp_app/desktop/applications/knitkit/publish_window.js +92 -0
- data/public/javascripts/erp_app/desktop/applications/knitkit/published_grid_panel.js +220 -0
- data/public/javascripts/erp_app/desktop/applications/knitkit/section_articles_grid_panel.js +613 -0
- data/public/javascripts/erp_app/desktop/applications/knitkit/themes_tree_panel.js +573 -0
- data/public/javascripts/erp_app/desktop/applications/knitkit/versions_grid_panel.js +664 -0
- data/public/javascripts/erp_app/desktop/applications/knitkit/west_region.js +2161 -0
- data/public/javascripts/erp_app/desktop/applications/knitkit/widgets_panel.js +52 -0
- data/public/stylesheets/datepicker.css +121 -0
- data/public/stylesheets/erp_app/desktop/applications/knitkit/knitkit.css +114 -0
- data/public/stylesheets/extjs/resources/css/knitkit_extjs_4.css +219 -0
- data/public/stylesheets/knitkit/style.css +394 -0
- 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"> </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> | <a href="<%=@signup_url%>">Sign Up</a>
|
5
|
+
</span>
|
6
|
+
<% else %>
|
7
|
+
<span>Welcome <%= @user.party.description %> | <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"> </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
|
+
|