muck-profiles 0.1.16 → 0.1.17

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. data/README.rdoc +104 -2
  2. data/Rakefile +2 -0
  3. data/VERSION +1 -1
  4. data/app/controllers/muck/profiles_controller.rb +1 -1
  5. data/app/helpers/muck_profiles_helper.rb +14 -0
  6. data/app/views/profiles/_form.html.erb +2 -1
  7. data/app/views/profiles/_location_suggestion.html.erb +12 -0
  8. data/db/migrate/20091124203137_add_location_to_profiles.rb +15 -0
  9. data/db/migrate/20091124205819_add_fields_to_profiles.rb +21 -0
  10. data/lib/active_record/acts/muck_profile.rb +53 -1
  11. data/lib/active_record/has/muck_profile.rb +0 -2
  12. data/locales/en.yml +16 -1
  13. data/muck-profiles.gemspec +144 -3
  14. data/test/rails_root/.gitignore +2 -1
  15. data/test/rails_root/config/database.yml +12 -12
  16. data/test/rails_root/config/environment.rb +1 -0
  17. data/test/rails_root/config/{global_config.yml → global_config.example.yml} +1 -1
  18. data/test/rails_root/config/initializers/geokit_config.rb +61 -0
  19. data/test/rails_root/db/migrate/20090402234137_create_languages.rb +18 -0
  20. data/test/rails_root/db/migrate/20090426041056_create_countries.rb +15 -0
  21. data/test/rails_root/db/migrate/20090426041103_create_states.rb +18 -0
  22. data/test/rails_root/db/migrate/20091124203137_add_location_to_profiles.rb +15 -0
  23. data/test/rails_root/db/migrate/20091124205819_add_fields_to_profiles.rb +21 -0
  24. data/test/rails_root/lib/tasks/muck.rake +7 -0
  25. data/test/rails_root/public/images/arrow_down.gif +0 -0
  26. data/test/rails_root/public/images/arrow_up.gif +0 -0
  27. data/test/rails_root/public/images/fancybox/fancy_closebox.png +0 -0
  28. data/test/rails_root/public/images/fancybox/fancy_left.png +0 -0
  29. data/test/rails_root/public/images/fancybox/fancy_progress.png +0 -0
  30. data/test/rails_root/public/images/fancybox/fancy_right.png +0 -0
  31. data/test/rails_root/public/images/fancybox/fancy_shadow_e.png +0 -0
  32. data/test/rails_root/public/images/fancybox/fancy_shadow_n.png +0 -0
  33. data/test/rails_root/public/images/fancybox/fancy_shadow_ne.png +0 -0
  34. data/test/rails_root/public/images/fancybox/fancy_shadow_nw.png +0 -0
  35. data/test/rails_root/public/images/fancybox/fancy_shadow_s.png +0 -0
  36. data/test/rails_root/public/images/fancybox/fancy_shadow_se.png +0 -0
  37. data/test/rails_root/public/images/fancybox/fancy_shadow_sw.png +0 -0
  38. data/test/rails_root/public/images/fancybox/fancy_shadow_w.png +0 -0
  39. data/test/rails_root/public/images/fancybox/fancy_title_left.png +0 -0
  40. data/test/rails_root/public/images/fancybox/fancy_title_main.png +0 -0
  41. data/test/rails_root/public/images/fancybox/fancy_title_right.png +0 -0
  42. data/test/rails_root/public/images/icons/blue_guy.png +0 -0
  43. data/test/rails_root/public/images/icons/button_background.png +0 -0
  44. data/test/rails_root/public/images/icons/cancel.png +0 -0
  45. data/test/rails_root/public/images/icons/close.png +0 -0
  46. data/test/rails_root/public/images/icons/comment.png +0 -0
  47. data/test/rails_root/public/images/icons/exclaim.png +0 -0
  48. data/test/rails_root/public/images/icons/external.png +0 -0
  49. data/test/rails_root/public/images/icons/feed.png +0 -0
  50. data/test/rails_root/public/images/icons/grey_guy.png +0 -0
  51. data/test/rails_root/public/images/icons/hide.png +0 -0
  52. data/test/rails_root/public/images/icons/information.png +0 -0
  53. data/test/rails_root/public/images/icons/minus.png +0 -0
  54. data/test/rails_root/public/images/icons/pending.png +0 -0
  55. data/test/rails_root/public/images/icons/question.png +0 -0
  56. data/test/rails_root/public/images/icons/search_box.png +0 -0
  57. data/test/rails_root/public/images/icons/star.png +0 -0
  58. data/test/rails_root/public/images/icons/stop.png +0 -0
  59. data/test/rails_root/public/images/icons/thumb_down.png +0 -0
  60. data/test/rails_root/public/images/icons/thumb_up.png +0 -0
  61. data/test/rails_root/public/images/nothing.png +0 -0
  62. data/test/rails_root/public/javascripts/jquery/colorpicker.js +450 -0
  63. data/test/rails_root/public/javascripts/jquery/jquery.autocomplete.js.readme +6 -0
  64. data/test/rails_root/public/javascripts/jquery/jquery.autocomplete.min.js +15 -0
  65. data/test/rails_root/public/javascripts/jquery/jquery.autocomplete.pack.js +767 -0
  66. data/test/rails_root/public/javascripts/jquery/jquery.easing.js +1 -0
  67. data/test/rails_root/public/javascripts/jquery/jquery.fancybox.js +9 -0
  68. data/test/rails_root/public/javascripts/jquery/jquery.metadata.min.js +13 -0
  69. data/test/rails_root/public/javascripts/jquery/jquery.queryString.js +33 -0
  70. data/test/rails_root/public/javascripts/jquery/jquery.swapimage.js +66 -0
  71. data/test/rails_root/public/javascripts/jquery/jquery.swapimage.min.js +11 -0
  72. data/test/rails_root/public/javascripts/jquery/jrails.js +1 -0
  73. data/test/rails_root/public/javascripts/muck.js +11 -6
  74. data/test/rails_root/public/javascripts/muck_time/en.js +53 -0
  75. data/test/rails_root/public/javascripts/tree.js +107 -0
  76. data/test/rails_root/public/stylesheets/jquery/jquery.autocomplete.css +15 -0
  77. data/test/rails_root/public/stylesheets/jquery/jquery.fancybox.css +44 -0
  78. data/test/rails_root/public/stylesheets/styles.css +10 -3
  79. data/test/rails_root/vendor/plugins/geokit-rails/CHANGELOG.rdoc +46 -0
  80. data/test/rails_root/vendor/plugins/geokit-rails/MIT-LICENSE +20 -0
  81. data/test/rails_root/vendor/plugins/geokit-rails/README.markdown +561 -0
  82. data/test/rails_root/vendor/plugins/geokit-rails/Rakefile +18 -0
  83. data/test/rails_root/vendor/plugins/geokit-rails/about.yml +9 -0
  84. data/test/rails_root/vendor/plugins/geokit-rails/assets/api_keys_template +61 -0
  85. data/test/rails_root/vendor/plugins/geokit-rails/init.rb +1 -0
  86. data/test/rails_root/vendor/plugins/geokit-rails/install.rb +14 -0
  87. data/test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails.rb +26 -0
  88. data/test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails/acts_as_mappable.rb +456 -0
  89. data/test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails/adapters/abstract.rb +31 -0
  90. data/test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails/adapters/mysql.rb +22 -0
  91. data/test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails/adapters/postgresql.rb +22 -0
  92. data/test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails/adapters/sqlserver.rb +43 -0
  93. data/test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails/defaults.rb +22 -0
  94. data/test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails/geocoder_control.rb +16 -0
  95. data/test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails/ip_geocode_lookup.rb +46 -0
  96. data/test/rails_root/vendor/plugins/geokit-rails/test/acts_as_mappable_test.rb +474 -0
  97. data/test/rails_root/vendor/plugins/geokit-rails/test/boot.rb +25 -0
  98. data/test/rails_root/vendor/plugins/geokit-rails/test/database.yml +20 -0
  99. data/test/rails_root/vendor/plugins/geokit-rails/test/fixtures/companies.yml +7 -0
  100. data/test/rails_root/vendor/plugins/geokit-rails/test/fixtures/custom_locations.yml +54 -0
  101. data/test/rails_root/vendor/plugins/geokit-rails/test/fixtures/locations.yml +54 -0
  102. data/test/rails_root/vendor/plugins/geokit-rails/test/fixtures/mock_addresses.yml +17 -0
  103. data/test/rails_root/vendor/plugins/geokit-rails/test/fixtures/mock_families.yml +2 -0
  104. data/test/rails_root/vendor/plugins/geokit-rails/test/fixtures/mock_houses.yml +9 -0
  105. data/test/rails_root/vendor/plugins/geokit-rails/test/fixtures/mock_organizations.yml +5 -0
  106. data/test/rails_root/vendor/plugins/geokit-rails/test/fixtures/mock_people.yml +5 -0
  107. data/test/rails_root/vendor/plugins/geokit-rails/test/fixtures/stores.yml +0 -0
  108. data/test/rails_root/vendor/plugins/geokit-rails/test/ip_geocode_lookup_test.rb +77 -0
  109. data/test/rails_root/vendor/plugins/geokit-rails/test/models/company.rb +3 -0
  110. data/test/rails_root/vendor/plugins/geokit-rails/test/models/custom_location.rb +12 -0
  111. data/test/rails_root/vendor/plugins/geokit-rails/test/models/location.rb +4 -0
  112. data/test/rails_root/vendor/plugins/geokit-rails/test/models/mock_address.rb +4 -0
  113. data/test/rails_root/vendor/plugins/geokit-rails/test/models/mock_family.rb +3 -0
  114. data/test/rails_root/vendor/plugins/geokit-rails/test/models/mock_house.rb +3 -0
  115. data/test/rails_root/vendor/plugins/geokit-rails/test/models/mock_organization.rb +4 -0
  116. data/test/rails_root/vendor/plugins/geokit-rails/test/models/mock_person.rb +4 -0
  117. data/test/rails_root/vendor/plugins/geokit-rails/test/models/store.rb +3 -0
  118. data/test/rails_root/vendor/plugins/geokit-rails/test/schema.rb +60 -0
  119. data/test/rails_root/vendor/plugins/geokit-rails/test/tasks.rake +31 -0
  120. data/test/rails_root/vendor/plugins/geokit-rails/test/test_helper.rb +23 -0
  121. metadata +158 -3
data/README.rdoc CHANGED
@@ -6,16 +6,36 @@ Add profiles to muck users. This implements a photo for users as well as a prop
6
6
  Muck profile relies upon the muck-engine and muck-users gems as well as paperclip. Add the following lines to your environment.rb file:
7
7
 
8
8
  config.gem "authlogic"
9
- config.gem "binarylogic-searchlogic", :lib => 'searchlogic', :source => 'http://gems.github.com', :version => '~> 2.0.0'
9
+ config.gem "searchlogic"
10
10
  config.gem "bcrypt-ruby", :lib => "bcrypt"
11
- config.gem 'thoughtbot-paperclip', :lib => 'paperclip', :source => "http://gems.github.com"
11
+ config.gem 'paperclip'
12
12
  config.gem 'muck-engine', :lib => 'muck_engine'
13
13
  config.gem 'muck-users', :lib => 'muck_users'
14
14
  config.gem 'muck-profiles', :lib => 'muck_profiles'
15
+ config.gem 'geokit'
15
16
 
16
17
  Next run rake gems:install
17
18
 
19
+ MuckProfiles uses geokit to determine a users location and to make it possible to find users that are within a given proximity.
18
20
 
21
+ Install the GeoKit Rails Plugin:
22
+
23
+ script/plugin install git://github.com/andre/geokit-rails.git
24
+
25
+ Be sure to get api keys from Google an Yahoo. Instructions for doing so can be found in config/initializers/geokit_config.rb after installing the plugin. We recommend moving the keys into
26
+ global_config.yml:
27
+
28
+ Change the lines in config/initializers/geokit_config.rb to:
29
+ Geokit::Geocoders::yahoo = GlobalConfig.yahoo_geo_key
30
+ Geokit::Geocoders::google = GlobalConfig.google_geo_key
31
+
32
+ Put this in global_config.yml:
33
+ google_geo_key: 'some key' # API key for Google. Get it here: http://www.google.com/apis/maps/signup.html
34
+ yahoo_geo_key: 'some key' # API key for Yahoo. Get it here: http://developer.yahoo.com/faq/index.html#appid
35
+
36
+ # Profile configuration
37
+ enable_guess_location: true # If true the profile system will attempt to determine the user's location via IP and populated with the location, lat and lon fields.
38
+
19
39
  == Usage
20
40
  Create a model called profile.rb and add 'acts_as_muck_profile'. This mixes in the muck profile functionality but also permits further customization of the profile in your application.
21
41
 
@@ -38,4 +58,86 @@ Your user model will now appear to have a 'photo' which is delegated to the prof
38
58
 
39
59
  @user.photo # returns a photo object from paperclip
40
60
 
61
+ === Profile Attributes
62
+ The profile comes preconfigured with a basic set of common profile options. It is easy to add new fields. Simply add the fields to the profile using a migration:
63
+
64
+ class AddMoreFieldsToProfiles < ActiveRecord::Migration
65
+ def self.up
66
+ add_column :profiles, :occupation, :string
67
+ add_column :profiles, :gender, :string
68
+ add_column :profiles, :birthday, :datetime
69
+ add_column :profiles, :company, :string
70
+ add_column :profiles, :zip, :string
71
+ add_column :profiles, :mobile_phone, :string
72
+ add_column :profiles, :home_phone, :string
73
+ add_column :profiles, :alumni_of, :string
74
+ add_column :profiles, :relationship_status, :string
75
+ end
76
+
77
+ def self.down
78
+ add_column :profiles, :occupation
79
+ add_column :profiles, :gender
80
+ add_column :profiles, :birthday
81
+ add_column :profiles, :company
82
+ add_column :profiles, :zip
83
+ add_column :profiles, :mobile_phone
84
+ add_column :profiles, :home_phone
85
+ add_column :profiles, :alumni_of
86
+ add_column :profiles, :relationship_status
87
+ end
88
+ end
89
+
90
+
91
+ Next create a new views/profiles/edit.html.erb file. The built in file is very basic and makes it easy to add additional fields. The 'profile_form' method will
92
+ create form elements for the built in fields. Add extra fields after that.
93
+
94
+ <div id="edit_content" class="span-24 colborder column">
95
+ <%= output_errors(t('muck.profiles.problem_editing_profile'), {:class => 'help-box'}, @profile) %>
96
+ <% profile_form(@profile) do |f| -%>
97
+ <%# can add form fields as desired here -%>
98
+ <% end -%>
99
+ </div>
100
+
101
+ Last create view/profiles/show.html.erb. There is a built in show page however it is assumed that most applications will implement a custom show page to hightlight
102
+ the focus of the system.
103
+
104
+ <div class="span-24 colborder column">
105
+ <%= icon @user, :thumb %>
106
+ <p><%= @user.full_name %></p>
107
+ <p><%= link_to t('muck.profiles.edit_profile'), edit_user_profile_path(@user) if @profile.can_edit?(current_user) %></p>
108
+ <!-- Add more fields and customize the profile. -->
109
+ </div>
110
+
111
+ It's important to sanitize user input. If you add fields to the profile then be sure to prevent cross site scripting. Override the 'sanitize_attributes' method
112
+ in your model and add your new fields. Note that you can also override 'sanitize_level' to determine how sanitization occurs.
113
+
114
+ # Sanitize content before saving. This prevents XSS attacks and other malicious html.
115
+ def sanitize_attributes
116
+ if self.sanitize_level
117
+ self.about = Sanitize.clean(self.about, self.sanitize_level)
118
+ self.location = Sanitize.clean(self.location, self.sanitize_level)
119
+ # add your fields
120
+ end
121
+ end
122
+
123
+ # Override this method to control sanitization levels.
124
+ # Currently a user who is an admin will not have their content sanitized. A user
125
+ # in any role 'editor', 'manager', or 'contributor' will be given the 'RELAXED' settings
126
+ # while all other users will get 'BASIC'.
127
+ #
128
+ # Options are from sanitze:
129
+ # nil - no sanitize
130
+ # Sanitize::Config::RELAXED
131
+ # Sanitize::Config::BASIC
132
+ # Sanitize::Config::RESTRICTED
133
+ # for more details see: http://rgrove.github.com/sanitize/
134
+ def sanitize_level
135
+ return Sanitize::Config::BASIC if self.user.nil?
136
+ return nil if self.user.admin?
137
+ return Sanitize::Config::RELAXED if self.user.any_role?('editor', 'manager', 'contributor')
138
+ Sanitize::Config::BASIC
139
+ end
140
+
141
+
142
+
41
143
  Copyright (c) 2009 Tatemae, released under the MIT license
data/Rakefile CHANGED
@@ -56,6 +56,8 @@ begin
56
56
  gemspec.rubyforge_project = 'muck-profiles'
57
57
  gemspec.add_dependency "muck-engine"
58
58
  gemspec.add_dependency "muck-users"
59
+ gemspec.add_dependency "geokit"
60
+ gemspec.add_dependency "paperclip"
59
61
  end
60
62
  Jeweler::RubyforgeTasks.new do |rubyforge|
61
63
  rubyforge.doc_task = "rdoc"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.16
1
+ 0.1.17
@@ -1,6 +1,6 @@
1
1
  class Muck::ProfilesController < ApplicationController
2
2
  unloadable
3
-
3
+
4
4
  before_filter :setup_user, :only => [:show, :edit]
5
5
 
6
6
  def index
@@ -9,4 +9,18 @@ module MuckProfilesHelper
9
9
  raw_block_to_partial('profiles/form', options.merge(:profile => profile), &block)
10
10
  end
11
11
 
12
+ # Outputs a link and text that guesses the user's location using their ip.
13
+ def location_suggestion(field_id)
14
+ geo = Geokit::Geocoders::MultiGeocoder.geocode(request.ip)
15
+ location = readable_location(geo)
16
+ return '' if location.blank?
17
+ render :partial => 'profiles/location_suggestion', :locals => { :field_id => field_id, :location => location }
18
+ end
19
+
20
+ # Turns a geokit location object into a location string with city, state country
21
+ def readable_location(location)
22
+ return '' if location.city.blank? && location.state.blank? && location.province.blank? && location.country_code.blank?
23
+ "#{location.city}, #{location.state || location.province} #{location.country_code}"
24
+ end
25
+
12
26
  end
@@ -1,7 +1,8 @@
1
1
  <div id="<%= "#{profile.dom_id}" %>" class="edit_profile">
2
2
  <% custom_form_for(profile, :url => user_profile_path(profile.user), :html => html.merge(:id => "edit-profile-form", :name => 'edit-profile-form', :method => :put, :multipart => true ) ) do |f| -%>
3
3
  <div id="edit_profile_image">
4
- <%= image_tag profile.photo.url(:thumb) %>
4
+ <%#= image_tag profile.photo.url(:thumb) %>
5
+ <%= icon profile.user, :thumb %>
5
6
  <%= f.file_field :photo, { :label => t('muck.profiles.upload_photo') } %>
6
7
  </div>
7
8
  <%= capture(f, &block) %>
@@ -0,0 +1,12 @@
1
+ <div class="location-suggestion">
2
+ <%= I18n.t('muck.profiles.location_suggestion', :location => location) %>
3
+ <a href="#" id="set_<%=field_id%>"><%=I18n.t('muck.profiles.click_to_set')%></a>
4
+ </div>
5
+ <script type="text/javascript">
6
+ jQuery(document).ready(function() {
7
+ jQuery("#set_<%=field_id%>").click(function() {
8
+ jQuery("#<%=field_id%>").val("<%=location%>");
9
+ return false;
10
+ });
11
+ });
12
+ </script>
@@ -0,0 +1,15 @@
1
+ class AddLocationToProfiles < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :profiles, :location, :string
4
+ add_column :profiles, :lat, :decimal, :precision => 15, :scale => 10
5
+ add_column :profiles, :lng, :decimal, :precision => 15, :scale => 10
6
+ add_index :profiles, [:lat, :lng]
7
+ end
8
+
9
+ def self.down
10
+ remove_index :profiles, [:lat, :lng]
11
+ remove_column :profiles, :location
12
+ remove_column :profiles, :lat
13
+ remove_column :profiles, :lng
14
+ end
15
+ end
@@ -0,0 +1,21 @@
1
+ class AddFieldsToProfiles < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :profiles, :about, :text
4
+ add_column :profiles, :first_name, :string
5
+ add_column :profiles, :last_name, :string
6
+ add_column :profiles, :city, :string
7
+ add_column :profiles, :state_id, :integer
8
+ add_column :profiles, :country_id, :integer
9
+ add_column :profiles, :language_id, :integer
10
+ end
11
+
12
+ def self.down
13
+ remove_column :profiles, :about
14
+ remove_column :profiles, :first_name
15
+ remove_column :profiles, :last_name
16
+ remove_column :profiles, :city
17
+ remove_column :profiles, :state_id
18
+ remove_column :profiles, :country_id
19
+ remove_column :profiles, :language_id
20
+ end
21
+ end
@@ -10,6 +10,11 @@ module ActiveRecord
10
10
  def acts_as_muck_profile(options = {})
11
11
 
12
12
  belongs_to :user
13
+ belongs_to :state
14
+ belongs_to :country
15
+ belongs_to :language
16
+
17
+ acts_as_mappable
13
18
 
14
19
  has_attached_file :photo,
15
20
  :styles => { :medium => "300x300>",
@@ -18,6 +23,7 @@ module ActiveRecord
18
23
  :tiny => "24x24>" },
19
24
  :default_url => "/images/profile_default.jpg"
20
25
 
26
+ before_save :sanitize_attributes
21
27
 
22
28
  class_eval <<-EOV
23
29
  attr_protected :created_at, :updated_at, :photo_file_name, :photo_content_type, :photo_file_size
@@ -31,7 +37,7 @@ module ActiveRecord
31
37
 
32
38
  # class methods
33
39
  module SingletonMethods
34
-
40
+
35
41
  end
36
42
 
37
43
  # All the methods available to a record that has had <tt>acts_as_muck_profile</tt> specified.
@@ -42,6 +48,52 @@ module ActiveRecord
42
48
  self.user_id == user.id || user.admin?
43
49
  end
44
50
 
51
+ def guess_and_assign_location_via_ip
52
+ if GlobalConfig.enable_guess_location && self.user.current_login_ip
53
+ location = Geokit::Geocoders::MultiGeocoder.geocode(self.user.current_login_ip)
54
+ state = State.find_by_abbreviation(location.state)
55
+ country = Country.find_by_abbreviation(location.country)
56
+ self.update_attributes(
57
+ :location => "#{location.city}, #{location.state || location.province} #{location.country_code}",
58
+ :lat => location.lat,
59
+ :lng => location.lng,
60
+ :city => location.city,
61
+ :state => state,
62
+ :country => country)
63
+ end
64
+ end
65
+
66
+ def after_create
67
+ guess_and_assign_location_via_ip
68
+ end
69
+
70
+ # Sanitize content before saving. This prevent XSS attacks and other malicious html.
71
+ def sanitize_attributes
72
+ if self.sanitize_level
73
+ self.about = Sanitize.clean(self.about, self.sanitize_level)
74
+ self.location = Sanitize.clean(self.location, self.sanitize_level)
75
+ end
76
+ end
77
+
78
+ # Override this method to control sanitization levels.
79
+ # Currently a user who is an admin will not have their content sanitized. A user
80
+ # in any role 'editor', 'manager', or 'contributor' will be given the 'RELAXED' settings
81
+ # while all other users will get 'BASIC'.
82
+ #
83
+ # Options are from sanitze:
84
+ # nil - no sanitize
85
+ # Sanitize::Config::RELAXED
86
+ # Sanitize::Config::BASIC
87
+ # Sanitize::Config::RESTRICTED
88
+ # for more details see: http://rgrove.github.com/sanitize/
89
+ def sanitize_level
90
+ return Sanitize::Config::BASIC if self.user.nil?
91
+ return nil if self.user.admin?
92
+ return Sanitize::Config::RELAXED if self.user.any_role?('editor', 'manager', 'contributor')
93
+ Sanitize::Config::BASIC
94
+ end
95
+
96
+
45
97
  end
46
98
 
47
99
  end
@@ -28,8 +28,6 @@ module ActiveRecord
28
28
  # All the methods available to a record that has had <tt>acts_as_muck_profile</tt> specified.
29
29
  module InstanceMethods
30
30
 
31
-
32
-
33
31
  end
34
32
 
35
33
  end
data/locales/en.yml CHANGED
@@ -10,4 +10,19 @@ en:
10
10
  edit_success: "Successfully updated your profile"
11
11
  edit_failure: "An error occured while updating your profile."
12
12
  could_not_find_user: "Could not find the specified user."
13
-
13
+ location: "Location"
14
+ skills: "Skills"
15
+ interests: "Interests"
16
+ state: "State"
17
+ country: "Country"
18
+ language: "Language"
19
+ about: "About"
20
+ about_help: "Enter a biographical information to help others find out about your skills, interests, etc."
21
+ location_help: "Enter your location. For example: Logan, UT, New York City, NY, etc"
22
+ skills_help: "Enter a comma delimited list of your skills. For example: ruby on rails, php, mysql, physics, math"
23
+ interests_help: "Enter a comma delimited list of your interests. For example: cycling, mountain biking, chess, movies"
24
+ state_help: "Enter your state if this is relevant to your country."
25
+ country_help: "Enter your current current."
26
+ language_help: "Enter your primary language"
27
+ location_suggestion: "We think you're in {{location}}."
28
+ click_to_set: "Click to set this as your location."
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{muck-profiles}
8
- s.version = "0.1.16"
8
+ s.version = "0.1.17"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Justin Ball", "Joel Duffin"]
12
- s.date = %q{2009-11-13}
12
+ s.date = %q{2009-11-30}
13
13
  s.description = %q{Profile engine for the muck system.}
14
14
  s.email = %q{justin@tatemae.com}
15
15
  s.extra_rdoc_files = [
@@ -26,6 +26,7 @@ Gem::Specification.new do |s|
26
26
  "app/helpers/muck_profiles_helper.rb",
27
27
  "app/views/admin/profiles/edit.html.erb",
28
28
  "app/views/profiles/_form.html.erb",
29
+ "app/views/profiles/_location_suggestion.html.erb",
29
30
  "app/views/profiles/_profile.html.erb",
30
31
  "app/views/profiles/_profile_icon.html.erb",
31
32
  "app/views/profiles/edit.html.erb",
@@ -33,6 +34,8 @@ Gem::Specification.new do |s|
33
34
  "app/views/profiles/show.html.erb",
34
35
  "config/muck_profiles_routes.rb",
35
36
  "db/migrate/20090512013727_create_profiles.rb",
37
+ "db/migrate/20091124203137_add_location_to_profiles.rb",
38
+ "db/migrate/20091124205819_add_fields_to_profiles.rb",
36
39
  "install.rb",
37
40
  "lib/active_record/acts/muck_profile.rb",
38
41
  "lib/active_record/has/muck_profile.rb",
@@ -107,7 +110,8 @@ Gem::Specification.new do |s|
107
110
  "test/rails_root/config/environments/development.rb",
108
111
  "test/rails_root/config/environments/production.rb",
109
112
  "test/rails_root/config/environments/test.rb",
110
- "test/rails_root/config/global_config.yml",
113
+ "test/rails_root/config/global_config.example.yml",
114
+ "test/rails_root/config/initializers/geokit_config.rb",
111
115
  "test/rails_root/config/initializers/inflections.rb",
112
116
  "test/rails_root/config/initializers/mime_types.rb",
113
117
  "test/rails_root/config/initializers/requires.rb",
@@ -115,24 +119,67 @@ Gem::Specification.new do |s|
115
119
  "test/rails_root/config/routes.rb",
116
120
  "test/rails_root/db/.keep",
117
121
  "test/rails_root/db/migrate/20090320174818_create_muck_permissions_and_roles.rb",
122
+ "test/rails_root/db/migrate/20090402234137_create_languages.rb",
123
+ "test/rails_root/db/migrate/20090426041056_create_countries.rb",
124
+ "test/rails_root/db/migrate/20090426041103_create_states.rb",
118
125
  "test/rails_root/db/migrate/20090512013727_create_profiles.rb",
119
126
  "test/rails_root/db/migrate/20090602041838_create_users.rb",
127
+ "test/rails_root/db/migrate/20091124203137_add_location_to_profiles.rb",
128
+ "test/rails_root/db/migrate/20091124205819_add_fields_to_profiles.rb",
120
129
  "test/rails_root/features/step_definitions/webrat_steps.rb",
121
130
  "test/rails_root/features/support/env.rb",
131
+ "test/rails_root/lib/tasks/muck.rake",
122
132
  "test/rails_root/public/.htaccess",
123
133
  "test/rails_root/public/404.html",
124
134
  "test/rails_root/public/422.html",
125
135
  "test/rails_root/public/500.html",
126
136
  "test/rails_root/public/dispatch.rb",
127
137
  "test/rails_root/public/favicon.ico",
138
+ "test/rails_root/public/images/arrow_down.gif",
128
139
  "test/rails_root/public/images/arrow_left.gif",
129
140
  "test/rails_root/public/images/arrow_right.gif",
141
+ "test/rails_root/public/images/arrow_up.gif",
130
142
  "test/rails_root/public/images/blue/preview.gif",
143
+ "test/rails_root/public/images/fancybox/fancy_closebox.png",
144
+ "test/rails_root/public/images/fancybox/fancy_left.png",
145
+ "test/rails_root/public/images/fancybox/fancy_progress.png",
146
+ "test/rails_root/public/images/fancybox/fancy_right.png",
147
+ "test/rails_root/public/images/fancybox/fancy_shadow_e.png",
148
+ "test/rails_root/public/images/fancybox/fancy_shadow_n.png",
149
+ "test/rails_root/public/images/fancybox/fancy_shadow_ne.png",
150
+ "test/rails_root/public/images/fancybox/fancy_shadow_nw.png",
151
+ "test/rails_root/public/images/fancybox/fancy_shadow_s.png",
152
+ "test/rails_root/public/images/fancybox/fancy_shadow_se.png",
153
+ "test/rails_root/public/images/fancybox/fancy_shadow_sw.png",
154
+ "test/rails_root/public/images/fancybox/fancy_shadow_w.png",
155
+ "test/rails_root/public/images/fancybox/fancy_title_left.png",
156
+ "test/rails_root/public/images/fancybox/fancy_title_main.png",
157
+ "test/rails_root/public/images/fancybox/fancy_title_right.png",
131
158
  "test/rails_root/public/images/icons/accept.png",
132
159
  "test/rails_root/public/images/icons/add.png",
160
+ "test/rails_root/public/images/icons/blue_guy.png",
161
+ "test/rails_root/public/images/icons/button_background.png",
162
+ "test/rails_root/public/images/icons/cancel.png",
163
+ "test/rails_root/public/images/icons/close.png",
164
+ "test/rails_root/public/images/icons/comment.png",
133
165
  "test/rails_root/public/images/icons/delete.png",
166
+ "test/rails_root/public/images/icons/exclaim.png",
167
+ "test/rails_root/public/images/icons/external.png",
168
+ "test/rails_root/public/images/icons/feed.png",
169
+ "test/rails_root/public/images/icons/grey_guy.png",
170
+ "test/rails_root/public/images/icons/hide.png",
171
+ "test/rails_root/public/images/icons/information.png",
172
+ "test/rails_root/public/images/icons/minus.png",
173
+ "test/rails_root/public/images/icons/pending.png",
174
+ "test/rails_root/public/images/icons/question.png",
175
+ "test/rails_root/public/images/icons/search_box.png",
176
+ "test/rails_root/public/images/icons/star.png",
177
+ "test/rails_root/public/images/icons/stop.png",
178
+ "test/rails_root/public/images/icons/thumb_down.png",
179
+ "test/rails_root/public/images/icons/thumb_up.png",
134
180
  "test/rails_root/public/images/icons/vote.png",
135
181
  "test/rails_root/public/images/loading.gif",
182
+ "test/rails_root/public/images/nothing.png",
136
183
  "test/rails_root/public/images/profile_default.jpg",
137
184
  "test/rails_root/public/images/rails.png",
138
185
  "test/rails_root/public/images/red/preview.gif",
@@ -144,17 +191,30 @@ Gem::Specification.new do |s|
144
191
  "test/rails_root/public/javascripts/dragdrop.js",
145
192
  "test/rails_root/public/javascripts/effects.js",
146
193
  "test/rails_root/public/javascripts/fancyzoom.min.js",
194
+ "test/rails_root/public/javascripts/jquery/colorpicker.js",
147
195
  "test/rails_root/public/javascripts/jquery/jquery-ui.js",
196
+ "test/rails_root/public/javascripts/jquery/jquery.autocomplete.js.readme",
197
+ "test/rails_root/public/javascripts/jquery/jquery.autocomplete.min.js",
198
+ "test/rails_root/public/javascripts/jquery/jquery.autocomplete.pack.js",
199
+ "test/rails_root/public/javascripts/jquery/jquery.easing.js",
200
+ "test/rails_root/public/javascripts/jquery/jquery.fancybox.js",
148
201
  "test/rails_root/public/javascripts/jquery/jquery.form.js",
149
202
  "test/rails_root/public/javascripts/jquery/jquery.jgrowl.js",
150
203
  "test/rails_root/public/javascripts/jquery/jquery.js",
204
+ "test/rails_root/public/javascripts/jquery/jquery.metadata.min.js",
205
+ "test/rails_root/public/javascripts/jquery/jquery.queryString.js",
206
+ "test/rails_root/public/javascripts/jquery/jquery.swapimage.js",
207
+ "test/rails_root/public/javascripts/jquery/jquery.swapimage.min.js",
151
208
  "test/rails_root/public/javascripts/jquery/jquery.tips.js",
209
+ "test/rails_root/public/javascripts/jquery/jrails.js",
152
210
  "test/rails_root/public/javascripts/muck.js",
153
211
  "test/rails_root/public/javascripts/muck_activities.js",
212
+ "test/rails_root/public/javascripts/muck_time/en.js",
154
213
  "test/rails_root/public/javascripts/prototype.js",
155
214
  "test/rails_root/public/javascripts/scriptaculous.js",
156
215
  "test/rails_root/public/javascripts/slider.js",
157
216
  "test/rails_root/public/javascripts/sound.js",
217
+ "test/rails_root/public/javascripts/tree.js",
158
218
  "test/rails_root/public/robots.txt",
159
219
  "test/rails_root/public/stylesheets/.keep",
160
220
  "test/rails_root/public/stylesheets/admin.css",
@@ -208,6 +268,8 @@ Gem::Specification.new do |s|
208
268
  "test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_cd0a0a_256x240.png",
209
269
  "test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_ffffff_256x240.png",
210
270
  "test/rails_root/public/stylesheets/jquery/cupertino/jquery-ui-1.7.1.custom.css",
271
+ "test/rails_root/public/stylesheets/jquery/jquery.autocomplete.css",
272
+ "test/rails_root/public/stylesheets/jquery/jquery.fancybox.css",
211
273
  "test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png",
212
274
  "test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_flat_55_fbec88_40x100.png",
213
275
  "test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png",
@@ -282,6 +344,48 @@ Gem::Specification.new do |s|
282
344
  "test/rails_root/test/unit/.keep",
283
345
  "test/rails_root/test/unit/profile_test.rb",
284
346
  "test/rails_root/test/unit/user_test.rb",
347
+ "test/rails_root/vendor/plugins/geokit-rails/CHANGELOG.rdoc",
348
+ "test/rails_root/vendor/plugins/geokit-rails/MIT-LICENSE",
349
+ "test/rails_root/vendor/plugins/geokit-rails/README.markdown",
350
+ "test/rails_root/vendor/plugins/geokit-rails/Rakefile",
351
+ "test/rails_root/vendor/plugins/geokit-rails/about.yml",
352
+ "test/rails_root/vendor/plugins/geokit-rails/assets/api_keys_template",
353
+ "test/rails_root/vendor/plugins/geokit-rails/init.rb",
354
+ "test/rails_root/vendor/plugins/geokit-rails/install.rb",
355
+ "test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails.rb",
356
+ "test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails/acts_as_mappable.rb",
357
+ "test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails/adapters/abstract.rb",
358
+ "test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails/adapters/mysql.rb",
359
+ "test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails/adapters/postgresql.rb",
360
+ "test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails/adapters/sqlserver.rb",
361
+ "test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails/defaults.rb",
362
+ "test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails/geocoder_control.rb",
363
+ "test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails/ip_geocode_lookup.rb",
364
+ "test/rails_root/vendor/plugins/geokit-rails/test/acts_as_mappable_test.rb",
365
+ "test/rails_root/vendor/plugins/geokit-rails/test/boot.rb",
366
+ "test/rails_root/vendor/plugins/geokit-rails/test/database.yml",
367
+ "test/rails_root/vendor/plugins/geokit-rails/test/fixtures/companies.yml",
368
+ "test/rails_root/vendor/plugins/geokit-rails/test/fixtures/custom_locations.yml",
369
+ "test/rails_root/vendor/plugins/geokit-rails/test/fixtures/locations.yml",
370
+ "test/rails_root/vendor/plugins/geokit-rails/test/fixtures/mock_addresses.yml",
371
+ "test/rails_root/vendor/plugins/geokit-rails/test/fixtures/mock_families.yml",
372
+ "test/rails_root/vendor/plugins/geokit-rails/test/fixtures/mock_houses.yml",
373
+ "test/rails_root/vendor/plugins/geokit-rails/test/fixtures/mock_organizations.yml",
374
+ "test/rails_root/vendor/plugins/geokit-rails/test/fixtures/mock_people.yml",
375
+ "test/rails_root/vendor/plugins/geokit-rails/test/fixtures/stores.yml",
376
+ "test/rails_root/vendor/plugins/geokit-rails/test/ip_geocode_lookup_test.rb",
377
+ "test/rails_root/vendor/plugins/geokit-rails/test/models/company.rb",
378
+ "test/rails_root/vendor/plugins/geokit-rails/test/models/custom_location.rb",
379
+ "test/rails_root/vendor/plugins/geokit-rails/test/models/location.rb",
380
+ "test/rails_root/vendor/plugins/geokit-rails/test/models/mock_address.rb",
381
+ "test/rails_root/vendor/plugins/geokit-rails/test/models/mock_family.rb",
382
+ "test/rails_root/vendor/plugins/geokit-rails/test/models/mock_house.rb",
383
+ "test/rails_root/vendor/plugins/geokit-rails/test/models/mock_organization.rb",
384
+ "test/rails_root/vendor/plugins/geokit-rails/test/models/mock_person.rb",
385
+ "test/rails_root/vendor/plugins/geokit-rails/test/models/store.rb",
386
+ "test/rails_root/vendor/plugins/geokit-rails/test/schema.rb",
387
+ "test/rails_root/vendor/plugins/geokit-rails/test/tasks.rake",
388
+ "test/rails_root/vendor/plugins/geokit-rails/test/test_helper.rb",
285
389
  "test/rails_root/vendor/plugins/ssl_requirement/README",
286
390
  "test/rails_root/vendor/plugins/ssl_requirement/lib/ssl_requirement.rb",
287
391
  "test/rails_root/vendor/plugins/ssl_requirement/test/ssl_requirement_test.rb",
@@ -307,14 +411,20 @@ Gem::Specification.new do |s|
307
411
  "test/rails_root/config/environments/development.rb",
308
412
  "test/rails_root/config/environments/production.rb",
309
413
  "test/rails_root/config/environments/test.rb",
414
+ "test/rails_root/config/initializers/geokit_config.rb",
310
415
  "test/rails_root/config/initializers/inflections.rb",
311
416
  "test/rails_root/config/initializers/mime_types.rb",
312
417
  "test/rails_root/config/initializers/requires.rb",
313
418
  "test/rails_root/config/initializers/session_store.rb",
314
419
  "test/rails_root/config/routes.rb",
315
420
  "test/rails_root/db/migrate/20090320174818_create_muck_permissions_and_roles.rb",
421
+ "test/rails_root/db/migrate/20090402234137_create_languages.rb",
422
+ "test/rails_root/db/migrate/20090426041056_create_countries.rb",
423
+ "test/rails_root/db/migrate/20090426041103_create_states.rb",
316
424
  "test/rails_root/db/migrate/20090512013727_create_profiles.rb",
317
425
  "test/rails_root/db/migrate/20090602041838_create_users.rb",
426
+ "test/rails_root/db/migrate/20091124203137_add_location_to_profiles.rb",
427
+ "test/rails_root/db/migrate/20091124205819_add_fields_to_profiles.rb",
318
428
  "test/rails_root/features/step_definitions/webrat_steps.rb",
319
429
  "test/rails_root/features/support/env.rb",
320
430
  "test/rails_root/public/dispatch.rb",
@@ -324,6 +434,31 @@ Gem::Specification.new do |s|
324
434
  "test/rails_root/test/test_helper.rb",
325
435
  "test/rails_root/test/unit/profile_test.rb",
326
436
  "test/rails_root/test/unit/user_test.rb",
437
+ "test/rails_root/vendor/plugins/geokit-rails/init.rb",
438
+ "test/rails_root/vendor/plugins/geokit-rails/install.rb",
439
+ "test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails/acts_as_mappable.rb",
440
+ "test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails/adapters/abstract.rb",
441
+ "test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails/adapters/mysql.rb",
442
+ "test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails/adapters/postgresql.rb",
443
+ "test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails/adapters/sqlserver.rb",
444
+ "test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails/defaults.rb",
445
+ "test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails/geocoder_control.rb",
446
+ "test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails/ip_geocode_lookup.rb",
447
+ "test/rails_root/vendor/plugins/geokit-rails/lib/geokit-rails.rb",
448
+ "test/rails_root/vendor/plugins/geokit-rails/test/acts_as_mappable_test.rb",
449
+ "test/rails_root/vendor/plugins/geokit-rails/test/boot.rb",
450
+ "test/rails_root/vendor/plugins/geokit-rails/test/ip_geocode_lookup_test.rb",
451
+ "test/rails_root/vendor/plugins/geokit-rails/test/models/company.rb",
452
+ "test/rails_root/vendor/plugins/geokit-rails/test/models/custom_location.rb",
453
+ "test/rails_root/vendor/plugins/geokit-rails/test/models/location.rb",
454
+ "test/rails_root/vendor/plugins/geokit-rails/test/models/mock_address.rb",
455
+ "test/rails_root/vendor/plugins/geokit-rails/test/models/mock_family.rb",
456
+ "test/rails_root/vendor/plugins/geokit-rails/test/models/mock_house.rb",
457
+ "test/rails_root/vendor/plugins/geokit-rails/test/models/mock_organization.rb",
458
+ "test/rails_root/vendor/plugins/geokit-rails/test/models/mock_person.rb",
459
+ "test/rails_root/vendor/plugins/geokit-rails/test/models/store.rb",
460
+ "test/rails_root/vendor/plugins/geokit-rails/test/schema.rb",
461
+ "test/rails_root/vendor/plugins/geokit-rails/test/test_helper.rb",
327
462
  "test/rails_root/vendor/plugins/ssl_requirement/lib/ssl_requirement.rb",
328
463
  "test/rails_root/vendor/plugins/ssl_requirement/test/ssl_requirement_test.rb"
329
464
  ]
@@ -335,12 +470,18 @@ Gem::Specification.new do |s|
335
470
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
336
471
  s.add_runtime_dependency(%q<muck-engine>, [">= 0"])
337
472
  s.add_runtime_dependency(%q<muck-users>, [">= 0"])
473
+ s.add_runtime_dependency(%q<geokit>, [">= 0"])
474
+ s.add_runtime_dependency(%q<paperclip>, [">= 0"])
338
475
  else
339
476
  s.add_dependency(%q<muck-engine>, [">= 0"])
340
477
  s.add_dependency(%q<muck-users>, [">= 0"])
478
+ s.add_dependency(%q<geokit>, [">= 0"])
479
+ s.add_dependency(%q<paperclip>, [">= 0"])
341
480
  end
342
481
  else
343
482
  s.add_dependency(%q<muck-engine>, [">= 0"])
344
483
  s.add_dependency(%q<muck-users>, [">= 0"])
484
+ s.add_dependency(%q<geokit>, [">= 0"])
485
+ s.add_dependency(%q<paperclip>, [">= 0"])
345
486
  end
346
487
  end