diff --git a/app/controllers/paragraph_renderer.rb b/app/controllers/paragraph_renderer.rb index be86221e..cfb573b2 100644 --- a/app/controllers/paragraph_renderer.rb +++ b/app/controllers/paragraph_renderer.rb @@ -423,7 +423,7 @@ def html_include(part, value=[]) @includes[part.to_sym] += value end - # Includes the specified javascript file when the page is rendered + # Includes the specified javascript file when the page is rendered # uses the standard rails javascript_include_tag syntax def require_js(js) @includes[:js] ||= [] diff --git a/app/models/model_extension/content_node_extension.rb b/app/models/model_extension/content_node_extension.rb index 7d7cb9ed..f81969e3 100644 --- a/app/models/model_extension/content_node_extension.rb +++ b/app/models/model_extension/content_node_extension.rb @@ -78,6 +78,10 @@ def self.append_features(mod) #:nodoc: module InstanceMethods + def content_node_link + self.content_node.link if self.content_node + end + def content_node_save #:nodoc: # Only save if we aren't already inside of save_content save_content(nil,{},true) if(!content_node_skip) diff --git a/app/views/layouts/page.rhtml b/app/views/layouts/page.rhtml index f7cecfeb..6a475205 100644 --- a/app/views/layouts/page.rhtml +++ b/app/views/layouts/page.rhtml @@ -8,8 +8,8 @@ <% if @output.meta_description || @output.includes[:meta_description] -%> <% end -%> -<% if @output.meta_keywords%> - +<% if @output.meta_keywords || @output.includes[:meta_keywords] %> + <% end -%> <% if @robots.length > 0 %> '/> diff --git a/vendor/modules/blog/app/controllers/blog/manage_controller.rb b/vendor/modules/blog/app/controllers/blog/manage_controller.rb index 72bee239..b7bcc57a 100644 --- a/vendor/modules/blog/app/controllers/blog/manage_controller.rb +++ b/vendor/modules/blog/app/controllers/blog/manage_controller.rb @@ -44,9 +44,7 @@ def self.mail_manager_generator_handler_info ] def display_generate_post_table(display=true) - @tbl = generate_post_table_generate params, :order => 'blog_posts.published_at DESC',:joins => [ :active_revision, :blog_blog ] - render :partial =>'generate_post_table' if display end @@ -81,29 +79,21 @@ def generate_categories end def post_table(display=true) - if(request.post? && params[:table_action] && params[:post].is_a?(Hash)) - - case params[:table_action] - when 'delete': - params[:post].each do |entry_id,val| - Blog::BlogPost.destroy(entry_id.to_i) - end - when 'publish': - params[:post].each do |entry_id,val| - entry = Blog::BlogPost.find(entry_id) - unless (entry.status == 'published' && entry.published_at && entry.published_at < Time.now) - entry.status = 'published' - entry.published_at = Time.now - entry.save - end - end + + active_table_action(:post) do |act,eids| + entries = Blog::BlogPost.find(eids) + case act + when 'delete': entries.map(&:destroy) + when 'publish': entries.map(&:publish!) + when 'unpublish': entries.map(&:unpublish!) + when 'duplicate': entries.map(&:duplicate!) end end - + @active_table_output = post_table_generate params, :joins => [ :active_revision ], :include => [ :blog_categories ], - :order => 'blog_posts.updated_at DESC', :conditions => ['blog_posts.blog_blog_id = ?',@blog.id ] + :order => 'blog_posts.updated_at DESC', :conditions => ['blog_posts.blog_blog_id = ?',@blog.id ] + - render :partial => 'post_table' if display end @@ -154,10 +144,9 @@ def post @entry.attributes = params[:entry] case params[:update_entry][:status] - when 'draft': - @entry.make_draft - when 'publish_now' # if we want to publish the article now - @entry.publish_now + when 'draft': @entry.make_draft + when 'publish_now': @entry.publish_now + when 'preview': @entry.make_preview when 'post_date' @entry.publish(params[:entry][:published_at].blank? ? Time.now : (params[:entry][:published_at])) end diff --git a/vendor/modules/blog/app/controllers/blog/page_controller.rb b/vendor/modules/blog/app/controllers/blog/page_controller.rb index 2549b531..1ea58fb0 100644 --- a/vendor/modules/blog/app/controllers/blog/page_controller.rb +++ b/vendor/modules/blog/app/controllers/blog/page_controller.rb @@ -35,8 +35,9 @@ class Blog::PageController < ParagraphController :inputs => [[:category, 'Selected Category', :blog_category_id]] class EntryListOptions < HashModel - attributes :blog_id => 0, :items_per_page => 10, :detail_page => nil, :include_in_path => nil,:blog_target_id => nil, :category => nil + attributes :blog_id => 0, :items_per_page => 10, :detail_page => nil, :include_in_path => nil,:blog_target_id => nil, :category => nil, :blog_ids => [] + integer_array_options :blog_ids def detail_page_id self.detail_page @@ -47,16 +48,21 @@ def detail_page_id options_form(fld(:blog_id, :select, :options => :blog_options), fld(:detail_page, :page_selector,:description => 'Leave blank to use canonical content url'), - fld(:include_in_path, :select, :options => :include_in_path_options), fld(:items_per_page, :select, :options => (1..50).to_a), - fld(:blog_target_id, :select, :options => :blog_target_options), + fld('Advanced Options',:header), + fld(:blog_target_id, :select, :options => :blog_target_options, :description => 'Advanced use only'), + fld(:blog_ids, :ordered_array, :options => :blog_name_options, :label => 'For multiple blogs',:description => 'Leave blank to show all blogs'), fld(:category,:text_field) ) def blog_target_options; Blog::BlogTarget.select_options_with_nil; end + def blog_name_options + Blog::BlogBlog.find_select_options(:all,:order=>'name') + end + def blog_options - [['---Use Page Connection---'.t,'']] + [['All Blogs'.t,-1]] + Blog::BlogBlog.find_select_options(:all,:order=>'name') + [['---Use Page Connection---'.t,'']] + [['Multiple Blogs'.t,-1]] + Blog::BlogBlog.find_select_options(:all,:order=>'name') end def include_in_path_options diff --git a/vendor/modules/blog/app/controllers/blog/page_renderer.rb b/vendor/modules/blog/app/controllers/blog/page_renderer.rb index 5641f6d5..b632e95e 100644 --- a/vendor/modules/blog/app/controllers/blog/page_renderer.rb +++ b/vendor/modules/blog/app/controllers/blog/page_renderer.rb @@ -78,7 +78,7 @@ def entry_list pages,entries = blog.paginate_posts(page,items_per_page) end else - pages,entries = Blog::BlogPost.paginate_published(page,items_per_page) + pages,entries = Blog::BlogPost.paginate_published(page,items_per_page,@options.blog_ids) end cache[:output] = blog_entry_list_feature(:blog => blog, @@ -106,9 +106,9 @@ def entry_detail result = renderer_cache(blog, display_string) do |cache| entry = nil if editor? - entry = blog.blog_posts.find(:first,:conditions => ['blog_posts.status = "published" AND blog_blog_id=? ',blog.id]) + entry = blog.blog_posts.find(:first,:conditions => ['blog_posts.status "published" AND blog_blog_id=? ',blog.id]) elsif conn_type == :post_permalink - entry = blog.find_post_by_permalink(conn_id) if conn_id + entry = blog.find_post_by_permalink(conn_id) end cache[:output] = blog_entry_detail_feature(:entry => entry, @@ -116,6 +116,7 @@ def entry_detail :detail_page => site_node.node_path, :blog => blog) cache[:title] = entry ? entry.title : '' + cache[:keywords] = (entry && !entry.keywords.blank?) ? entry.keywords : nil cache[:entry_id] = entry ? entry.id : nil end @@ -124,6 +125,7 @@ def entry_detail set_page_connection(:post, result.entry_id ) set_title(result.title) set_content_node(['Blog::BlogPost', result.entry_id]) + html_include('meta_keywords',result.keywords) if result.keywords else return render_paragraph :text => '' if (['', 'category','tag','archive'].include?(conn_id.to_s.downcase)) && site_node.id == @options.list_page_id raise SiteNodeEngine::MissingPageException.new( site_node, language ) unless editor? diff --git a/vendor/modules/blog/app/models/blog/blog_blog.rb b/vendor/modules/blog/app/models/blog/blog_blog.rb index a8149c41..f74ff5b7 100644 --- a/vendor/modules/blog/app/models/blog/blog_blog.rb +++ b/vendor/modules/blog/app/models/blog/blog_blog.rb @@ -89,7 +89,7 @@ def find_post_by_permalink(permalink) Blog::BlogPost.find(:first, :include => [ :active_revision ], :order => 'published_at DESC', - :conditions => ["blog_posts.status = \"published\" AND blog_blog_id=? AND blog_posts.permalink=?",self.id,permalink]) + :conditions => ["blog_posts.status in('published','preview') AND blog_blog_id=? AND blog_posts.permalink=?",self.id,permalink]) end def content_type_name diff --git a/vendor/modules/blog/app/models/blog/blog_post.rb b/vendor/modules/blog/app/models/blog/blog_post.rb index 0d9e154d..9a6f3941 100644 --- a/vendor/modules/blog/app/models/blog/blog_post.rb +++ b/vendor/modules/blog/app/models/blog/blog_post.rb @@ -19,7 +19,7 @@ class Blog::BlogPost < DomainModel validates_datetime :published_at, :allow_nil => true - has_options :status, [ [ 'Draft','draft'], ['Published','published']] + has_options :status, [ [ 'Draft','draft'],['Preview','preview'], ['Published','published']] has_many :comments, :as => :target @@ -88,12 +88,22 @@ def comments_count return @comments_count end - def self.paginate_published(page,items_per_page) - Blog::BlogPost.paginate(page, - :include => [ :active_revision, :blog_categories ], - :order => 'published_at DESC', - :conditions => ["blog_posts.status = \"published\" AND blog_posts.published_at < ?",Time.now], - :per_page => items_per_page) + def self.paginate_published(page,items_per_page,blog_ids = []) + if blog_ids.length > 0 + Blog::BlogPost.paginate(page, + :include => [ :active_revision, :blog_categories ], + :order => 'published_at DESC', + :conditions => ["blog_posts.status = \"published\" AND blog_posts.published_at < ? AND blog_posts.blog_blog_id IN (?)",Time.now,blog_ids], + :per_page => items_per_page) + + else + Blog::BlogPost.paginate(page, + :include => [ :active_revision, :blog_categories ], + :order => 'published_at DESC', + :conditions => ["blog_posts.status = \"published\" AND blog_posts.published_at < ?",Time.now], + :per_page => items_per_page) + end + end def generate_permalink! @@ -227,14 +237,52 @@ def publish_now end end + def publish! + if self.publish_now + self.save + end + end + + def unpublish! + self.status ='draft' + self.save + end + def publish(tm) self.status = 'published' self.published_at = tm end + def preview! + self.status = 'preview' + self.save + end + + def duplicate! + new_post = self.clone + + [:media_file_id, :domain_file_id, :body, :end_user_id, :keywords, + :author, :embedded_media, :preview_title, :preview ].each do |fld| + new_post.send("#{fld}=",self.send(fld)) + end + new_post.created_at = nil + new_post.updated_at = nil + new_post.title = "(COPY) " + self.title.to_s + new_post.permalink = nil + new_post.published_at = nil + new_post.status = 'draft' + new_post.save + new_post + end + + def make_draft self.status = 'draft' end + + def make_preview + self.status = 'preview' + end def published? self.status.to_s =='published' && self.published_at && self.published_at < Time.now diff --git a/vendor/modules/blog/app/views/blog/manage/_post_table.rhtml b/vendor/modules/blog/app/views/blog/manage/_post_table.rhtml index 55ceb974..fb4ce83c 100644 --- a/vendor/modules/blog/app/views/blog/manage/_post_table.rhtml +++ b/vendor/modules/blog/app/views/blog/manage/_post_table.rhtml @@ -3,7 +3,9 @@ :refresh_url => url_for(:action => 'post_table', :path => @blog.id), :class => 'active_table', :style => 'width:100%', - :actions => [ [ 'Publish', 'publish', 'Publish the selected entries?' ] ], + :actions => [ [ 'Publish', 'publish', 'Publish the selected entries?' ], + [ 'Unpublish','unpublish','Unpublish the selected entries?'], + ['Duplicate','duplicate','Duplicate the selected entries?']], :more_actions => [ [ 'Delete', 'delete', 'Are you sure you want to permantently delete the selected entries?' ] @@ -11,12 +13,17 @@ :update => 'post_table' do |t| %> > <%= entry_checkbox "post", t.id %> - [ @blog.id, t.id ] %>'><%= t.active_revision.title %> - <%= t.status_display %><%= " (Post Dated)" if t.published_at && t.published_at > current_time %> + [ @blog.id, t.id ] %>'><%= h t.active_revision.title %> + + <% if (t.status == 'published' || t.status == 'preview') && t.content_node_link %> + <%= link_to theme_icon("table","icons/table_actions/preview.gif"), t.content_node_link %> + <% end -%> + <%= t.status_display %><%= " (Post Dated)" if t.published_at && t.published_at > current_time %> + <%= t.published_at ? t.published_at.localize(DEFAULT_DATETIME_FORMAT.t) : '-' %> [ @blog.id, t.id ] %>'><%= t.permalink %> <%= t.updated_at ? t.updated_at.localize(DEFAULT_DATETIME_FORMAT.t) : '-' %> - <%= t.blog_categories.collect(&:name).join(", ") %> + <%= h t.blog_categories.collect(&:name).join(", ") %> diff --git a/vendor/modules/blog/app/views/blog/manage/post.rhtml b/vendor/modules/blog/app/views/blog/manage/post.rhtml index 194d43a7..3c595546 100644 --- a/vendor/modules/blog/app/views/blog/manage/post.rhtml +++ b/vendor/modules/blog/app/views/blog/manage/post.rhtml @@ -128,6 +128,7 @@