muck-raker 0.1.33 → 0.1.35

Sign up to get free protection for your applications and to get access to all the features.
Files changed (213) hide show
  1. data/README.rdoc +3 -0
  2. data/VERSION +1 -1
  3. data/app/controllers/admin/muck/feeds_controller.rb +6 -6
  4. data/app/controllers/admin/muck/oai_endpoints_controller.rb +13 -0
  5. data/app/controllers/muck/aggregations_controller.rb +57 -43
  6. data/app/controllers/muck/feeds_controller.rb +31 -14
  7. data/app/controllers/muck/identity_feeds_controller.rb +3 -3
  8. data/app/controllers/muck/oai_endpoints_controller.rb +96 -0
  9. data/app/controllers/muck/opmls_controller.rb +29 -0
  10. data/app/controllers/muck/recommendations_controller.rb +5 -2
  11. data/app/controllers/muck/visits_controller.rb +1 -1
  12. data/app/helpers/muck_raker_feeds_helper.rb +31 -14
  13. data/app/helpers/muck_raker_google_helper.rb +184 -0
  14. data/app/helpers/muck_raker_helper.rb +4 -0
  15. data/app/models/aggregation.rb +8 -1
  16. data/app/models/amazon_request.rb +22 -0
  17. data/app/models/feed.rb +19 -20
  18. data/app/models/google_feed_request.rb +36 -0
  19. data/app/models/oai_endpoint.rb +27 -2
  20. data/app/models/raker_mailer.rb +9 -0
  21. data/app/models/service.rb +96 -9
  22. data/app/views/admin/feeds/index.html.erb +9 -9
  23. data/app/views/admin/oai_endpoints/index.html.erb +31 -0
  24. data/app/views/aggregations/edit.html.erb +19 -0
  25. data/app/views/aggregations/new.html.erb +4 -3
  26. data/app/views/aggregations/show.html.erb +0 -0
  27. data/app/views/feeds/_entry.html.erb +1 -1
  28. data/app/views/feeds/_feed.html.erb +21 -15
  29. data/app/views/feeds/_feed_row.html.erb +29 -0
  30. data/app/views/feeds/_form.html.erb +20 -0
  31. data/app/views/feeds/index.html.erb +8 -8
  32. data/app/views/feeds/new.html.erb +21 -1
  33. data/app/views/feeds/new_extended.html.erb +32 -1
  34. data/app/views/feeds/new_oai_rss.html.erb +50 -0
  35. data/app/views/feeds/show.html.erb +1 -6
  36. data/app/views/google/_dynamic_feeds_vertical.html.erb +22 -0
  37. data/app/views/google/_feed.html.erb +11 -0
  38. data/app/views/google/_feed_bookmarks.html.erb +13 -0
  39. data/app/views/google/_feed_display.html.erb +13 -0
  40. data/app/views/google/_feed_photos.html.erb +13 -0
  41. data/app/views/google/_feed_search.html.erb +26 -0
  42. data/app/views/google/_feeds_display.html.erb +2 -0
  43. data/app/views/google/_feeds_scripts.html.erb +16 -0
  44. data/app/views/google/_slide_show.html.erb +14 -0
  45. data/app/views/identity_feeds/_form.html.erb +1 -1
  46. data/app/views/oai_endpoints/_form.html.erb +22 -0
  47. data/app/views/oai_endpoints/_oai_endpoint_row.html.erb +25 -0
  48. data/app/views/oai_endpoints/new.html.erb +2 -0
  49. data/app/views/oai_endpoints/show.html.erb +5 -0
  50. data/app/views/opmls/_rss_discover.html.erb +1 -0
  51. data/app/views/opmls/index.html.erb +19 -0
  52. data/app/views/opmls/index.opml.builder +18 -0
  53. data/app/views/opmls/new.html.erb +27 -0
  54. data/app/views/parts/_add_feed.html.erb +2 -2
  55. data/app/views/raker_mailer/notification_feed_added.text.html.erb +1 -0
  56. data/app/views/raker_mailer/notification_feed_added.text.plain.erb +2 -0
  57. data/app/views/raker_mailer/notification_oai_endpoint_added.text.html.erb +4 -0
  58. data/app/views/raker_mailer/notification_oai_endpoint_added.text.plain.erb +4 -0
  59. data/config/muck_raker_routes.rb +5 -2
  60. data/db/bootstrap/service_categories.yml +37 -25
  61. data/db/bootstrap/services.yml +337 -103
  62. data/db/migrate/20090915041650_aggregations_to_polymorphic.rb +2 -2
  63. data/db/migrate/20090922174200_update_oai_endpoints.rb +13 -0
  64. data/db/migrate/20090922231552_add_dates_to_oai_endpoints.rb +11 -0
  65. data/db/migrate/20090923150807_rename_name_in_aggregation.rb +9 -0
  66. data/db/migrate/20090924200750_add_uri_data_template_to_services.rb +9 -0
  67. data/lib/muck_raker/services.rb +6 -0
  68. data/lib/muck_raker.rb +2 -0
  69. data/locales/ar.yml +51 -7
  70. data/locales/bg.yml +49 -5
  71. data/locales/ca.yml +49 -5
  72. data/locales/cs.yml +50 -6
  73. data/locales/da.yml +48 -4
  74. data/locales/de.yml +49 -5
  75. data/locales/el.yml +51 -7
  76. data/locales/en.yml +41 -4
  77. data/locales/es.yml +50 -6
  78. data/locales/et.yml +49 -5
  79. data/locales/fa.yml +49 -5
  80. data/locales/fi.yml +50 -6
  81. data/locales/fr.yml +48 -4
  82. data/locales/gl.yml +50 -6
  83. data/locales/hi.yml +48 -4
  84. data/locales/hr.yml +52 -8
  85. data/locales/hu.yml +51 -7
  86. data/locales/id.yml +49 -5
  87. data/locales/it.yml +50 -6
  88. data/locales/iw.yml +48 -4
  89. data/locales/ja.yml +48 -4
  90. data/locales/ko.yml +49 -5
  91. data/locales/lt.yml +48 -4
  92. data/locales/lv.yml +48 -4
  93. data/locales/mt.yml +58 -14
  94. data/locales/nl.yml +48 -4
  95. data/locales/no.yml +49 -5
  96. data/locales/pl.yml +48 -4
  97. data/locales/pt-PT.yml +48 -4
  98. data/locales/ro.yml +49 -5
  99. data/locales/ru.yml +48 -4
  100. data/locales/sk.yml +50 -6
  101. data/locales/sl.yml +49 -5
  102. data/locales/sq.yml +48 -4
  103. data/locales/sr.yml +49 -5
  104. data/locales/sv.yml +49 -5
  105. data/locales/th.yml +48 -4
  106. data/locales/tl.yml +48 -4
  107. data/locales/tr.yml +48 -4
  108. data/locales/uk.yml +48 -4
  109. data/locales/vi.yml +49 -5
  110. data/locales/zh-CN.yml +48 -4
  111. data/locales/zh-TW.yml +49 -5
  112. data/locales/zh.yml +48 -4
  113. data/muck-raker.gemspec +128 -5
  114. data/public/images/service_icons/{amazon.png → 16/amazon.png} +0 -0
  115. data/public/images/service_icons/16/ask.png +0 -0
  116. data/public/images/service_icons/16/bibsonomy.png +0 -0
  117. data/public/images/service_icons/16/bing.png +0 -0
  118. data/public/images/service_icons/16/bloglines.png +0 -0
  119. data/public/images/service_icons/16/connotea.png +0 -0
  120. data/public/images/service_icons/16/icerocket.png +0 -0
  121. data/public/images/service_icons/16/twine.png +0 -0
  122. data/public/images/service_icons/24/ask.png +0 -0
  123. data/public/images/service_icons/24/bibsonomy.png +0 -0
  124. data/public/images/service_icons/24/bing.png +0 -0
  125. data/public/images/service_icons/24/bloglines.png +0 -0
  126. data/public/images/service_icons/24/connotea.png +0 -0
  127. data/public/images/service_icons/24/icerocket.png +0 -0
  128. data/public/images/service_icons/24/twine.png +0 -0
  129. data/public/images/service_icons/48/ask.png +0 -0
  130. data/public/images/service_icons/48/bibsonomy.png +0 -0
  131. data/public/images/service_icons/48/bing.png +0 -0
  132. data/public/images/service_icons/48/bloglines.png +0 -0
  133. data/public/images/service_icons/48/connotea.png +0 -0
  134. data/public/images/service_icons/48/icerocket.png +0 -0
  135. data/public/images/service_icons/48/twine.png +0 -0
  136. data/public/images/service_icons/60/ask.png +0 -0
  137. data/public/images/service_icons/60/bibsonomy.png +0 -0
  138. data/public/images/service_icons/60/bing.png +0 -0
  139. data/public/images/service_icons/60/bloglines.png +0 -0
  140. data/public/images/service_icons/60/connotea.png +0 -0
  141. data/public/images/service_icons/60/icerocket.png +0 -0
  142. data/public/images/service_icons/60/twine.png +0 -0
  143. data/public/images/service_icons/source/ask.psd +0 -0
  144. data/public/images/service_icons/source/bibsonomy.psd +0 -0
  145. data/public/images/service_icons/source/bing.psd +0 -0
  146. data/public/images/service_icons/source/bloglines.psd +0 -0
  147. data/public/images/service_icons/source/connotea.psd +0 -0
  148. data/public/images/service_icons/source/icerocket.psd +0 -0
  149. data/public/images/service_icons/source/twine.psd +0 -0
  150. data/test/rails_root/app/models/share.rb +1 -2
  151. data/test/rails_root/app/views/default/index.html.erb +7 -6
  152. data/test/rails_root/config/environments/development.rb +17 -0
  153. data/test/rails_root/config/global_config.yml +4 -1
  154. data/test/rails_root/db/bootstrap/service_categories.yml +37 -25
  155. data/test/rails_root/db/bootstrap/services.yml +342 -99
  156. data/test/rails_root/db/migrate/20090915041650_aggregations_to_polymorphic.rb +2 -2
  157. data/test/rails_root/db/migrate/20090922174200_update_oai_endpoints.rb +13 -0
  158. data/test/rails_root/db/migrate/20090922231552_add_dates_to_oai_endpoints.rb +11 -0
  159. data/test/rails_root/db/migrate/20090923150807_rename_name_in_aggregation.rb +9 -0
  160. data/test/rails_root/db/migrate/20090924200750_add_uri_data_template_to_services.rb +9 -0
  161. data/test/rails_root/public/images/service_icons/16/amazon.png +0 -0
  162. data/test/rails_root/public/images/service_icons/16/ask.png +0 -0
  163. data/test/rails_root/public/images/service_icons/16/bibsonomy.png +0 -0
  164. data/test/rails_root/public/images/service_icons/16/bing.png +0 -0
  165. data/test/rails_root/public/images/service_icons/16/bloglines.png +0 -0
  166. data/test/rails_root/public/images/service_icons/16/connotea.png +0 -0
  167. data/test/rails_root/public/images/service_icons/16/icerocket.png +0 -0
  168. data/test/rails_root/public/images/service_icons/16/twine.png +0 -0
  169. data/test/rails_root/public/images/service_icons/24/ask.png +0 -0
  170. data/test/rails_root/public/images/service_icons/24/bibsonomy.png +0 -0
  171. data/test/rails_root/public/images/service_icons/24/bing.png +0 -0
  172. data/test/rails_root/public/images/service_icons/24/bloglines.png +0 -0
  173. data/test/rails_root/public/images/service_icons/24/connotea.png +0 -0
  174. data/test/rails_root/public/images/service_icons/24/icerocket.png +0 -0
  175. data/test/rails_root/public/images/service_icons/24/twine.png +0 -0
  176. data/test/rails_root/public/images/service_icons/48/ask.png +0 -0
  177. data/test/rails_root/public/images/service_icons/48/bibsonomy.png +0 -0
  178. data/test/rails_root/public/images/service_icons/48/bing.png +0 -0
  179. data/test/rails_root/public/images/service_icons/48/bloglines.png +0 -0
  180. data/test/rails_root/public/images/service_icons/48/connotea.png +0 -0
  181. data/test/rails_root/public/images/service_icons/48/icerocket.png +0 -0
  182. data/test/rails_root/public/images/service_icons/48/twine.png +0 -0
  183. data/test/rails_root/public/images/service_icons/60/ask.png +0 -0
  184. data/test/rails_root/public/images/service_icons/60/bibsonomy.png +0 -0
  185. data/test/rails_root/public/images/service_icons/60/bing.png +0 -0
  186. data/test/rails_root/public/images/service_icons/60/bloglines.png +0 -0
  187. data/test/rails_root/public/images/service_icons/60/connotea.png +0 -0
  188. data/test/rails_root/public/images/service_icons/60/icerocket.png +0 -0
  189. data/test/rails_root/public/images/service_icons/60/twine.png +0 -0
  190. data/test/rails_root/public/images/service_icons/source/ask.psd +0 -0
  191. data/test/rails_root/public/images/service_icons/source/bibsonomy.psd +0 -0
  192. data/test/rails_root/public/images/service_icons/source/bing.psd +0 -0
  193. data/test/rails_root/public/images/service_icons/source/bloglines.psd +0 -0
  194. data/test/rails_root/public/images/service_icons/source/connotea.psd +0 -0
  195. data/test/rails_root/public/images/service_icons/source/icerocket.psd +0 -0
  196. data/test/rails_root/public/images/service_icons/source/twine.psd +0 -0
  197. data/test/rails_root/public/stylesheets/application.css +22 -5
  198. data/test/rails_root/test/factories.rb +14 -1
  199. data/test/rails_root/test/functional/admin/oai_endpoints_controller_test.rb +30 -0
  200. data/test/rails_root/test/functional/aggregations_controller_test.rb +55 -0
  201. data/test/rails_root/test/functional/identity_feeds_controller_test.rb +7 -11
  202. data/test/rails_root/test/functional/oai_endpoints_controller_test.rb +42 -0
  203. data/test/rails_root/test/functional/opmls_controller_test.rb +37 -0
  204. data/test/rails_root/test/test_helper.rb +2 -2
  205. data/test/rails_root/test/unit/feed_test.rb +8 -30
  206. data/test/rails_root/test/unit/google_feed_request_test.rb +32 -0
  207. data/test/rails_root/test/unit/oai_endpoint_test.rb +37 -0
  208. data/test/rails_root/test/unit/raker_mailer_test.rb +9 -0
  209. data/test/rails_root/test/unit/service_test.rb +94 -6
  210. data/test/rails_root/test/unit/share_test.rb +1 -2
  211. metadata +128 -5
  212. data/app/views/parts/_add_extended_feed.html.erb +0 -31
  213. data/app/views/parts/_add_single_feed.html.erb +0 -21
data/README.rdoc CHANGED
@@ -79,6 +79,9 @@ class Comment < ActiveRecord::Base
79
79
  acts_as_muck_raker_comment
80
80
  end
81
81
 
82
+ === CSS
83
+ Use test/rails_root/public/stylesheets/application.css as a starting place for the css required in your application.
84
+
82
85
  === Frame css
83
86
  There is an example css file for the framed page in frame.css.
84
87
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.33
1
+ 0.1.35
@@ -3,7 +3,7 @@ class Admin::Muck::FeedsController < Admin::Muck::BaseController
3
3
  unloadable
4
4
 
5
5
  def index
6
- @feeds = Feed.by_newest.paginate(:page => @page, :per_page => @per_page)
6
+ @feeds = Feed.find(:all, :order => (params[:order] || 'created_at') + (params[:asc] == 'false' ? ' DESC' : ' ASC') + ', title', :include => [:default_language]).paginate(:page => @page, :per_page => @per_page)
7
7
  respond_to do |format|
8
8
  format.html { render :template => 'admin/feeds/index' }
9
9
  format.xml { render :xml => @feeds.to_xml }
@@ -12,8 +12,8 @@ class Admin::Muck::FeedsController < Admin::Muck::BaseController
12
12
 
13
13
  def update
14
14
  feed = Feed.find(params[:id])
15
- if params[:status] == 'unban'
16
- unban(feed)
15
+ if params[:status] == 'approve'
16
+ approve(feed)
17
17
  flash[:notice] = t('muck.raker.feed_validated_message')
18
18
  elsif params[:status] == 'ban'
19
19
  ban(feed)
@@ -28,12 +28,12 @@ class Admin::Muck::FeedsController < Admin::Muck::BaseController
28
28
 
29
29
  def ban(feed)
30
30
  feed.entries.destroy_all
31
- feed.status = -1
31
+ feed.status = MuckRaker::Status::BANNED
32
32
  feed.save!
33
33
  end
34
34
 
35
- def unban(feed)
36
- feed.status = 0
35
+ def approve(feed)
36
+ feed.status = MuckRaker::Status::APPROVED
37
37
  feed.save!
38
38
  end
39
39
 
@@ -0,0 +1,13 @@
1
+ class Admin::Muck::OaiEndpointsController < Admin::Muck::BaseController
2
+
3
+ unloadable
4
+
5
+ def index
6
+ @oai_endpoints = OaiEndpoint.by_newest.paginate(:page => @page, :per_page => @per_page)
7
+ respond_to do |format|
8
+ format.html { render :template => 'admin/oai_endpoints/index' }
9
+ format.xml { render :xml => @oai_endpoints.to_xml }
10
+ end
11
+ end
12
+
13
+ end
@@ -1,7 +1,10 @@
1
1
  class Muck::AggregationsController < ApplicationController
2
2
 
3
+ unloadable
4
+
3
5
  require 'cgi'
4
6
 
7
+ before_filter :login_required, :except => [:show]
5
8
  before_filter :get_owner, :only => [:index, :new, :create]
6
9
  before_filter :has_permission?, :only => [:index, :new, :create]
7
10
 
@@ -29,25 +32,18 @@ class Muck::AggregationsController < ApplicationController
29
32
  # format.xml { render :xml => @aggregations }
30
33
  # end
31
34
  # end
32
- #
33
- # def show
34
- # @aggregation = Aggregation.find(params[:id])
35
- # user_id = -1
36
- # user_id = current_user.id unless current_user.nil?
37
- #
38
- # @rss_title = @aggregation.title
39
- # @rss_description = @aggregation.description
40
- #
41
- # @entries = Entry.get_entries_for_aggregation(@aggregation.id, user_id, :limit => @per_page, :offset => (@per_page * @page))
42
- # @page_title = @aggregation.title
43
- # respond_to do |format|
44
- # format.html { render(:layout => false) }
45
- # format.opml { render(:layout => false) }
46
- # format.xml { render :xml => @entries }
47
- # format.rss { render(:template => 'aggregations/show', :layout => false) }
48
- # end
49
- # end
50
- #
35
+
36
+ def show
37
+ @aggregation = Aggregation.find(params[:id])
38
+ @page_title = @aggregation.title
39
+ @entries = @aggregation.feeds.entries.paginate(:page => @page, :per_page => @per_page)
40
+ respond_to do |format|
41
+ format.html { render(:template => 'aggregations/show') }
42
+ format.opml { render(:layout => false) }
43
+ format.rss {}
44
+ end
45
+ end
46
+
51
47
  # def show_marked
52
48
  #
53
49
  # @user = User.find(params[:user_id])
@@ -202,28 +198,39 @@ class Muck::AggregationsController < ApplicationController
202
198
  end
203
199
  end
204
200
 
205
- # def edit
206
- # @aggregation = Aggregation.find(params[:id])
207
- # @page_title = 'Editing ' + @aggregation.title
208
- # end
209
- #
210
- # def create
211
- # @aggregation = Aggregation.new(params[:aggregation])
212
- # @aggregation.name = make_safe_uri(@aggregation.title)
213
- # @aggregation.user = current_user
214
- #
215
- # respond_to do |format|
216
- # if @aggregation.save
217
- # flash[:notice] = @aggregation.title + ' created. Now add some feeds:'
218
- # format.html { redirect_to(new_aggregation_feed_path(@aggregation)) }
219
- # format.xml { render :xml => @aggregation, :status => :created, :location => @aggregation }
220
- # else
221
- # format.html { render :action => "new" }
222
- # format.xml { render :xml => @aggregation.errors }
223
- # end
224
- # end
225
- # end
226
- #
201
+ def create
202
+ @aggregation = Aggregation.new(params[:aggregation])
203
+ @aggregation.title = @aggregation.terms.humanize if @aggregation.terms
204
+ @aggregation.save!
205
+
206
+ # build a list of feeds and associate them with the aggregation
207
+ @aggregation.add_feeds(current_user, params[:service_ids])
208
+
209
+ # associate the parent if present
210
+ @parent.aggregations << @aggregation if @parent
211
+
212
+ respond_to do |format|
213
+ flash[:notice] = I18n.t('muck.raker.add_feeds_to_aggregation', :title => @aggregation.title)
214
+ format.html { redirect_to(edit_aggregation_path(@aggregation)) }
215
+ format.xml { render :xml => @aggregation, :status => :created, :location => @aggregation }
216
+ end
217
+
218
+ rescue ActiveRecord::RecordInvalid => ex
219
+ respond_to do |format|
220
+ format.html { render :action => "aggregations/new" }
221
+ format.xml { render :xml => @aggregation.errors }
222
+ end
223
+ end
224
+
225
+ def edit
226
+ @aggregation = Aggregation.find(params[:id])
227
+ @service_categories = ServiceCategory.sorted.find(:all, :include => [:tag_services])
228
+ @page_title = I18n.t('muck.raker.edit_aggregation_title', :title => @aggregation.title)
229
+ respond_to do |format|
230
+ format.html { render :template => 'aggregations/edit' }
231
+ end
232
+ end
233
+
227
234
  # def update
228
235
  # @aggregation = Aggregation.find(params[:id])
229
236
  #
@@ -303,7 +310,10 @@ class Muck::AggregationsController < ApplicationController
303
310
  protected
304
311
 
305
312
  def get_owner
306
- setup_parent
313
+ @parent = get_parent
314
+ unless has_permission?
315
+ permission_denied
316
+ end
307
317
  end
308
318
 
309
319
  def get_aggregation
@@ -324,7 +334,11 @@ class Muck::AggregationsController < ApplicationController
324
334
  end
325
335
 
326
336
  def has_permission?
327
- @parent.can_edit?(current_user)
337
+ if @parent.blank?
338
+ admin?
339
+ else
340
+ @parent.can_edit?(current_user)
341
+ end
328
342
  end
329
343
 
330
344
  end
@@ -2,10 +2,10 @@ class Muck::FeedsController < ApplicationController
2
2
 
3
3
  unloadable
4
4
 
5
- before_filter :get_parent
5
+ before_filter :get_owner
6
6
 
7
7
  def index
8
- @feeds = Feed.valid.by_title.paginate(:page => @page, :per_page => @per_page)
8
+ @feeds = Feed.find(:all, :conditions => 'status >= 0', :order => (params[:order] || 'title') + (params[:asc] == 'false' ? ' DESC' : ' ASC') + ', title', :include => [:default_language]).paginate(:page => @page, :per_page => @per_page)
9
9
  respond_to do |format|
10
10
  format.html { render :template => 'feeds/index' }
11
11
  format.xml { render :xml => @feeds.to_xml }
@@ -15,20 +15,35 @@ class Muck::FeedsController < ApplicationController
15
15
  # pass layout=popup to remove most of the chrome
16
16
  def show
17
17
  @feed = Feed.find(params[:id])
18
- @entries = @feed.entries
18
+ @entries = @feed.entries.paginate(:page => @page, :per_page => @per_page)
19
19
  respond_to do |format|
20
20
  format.html { render :template => 'feeds/show', :layout => params[:layout] || true }
21
- format.pjs { render :template => 'feeds/show', :layout => false }
21
+ format.pjs do
22
+ render :update do |page|
23
+ page.replace_html('feed-container', :partial => 'feeds/feed', :object => @feed)
24
+ end
25
+ end
22
26
  format.json { render :json => @feed.as_json }
23
27
  end
24
28
  end
25
29
 
26
30
  def new
27
31
  respond_to do |format|
28
- format.html { render :template => 'feeds/new', :layout => 'popup' }
32
+ format.html { render :template => 'feeds/new', :layout => params[:layout] || true }
29
33
  end
30
34
  end
31
35
 
36
+ def new_oai_rss
37
+ @feed = Feed.new
38
+ @feed.default_language = Language.find_by_locale('en')
39
+ @feed.service_id = MuckRaker::Services::RSS
40
+ @oai_endpoint = OaiEndpoint.new
41
+ @oai_endpoint.default_language = @feed.default_language
42
+ respond_to do |format|
43
+ format.html { render :template => 'feeds/new_oai_rss', :layout => 'popup' }
44
+ end
45
+ end
46
+
32
47
  def new_extended
33
48
  respond_to do |format|
34
49
  format.html { render :template => 'feeds/new_extended', :layout => 'popup' }
@@ -36,6 +51,9 @@ class Muck::FeedsController < ApplicationController
36
51
  end
37
52
 
38
53
  def create
54
+
55
+ Feed.discover_feeds(params[:feed][:uri])
56
+
39
57
  @feed = Feed.new(params[:feed])
40
58
  @feed.contributor = current_user # record the user that submitted the feed for auditing purposes
41
59
  @feed.harvested_from_display_uri = @feed.display_uri
@@ -73,12 +91,8 @@ class Muck::FeedsController < ApplicationController
73
91
 
74
92
  protected
75
93
 
76
- def get_parent
77
- if !params[:parent_type] || !params[:parent_id]
78
- return
79
- end
80
- @klass = params[:parent_type].to_s.constantize
81
- @parent = @klass.find(params[:parent_id])
94
+ def get_owner
95
+ @parent = get_parent
82
96
  unless has_permission_to_add_feed(current_user, @parent)
83
97
  permission_denied
84
98
  end
@@ -90,19 +104,22 @@ class Muck::FeedsController < ApplicationController
90
104
 
91
105
  # Handles render and redirect after success or failure of the
92
106
  # create action. Override to perform a different action
107
+ # fail_template determines which 'new' is rendered in the event that
108
+ # the create is not successful.
93
109
  def after_create_response(success)
94
110
  if success
95
111
  flash[:notice] = t('muck.raker.feed_successfully_created')
96
112
  respond_to do |format|
97
113
  format.html { redirect_to feed_path(@feed) }
98
- format.pjs { render :template => 'feeds/show', :layout => false }
114
+ format.pjs { redirect_to feed_path(@feed, :layout => 'popup') }
99
115
  format.json { render :json => @feed.as_json }
100
116
  format.xml { head :created, :location => feed_url(@feed) }
101
117
  end
102
118
  else
119
+ fail_template = params[:new_template] || 'feeds/new'
103
120
  respond_to do |format|
104
- format.html { render :template => "feeds/new" }
105
- format.pjs { render :template => "feeds/new", :layout => false }
121
+ format.html { render :template => fail_template }
122
+ format.pjs { render :template => fail_template, :layout => false }
106
123
  format.json { render :json => @feed.as_json }
107
124
  format.xml { render :xml => @feed.errors.to_xml }
108
125
  end
@@ -29,7 +29,7 @@ class Muck::IdentityFeedsController < ApplicationController
29
29
  def create
30
30
  @service = Service.find(params[:service_id])
31
31
  @feed = Feed.new(:uri => params[:uri], :login => params[:username])
32
- feeds = Feed.create_service_feeds(@service, params[:uri], params[:username], params[:password], current_user.id)
32
+ feeds = Service.create_feeds_for_service(@service, params[:uri], params[:username], params[:password], current_user.id)
33
33
  if feeds.blank?
34
34
  success = false
35
35
  if params[:username]
@@ -118,13 +118,13 @@ class Muck::IdentityFeedsController < ApplicationController
118
118
 
119
119
  def get_new_html(service, parent, feed)
120
120
  render_as_html do
121
- render_to_string(:partial=> 'identity_feeds/form', :locals => { :service => service, :parent => parent, :feed => feed })
121
+ render_to_string(:partial => 'identity_feeds/form', :locals => { :service => service, :parent => parent, :feed => feed })
122
122
  end
123
123
  end
124
124
 
125
125
  def get_edit_html(identity_feed)
126
126
  render_as_html do
127
- render_to_string(:partial=> 'identity_feeds/form', :locals => { :service => identity_feed.feed.service, :parent => identity_feed.ownable, :feed => identity_feed.feed })
127
+ render_to_string(:partial => 'identity_feeds/form', :locals => { :service => identity_feed.feed.service, :parent => identity_feed.ownable, :feed => identity_feed.feed })
128
128
  end
129
129
  end
130
130
 
@@ -0,0 +1,96 @@
1
+ class Muck::OaiEndpointsController < ApplicationController
2
+
3
+ unloadable
4
+
5
+ # pass layout=popup to remove most of the chrome
6
+ def show
7
+ @oai_endpoint = OaiEndpoint.find(params[:id])
8
+ respond_to do |format|
9
+ format.html { render :template => 'oai_endpoints/show', :layout => params[:layout] || true }
10
+ format.json { render :json => @oai_endpoint.as_json }
11
+ end
12
+ end
13
+
14
+ def new
15
+ respond_to do |format|
16
+ format.html { render :template => 'oai_endpoints/new', :layout => params[:layout] || true }
17
+ end
18
+ end
19
+
20
+ def create
21
+ @oai_endpoint = OaiEndpoint.new(params[:oai_endpoint])
22
+ @oai_endpoint.contributor = current_user # record the user that submitted the oai_endpoint for auditing purposes
23
+ @oai_endpoint.inform_admin # let an admin know that a global oai_endpoint was added.
24
+ after_create_response(@oai_endpoint.save)
25
+ end
26
+
27
+ def edit
28
+ @oai_endpoint = OaiEndpoint.find(params[:id])
29
+ respond_to do |format|
30
+ format.html { render :template => 'oai_endpoints/edit', :layout => 'popup' }
31
+ end
32
+ end
33
+
34
+ def update
35
+ @oai_endpoint = OaiEndpoint.find(params[:id])
36
+ after_update_response(@oai_endpoint.update_attributes(params[:oai_endpoint]))
37
+ end
38
+
39
+ def destroy
40
+ @oai_endpoint = OaiEndpoint.find(params[:id])
41
+ @oai_endpoint.destroy
42
+ after_destroy_response
43
+ end
44
+
45
+ protected
46
+
47
+ def has_permission_to_add_oai_endpoint(user, parent)
48
+ user == parent || parent.can_add_oai_endpoint?(user)
49
+ end
50
+
51
+ # Handles render and redirect after success or failure of the
52
+ # create action. Override to perform a different action
53
+ def after_create_response(success)
54
+ if success
55
+ flash[:notice] = t('muck.raker.oai_endpoint_successfully_created')
56
+ respond_to do |format|
57
+ format.html { redirect_to oai_endpoint_path(@oai_endpoint) }
58
+ format.pjs { redirect_to oai_endpoint_path(@oai_endpoint, :layout => 'popup') }
59
+ format.json { render :json => @oai_endpoint.as_json }
60
+ format.xml { head :created, :location => oai_endpoint_url(@oai_endpoint) }
61
+ end
62
+ else
63
+ respond_to do |format|
64
+ format.html { render :template => "oai_endpoints/new" }
65
+ format.pjs { render :template => "oai_endpoints/new", :layout => false }
66
+ format.json { render :json => @oai_endpoint.as_json }
67
+ format.xml { render :xml => @oai_endpoint.errors.to_xml }
68
+ end
69
+ end
70
+ end
71
+
72
+ # Handles render and redirect after success or failure of the
73
+ # update action. Override to perform a different action
74
+ def after_update_response(success)
75
+ respond_to do |format|
76
+ if success
77
+ flash[:notice] = t('muck.raker.oai_endpoint_successfully_updated')
78
+ format.html { redirect_to oai_endpoint_path(@oai_endpoint) }
79
+ format.xml { head :ok }
80
+ else
81
+ format.html { render :template => "oai_endpoints/edit" }
82
+ format.xml { render :xml => @oai_endpoint.errors.to_xml }
83
+ end
84
+ end
85
+ end
86
+
87
+ # Handles render and redirect after the delete action.
88
+ # Override to perform a different action
89
+ def after_destroy_response
90
+ respond_to do |format|
91
+ format.html { redirect_to oai_endpoints_path }
92
+ format.xml { head :ok }
93
+ end
94
+ end
95
+
96
+ end
@@ -0,0 +1,29 @@
1
+ class Muck::OpmlsController < ApplicationController
2
+
3
+ unloadable
4
+
5
+ def index
6
+ if params[:terms].blank?
7
+ flash[:error] = I18n.t('muck.raker.no_terms_error')
8
+ redirect_to new_opml_path
9
+ else
10
+ @feeds = Service.build_feeds(current_user, params[:terms], params[:service_ids])
11
+ @discovered_feeds = GoogleRequest.find_feeds(params[:terms])
12
+ @title = params[:terms]
13
+ @terms = params[:terms]
14
+ respond_to do |format|
15
+ format.html { render :template => 'opmls/index' }
16
+ format.opml { render(:layout => false) }
17
+ end
18
+ end
19
+ end
20
+
21
+ def new
22
+ @page_title = I18n.t('muck.raker.generate_opml')
23
+ @service_categories = ServiceCategory.sorted.find(:all, :include => [:tag_services])
24
+ respond_to do |format|
25
+ format.html { render :template => 'opmls/new' }
26
+ end
27
+ end
28
+
29
+ end
@@ -5,6 +5,9 @@ class Muck::RecommendationsController < ApplicationController
5
5
  # GET /recommendations
6
6
  # GET /recommendations.xml
7
7
  def index
8
+
9
+ @real_time == params[:rtr]
10
+
8
11
  @details = params[:details] == "true"
9
12
 
10
13
  @uri = params[:u] || request.env['HTTP_REFERER']
@@ -37,11 +40,11 @@ class Muck::RecommendationsController < ApplicationController
37
40
  end
38
41
  end
39
42
  format.xml {
40
- render(:template => @entry.id.nil? ? '/recommendations/index_real_time.xml.builder' : '/recommendations/index.xml.builder', :layout => false)
43
+ render(:template => @entry.id.nil? && real_time == true ? '/recommendations/index_real_time.xml.builder' : '/recommendations/index.xml.builder', :layout => false)
41
44
  }
42
45
  format.pjs {
43
46
  @host = "http://#{URI.parse(@uri).host}"
44
- render(:template => @entry.id.nil? ? 'recommendations/index_real_time.pjs.erb' : 'recommendations/index.pjs.erb', :layout => false)
47
+ render(:template => @entry.id.nil? && real_time == true ? 'recommendations/index_real_time.pjs.erb' : 'recommendations/index.pjs.erb', :layout => false)
45
48
  }
46
49
  format.rss {
47
50
  render(:template => 'recommendations/index.rss.builder', :layout => false)
@@ -7,7 +7,7 @@ class Muck::VisitsController < ApplicationController
7
7
  def show
8
8
  @entry = Entry.find(params[:id])
9
9
  @page_title = @entry.title
10
- @resource_uri = @entry.resource_uri
10
+ @resource_uri = @entry.resource_uri + (@entry.resource_uri.include?('?') ? "&" : "?") + "show_recs=true";
11
11
  @share = Share.new(:title => @entry.title, :uri => @resource_uri, :entry_id => @entry.id) if GlobalConfig.enable_raker_shares
12
12
 
13
13
  if GlobalConfig.enable_raker_comments
@@ -1,27 +1,44 @@
1
1
  module MuckRakerFeedsHelper
2
-
2
+
3
3
  def add_feed(parent = nil)
4
4
  render :partial => 'parts/add_feed', :locals => {:parent => parent}
5
5
  end
6
-
7
- def add_single_feed(parent = nil)
8
- render :partial => 'parts/add_single_feed', :locals => {:parent => parent}
9
- end
10
-
11
- def add_extended_feed(parent = nil)
12
- render :partial => 'parts/add_extended_feed', :locals => {:parent => parent}
13
- end
14
6
 
15
- def new_feed_path_with_parent(parent)
7
+ def new_feed_path_with_parent(parent, options = {})
16
8
  if parent
17
- feeds_path(make_parent_params(parent))
9
+ feeds_path(make_parent_params(parent).merge(options))
18
10
  else
19
- feeds_path
11
+ feeds_path(options)
20
12
  end
21
13
  end
22
14
 
15
+ def new_aggregation_path_with_parent(parent, options = {})
16
+ if parent
17
+ aggregations_path(make_parent_params(parent).merge(options))
18
+ else
19
+ aggregations_path(options)
20
+ end
21
+ end
22
+
23
23
  def make_parent_params(parent)
24
24
  { :parent_id => parent.id, :parent_type => parent.class.to_s }
25
25
  end
26
-
27
- end
26
+
27
+ def feed_contributor_link(feed)
28
+ if feed.contributor_id.nil?
29
+ admin = Feed.find_by_login('admin')
30
+ 'unknown'
31
+ else
32
+ link_to feed.contributor.display_name, user_path(feed.contributor_id)
33
+ end
34
+ end
35
+
36
+ def sort_feeds_link(current_order, current_asc, new_order, admin = false)
37
+ if admin == true
38
+ admin_feeds_url(:order => new_order, :asc => (current_order == new_order && (current_asc == 'true' || current_asc == nil)) ? 'false' : 'true')
39
+ else
40
+ feeds_url(:order => new_order, :asc => (current_order == new_order && (current_asc == 'true' || current_asc == nil)) ? 'false' : 'true')
41
+ end
42
+ end
43
+
44
+ end