social_stream 0.3.5 → 0.3.6
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/app/controllers/authentications_controller.rb +17 -0
- data/app/controllers/omniauth_callbacks_controller.rb +17 -0
- data/app/models/actor.rb +11 -1
- data/app/models/authentication.rb +3 -0
- data/app/models/permission.rb +81 -18
- data/app/models/relation.rb +21 -3
- data/app/models/tie.rb +38 -20
- data/app/models/user.rb +29 -0
- data/app/views/frontpage/_sponsor.html.erb +6 -6
- data/app/views/groups/index.html.erb +1 -1
- data/app/views/layouts/_header.erb +1 -1
- data/app/views/layouts/application.html.erb +3 -3
- data/app/views/users/_profile.html.erb +5 -3
- data/app/views/users/edit.html.erb +105 -114
- data/app/views/users/index.html.erb +7 -6
- data/bin/social_stream +0 -0
- data/bin/social_stream_heroku +76 -0
- data/config/locales/en.yml +1 -0
- data/config/routes.rb +1 -2
- data/lib/generators/social_stream/install_generator.rb +8 -0
- data/lib/generators/social_stream/templates/initializer.rb +2 -2
- data/lib/generators/social_stream/templates/migration.rb +15 -0
- data/lib/generators/social_stream/templates/public/stylesheets/browse.css +47 -5
- data/lib/generators/social_stream/templates/public/stylesheets/edit_user.css +32 -19
- data/lib/generators/social_stream/templates/public/stylesheets/index.css +25 -13
- data/lib/generators/social_stream/templates/public/stylesheets/jqcloud.css +2 -2
- data/lib/generators/social_stream/templates/public/stylesheets/users.css +0 -22
- data/lib/generators/social_stream/templates/relations.yml +25 -20
- data/lib/social_stream.rb +1 -1
- data/lib/social_stream/models/subject.rb +9 -1
- data/lib/social_stream/rails.rb +2 -0
- data/lib/social_stream/version.rb +1 -1
- data/social_stream.gemspec +4 -1
- data/spec/dummy/config/initializers/devise.rb +71 -40
- data/spec/dummy/config/initializers/social_stream.rb +2 -2
- data/spec/dummy/config/relations.yml +25 -20
- data/spec/dummy/script/rails +0 -0
- data/spec/models/activity_spec.rb +3 -3
- data/spec/models/tie_spec.rb +1 -1
- metadata +78 -24
data/.gitignore
CHANGED
@@ -0,0 +1,17 @@
|
|
1
|
+
class AuthenticationsController < ApplicationController
|
2
|
+
def index
|
3
|
+
@authentications = current_user.authentications if current_user
|
4
|
+
end
|
5
|
+
|
6
|
+
def create
|
7
|
+
auth = request.env["omniauth.auth"]
|
8
|
+
current_user.authentications.find_or_create_by_provider_and_uid(auth['provider'], auth['uid'])
|
9
|
+
redirect_to authentications_url
|
10
|
+
end
|
11
|
+
|
12
|
+
def destroy
|
13
|
+
@authentication = current_user.authentications.find(params[:id])
|
14
|
+
@authentication.destroy
|
15
|
+
redirect_to authentications_url
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class OmniauthCallbacksController < Devise::OmniauthCallbacksController
|
2
|
+
def facebook
|
3
|
+
#print env['omniauth.auth']
|
4
|
+
@user = User.find_or_create_for_facebook_oauth(env['omniauth.auth'],current_user)
|
5
|
+
if @user.persisted?
|
6
|
+
sign_in_and_redirect @user, :event => :authentication
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def linked_in
|
11
|
+
#print env['omniauth.auth']
|
12
|
+
@user = User.find_or_create_for_linkedin_oauth(env['omniauth.auth'],current_user)
|
13
|
+
if @user.persisted?
|
14
|
+
sign_in_and_redirect @user, :event => :authentication
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/app/models/actor.rb
CHANGED
@@ -1,4 +1,14 @@
|
|
1
|
-
# An
|
1
|
+
# An {Actor} is a social entity. This includes individuals, but also groups, departments, organizations even nations or states.
|
2
|
+
#
|
3
|
+
# Actors are the nodes of a social network. Two actors are linked by a {Tie}. The
|
4
|
+
# type of a {tie} is a {Relation}. Each actor can define and customize their relations.
|
5
|
+
#
|
6
|
+
# = Actor subtypes
|
7
|
+
# An actor subtype is called a {SocialStream::Models::Subject Subject}.
|
8
|
+
# {SocialStream} provides two actor subtypes, {User} and {Group}, but the
|
9
|
+
# application developer can define as many actor subtypes as required.
|
10
|
+
# Actors subtypes are added to +config/initializers/social_stream.rb+
|
11
|
+
#
|
2
12
|
class Actor < ActiveRecord::Base
|
3
13
|
@subtypes_name = :subject
|
4
14
|
include SocialStream::Models::Supertype
|
data/app/models/permission.rb
CHANGED
@@ -1,19 +1,81 @@
|
|
1
|
-
# SocialStream provides a sophisticated and powerful system of permissions based on the relations
|
2
|
-
#
|
1
|
+
# SocialStream provides a sophisticated and powerful system of permissions based on the {Relation relations}
|
2
|
+
# of the social network.
|
3
3
|
#
|
4
|
-
# Permissions
|
5
|
-
# in content management systems, e.g. "create" "activity", "update" "tie", "read" "post"
|
4
|
+
# = Permissions and Relations
|
6
5
|
#
|
7
|
-
#
|
8
|
-
#
|
6
|
+
# Permissions are assigned to {Relation Relations}, and through relations, to {Tie Ties}.
|
7
|
+
# When a sender establishes a {Tie} with a receiver, she is granting to the receiver
|
8
|
+
# the permissions assigned to {Relation} of the {Tie} she has just established.
|
9
9
|
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
# to relation of the tie she has just established. For example, when Alice establishes a "friend" tie
|
13
|
-
# to Bob, she is granting him the permissions associated with "friend" relation.
|
10
|
+
# For example, when _Alice_ establishes a _friend_ tie to _Bob_, she is granting
|
11
|
+
# him the permissions associated with her _friend_ relation.
|
14
12
|
#
|
15
|
-
#
|
16
|
-
#
|
13
|
+
# = Permissions description
|
14
|
+
#
|
15
|
+
# Permissions are composed by *action*, *objective* and *function*. Action and objective
|
16
|
+
# are typical in content management systems, e.g. <tt>create activity</tt>,
|
17
|
+
# <tt>update tie</tt>, <tt>read post</tt>
|
18
|
+
#
|
19
|
+
# == Actions
|
20
|
+
#
|
21
|
+
# Current available actions are:
|
22
|
+
#
|
23
|
+
# +create+:: add a new instance of something (activity, tie, post, etc)
|
24
|
+
# +read+:: view something
|
25
|
+
# +update+:: modify something
|
26
|
+
# +destroy+:: delete something
|
27
|
+
# +follow+:: get activity updates from the receiver of the tie
|
28
|
+
# +represent+:: give the receiver rights to act as if he were us.
|
29
|
+
#
|
30
|
+
# == Objectives
|
31
|
+
#
|
32
|
+
# +activity+:: all the objects in a wall: posts, comments
|
33
|
+
#
|
34
|
+
# Other objectives currently not implemented could be +tie+, +post+, +comment+ or +message+
|
35
|
+
#
|
36
|
+
# == Functions
|
37
|
+
#
|
38
|
+
# Function is a novel feature. It supports applying the permission to other related ties.
|
39
|
+
# It is required because the set of ties changes along with the establish of contacts
|
40
|
+
# in the website, besides {SocialStream::Models::Subject subjects} can describe and
|
41
|
+
# customize their own relations and permissions.
|
42
|
+
#
|
43
|
+
# Available functions are:
|
44
|
+
#
|
45
|
+
# +tie+:: apply the permission to the established tie only.
|
46
|
+
#
|
47
|
+
# Example: if the _friend_ relation has the permission
|
48
|
+
# <tt>create activity tie</tt>, the _friend_ can create activities
|
49
|
+
# attached to this tie only.
|
50
|
+
#
|
51
|
+
# +weak_ties+:: apply the permission to all the related ties with a relation weaker
|
52
|
+
# or equal than this. When a subject establishes a strong ties,
|
53
|
+
# their related ties are established at the same time.
|
54
|
+
#
|
55
|
+
# Example: if the _member_ relation of a group has the permission
|
56
|
+
# <tt>create activity weak_ties</tt>, its members
|
57
|
+
# can also create activities attached to the weaker ties of
|
58
|
+
# _acquaintance_ and _public_.
|
59
|
+
# This means than a group _member_ can create activities at different
|
60
|
+
# levels of strength hierarchy, and therefore, with different levels of
|
61
|
+
# access.
|
62
|
+
#
|
63
|
+
# +star_ties+:: the permission applies to all the ties at the same level of strength,
|
64
|
+
# that is, ties with the same sender and the same relation but
|
65
|
+
# different receivers.
|
66
|
+
#
|
67
|
+
# Example: the _public_ relation has the permission
|
68
|
+
# <tt>read activity star_ties</tt>. If _Alice_ has a _public_ tie with
|
69
|
+
# _Bob_, she is granting him access to activities attached to other ties
|
70
|
+
# from _Alice_ to the rest of her _public_ contacts.
|
71
|
+
#
|
72
|
+
# +weak_star_ties+:: apply the permission to weak and star ties. This is the union of
|
73
|
+
# the former.
|
74
|
+
#
|
75
|
+
# Example: group's _admin relation has the permission
|
76
|
+
# <tt>destroy activity weak_star_ties</tt>
|
77
|
+
# This means that _admins_ can destroy activities from other
|
78
|
+
# _members_, _acquaintances_ and _public_.
|
17
79
|
#
|
18
80
|
class Permission < ActiveRecord::Base
|
19
81
|
has_many :relation_permissions, :dependent => :destroy
|
@@ -28,11 +90,11 @@ class Permission < ActiveRecord::Base
|
|
28
90
|
:table => {
|
29
91
|
'tie' =>
|
30
92
|
"ties_as.sender_id = ties.sender_id AND ties_as.receiver_id = ties.receiver_id AND ties_as.relation_id = ties.relation_id",
|
31
|
-
'
|
93
|
+
'weak_ties' =>
|
32
94
|
"ties_as.sender_id = ties.sender_id AND ties_as.receiver_id = ties.receiver_id AND relations.lft BETWEEN relations_as.lft AND relations_as.rgt",
|
33
|
-
'
|
95
|
+
'star_ties' =>
|
34
96
|
"ties_as.sender_id = ties.sender_id AND ties_as.relation_id = ties.relation_id",
|
35
|
-
'
|
97
|
+
'weak_star_ties' =>
|
36
98
|
"ties_as.sender_id = ties.sender_id AND relations.lft BETWEEN relations_as.lft AND relations_as.rgt"
|
37
99
|
},
|
38
100
|
:arel => {
|
@@ -42,18 +104,18 @@ class Permission < ActiveRecord::Base
|
|
42
104
|
as[:receiver_id].eq(t.receiver_id)).and(
|
43
105
|
as[:relation_id].eq(t.relation_id))
|
44
106
|
},
|
45
|
-
'
|
107
|
+
'weak_ties' => lambda { |as, t|
|
46
108
|
# The same sender and receiver, but a stronger or equal relation
|
47
109
|
as[:sender_id].eq(t.sender_id).and(
|
48
110
|
as[:receiver_id].eq(t.receiver_id)).and(
|
49
111
|
as[:relation_id].in(t.relation.stronger_or_equal.map(&:id)))
|
50
112
|
},
|
51
|
-
'
|
113
|
+
'star_ties' => lambda { |as, t|
|
52
114
|
# The same receiver and relation
|
53
115
|
as[:sender_id].eq(t.sender_id).and(
|
54
116
|
as[:relation_id].eq(t.relation_id))
|
55
117
|
},
|
56
|
-
'
|
118
|
+
'weak_star_ties' => lambda { |as, t|
|
57
119
|
# The same receiver with stronger or equal relations
|
58
120
|
as[:sender_id].eq(t.sender_id).and(
|
59
121
|
as[:relation_id].in(t.relation.stronger_or_equal.map(&:id)))
|
@@ -62,6 +124,7 @@ class Permission < ActiveRecord::Base
|
|
62
124
|
}
|
63
125
|
|
64
126
|
class << self
|
127
|
+
# Builds SQL conditions based on {ParameterConditions}
|
65
128
|
def parameter_conditions(tie = nil)
|
66
129
|
if tie.present?
|
67
130
|
ParameterConditions[:arel].inject([]) { |conditions, h|
|
data/app/models/relation.rb
CHANGED
@@ -1,13 +1,31 @@
|
|
1
|
-
# A
|
1
|
+
# A relation defines a type of {Tie tie}. Relations are affective (friendship, liking,
|
2
2
|
# respect), formal or biological (authority, kinship), transfer of material
|
3
3
|
# resources (transactions, lending and borrowing), messages or conversations,
|
4
4
|
# physical connection and affiliation to same organizations.
|
5
5
|
#
|
6
|
-
#
|
6
|
+
# = Default relations
|
7
|
+
#
|
8
|
+
# When a new {SocialStream::Models::Subject subject} is created, a initial set
|
9
|
+
# of relations is created for him. Afterwards, the {SocialStream::Models::Subject subject}
|
10
|
+
# can customize them and adapt them to his own preferences.
|
11
|
+
#
|
12
|
+
# Default relations are defined at config/relations.yml
|
13
|
+
#
|
14
|
+
# = Strength hierarchies
|
15
|
+
#
|
7
16
|
# Relations are arranged in strength hierarchies, denoting that some ties between
|
8
|
-
# two actors are stronger than others.
|
17
|
+
# two actors are stronger than others. For example, a "friend" relation is stronger than
|
18
|
+
# an "acquaintance" relation.
|
19
|
+
#
|
9
20
|
# When a strong tie is established, ties with weaker relations are establised as well
|
10
21
|
#
|
22
|
+
# = Permissions
|
23
|
+
#
|
24
|
+
# {SocialStream::Models::Subject Subjects} assign {Permission permissions} to relations.
|
25
|
+
# This way, when establishing {Tie ties}, they are granting permissions to their contacts.
|
26
|
+
#
|
27
|
+
# See the documentation of {Permission} for more details on permission definition.
|
28
|
+
#
|
11
29
|
class Relation < ActiveRecord::Base
|
12
30
|
acts_as_nested_set
|
13
31
|
|
data/app/models/tie.rb
CHANGED
@@ -1,28 +1,46 @@
|
|
1
|
-
# A link between two actors
|
1
|
+
# A tie is a link between two {Actor actors} with a {Relation relation}.
|
2
2
|
#
|
3
|
-
# The first Actor is the sender of the Tie. The second Actor
|
3
|
+
# The first {Actor actor} is the sender of the {Tie tie}. The second {Actor actor}
|
4
|
+
# is the receiver of the {Tie tie}.
|
4
5
|
#
|
5
|
-
#
|
6
|
-
# Activities are attached to ties.
|
7
|
-
# * The sender of the tie is the target of the Activity.
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
6
|
+
# = {Tie Ties} and {Activity activities}
|
7
|
+
# {Activity Activities} are attached to {Tie ties}.
|
8
|
+
# * The sender of the tie is the target of the {Activity}.
|
9
|
+
# The wall-profile of an {Actor} is composed by the resources assigned to
|
10
|
+
# the {Tie Ties} in which the {Actor} is the sender.
|
11
|
+
# * The receiver {Actor} of the {Tie} is the author of the {Activity}.
|
12
|
+
# It is the user that uploads a resource to the website or the social entity that
|
13
|
+
# originates the {Activity}.
|
14
|
+
# * The {Relation} sets up the mode in which the {Activity} is shared.
|
15
|
+
# It sets the rules, or {Permission Permissions}, by which {Actor} have access
|
16
|
+
# to the {Activity}.
|
13
17
|
#
|
14
|
-
#
|
15
|
-
# When an actor establishes a tie with other, she is granting a set of permissions to them
|
16
|
-
# (posting to her wall, reading her posts, etc..) The set of permissions granted are
|
17
|
-
# associated with the relation of the tie.
|
18
|
+
# = Tie strengh
|
18
19
|
#
|
19
|
-
#
|
20
|
+
# Because each {Tie} belongs to a {Relation} and {Relation Relations} have strength
|
21
|
+
# hierarchies, {Tie Ties} also have them. A {Tie} is stronger than other if its
|
22
|
+
# {Relation} is stronger than the other's. For example, if _Alice_ has a _friend_ {Tie}
|
23
|
+
# with _Bob_, and an _acquaintance_ {Tie} with _Charlie_, given that _friend_ {Relation}
|
24
|
+
# is stronger than _acquaintance_, the {Tie} with _Bob_ is stronger than the {Tie} with
|
25
|
+
# _Charlie_.
|
26
|
+
#
|
27
|
+
# = Authorization
|
28
|
+
# When an {Actor} establishes a {Tie} with other, she is granting a set of
|
29
|
+
# {Permission Permissions} to them (posting to her wall, reading her posts, etc..)
|
30
|
+
# The set of {Permission Permissions} granted are associated with the {Relation} of
|
31
|
+
# the {Tie}.
|
32
|
+
#
|
33
|
+
# Usually, stronger ties (and relations) have more permissions than weaker ones.
|
34
|
+
#
|
35
|
+
# = Scopes
|
20
36
|
# There are several scopes defined:
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
37
|
+
# sent_by(actor):: ties whose sender is actor
|
38
|
+
# received_by(actor):: ties whose receiver is actor
|
39
|
+
# sent_or_received_by(actor):: the union of the former
|
40
|
+
# related_by(relation):: ties with this relation. Accepts relation, relation_name,
|
41
|
+
# integer, array
|
42
|
+
# replied:: ties having at least another tie in the other way, a tie from a to b
|
43
|
+
# is replied if there is a tie from b to a
|
26
44
|
#
|
27
45
|
class Tie < ActiveRecord::Base
|
28
46
|
attr_accessor :message
|
data/app/models/user.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'devise/orm/active_record'
|
2
2
|
|
3
3
|
class User < ActiveRecord::Base
|
4
|
+
has_many :authentications
|
4
5
|
devise *SocialStream.devise_modules
|
5
6
|
|
6
7
|
# Setup accessible (or protected) attributes for your model
|
@@ -98,5 +99,33 @@ class User < ActiveRecord::Base
|
|
98
99
|
|
99
100
|
record
|
100
101
|
end
|
102
|
+
|
103
|
+
def find_or_create_for_facebook_oauth(access_token,signed_in_resource=nil)
|
104
|
+
data = access_token['extra']['user_hash']
|
105
|
+
print data
|
106
|
+
auth = Authentication.find_by_provider_and_uid(access_token["provider"],access_token["uid"])
|
107
|
+
user = User.find_by_email(data["email"])
|
108
|
+
|
109
|
+
if user == nil
|
110
|
+
user = User.create!(:name => data["name"], :email => data["email"], :password => Devise.friendly_token[0,20])
|
111
|
+
end
|
112
|
+
if auth == nil
|
113
|
+
auth = Authentication.create!(:user_id => user.id, :uid =>access_token["uid"], :provider => access_token["provider"])
|
114
|
+
end
|
115
|
+
user
|
116
|
+
end
|
117
|
+
|
118
|
+
def find_or_create_for_linkedin_oauth(access_token,signed_in_resource=nil)
|
119
|
+
auth = Authentication.find_by_uid_and_provider(access_token["uid"],access_token["provider"])
|
120
|
+
if auth==nil
|
121
|
+
user = User.create!(:name => access_token["user_info"]["name"], :email => 'demo@socialstream.com', :password => Devise.friendly_token[0,20])
|
122
|
+
auth = Authentication.create!(:user_id => user.id, :uid =>access_token["uid"], :provider => access_token["provider"])
|
123
|
+
user
|
124
|
+
else
|
125
|
+
user = User.find_by_id(auth.user_id)
|
126
|
+
user
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
101
130
|
end
|
102
131
|
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
<div id="sponsor">
|
2
2
|
<ul>
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
3
|
+
<li>
|
4
|
+
<%=link_to("DIT","http://www.dit.upm.es/")%> -
|
5
|
+
<%=link_to("UPM","http://www.upm.es/")%> &
|
6
|
+
<%=link_to("CISE","http://www.cise.espol.edu.ec/")%> -
|
7
|
+
<%=link_to("ESPOL","http://www.espol.edu.ec/")%>
|
8
|
+
</li>
|
9
9
|
</ul>
|
10
10
|
</div>
|
11
11
|
|
@@ -33,7 +33,7 @@
|
|
33
33
|
<div id="spaces" class="tabconference_browse">
|
34
34
|
<div class="space_center">
|
35
35
|
</div>
|
36
|
-
<div><input type="text" value="Search by name" id="search_field" class="search_input" /><%= image_tag("btn/search.png",:size=>"20x20",:id=>"search_button") %></div>
|
36
|
+
<div class="search_field_wrapper"><input type="text" value="Search by name" id="search_field" class="search_input" /><%= image_tag("btn/search.png",:size=>"20x20",:id=>"search_button") %></div>
|
37
37
|
<div class="space_center">
|
38
38
|
</div>
|
39
39
|
<div class="letters" class="content_size">
|
@@ -18,13 +18,13 @@
|
|
18
18
|
<%= stylesheet_link_tag "carousel", :media => "screen, projection" %>
|
19
19
|
<%= stylesheet_link_tag "smoothness/jquery-ui-1.8.4.custom", :media => "screen, projection" %>
|
20
20
|
<%= stylesheet_link_tag "ui.dropdownchecklist", :media => "screen, projection" %>
|
21
|
-
|
21
|
+
|
22
22
|
<%= stylesheet_link_tag "fcbkComplete.css", :media => "screen, projection" %>
|
23
23
|
|
24
|
-
|
24
|
+
|
25
25
|
<%= javascript_include_tag :defaults %>
|
26
26
|
|
27
|
-
<%= javascript_include_tag 'jquery', 'jquery
|
27
|
+
<%= javascript_include_tag 'jquery', 'jquery.livequery','jquery.boxy', 'menu','ui.dropdownchecklist','jquery.form', 'jquery.fcbkcomplete.min', 'jquery.ba-url' %>
|
28
28
|
|
29
29
|
|
30
30
|
|
@@ -1,5 +1,7 @@
|
|
1
1
|
|
2
|
-
|
2
|
+
<div class="space_center"></div>
|
3
|
+
<div class="space_center"></div>
|
4
|
+
<div class="space_center"></div>
|
3
5
|
<div class="future_conference" id="personal_info" >
|
4
6
|
<div class="future_header">
|
5
7
|
<div class="title_section">
|
@@ -132,7 +134,7 @@
|
|
132
134
|
<div class="info_left">
|
133
135
|
E-mail
|
134
136
|
</div>
|
135
|
-
<div class="
|
137
|
+
<div class="info_center">
|
136
138
|
<%=h @user.email %>
|
137
139
|
</div>
|
138
140
|
</div>
|
@@ -153,7 +155,7 @@
|
|
153
155
|
<div class="future_content">
|
154
156
|
<div class="info_post">
|
155
157
|
|
156
|
-
<div class="
|
158
|
+
<div class="info_center">
|
157
159
|
<%=h @user.profile.experience %>
|
158
160
|
</div>
|
159
161
|
</div>
|
@@ -6,7 +6,11 @@
|
|
6
6
|
<%= render :partial => 'middle_show' %>
|
7
7
|
<% end %>
|
8
8
|
|
9
|
-
|
9
|
+
<% content_for :head do %>
|
10
|
+
<%= stylesheet_link_tag "jquery-ui.css", :media => "screen, projection" %>
|
11
|
+
<%= stylesheet_link_tag "edit_user", :media => "screen, projection" %>
|
12
|
+
<%= javascript_include_tag 'jquery-ui.min','jquery.validate' %>
|
13
|
+
<% end %>
|
10
14
|
|
11
15
|
<%= form_for(@user, :remote => true) do |f| %>
|
12
16
|
<% if @user.errors.any? %>
|
@@ -21,148 +25,135 @@
|
|
21
25
|
</ul>
|
22
26
|
</div>
|
23
27
|
<% end %>
|
24
|
-
|
25
|
-
|
26
|
-
|
28
|
+
|
29
|
+
<% content_for :javascript do %>
|
30
|
+
$(function() {
|
27
31
|
$("#content").css('border-bottom', 'none');
|
28
|
-
|
29
|
-
$("#experience_info").addClass('section_normal');
|
30
|
-
$("#personal_info").addClass('section_normal');
|
31
|
-
|
32
|
-
|
33
|
-
$("#edit_user_1").validate();
|
34
|
-
|
32
|
+
$("#edit_user_1").validate();
|
35
33
|
});
|
36
|
-
|
34
|
+
<% end %>
|
35
|
+
|
37
36
|
<div class="field">
|
38
37
|
<% if !params[:section].present? or params[:section].eql?("about_me") %>
|
39
|
-
<div class="
|
38
|
+
<div class="section_edit">
|
40
39
|
Personal information
|
41
40
|
</div>
|
42
|
-
<
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
<br/>
|
49
|
-
|
50
|
-
<script type="text/javascript">
|
41
|
+
<div class="edit_field">
|
42
|
+
<div class="edit_label">
|
43
|
+
<%= f.label :name %>
|
44
|
+
</div>
|
45
|
+
<%= f.text_field :name, :class => "required edit_text" %>
|
46
|
+
</div>
|
51
47
|
|
48
|
+
<% content_for :javascript do %>
|
52
49
|
$(function () {
|
53
50
|
$( "#user_profile_attributes_birthday" ).datepicker({ yearRange: '1900:<%= Time.now.utc.to_date.year%>',
|
54
51
|
changeYear: true, maxDate: '+0d', defaultDate: '-30y'});
|
55
|
-
|
56
|
-
$("#personal_info").removeClass('section_normal');
|
57
52
|
$("#personal_info").addClass('section_highlight');
|
58
53
|
|
59
54
|
});
|
55
|
+
<% end %>
|
60
56
|
|
61
|
-
</script>
|
62
57
|
<%= f.fields_for :profile do |profile_form| %>
|
63
58
|
|
64
|
-
<div class="
|
65
|
-
|
66
|
-
|
59
|
+
<div class="edit_field">
|
60
|
+
<div class="edit_label">
|
61
|
+
<%= profile_form.label :organization %>
|
62
|
+
</div>
|
63
|
+
<%= profile_form.text_field :organization, :class => "edit_text" %>
|
67
64
|
</div>
|
68
|
-
<%= profile_form.text_field :organization %>
|
69
|
-
<br/>
|
70
|
-
<div class="editField">
|
71
|
-
<%= profile_form.label :birthday %>
|
72
|
-
<br/>
|
73
|
-
</div>
|
74
|
-
<%= profile_form.text_field( :birthday , :class => "date") %>
|
75
|
-
<br/>
|
76
|
-
|
77
|
-
|
78
65
|
|
79
|
-
<div class="
|
80
|
-
|
81
|
-
|
66
|
+
<div class="edit_field">
|
67
|
+
<div class="edit_label">
|
68
|
+
<%= profile_form.label :birthday %>
|
69
|
+
</div>
|
70
|
+
<%= profile_form.text_field( :birthday , :class => "date edit_text") %>
|
82
71
|
</div>
|
83
|
-
|
84
|
-
|
85
|
-
<div class="
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
<div class="
|
72
|
+
|
73
|
+
|
74
|
+
<div class="edit_field">
|
75
|
+
<div class="edit_label">
|
76
|
+
<%= profile_form.label :city %>
|
77
|
+
</div>
|
78
|
+
<%= profile_form.text_field :city, :class => "edit_text" %>
|
79
|
+
</div>
|
80
|
+
<div class="edit_field">
|
81
|
+
<div class="edit_label">
|
82
|
+
<%= profile_form.label :country %>
|
83
|
+
</div>
|
84
|
+
<%= profile_form.text_field :country, :class => "edit_text" %>
|
85
|
+
</div>
|
86
|
+
<div class="edit_field">
|
92
87
|
<%= profile_form.label "About me" %>
|
93
|
-
|
88
|
+
<%= profile_form.text_area :description, :rows =>6, :maxlength => 400, :class => "edit_text" %>
|
94
89
|
</div>
|
95
|
-
|
96
|
-
<br/>
|
97
|
-
<br/>
|
90
|
+
|
98
91
|
<% end %>
|
99
92
|
<% end %>
|
100
93
|
<% if !params[:section].present? or params[:section].eql?("contact_info") %>
|
101
|
-
<script type="text/javascript">
|
102
94
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
95
|
+
<% content_for :javascript do %>
|
96
|
+
|
97
|
+
$(function() {
|
98
|
+
$("#contact_info").addClass('section_highlight');
|
99
|
+
});
|
100
|
+
|
101
|
+
<% end %>
|
108
102
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
<% end %>
|
147
|
-
<% end %>
|
103
|
+
<div class="section_edit">
|
104
|
+
Contact information
|
105
|
+
</div>
|
106
|
+
<%= f.fields_for :profile do |profile_form| %>
|
107
|
+
<div class="edit_field">
|
108
|
+
<div class="edit_label">
|
109
|
+
<%= profile_form.label :phone %>
|
110
|
+
</div>
|
111
|
+
<%= profile_form.text_field :phone, :class => "phone edit_text" %>
|
112
|
+
</div>
|
113
|
+
<div class="edit_field">
|
114
|
+
<div class="edit_label">
|
115
|
+
<%= profile_form.label :mobile %>
|
116
|
+
</div>
|
117
|
+
<%= profile_form.text_field :mobile, :class => "phone edit_text" %>
|
118
|
+
</div>
|
119
|
+
<div class="edit_field">
|
120
|
+
<div class="edit_label">
|
121
|
+
<%= profile_form.label :fax %>
|
122
|
+
</div>
|
123
|
+
<%= profile_form.text_field :fax, :class => "phone edit_text" %>
|
124
|
+
</div>
|
125
|
+
<div class="edit_field">
|
126
|
+
<div class="edit_label">
|
127
|
+
<%= profile_form.label :address %>
|
128
|
+
</div>
|
129
|
+
<%= profile_form.text_field :address, :class => "edit_text" %>
|
130
|
+
</div>
|
131
|
+
<div class="edit_field">
|
132
|
+
<div class="edit_label">
|
133
|
+
<%= profile_form.label :website %>
|
134
|
+
</div>
|
135
|
+
<%= profile_form.text_field :website, :class => "url edit_text" %>
|
136
|
+
</div>
|
137
|
+
|
138
|
+
<% end %>
|
139
|
+
<% end %>
|
148
140
|
<% if !params[:section].present? or params[:section].eql?("my_experience") %>
|
149
|
-
<script type="text/javascript">
|
150
|
-
|
151
|
-
$(function() {
|
152
141
|
|
153
|
-
|
154
|
-
|
155
|
-
|
142
|
+
<% content_for :javascript do %>
|
143
|
+
|
144
|
+
$(function() {
|
145
|
+
$("#experience_info").addClass('section_highlight');
|
146
|
+
});
|
147
|
+
|
148
|
+
<% end %>
|
156
149
|
|
157
|
-
|
158
|
-
|
159
|
-
My experience
|
150
|
+
<div class="section_edit">
|
151
|
+
Experience
|
160
152
|
</div>
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
<br/>
|
153
|
+
<div class="edit_field">
|
154
|
+
<%= f.fields_for :profile do |profile_form| %>
|
155
|
+
<%= profile_form.text_area :experience, :rows =>6, :maxlength => 500, :class => "edit_text" %>
|
156
|
+
</div>
|
166
157
|
<% end %>
|
167
158
|
<% end %>
|
168
159
|
</div>
|
@@ -170,7 +161,7 @@
|
|
170
161
|
<%= hidden_field_tag("section", params[:section]) %>
|
171
162
|
<% end %>
|
172
163
|
<div class="actions">
|
173
|
-
<%= f.submit "Update" %> <button onclick="window.location.href='<%= user_url(@user) %>';">Cancel</button>
|
164
|
+
<%= f.submit "Update", :class => "button" %> <button onclick="window.location.href='<%= user_url(@user) %>';">Cancel</button>
|
174
165
|
</div>
|
175
166
|
<br/>
|
176
167
|
<% end %>
|