Commit b8e132f6d89bc96c7c419caa141fb2555584fad6

Authored by Leandro Santos
1 parent 7e2ba029

Choose content type for display

plugins/display_content/lib/display_content_block.rb
@@ -18,13 +18,16 @@ class DisplayContentBlock < Block @@ -18,13 +18,16 @@ class DisplayContentBlock < Block
18 settings_items :nodes, :type => Array, :default => [] 18 settings_items :nodes, :type => Array, :default => []
19 settings_items :sections, 19 settings_items :sections,
20 :type => Array, 20 :type => Array,
21 - :default => [{:name => _('Publish date'), :checked => true},  
22 - {:name => _('Title'), :checked => true},  
23 - {:name => _('Abstract'), :checked => true},  
24 - {:name => _('Body'), :checked => false},  
25 - {:name => _('Image'), :checked => false},  
26 - {:name => _('Tags'), :checked => false}] 21 +#FIXME make test for values
  22 +#Refactoring section stuff
  23 + :default => [{:value => 'publish_date', :checked => true},
  24 + {:value => 'title', :checked => true},
  25 + {:value => 'abstract', :checked => true},
  26 + {:value => 'body', :checked => false},
  27 + {:value => 'image', :checked => false},
  28 + {:value => 'tags', :checked => false}]
27 settings_items :display_folder_children, :type => :boolean, :default => true 29 settings_items :display_folder_children, :type => :boolean, :default => true
  30 + settings_items :types, :type => Array, :default => ['UploadedFile']
28 31
29 def self.description 32 def self.description
30 _('Display your contents') 33 _('Display your contents')
@@ -34,6 +37,44 @@ class DisplayContentBlock < Block @@ -34,6 +37,44 @@ class DisplayContentBlock < Block
34 _('This block displays articles chosen by you. You can edit the block to select which of your articles is going to be displayed in the block.') 37 _('This block displays articles chosen by you. You can edit the block to select which of your articles is going to be displayed in the block.')
35 end 38 end
36 39
  40 + def section_name(section)
  41 + {
  42 + 'publish_date' => _('Publish date'),
  43 + 'title' => _('Title'),
  44 + 'abstract' => _('Abstract'),
  45 + 'body' => _('Body'),
  46 + 'image' => _('Image'),
  47 + 'tags' => _('Tags')
  48 + }[section] || section
  49 + end
  50 +
  51 + #FIXME make this test copy of Context Content
  52 + def available_content_types
  53 + @available_content_types ||= [UploadedFile, Event, TinyMceArticle, TextileArticle, RawHTMLArticle, Folder, Blog, Forum, Gallery, RssFeed] + plugins.dispatch(:content_types)
  54 + checked_types = types.map {|t| t.constantize}
  55 + checked_types + (@available_content_types - checked_types)
  56 + end
  57 +
  58 + #FIXME make this test copy of Context Content
  59 + def first_content_types
  60 + available_content_types.first(first_types_count)
  61 + end
  62 +
  63 + #FIXME make this test copy of Context Content
  64 + def more_content_types
  65 + available_content_types.drop(first_types_count)
  66 + end
  67 +
  68 + #FIXME make this test copy of Context Content
  69 + def first_types_count
  70 + [2, types.length].max
  71 + end
  72 +
  73 + #FIXME make this test copy of Context Content
  74 + def types=(new_types)
  75 + settings[:types] = new_types.reject(&:blank?)
  76 + end
  77 +
37 def checked_nodes= params 78 def checked_nodes= params
38 self.nodes = params.keys 79 self.nodes = params.keys
39 end 80 end
@@ -71,8 +112,12 @@ class DisplayContentBlock < Block @@ -71,8 +112,12 @@ class DisplayContentBlock < Block
71 112
72 include ActionController::UrlWriter 113 include ActionController::UrlWriter
73 def content(args={}) 114 def content(args={})
74 - extra_condition = display_folder_children ? 'OR articles.parent_id IN(:nodes)':''  
75 - docs = nodes.blank? ? [] : owner.articles.find(:all, :conditions => ["(articles.id IN(:nodes) #{extra_condition}) AND articles.type IN(:types)", {:nodes => self.nodes, :types => VALID_CONTENT}]) 115 + nodes_conditions = nodes.blank? ? '' : " articles.id IN(:nodes) "
  116 + nodes_conditions += ' OR articles.parent_id IN(:nodes) ' if !nodes.blank? && display_folder_children
  117 +
  118 +# docs = owner.articles.find(:all, :conditions => ["articles.type IN(:types) #{nodes.blank? ? '' : " AND (#{nodes_conditions})"}", {:nodes => self.nodes, :types => (types || VALID_CONTENT)}])
  119 +
  120 + docs = owner.articles.find(:all, :conditions => ["articles.type IN(:types)", {:nodes => self.nodes, :types => (self.types || VALID_CONTENT)}])
76 121
77 block_title(title) + 122 block_title(title) +
78 content_tag('ul', docs.map {|item| 123 content_tag('ul', docs.map {|item|
@@ -82,24 +127,24 @@ class DisplayContentBlock < Block @@ -82,24 +127,24 @@ class DisplayContentBlock < Block
82 tags_section = '' 127 tags_section = ''
83 128
84 sections.select { |section| 129 sections.select { |section|
85 - case section[:name]  
86 - when 'Publish date' 130 + case section[:value]
  131 + when 'publish_date'
87 content_sections += (display_section?(section) ? (content_tag('div', show_date(item.published_at, false), :class => 'published-at') ) : '') 132 content_sections += (display_section?(section) ? (content_tag('div', show_date(item.published_at, false), :class => 'published-at') ) : '')
88 - when 'Title' 133 + when 'title'
89 content_sections += (display_section?(section) ? (content_tag('div', link_to(h(item.title), item.url), :class => 'title') ) : '') 134 content_sections += (display_section?(section) ? (content_tag('div', link_to(h(item.title), item.url), :class => 'title') ) : '')
90 - when 'Abstract' 135 + when 'abstract'
91 content_sections += (display_section?(section) ? (content_tag('div', item.abstract , :class => 'lead')) : '' ) 136 content_sections += (display_section?(section) ? (content_tag('div', item.abstract , :class => 'lead')) : '' )
92 if display_section?(section) 137 if display_section?(section)
93 read_more_section = content_tag('div', link_to(_('Read more'), item.url), :class => 'read_more') 138 read_more_section = content_tag('div', link_to(_('Read more'), item.url), :class => 'read_more')
94 end 139 end
95 - when 'Body' 140 + when 'body'
96 content_sections += (display_section?(section) ? (content_tag('div', item.body ,:class => 'body')) : '' ) 141 content_sections += (display_section?(section) ? (content_tag('div', item.body ,:class => 'body')) : '' )
97 - when 'Image' 142 + when 'image'
98 image_section = image_tag item.image.public_filename if item.image 143 image_section = image_tag item.image.public_filename if item.image
99 if !image_section.blank? 144 if !image_section.blank?
100 content_sections += (display_section?(section) ? (content_tag('div', link_to( image_section, item.url ) ,:class => 'image')) : '' ) 145 content_sections += (display_section?(section) ? (content_tag('div', link_to( image_section, item.url ) ,:class => 'image')) : '' )
101 end 146 end
102 - when 'Tags' 147 + when 'tags'
103 if !item.tags.empty? 148 if !item.tags.empty?
104 tags_section = item.tags.map { |t| content_tag('span', t.name) }.join("") 149 tags_section = item.tags.map { |t| content_tag('span', t.name) }.join("")
105 content_sections += (display_section?(section) ? (content_tag('div', tags_section, :class => 'tags')) : '') 150 content_sections += (display_section?(section) ? (content_tag('div', tags_section, :class => 'tags')) : '')
@@ -108,7 +153,7 @@ class DisplayContentBlock < Block @@ -108,7 +153,7 @@ class DisplayContentBlock < Block
108 } 153 }
109 154
110 content_sections += read_more_section if !read_more_section.blank? 155 content_sections += read_more_section if !read_more_section.blank?
111 - 156 +#raise sections.inspect
112 content_tag('li', content_sections) 157 content_tag('li', content_sections)
113 end 158 end
114 }.join(" ")) 159 }.join(" "))
plugins/display_content/views/box_organizer/_choose_by_content_type.rhtml 0 → 100644
@@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
  1 +<%= label :block, :types, _('Display content types:'), :class => 'formlabel' %>
  2 +<div class="content_types">
  3 + <% @block.first_content_types.each do |type| %>
  4 + <%= labelled_form_field check_box(:block, 'types', {:multiple => true}, type.name, nil) + _(type.short_description), '' %>
  5 + <% end %>
  6 + <% if !@block.more_content_types.empty? %>
  7 + <a href="#" onclick="jQuery('.content_types .more').toggle(); return false;"><%= _('more') %></a>
  8 + <% end %>
  9 + <div class="more" style="display: none">
  10 + <% @block.more_content_types.each do |type| %>
  11 + <%= labelled_form_field check_box(:block, 'types', {:multiple => true}, type.name, nil) + _(type.short_description), '' %>
  12 + <% end %>
  13 + </div>
  14 +</div>
  15 +
plugins/display_content/views/box_organizer/_choose_directly.rhtml 0 → 100644
@@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
  1 +<div id="display_content">
  2 +</div>
  3 +
  4 +<div class="display_folder_children">
  5 + <%= labelled_form_field check_box(:block, :display_folder_children) + _('Dinamically load children of selected folders'), '' %>
  6 +</div>
  7 +
  8 +<script type="text/javascript" >
  9 +
  10 +jQuery_1_8_3("#display_content").jstree({
  11 + plugins : ["themes","json_data", "checkbox"],
  12 + checkbox : {
  13 + real_checkboxes : true,
  14 + real_checkboxes_names : function (n) { return [("block[checked_nodes[" + n.attr('node_id') + "]]"), 1]; }
  15 + },
  16 + themes : {"theme" : "classic", "icons" : true, "url": "/plugins/display_content/javascripts/jstree/themes/classic/style.css"},
  17 + json_data : {
  18 + ajax : {
  19 + url : '<%= url_for @block.url_params %>',
  20 + async: true,
  21 + data : function (m) {
  22 + return m.attr ? {"id" : m.attr("node_id")} : {};
  23 + }
  24 + }
  25 + }
  26 +});
  27 +
  28 +jQuery( "#sortable" ).sortable();
  29 +
  30 +</script>
plugins/display_content/views/box_organizer/_display_content_block.rhtml
1 <div id="display_content_plugin"> 1 <div id="display_content_plugin">
2 2
  3 +<%= noosfero_javascript %>
  4 +
3 <h3> <%= _('Choose which attributes should be displayed and drag to reorder them:') %> </h3> 5 <h3> <%= _('Choose which attributes should be displayed and drag to reorder them:') %> </h3>
4 6
5 <table class="sections"> 7 <table class="sections">
6 <tbody id="sortable"> 8 <tbody id="sortable">
7 <% for section in @block.sections do %> 9 <% for section in @block.sections do %>
8 <tr> 10 <tr>
9 - <td><%= hidden_field_tag 'block[sections][][name]', section[:name] %> <%= check_box_tag 'block[sections][][checked]', section[:name], section[:checked] %></td>  
10 - <td><%= section[:name]%></td> 11 + <td>
  12 + <%= hidden_field_tag 'block[sections][][value]', section[:value] %>
  13 + <%= check_box_tag 'block[sections][][checked]', section[:value], section[:checked] %>
  14 + </td>
  15 + <td><%= @block.section_name(section[:value]) %></td>
11 </tr> 16 </tr>
12 <% end %> 17 <% end %>
13 </tbody> 18 </tbody>
14 </table> 19 </table>
15 20
16 <h3> <%= _('Choose which content should be displayed:') %> </h3> 21 <h3> <%= _('Choose which content should be displayed:') %> </h3>
17 -<div id="display_content">  
18 -</div>  
19 -  
20 -<div class="display_folder_children">  
21 - <%= labelled_form_field check_box(:block, :display_folder_children) + _('Dinamically load children of selected folders'), '' %>  
22 -</div> 22 +<% tabs = [] %>
  23 +<% tabs << {:title => _('Choose directly'), :id => 'choose-directly', :content => (render :partial => 'choose_directly')} %>
  24 +<% tabs << {:title => _('Choose by Content Type'), :id => 'choose_by_content_type', :content => (render :partial => 'choose_by_content_type')} %>
23 25
24 -<script type="text/javascript" > 26 +<%= render_tabs(tabs) %>
25 27
26 -jQuery_1_8_3("#display_content").jstree({  
27 - plugins : ["themes","json_data", "checkbox"],  
28 - checkbox : {  
29 - real_checkboxes : true,  
30 - real_checkboxes_names : function (n) { return [("block[checked_nodes[" + n.attr('node_id') + "]]"), 1]; }  
31 - },  
32 - themes : {"theme" : "classic", "icons" : true, "url": "/plugins/display_content/javascripts/jstree/themes/classic/style.css"},  
33 - json_data : {  
34 - ajax : {  
35 - url : '<%= url_for @block.url_params %>',  
36 - async: true,  
37 - data : function (m) {  
38 - return m.attr ? {"id" : m.attr("node_id")} : {};  
39 - }  
40 - }  
41 - }  
42 -});  
43 -  
44 -jQuery( "#sortable" ).sortable();  
45 -  
46 -</script>  
47 </div> 28 </div>
  29 +