Class: Orange::BlogPostResource

Inherits:
ModelResource show all
Defined in:
lib/orange-more/blog/resources/blog_resource.rb

Instance Attribute Summary

Attributes inherited from ModelResource

#model_class

Instance Method Summary collapse

Methods inherited from ModelResource

#afterDelete, #afterNew, #afterSave, #beforeDelete, #beforeNew, #beforeSave, #create, #delete, #do_list_view, #do_view, #edit, #find_one, #index, #list, #new, new, #onDelete, #onNew, #onSave, #save, #show, #table_row, use, #view, #view_opts

Methods inherited from RoutableResource

#routable, #route

Methods inherited from Resource

#afterLoad, call_me, #do_view, #find_extras, #init, #initialize, #options, #orange, #orange_name, #routable, #set_orange, set_orange, #view, #view_opts

Methods included from ClassInheritableAttributes

#cattr_accessor, #cattr_reader, #cattr_writer, eval_in_accessor_module, fetch_value, store_value

Constructor Details

This class inherits a constructor from Orange::Resource

Instance Method Details

#blog_archive_view(packet, opts = {}) ⇒ Object



67
68
69
70
# File 'lib/orange-more/blog/resources/blog_resource.rb', line 67

def blog_archive_view(packet, opts = {})
  opts.merge!( :blog_url => blog_url_for(packet))
  do_list_view(packet, :blog_archive_view, opts)
end

#blog_for_site(packet, site_id = false) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/orange-more/blog/resources/blog_resource.rb', line 72

def blog_for_site(packet, site_id = false)
  site_id ||= (packet['subsite'].blank? ? packet['site'].id : packet['subsite'].id)
  blog = OrangeBlog.first(:orange_site_id => site_id)
  if !blog && packet.request.post? # Only create a new blog if this is a post
    blog = OrangeBlog.new
    blog.title = 'An Orange Hosted Blog'
    blog.orange_site = packet['site']
    blog.save
  end
  if packet.request.post? && !OrangeRoute.first(:resource => 'blog', :orange_site_id => packet['site'].id)
    orange[:sitemap, true].add_route_for(packet,
      :orange_site_id => site_id, 
      :resource => :blog, 
      :resource_id => blog.id,
      :resource_action => :blog_view,
      :slug => 'blog', 
      :link_text => 'Orange Blog'
    )
  end
  blog
end

#blog_list_view(packet, opts = {}) ⇒ Object



63
64
65
# File 'lib/orange-more/blog/resources/blog_resource.rb', line 63

def blog_list_view(packet, opts = {})
  blog_offset_list_view(packet, opts.merge!({:page => 1}))
end

#blog_offset_list_view(packet, opts = {}) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/orange-more/blog/resources/blog_resource.rb', line 49

def blog_offset_list_view(packet, opts = {})
  opts.merge!(packet.extract_opts)
  opts.merge!( :blog_url => blog_url_for(packet))
  blog = blog_for_site(packet)
  opts[:page] = opts[:page].to_i unless opts[:page].blank?
  page = opts[:page].blank? ? 0 : opts[:page] - 1 
  opts[:list] = blog.posts.published.all(:order => :published_at.desc, 
      :limit => 5, 
      :offset => (5*page)
  )
  opts[:pages] = (blog.posts.published.count / 5) + 1
  do_list_view(packet, :blog_offset_list_view, opts)
end

#blog_post_view(packet, opts = {}) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/orange-more/blog/resources/blog_resource.rb', line 26

def blog_post_view(packet, opts = {})
  resource_path = packet['route.resource_path']
  blog = blog_for_site(packet)
  opts.merge!( :blog_url => blog_url_for(packet))
  parts = resource_path.split('/')
  if parts.size == 2
    post = blog.posts.first(:id => parts[1].to_i)
  elsif parts.size == 4
    post = blog.posts.year_and_month(parts[1].to_i, parts[2].to_i).slug(parts[3]) 
  end
  if post
    orange[:blog_posts].do_view(packet, :show, opts.merge({:model => post}))
  else
    "Not found"
  end
end

#blog_url_for(packet) ⇒ Object



43
44
45
46
47
# File 'lib/orange-more/blog/resources/blog_resource.rb', line 43

def blog_url_for(packet)
  blog = blog_for_site(packet)
  blog_url = orange[:sitemap, true].url_for(packet, :orange_site_id => blog.orange_site_id, :resource => :blog, :resource_id => blog.id, :resource_action => :blog_view, :include_subsite => true)
  blog_url.gsub!(/\/$/, '')
end

#blog_view(packet, opts = {}) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/orange-more/blog/resources/blog_resource.rb', line 13

def blog_view(packet, opts = {})
  resource_path = packet['route.resource_path']
  if resource_path.blank?
    blog_list_view(packet, opts)
  elsif resource_path =~ /^\/page/
    blog_offset_list_view(packet, opts)
  elsif resource_path =~ /^\/archives?/
    blog_archive_view(packet, opts)
  else
    blog_post_view(packet, opts)
  end
end

#find_list(packet, mode, id = false) ⇒ Object



94
95
96
97
98
99
100
101
# File 'lib/orange-more/blog/resources/blog_resource.rb', line 94

def find_list(packet, mode, id =false)
  blog = blog_for_site(packet)
  case mode
  when :blog_list_view then blog.posts.published.all(:order => :published_at.desc, :limit => 5)
  when :blog_archive_view then blog.posts.published
  else OrangeBlog.all
  end
end

#sitemap_row(packet, opts = {}) ⇒ Object



9
10
11
# File 'lib/orange-more/blog/resources/blog_resource.rb', line 9

def sitemap_row(packet, opts = {})
  do_view(packet, :sitemap_row, opts)
end

#stack_initObject



5
6
7
# File 'lib/orange-more/blog/resources/blog_resource.rb', line 5

def stack_init
  orange[:admin, true].add_link("Settings", :resource => @my_orange_name, :text => 'Blog')      
end