social_stream 0.3.5 → 0.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 %>
|