Revision 1081:b56a4c5afa35 vendor

View differences:

vendor/plugins/redmine_bibliography/app/controllers/publications_controller.rb
3 3

  
4 4
class PublicationsController < ApplicationController
5 5
  unloadable
6
  
6

  
7 7
  model_object Publication
8
  before_filter :find_model_object, :except => [:new, :create, :index, :get_bibtex_required_fields, :autocomplete_for_project, :add_author, :sort_author_order, :autocomplete_for_author, :get_user_info ]  
8
  before_filter :find_model_object, :except => [:new, :create, :index, :get_bibtex_required_fields, :autocomplete_for_project, :add_author, :sort_author_order, :autocomplete_for_author, :get_user_info ]
9 9
  before_filter :find_project_by_project_id, :authorize, :only => [ :edit, :new, :update, :create ]
10
    
10

  
11 11
  def new
12 12
    find_project_by_project_id
13 13
    @publication = Publication.new
14
    
14

  
15 15
    # we'll always want a new publication to have its bibtex entry
16 16
    @publication.build_bibtex_entry
17
    
17

  
18 18
    # and at least one author
19
    # @publication.authorships.build.build_author        
19
    # @publication.authorships.build.build_author
20 20
    @author_options = [["#{User.current.name} (@#{User.current.mail.partition('@')[2]})", "#{User.current.class.to_s}_#{User.current.id.to_s}"]]
21

  
22

  
23 21
  end
24 22

  
25
  def create    
23
  def create
26 24
    @project = Project.find(params[:project_id])
27 25

  
28 26
    @author_options = []
29 27

  
30 28
    @publication = Publication.new(params[:publication])
31 29
    @publication.projects << @project unless @project.nil?
32
        
33
    if @publication.save 
30

  
31
    if @publication.save
34 32
      @publication.notify_authors_publication_added(@project)
35
      
33

  
36 34
      flash[:notice] = "Successfully created publication."
37 35
      redirect_to :action => :show, :id => @publication, :project_id => @project
38 36
    else
......
52 50

  
53 51
  def new_from_bibfile
54 52
    @publication.current_step = session[:publication_step]
55
    
53

  
56 54
    # contents of the paste text area
57 55
    bibtex_entry = params[:bibtex_entry]
58 56

  
59 57
    # method for creating "pasted" bibtex entries
60 58
    if bibtex_entry
61
      parse_bibtex_list bibtex_entry    
59
      parse_bibtex_list bibtex_entry
62 60
    end
63 61
  end
64 62

  
65 63
  def get_bibtex_required_fields
66 64

  
67 65
    unless params[:value].empty?
68
      fields = BibtexEntryType.fields(params[:value]) 
66
      fields = BibtexEntryType.fields(params[:value])
69 67
    end
70 68

  
71 69
    respond_to do |format|
72 70
      format.js {
73
        render(:update) {|page|       
71
        render(:update) {|page|
74 72
          if params[:value].empty?
75 73
            page << "hideOnLoad();"
76 74
          else
......
78 76
          end
79 77
        }
80 78
      }
81
    
79

  
82 80
    end
83 81
  end
84 82

  
......
92 90
    end
93 91
  end
94 92

  
95
  def edit   
93
  def edit
96 94
    find_project_by_project_id unless params[:project_id].nil?
97
    
95

  
98 96
    @edit_view = true;
99 97
    @publication = Publication.find(params[:id])
100 98
    @selected_bibtex_entry_type_id = @publication.bibtex_entry.entry_type
101 99

  
102
    @author_options = []  
103
    
104
    @bibtype_fields = BibtexEntryType.fields(@selected_bibtex_entry_type_id)    
100
    @author_options = []
101

  
102
    @bibtype_fields = BibtexEntryType.fields(@selected_bibtex_entry_type_id)
105 103
  end
106 104

  
107
  def update    
108
    @publication = Publication.find(params[:id])        
109

  
105
  def update
106
    @publication = Publication.find(params[:id])
110 107
    @author_options = []
111 108

  
112
    logger.error { "INSIDE THE UPDATE ACTION IN THE PUBLICATION CONTROLLER" }
113

  
114 109
    if @publication.update_attributes(params[:publication])
115 110
      flash[:notice] = "Successfully updated Publication."
116 111

  
112
      # expires the previosly cached entries
113
      Rails.cache.delete "publication-#{@publication.id}-ieee"
114
      Rails.cache.delete "publication-#{@publication.id}-bibtex"
115

  
117 116
      if !params[:project_id].nil?
118 117
        redirect_to :action => :show, :id => @publication, :project_id => params[:project_id]
119 118
      else
......
121 120
      end
122 121
    else
123 122
      render :action => 'edit'
124
    end   
123
    end
125 124
  end
126 125

  
126

  
127 127
  def show
128 128
    find_project_by_project_id unless params[:project_id].nil?
129
        
129

  
130 130
    if @publication.nil?
131 131
      @publications = Publication.all
132 132
      render "index", :alert => 'The publication was not found!'
......
142 142
    return authors_entry.split(" and ")
143 143
  end
144 144

  
145
  # parses a list of bibtex 
145
  # parses a list of bibtex
146 146
  def parse_bibtex_list(bibtex_list)
147 147
    bibliography = BibTeX.parse bibtex_list
148 148

  
......
155 155
        create_bibtex_entry d
156 156
      end
157 157
    end
158
  end 
158
  end
159 159

  
160
  def create_bibtex_entry(d)        
160
  def create_bibtex_entry(d)
161 161
    @publication = Publication.new
162
    @bentry = BibtexEntry.new        
162
    @bentry = BibtexEntry.new
163 163
    authors = []
164 164
    institution = ""
165 165
    email = ""
......
177 177
      else
178 178
        @bentry[field] = d[field]
179 179
      end
180
    end 
180
    end
181 181

  
182 182
    @publication.bibtex_entry = @bentry
183 183
    @publication.save
184 184

  
185
    # what is this for??? 
185
    # what is this for???
186 186
    # @created_publications << @publication.id
187 187

  
188 188
    # need to save all authors
189
    #   and establish the author-publication association 
190
    #   via the authorships table 
189
    #   and establish the author-publication association
190
    #   via the authorships table
191 191
    authors.each_with_index.map do |authorname, idx|
192 192
      author = Author.new(:name => authorname)
193 193
      if author.save!
194
        # todo: catch the errors...
194 195
        puts "SAVED"
195 196
      else
196 197
        puts "NOT SAVED"
197 198
      end
198 199

  
199 200
      author.authorships.create!(
200
        :publication => @publication,
201
        :institution => institution,
202
        :email => email,
203
        :order => idx)
201
      :publication => @publication,
202
      :institution => institution,
203
      :email => email,
204
      :order => idx)
204 205
    end
205 206
  end
206 207

  
......
211 212

  
212 213
  def import
213 214
    @publication = Publication.new
214
    
215
    
215

  
216

  
216 217
  end
217
  
218

  
218 219
  def autocomplete_for_project
219 220
    @publication = Publication.find(params[:id])
220
        
221
    @projects = Project.active.like(params[:q]).find(:all, :limit => 100) - @publication.projects            
221

  
222
    @projects = Project.active.like(params[:q]).find(:all, :limit => 100) - @publication.projects
222 223
    logger.debug "Query for \"#{params[:q]}\" returned \"#{@projects.size}\" results"
223 224
    render :layout => false
224 225
  end
225 226

  
226
  def autocomplete_for_author    
227
  def autocomplete_for_author
227 228
    @results = []
228
    
229

  
229 230
    object_id = params[:object_id]
230 231
    @object_name = "publications[authorships_attributes][#{object_id}][search_results]"
231
        
232

  
232 233
    # cc 20110909 -- revert to like instead of like_unique -- see #289
233 234
    authorships_list = Authorship.like(params[:q]).find(:all, :limit => 100)
234 235
    users_list = User.active.like(params[:q]).find(:all, :limit => 100)
235 236

  
236 237
    logger.debug "Query for \"#{params[:q]}\" returned \"#{authorships_list.size}\" authorships and \"#{users_list.size}\" users"
237
    
238

  
238 239
    @results = users_list
239 240

  
240
    # TODO: can be optimized…    
241
    authorships_list.each do |authorship|      
241
    # TODO: can be optimized…
242
    authorships_list.each do |authorship|
242 243
      flag = true
243
      
244

  
244 245
      users_list.each do |user|
245 246
        if authorship.name == user.name && authorship.email == user.mail && authorship.institution == user.institution
246 247
          Rails.logger.debug { "Rejecting Authorship #{authorship.id}" }
......
252 253
      @results << authorship if flag
253 254
    end
254 255

  
255
    render :layout => false    
256
    render :layout => false
256 257
  end
257
  
258
  
258

  
259 259
  def get_user_info
260 260
    object_id = params[:object_id]
261 261
    value = params[:value]
......
266 266
    name_field = "publication_authorships_attributes_#{object_id}_name_on_paper".to_sym
267 267
    email_field = "publication_authorships_attributes_#{object_id}_email".to_sym
268 268
    institution_field = "publication_authorships_attributes_#{object_id}_institution".to_sym
269
    
269

  
270 270
    yes_radio = "publication_authorships_attributes_#{object_id}_identify_author_yes".to_sym
271
    
271

  
272 272
    respond_to do |format|
273 273
      format.js {
274
        render(:update) {|page| 
274
        render(:update) {|page|
275 275
          page[name_field].value = item.name
276 276
          page[email_field].value = item.mail
277 277
          page[institution_field].value = item.institution
......
293 293
  end
294 294

  
295 295
  def add_project
296
    @projects = Project.find(params[:publication][:project_ids])    
296
    @projects = Project.find(params[:publication][:project_ids])
297 297
    @publication.projects << @projects
298
    @project = Project.find(params[:project_id])    
299
    
300
    # TODO luisf should also respond to HTML??? 
298
    @project = Project.find(params[:project_id])
299

  
300
    # TODO luisf should also respond to HTML???
301 301
    respond_to do |format|
302 302
      format.html { redirect_to :back }
303
      format.js { 
304
        render(:update) {|page| 
305
          page[:add_project_form].reset          
303
      format.js {
304
        render(:update) {|page|
305
          page[:add_project_form].reset
306 306
          page.replace_html :list_projects, :partial => 'list_projects'
307 307
        }
308 308
      }
309 309
    end
310 310
  end
311
  
312
  
311

  
312

  
313 313
  def remove_project
314 314
    @project = Project.find(params[:project_id])
315 315
    proj = Project.find(params[:remove_project_id])
......
319 319
        @publication.projects.delete proj if request.post?
320 320
      end
321 321
    else
322
      logger.error { "Cannot remove project from publication list" }      
322
      logger.error { "Cannot remove project from publication list" }
323 323
    end
324
    
324

  
325 325
    logger.error { "CURRENT project name#{proj.name} and wanna delete #{@project.name}" }
326
        
327
    render(:update) {|page| 
326

  
327
    render(:update) {|page|
328 328
      page.replace_html "list_projects", :partial => 'list_projects', :id  => @publication
329
    }    
329
    }
330 330
  end
331
    
331

  
332 332
  def destroy
333 333
    find_project_by_project_id
334
    
334

  
335 335
    @publication.destroy
336
        
336

  
337 337
    flash[:notice] = "Successfully deleted Publication."
338 338
    redirect_to :controller => :publications, :action => 'index', :project_id => @project
339 339
  end
vendor/plugins/redmine_bibliography/app/helpers/publications_helper.rb
12 12
  def projects_check_box_tags(name, projects)
13 13
    s = ''
14 14
    projects.sort.each do |project|
15
      if User.current.allowed_to?(:edit_publication, project) 
15
      if User.current.allowed_to?(:edit_publication, project)
16 16
        s << "<label>#{ check_box_tag name, project.id, false } #{link_to_project project}</label>\n"
17 17
        s << '<br />'
18 18
      end
19 19
    end
20 20

  
21
    s 
21
    s
22 22
  end
23
  
23

  
24 24
  def choose_author_link(object_name, items)
25 25
    # called by autocomplete_for_author (publications' action/view)
26 26
    # creates the select list based on the results array
27 27
    # results is an array with both Users and Authorships objects
28
        
28

  
29 29
    @author_options = []
30 30
    @results.each do |result|
31 31
      email_bit = result.mail.partition('@')[2]
......
34 34
      end
35 35
      @author_options << ["#{result.name} #{email_bit}", "#{result.class.to_s}_#{result.id.to_s}"]
36 36
    end
37
    
37

  
38 38
   if @results.size > 0
39 39
     s = select_tag( form_tag_name(object_name, :author_search_results), options_for_select(@author_options), { :id => form_tag_id(object_name, :author_search_results), :size => 3} )
40 40
     s << observe_field( form_tag_id(object_name, :author_search_results), :on => 'click', :function => "alert('Element changed')", :with => 'q')
41 41
   else
42 42
     s = "<em>No Authors found that match your search… sorry!</em>"
43
   end      
43
   end
44 44
  end
45 45

  
46 46
  def link_to_remove_fields(name, f)
47 47
    f.hidden_field(:_destroy) + link_to_function(name, "remove_fields(this)", :class => 'icon icon-del')
48 48
  end
49
    
49

  
50 50
  def link_to_add_author_fields(name, f, association, action)
51 51
    new_object = f.object.class.reflect_on_association(association).klass.new
52 52
    fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
53 53
      render(association.to_s.singularize + "_fields", :f => builder)
54
    end    
54
    end
55 55
    link_to_function(name, h("add_author_fields(this, '#{association}', '#{escape_javascript(fields)}', '#{action}')"), { :class => 'icon icon-add', :id => "add_another_author" })
56
  end  
56
  end
57 57

  
58 58
  def sanitized_object_name(object_name)
59 59
    object_name.gsub(/\]\[|[^-a-zA-Z0-9:.]/,"_").sub(/_$/,"")
......
62 62
  def sanitized_method_name(method_name)
63 63
    method_name.sub(/\?$/, "")
64 64
  end
65
  
65

  
66 66
  def form_tag_name(object_name, method_name)
67 67
      str = "#{object_name.to_s}[#{sanitized_method_name(method_name.to_s)}]"
68
      str.to_sym 
68
      str.to_sym
69 69
  end
70
  
71
  def form_tag_id(object_name, method_name)    
70

  
71
  def form_tag_id(object_name, method_name)
72 72
    str = "#{sanitized_object_name(object_name.to_s)}_#{sanitized_method_name(method_name.to_s)}"
73 73
    str.to_sym
74 74
  end
75
  
75

  
76 76
  def form_object_id(object_name)
77 77
    str = object_name.split("\[").last().gsub("\]","")
78 78
    str.to_sym
79 79
  end
80 80

  
81
  def render_authorships_list(publication)   
81
  def render_authorships_list(publication)
82 82
    s = '<p>'
83
    
83

  
84 84
    publication.authorships.each do |authorship|
85 85
      s << link_to_authorship(authorship)
86 86
      s << "<br /><em>#{authorship.institution}</em></p>"
87
    end    
87
    end
88 88

  
89
    s   
89
    s
90 90
  end
91
  
92
    
93
  def render_projects_list(publication, show_delete_icon)    
91

  
92
  def render_projects_list(publication, show_delete_icon)
94 93
    s= ""
95
    
94

  
96 95
    publication.projects.visible.each do |proj|
97 96
      s << link_to_project(proj, {}, :class => 'publication_project')
98
    
99
      if show_delete_icon  
97

  
98
      if show_delete_icon
100 99
        if User.current.allowed_to?(:edit_publication, @project)
101 100
          if @project == proj
101
            # todo: move this message to yml file
102 102
            confirm_msg = 'Are you sure you want to remove the current project from this publication\'s projects list?'
103 103
          else
104 104
            confirm_msg = false
105
          end 
106
          
107
          s << link_to_remote(l(:button_delete), { :url => { :controller => 'publications', :action => 'remove_project', :id => publication, :remove_project_id => proj,  :project_id => @project }, :method => :post, :confirm => confirm_msg }, :class => 'icon icon-del') 
105
          end
106

  
107
          s << link_to_remote(l(:button_delete), { :url => { :controller => 'publications', :action => 'remove_project', :id => publication, :remove_project_id => proj,  :project_id => @project }, :method => :post, :confirm => confirm_msg }, :class => 'icon icon-del')
108 108
        end
109 109
      end
110
      
111
      s << "<br />"      
112
    end    
113 110

  
114
    s  
111
      s << "<br />"
112
    end
113

  
114
    s
115 115
  end
116
  
116

  
117
  def print_ieee_format(publication)
118
    Rails.cache.fetch("publication-#{publication.id}-ieee") do
119
      publication.print_entry(:ieee)
120
    end
121
  end
122

  
123
  def print_bibtex_format(publication)
124
    Rails.cache.fetch("publication-#{publication.id}-bibtex") do
125
      publication.print_entry(:bibtex)
126
    end
127
  end
128

  
129

  
117 130
  def show_bibtex_fields(bibtex_entry)
118 131
    s = ""
119 132
    bibtex_entry.attributes.keys.sort.each do |key|
120 133
      value = bibtex_entry.attributes[key].to_s
121 134
      next if key == 'id' or key == 'publication_id' or value == ""
122
      s << "<h4>" + l("field_#{key}") + "</h4>" 
135
      s << "<h4>" + l("field_#{key}") + "</h4>"
123 136
      s << "<p>"
124 137
      if key == "entry_type"
125 138
        s << bibtex_entry.entry_type_label
......
129 142
      s << "</p>"
130 143
    end
131 144
    s
132
  end 
145
  end
133 146
end
134 147

  
vendor/plugins/redmine_bibliography/app/models/author.rb
1 1
class Author < ActiveRecord::Base
2
  unloadable
3
  
2 4
  has_many :authorships, :dependent => :destroy
3 5
  has_many :publications, :through => :authorships
4 6

  
vendor/plugins/redmine_bibliography/app/models/bibtex_entry_type.rb
1 1
class BibtexEntryType < ActiveRecord::Base
2
  unloadable
2 3

  
3 4
  @@fields = Hash['article', ['journal', 'year', 'volume', 'number', 'pages', 'month', 'note' ], 
4 5
                  'book' , [ 'editor', 'publisher', 'volume', 'series', 'address', 'edition', 'month', 'year', 'note' ],
vendor/plugins/redmine_bibliography/app/models/publication.rb
2 2

  
3 3
class Publication < ActiveRecord::Base
4 4
  unloadable
5
  
5

  
6 6
  has_many :authorships, :dependent => :destroy, :order => "auth_order ASC"
7 7
  has_many :authors, :through => :authorships, :uniq => true
8
  
8

  
9 9
  has_one :bibtex_entry, :dependent => :destroy
10 10

  
11 11
  validates_presence_of :title
......
14 14
  accepts_nested_attributes_for :authorships
15 15
  accepts_nested_attributes_for :authors, :allow_destroy => true
16 16
  accepts_nested_attributes_for :bibtex_entry, :allow_destroy => true
17
  
17

  
18 18
  has_and_belongs_to_many :projects, :uniq => true
19
  
19

  
20 20
  before_save :set_initial_author_order
21 21

  
22 22
  # Ensure error message uses proper text instead of
......
30 30
    end
31 31
  end
32 32

  
33
  def notify_authors_publication_added(project)  
33
  def notify_authors_publication_added(project)
34 34
    self.authors.each do |author|
35 35
      Rails.logger.debug { "Sending mail to \"#{self.title}\" publication authors." }
36 36
      Mailer.deliver_publication_added(author.user, self, project) unless author.user.nil?
37 37
    end
38 38
  end
39
  
40
  def notify_authors_publication_updated(project)  
39

  
40
  def notify_authors_publication_updated(project)
41 41
    self.authors.each do |author|
42 42
      Rails.logger.debug { "Sending mail to \"#{self.title}\" publication authors." }
43 43
      Mailer.deliver_publication_updated(author.user, self, project) unless author.user.nil?
44 44
    end
45 45
  end
46
  
47
  
46

  
47

  
48 48
  def set_initial_author_order
49 49
    authorships = self.authorships
50
    
50

  
51 51
    logger.debug { "Publication \"#{self.title}\" has #{authorships.size} authors." }
52
    
52

  
53 53
    authorships.each_with_index do |authorship, index|
54 54
      if authorship.auth_order.nil?
55 55
         authorship.auth_order = index
56 56
      end
57
    end    
57
    end
58 58
  end
59
  
60
  
61
  
62
  
59

  
60
  def print_bibtex_author_names
61
    # this authors are correctly sorted because the authorships model
62
    # already outputs the author names ASC by auth_order
63
    self.authorships.map{|a| a.name_on_paper}.join(' and ')
64
  end
65

  
66
  def print_entry(style)
67
    bib = BibTeX::Entry.new
68

  
69
    bib.author = self.print_bibtex_author_names
70
    bib.title = self.title
71

  
72
    self.bibtex_entry.attributes.keys.sort.each do |key|
73
      value = self.bibtex_entry.attributes[key].to_s
74
      next if key == 'id' or key == 'publication_id' or value == ""
75

  
76
      if key == "entry_type"
77
        bib.type = BibtexEntryType.find(self.bibtex_entry.entry_type).name
78
      else
79
        bib[key.to_sym] = value
80
      end
81
    end
82

  
83
    if style == :ieee
84
      CiteProc.process bib.to_citeproc, :style => :ieee, :format => :html
85
    else
86
      bibtex = bib.to_s :include => :meta_content
87
      bibtex.strip!
88
      logger.error { bibtex }
89
    end
90
  end
63 91
end
vendor/plugins/redmine_bibliography/app/views/projects/_bibliography_box.html.erb
1
<% content_for :header_tags do %>
2
    <%= stylesheet_link_tag 'bibliography', :plugin => 'redmine_bibliography' %>
3
    <%= javascript_include_tag 'bibtex', :plugin => 'redmine_bibliography' -%>
4
<% end %>
5

  
1 6
<% if @project.publications.any? %>
2 7
<%= stylesheet_link_tag 'bibliography', :plugin => 'redmine_bibliography' %>
3 8
  <div id="bibliography">
4 9
    <div class="box">
5 10
    <h3><%=l(:label_related_publication_plural)%></h3>
6 11

  
7
   <dl>
12
     <dl>
8 13
     <% @project.publications.each do |publication| %>
9
     <dt>
10
     <span class="authors">
11
       <%= publication.authorships.map { |a| h a.name_on_paper }.join(', ') %><% if !publication.authorships.empty? %>.<% end %>
12
     </span>
13
     <span class="title"><%= link_to publication.title, :controller => 'publications', :action => 'show', :id => publication, :project_id => @project %></span>
14
     <% if publication.bibtex_entry.year.to_s != "" %>
15
     <span class="year">
16
       &nbsp;(<%= publication.bibtex_entry.year %>)
17
     </span>
18
     <% end %>
19
     </dt><dd></dd>
14
       <dt>
15
          <%= print_ieee_format(publication) %>
16
       </dt>
17
       <dd>
18
         <%= link_to("[More Details]", {:controller => :publications, :action => :show, :id => publication.id, :project_id => @project.id}) -%>
19

  
20
         <%= link_to_function "[B<small>IB</small>T<sub>E</sub>X]", onclick="toggleBibtex(this)" -%>
21
       </dd>
22
       <dd class="bibtex-textarea collapsed" style="display: none;">
23
         <textarea readonly> <%= print_bibtex_format(publication) %> </textarea>
24
       </dd>
20 25
   <% end -%>
21
   </dl>
26
     </dl>
22 27
  </div>
23 28
</div>
24
<% end %>
29
<% end -%>
vendor/plugins/redmine_bibliography/app/views/publications/_form.html.erb
1
<%= f.error_messages %>  
1
<%= f.error_messages %>
2 2

  
3 3
<h3><%= f.text_field :title, :required => true, :size => 70 %></h3>
4 4

  
5
<div class="splitcontentleft">      
5
<div class="splitcontentleft">
6 6
  <h3><%= l(:label_publication_other_details) %></h3>
7 7
  <div class="box tabular">
8 8
    <% f.fields_for :bibtex_entry do |builder| -%>
......
14 14
      <br />
15 15
      <em><%= l(:text_external_url) %></em>
16 16
    </p>
17
    <p>
18
      <%= f.text_field :doi, :size => 70 %>
19
      <br />
20
      <em><%= l(:text_doi) %></em>
21
    </p>
17 22

  
18 23
  </div>
19 24
</div>
20 25

  
21 26
<div class="splitcontentright">
22
  <h3><%= l(:authors) %></h3>    
27
  <h3><%= l(:authors) %></h3>
23 28
  <div class="box tabular">
24 29
    <% f.fields_for :authorships do |builder| -%>
25 30
      <%= render "authorship_fields", :f => builder %>
vendor/plugins/redmine_bibliography/app/views/publications/show.html.erb
1
<%= stylesheet_link_tag 'bibliography', :plugin => 'redmine_bibliography' %>
2

  
3 1
<h2><%=l(:label_publication_show)%></h2>
4 2

  
5 3
<div class="box">
6
<h3>
7
  <%= h @publication.title %>
8
</h3>
4
  <h3>Publication Info</h3>
5
  <p><%= print_ieee_format(@publication)%></p>
6

  
7
  <h3>B<small>IB</small>T<sub>E</sub>X Format</h3>
8
  <pre><%=h print_bibtex_format(@publication) %></pre>
9
</div>
10

  
11
<div class="box">
9 12

  
10 13
<h4><%= l(:authors) %></h4>
11 14
<ul id="authorships">
12 15
  <% for authorship in @publication.authorships.find(:all, :order => :auth_order) %>
13 16
    <% content_tag_for :li, authorship do %>
14
      <%- if User.current.allowed_to?(:edit_publication, @project) && @publication.authorships.length > 1 -%>    
17
      <%- if User.current.allowed_to?(:edit_publication, @project) && @publication.authorships.length > 1 -%>
15 18
        <span class="handle">[drag to reorder]</span>
16 19
      <%- end -%>
17 20
      <%= link_to_authorship authorship %> <em><%= h authorship.institution %></em> <br />
18 21
    <%- end -%>
19 22
  <%- end -%>
20 23
</ul>
24

  
21 25
<%- if User.current.allowed_to?(:edit_publication, @project) && @publication.authorships.length > 1 -%>
22 26
  <%= sortable_element("authorships", :url => { :controller => :publications, :action => :sort_author_order }, :handle => "handle") %>
23 27
<%- end -%>
......
26 30
  <%= show_bibtex_fields(@publication.bibtex_entry) %>
27 31
<%- end -%>
28 32

  
33
<%- unless @publication.external_url.blank? -%>
34
  <p>
35
    <b><%= l(:field_external_url) %>:</b> <%= link_to h(@publication.external_url), @publication.external_url, {:target => "_blank"} -%>
36
  </p>
37
<%- end -%>
29 38

  
30
<% unless @publication.external_url.blank? %>
31
  <h4>
32
    <%= l(:field_external_url) %>
33
  </h4>
39

  
40
<% unless @publication.doi.blank? %>
34 41
  <p>
35
    <%= link_to h(@publication.external_url), @publication.external_url, {:target => "_blank"} %>
42
    <b><%= l(:field_doi)-%>:</b> <%= link_to h(@publication.doi), "http://dx.doi.org/#{@publication.doi}", {:target => "_blank"} -%>
36 43
  </p>
37 44
<% end %>
38 45

  
39 46
<br / >
40
  <% if User.current.allowed_to?(:add_publication, @project) %>	
47
  <% if User.current.allowed_to?(:add_publication, @project) %>
41 48
    <%= link_to l(:label_publication_edit), { :controller => "publications", :action => "edit", :id => @publication, :project_id => @project } %> |
42 49
    <%= link_to "Delete", {:controller => 'publications', :action => 'destroy', :id => @publication, :project_id => @project },
43 50
                                                     :confirm => l(:text_are_you_sure), :method => :delete, :title => l(:button_delete) %> |
......
53 60
  <p id="list_projects">
54 61
    <%= render :partial => 'list_projects' %>
55 62
  </p>
56
  
63

  
57 64
  <%- if User.current.allowed_to?(:edit_publication, @project) -%>
58
    <%= render :partial => 'add_project_form' %>    
65
    <%= render :partial => 'add_project_form' %>
59 66
  <%- end -%>
60 67
<% end %>
vendor/plugins/redmine_bibliography/assets/javascripts/bibtex.js
1
function toggleBibtex(el) {
2
  var dd = Element.up(el).next('dd')
3

  
4
  dd.toggleClassName('collapsed');
5
  Effect.toggle(dd, 'slide', {duration:0.2});
6
}
vendor/plugins/redmine_bibliography/assets/stylesheets/bibliography.css
32 32
    min-width: 150px;
33 33
}
34 34

  
35
div#bibliography dl { margin-left: 2em; }
36
div#bibliography .box dl { margin-left: 0; }
37
div#bibliography dt { margin-bottom: 0px; padding-left: 20px }
38
div#bibliography .box dt { margin-bottom: 0px; padding-left: 10px }
39
div#bibliography dd { margin-bottom: 1em; padding-left: 18px; font-size: 0.9em; }
40
div#bibliography .box dd { margin-bottom: 0.6em; padding-left: 0; }
35

  
36
div#bibliography dd { margin-bottom: 1em; font-size: 0.9em; }
37

  
41 38
div#bibliography dd .authors { font-style: italic; }
42
div#bibliography dt .title { font-style: italic; }
43 39
div#bibliography dd span.authors { color: #808080; }
44 40
div#bibliography dd span.year { padding-left: 0.6em; }
45 41

  
46
div#bibliography h3 { background: url(../../../images/table_multiple.png) no-repeat 0% 50%; padding-left: 20px; }
42
div#bibliography .box dt { 
43
  background: url(../../../images/document.png) no-repeat 0% 4px;
44
  padding-left: 20px;
45
  margin-left: 0;
46
}
47
div#bibliography .box dd { 
48
  padding-left: 20px;
49
  margin-left: 0;
50
}
51

  
52
div#bibliography h3 { 
53
  background: url(../../../images/table_multiple.png) no-repeat 0% 50%; 
54
  padding-left: 20px;
55
}
56

  
57
div#bibliography textarea {
58
  width: 90%;
59
  height: 200px;
60
  font: normal 8px;
61
  padding: 2px 10px;
62
  border: solid 1px #ddd;  
63
}
vendor/plugins/redmine_bibliography/config/locales/en.yml
12 12
  label_my_publications_box: "My Publications"
13 13
  view_all_publications: "View All Project's Publications"
14 14
  publications: Publications
15
  
16
  
15

  
17 16
  identify_author_question: Is the right person selected above?
18 17
  identify_author_yes: "Yes"
19 18
  identify_author_correct: "Yes, but I need to correct some details below"
......
25 24
  label_all_publications_for_project: Publications associated with %{project}
26 25
  label_authors_show: "Authorships associated with this author"
27 26
  label_authors_index: "List of authors"
28
  
27

  
29 28
  field_authorship_publication_title: "Publication"
30 29
  field_authorship_name: "Name on Paper"
31 30
  field_authorship_email: "Email"
32 31
  field_authorship_institution: "Institution"
33
  
32

  
34 33
  field_external_url: "External URL"
34
  field_doi: "DOI"
35 35
  field_publication_title: Title
36 36
  field_publication_authors: Authors
37 37
  field_publication_projects: "Associated projects"
38 38
  field_author_name: Author
39 39
  field_author_user: User Name
40 40
  field_author_username: "Associated user"
41
  field_author_publications: "Publications by this Author" 
41
  field_author_publications: "Publications by this Author"
42 42
  field_identify_author_yes: "Yes"
43 43
  field_identify_author_correct: "Corrections"
44 44
  field_identify_author_no: "No"
45
  
45

  
46 46
  label_author_is_me: "(I am this author)"
47 47
  label_add_me_as_author: "Add me as an author"
48 48
  label_add_an_author: "Add an author"
......
54 54
  label_author_information: "Author Information"
55 55

  
56 56
  remove_author: "Remove this author"
57
  
57

  
58 58
  label_publication_plural: "Publications"
59 59
  label_related_publication_plural: "Related publications"
60 60
  label_publication_new: "Create New Publication"
......
67 67
  label_publication_project_index: "Projects associated with this publication"
68 68
  label_publication_index: "View all publications"
69 69
  label_publication_other_details: "Details"
70
  
70

  
71 71
  text_external_url: "Link to the publication or to an external page about it."
72
  text_doi: "DOI (Digital Object Identifier)."
72 73
  text_author_name_on_paper: "Author's name as it appears on the paper."
73 74
  text_author_institution: "Author's institution as on the paper."
74 75
  text_author_email: "Author's email address as on the paper."
75
  
76

  
76 77
  text_author_search: "Search existing authors"
77
  
78

  
78 79
  # authorships model
79 80
  field_institution: "Institution"
80
  field_name_on_paper: "Name" 
81
  field_name_on_paper: "Name"
81 82
  field_email: "Email Address"
82
      
83

  
83 84
  # bibtex_entries model
84 85
  field_entry_type: "Publication Type"
85
  field_id: "id" 
86
  field_id: "id"
86 87
  field_publication_id: "Publication_id"
87 88
  field_address: "Address"
88 89
  field_annote: "Annote"
......
122 123
  field_bibtex_proceedings: Conference proceedings
123 124
  field_bibtex_techreport: Technical report
124 125
  field_bibtex_unpublished: Unpublished
125
  
126

  
126 127
  label_author_1: First author
127 128
  label_author_2: Second author
128 129
  label_author_3: Third author
......
146 147

  
147 148
  mail_subject_publication_added: "You have been added as an author to a new publication"
148 149
  mail_body_publication_added: "A new publication (%{publication}) has been added to the project '%{project}.'"
149
  
150
  
151
  
150

  
151

  
152

  
vendor/plugins/redmine_bibliography/db/migrate/008_add_doi_and_timestamp_columns_to_publications.rb
1
class AddDoiAndTimestampColumnsToPublications < ActiveRecord::Migration
2
  def self.up
3
    add_column :publications, :doi, :string
4
    add_timestamps :publications
5

  
6
  end
7

  
8
  def self.down
9
    remove_column :publications, :doi
10
    remove_timestamps :publications
11
  end
12
end
vendor/plugins/redmine_bibliography/db/migrate/009_add_timestamp_columns_to_authors.rb
1
class AddTimestampColumnsToAuthors < ActiveRecord::Migration
2
  def self.up
3
    add_timestamps :authors
4
  end
5

  
6
  def self.down
7
    remove_timestamps :authors
8
  end
9
end
vendor/plugins/redmine_bibliography/init.rb
1 1
require 'redmine'
2 2
require 'dispatcher'
3 3

  
4
RAILS_DEFAULT_LOGGER.info 'Starting Bibliography Plugin for RedMine'
4
require 'bibtex'
5
require 'citeproc'
5 6

  
6 7
# Patches to the Redmine core.
7 8
Dispatcher.to_prepare :redmine_model_dependencies do
......
21 22
    Mailer.send(:include, Bibliography::MailerPatch)
22 23
  end
23 24

  
24

  
25
  unless ProjectsHelper.included_modules.include?(Bibliography::ProjectsHelperPatch)
26
    ProjectsHelper.send(:include, Bibliography::ProjectsHelperPatch)
27
  end
25 28
end
26 29

  
27 30

  
......
47 50
  # extending the Project Menu
48 51
  menu :project_menu, :publications, { :controller => 'publications', :action => 'index', :path => nil }, :after => :activity, :param => :project_id, :caption => Proc.new { Setting.plugin_redmine_bibliography['menu'] },
49 52
   :if => Proc.new { !Setting.plugin_redmine_bibliography['menu'].blank? }
50
    
53

  
51 54
end
vendor/plugins/redmine_bibliography/lib/bibliography/projects_helper_patch.rb
1
module Bibliography
2
  module ProjectsHelperPatch
3

  
4
    def self.included(base) # :nodoc:
5
      base.send(:include, InstanceMethods)
6
      base.send(:include, PublicationsHelper)
7

  
8
      base.class_eval do
9
        unloadable
10
      end
11
    end
12

  
13
    module InstanceMethods
14
    end
15
  end
16
end
17

  
vendor/plugins/redmine_bibliography/lib/bibliography/user_author_patch.rb
1 1
require_dependency 'user'
2 2

  
3 3
module Bibliography
4
  module UserAuthorPatch    
4
  module UserAuthorPatch
5 5
    def self.included(base)
6
      base.send(:include, InstanceMethods) 
7
      extend ClassMethods     
8
          
6
      base.send(:include, InstanceMethods)
7
      extend ClassMethods
8

  
9 9
    end #self.included
10
    
10

  
11 11
    module ClassMethods
12
    end  
13
    
12
    end
13

  
14 14
    module InstanceMethods
15 15

  
16 16
      def institution
......
18 18
          institution_name = self.ssamr_user_detail.institution_name
19 19
        else
20 20
          institution_name = "No Institution Set"
21
        end        
22
        return institution_name        
21
        end
22
        return institution_name
23 23
      end
24 24

  
25 25
      def get_author_info
26 26
        # TODO: DELETE THIS METHOD??
27
        info = { 
27
        info = {
28 28
          :name_on_paper =>  self.name,
29 29
          :email => self.mail,
30 30
          :institution => "",
31 31
          :author_user_id => self.id,
32
          :is_user => "1"                    
32
          :is_user => "1"
33 33
        }
34 34

  
35 35
        if not self.ssamr_user_detail.nil?
36 36
          info[:institution]  = self.ssamr_user_detail.institution_name
37 37
        end
38 38

  
39
        return info        
39
        return info
40 40
      end
41
                
41

  
42 42
    end #InstanceMethods
43
    
43

  
44 44
  end #UserPublicationsPatch
45 45
end #RedmineBibliography
vendor/plugins/redmine_tags/app/controllers/tags_controller.rb
1
class TagsController < ApplicationController
2
  
3
  def index
4
    respond_to do |format|
5
      format.html {
6
        render :template => 'tags/index.html.erb', :layout => !request.xhr?
7
      }
8
      format.api  {
9
      }
10
      format.atom {
11
      }
12
    end
13
  end
14

  
15
end
vendor/plugins/redmine_tags/app/views/projects/_filter_search_tags.html.erb
6 6
      </p>
7 7
      <div id="project_tag_candidates" class="autocomplete"></div>
8 8
      <%= javascript_include_tag 'tags_input', :plugin => 'redmine_tags' -%>
9
      <%= javascript_tag "observeProjectTagsField('#{url_for(:controller => 'auto_completes', :action => 'project_search_tags', :project_id => Project.first.id)}', true)" -%>
9
      <%= javascript_tag "observeProjectTagsField('#{url_for(:controller => 'auto_completes', :action => 'project_search_tags')}', true)" -%>
10 10
    </div>
11 11
  <%- end -%>
12 12
</p>
vendor/plugins/redmine_tags/app/views/projects/_filter_tags.html.erb
7 7
      <div id="project_tag_candidates" class="autocomplete"></div>
8 8
      <%= javascript_include_tag 'tags_input', :plugin => 'redmine_tags' %>
9 9

  
10
      <%= javascript_tag "observeProjectTagsField('#{url_for(:controller => 'auto_completes', :action => 'project_tags', :project_id => Project.first.id)}')" %>
10
      <%= javascript_tag "observeProjectTagsField('#{url_for(:controller => 'auto_completes', :action => 'project_tags')}')" %>
11 11
    </div>
12 12
  <% end -%>
13 13
</p>
vendor/plugins/redmine_tags/app/views/projects/_tagcloud.html.erb
1
<% content_for :header_tags do %>
2
    <%= stylesheet_link_tag 'redmine_tags', :plugin => 'redmine_tags' %>
3
<% end %>
4 1

  
5 2
<div id="tags">
6 3
<%= render_tags_list(Project.available_tags, :style => :cloud) %>
vendor/plugins/redmine_tags/app/views/projects/_tags_form.html.erb
6 6
  </p>
7 7
  <div id="project_tag_candidates" class="autocomplete"></div>
8 8
  <%= javascript_include_tag 'tags_input', :plugin => 'redmine_tags' %>
9
  <%= javascript_tag "observeProjectTagsField('#{url_for(:controller => 'auto_completes', :action => 'project_tags', :project_id => Project.first.id)}', false)" %>  
9
  <%= javascript_tag "observeProjectTagsField('#{url_for(:controller => 'auto_completes', :action => 'project_tags')}', false)" %>
10 10
</div>
11 11
<% end -%>
vendor/plugins/redmine_tags/app/views/tags/index.html.erb
1
<% content_for :header_tags do %>
2
    <%= auto_discovery_link_tag(:atom, {:action => 'index', :format => 'atom', :key => User.current.rss_key}) %>
3
    <%= stylesheet_link_tag 'redmine_tags', :plugin => 'redmine_tags' %>
4
<% end %>
5

  
6

  
7
<div style="clear:both;"></div>
8
<h2>
9
  <%= l("label_project_tags_all") %>
10
</h2>
11

  
12
<%= render_tags_list(Project.available_tags, :style => :cloud) %>
13

  
vendor/plugins/redmine_tags/lib/redmine_tags/patches/project_patch.rb
13 13
          unloadable
14 14

  
15 15
          attr_accessor :tag_list
16

  
17 16
          acts_as_taggable
18 17

  
19 18
        end
20 19
      end
21 20

  
22
      def before_save_with_save_tags()
23
#        debugger
24
        logger.error { "GONNA SAVE TAG LIST" }
25

  
26

  
27
#        params[:tag_list]
28
        
29
        
30
        # logger.error { @project.name }
31

  
32
    #    if params && params[:project] && !params[:project][:tag_list].nil?
33
    #      old_tags = context[:project].tag_list.to_s
34
    #      context[:project].tag_list = params[:project][:tag_list]
35
    #      new_tags = context[:project].tag_list.to_s
36
    #
37
    #      unless (old_tags == new_tags || context[:project].current_journal.blank?)
38
    #        context[:project].current_journal.details << JournalDetail.new(:property => 'attr',
39
    #                                                                     :prop_key => 'tag_list',
40
    #                                                                     :old_value => old_tags,
41
    #                                                                     :value => new_tags)
42
    #      end
43
    #    end
44
      end
45
      
46 21
      module InstanceMethods
47
        
48 22
      end
49 23

  
50 24
      module ClassMethods
......
64 38
          name_like = options[:name_like]
65 39
          options = {}
66 40
          visible   = ARCondition.new
67
                  
41

  
68 42
          visible << ["#{Project.table_name}.is_public = '1'"]
69 43

  
70 44
          if name_like
......
73 47

  
74 48
          options[:conditions] = visible.conditions
75 49

  
76
          self.all_tag_counts(options)          
50
          self.all_tag_counts(options)
77 51
        end
78 52
      end
79 53
    end
vendor/plugins/redmine_tags/lib/redmine_tags/patches/projects_controller_patch.rb
3 3

  
4 4
module RedmineTags
5 5
  module Patches
6
    module ProjectsControllerPatch      
6
    module ProjectsControllerPatch
7 7
      def self.included(base)
8 8
        base.send(:include, InstanceMethods)
9
        base.class_eval do          
10
          unloadable 
9
        base.class_eval do
10
          unloadable
11 11
          skip_before_filter :authorize, :only => [:set_fieldset_status]
12 12
          skip_before_filter :find_project, :only => [:set_fieldset_status]
13 13
          before_filter :add_tags_to_project, :only => [:save, :update]
......
17 17
      end
18 18

  
19 19
      module InstanceMethods
20
                
20

  
21 21
        def add_tags_to_project
22 22

  
23 23
          if params && params[:project] && !params[:project][:tag_list].nil?
......
57 57
          else
58 58
            @myproj_status = session[:my_projects_fieldset_status]
59 59
          end
60
                    
60

  
61 61
          if session[:filters_fieldset_status].nil?
62 62
            @filter_status = "false"
63 63
          else
64 64
            @filter_status = session[:filters_fieldset_status]
65 65
          end
66
          
66

  
67 67
          if params && params[:project] && !params[:project][:tag_list].nil?
68 68
            @filter_status = "true"
69 69
          end
70
                                      
70

  
71 71
        end
72 72

  
73 73
        # Lists visible projects. Paginator is for top-level projects only
......
78 78
          get_fieldset_statuses
79 79

  
80 80
          respond_to do |format|
81
            format.html { 
81
            format.html {
82 82
              paginate_projects
83
              
84
              @projects = Project.visible_roots.find(@projects, :offset => @offset, :limit => @limit, :order => sort_clause) 
83

  
84
              @projects = Project.visible_roots.find(@projects, :offset => @offset, :limit => @limit, :order => sort_clause)
85 85

  
86 86
              if User.current.logged?
87 87
                # seems sort_by gives us case-sensitive ordering, which we don't want
88 88
                #          @user_projects = User.current.projects.sort_by(&:name)
89 89
                @user_projects = User.current.projects.all(:order => :name)
90 90
              end
91
              
91

  
92 92
              render :template => 'projects/index.html.erb', :layout => !request.xhr?
93 93
            }
94 94
            format.api {
......
112 112

  
113 113
        private
114 114

  
115
        def filter_projects                  
116
          @question = (params[:q] || "").strip     
115
        def filter_projects
116
          @question = (params[:q] || "").strip
117 117

  
118 118
          if params.has_key?(:project)
119 119
            @tag_list = (params[:project][:tag_list] || "").strip.split(",")
......
126 126
          else
127 127
            @projects = Project.visible_roots.find(Project.visible.search_by_question(@question))
128 128
          end
129
  
129

  
130 130
          unless @tag_list.empty?
131 131
            @tagged_projects_ids = Project.visible.tagged_with(@tag_list).collect{ |project| Project.find(project.id).root }
132 132
            @projects = @projects & @tagged_projects_ids
vendor/plugins/redmine_tags/lib/redmine_tags/patches/projects_helper_patch.rb
5 5
      def self.included(base) # :nodoc:
6 6
        base.send(:include, InstanceMethods)
7 7
        base.send(:include, TagsHelper)
8

  
8 9
        base.class_eval do
9 10
          unloadable
10 11
        end
11 12
      end
12 13

  
13
      module InstanceMethods        
14
      module InstanceMethods
14 15
        # Renders a tree of projects that the current user does not belong
15 16
        # to, or of all projects if the current user is not logged in.  The
16 17
        # given collection may be a subset of the whole project tree
......
19 20
        # description, manager(s), creation date, last activity date,
20 21
        # general activity level, whether there is anything actually hosted
21 22
        # here for the project, etc.
22
        def render_project_table_with_filtering(projects, question)          
23
        def render_project_table_with_filtering(projects, question)
23 24
          custom_fields = ""
24 25
          s = ""
25 26
          if projects.any?
26 27
            tokens = RedmineProjectFiltering.calculate_tokens(question, custom_fields)
27
            
28

  
28 29
            s << "<div class='autoscroll'>"
29 30
            s << "<table class='list projects'>"
30 31
            s << "<thead><tr>"
31
        
32

  
32 33
            s << sort_header_tag('name', :caption => l("field_name"))
33 34
            s << "<th class='tags'>" << l("tags") << "</th>"
34 35
            s << "<th class='managers'>" << l("label_managers") << "</th>"
35 36
            s << sort_header_tag('created_on', :default_order => 'desc')
36 37
            s << sort_header_tag('updated_on', :default_order => 'desc')
37
        
38

  
38 39
            s << "</tr></thead><tbody>"
39
        
40

  
40 41
            original_project = @project
41
        
42

  
42 43
            projects.each do |project|
43 44
              s << render_project_in_table_with_filtering(project, cycle('odd', 'even'), 0, tokens)
44 45
            end
45
        
46

  
46 47
            s << "</table>"
47 48
          else
48 49
            s << "\n"
......
52 53
          s
53 54
        end
54 55

  
55
        def render_project_in_table_with_filtering(project, oddeven, level, tokens)          
56
        def render_project_in_table_with_filtering(project, oddeven, level, tokens)
56 57
          # set the project environment to please macros.
57 58
          @project = project
58 59

  
......
72 73
          s << "<td class='tags' align=top>" << project.tag_counts.collect{ |t| render_project_tag_link(t) }.join(', ') << "</td>"
73 74

  
74 75
          s << "<td class='managers' align=top>"
75
           
76

  
76 77
          u = project.users_by_role
77 78
          if u
78 79
            u.keys.each do |r|
......
91 92
          end
92 93

  
93 94
          s << "</td>"
94
          
95

  
95 96
          s << "<td class='created_on' align=top>" << format_date(project.created_on) << "</td>"
96 97
          s << "<td class='updated_on' align=top>" << format_date(project.updated_on) << "</td>"
97 98

  
......
105 106

  
106 107
          s
107 108
        end
108
        
109
        
110
        
109

  
110

  
111

  
111 112
        # Renders a tree of projects as a nested set of unordered lists
112 113
        # The given collection may be a subset of the whole project tree
113 114
        # (eg. some intermediate nodes are private and can not be seen)
......
116 117
          if projects.any?
117 118
            tokens = RedmineProjectFiltering.calculate_tokens(question, custom_fields)
118 119
            debugger
119
            
120

  
120 121

  
121 122
            ancestors = []
122 123
            original_project = @project
......
128 129
              else
129 130
                ancestors.pop
130 131
                s << "</li>"
131
                while (ancestors.any? && !project.is_descendant_of?(ancestors.last)) 
132
                while (ancestors.any? && !project.is_descendant_of?(ancestors.last))
132 133
                  ancestors.pop
133 134
                  s << "</ul></li>"
134 135
                end
135 136
              end
136 137
              classes = (ancestors.empty? ? 'root' : 'child')
137 138
              s << "<li class='#{classes}'><div class='#{classes}'>" +
138
                link_to( highlight_tokens(project.name, tokens), 
139
                link_to( highlight_tokens(project.name, tokens),
139 140
                  {:controller => 'projects', :action => 'show', :id => project},
140 141
                  :class => "project #{User.current.member_of?(project) ? 'my-project' : nil}"
141 142
                )
......
146 147
           #    value = value_model.present? ? value_model.value : nil
147 148
           #    s << "<li><b>#{field.name.humanize}:</b> #{highlight_tokens(value, tokens)}</li>" if value.present?
148 149
           #  end
149
              
150

  
150 151
              s << "</ul>"
151 152
              s << "<div class='clear'></div>"
152 153
              unless project.description.blank?
......
163 164
          end
164 165
          s.join "\n"
165 166
        end
166
        
167

  
167 168
        # Renders a tree of projects where the current user belongs
168 169
        # as a nested set of unordered lists
169 170
        # The given collection may be a subset of the whole project tree
......
193 194
          s
194 195

  
195 196
        end
196
        
197
        
198
        
197

  
198

  
199

  
199 200

  
200 201
        def render_my_project_in_hierarchy_with_tags(project)
201 202

  
......
215 216
            else
216 217
              s << " <span class='private'>" << l(:field_is_private) << "</span>"
217 218
            end
218
           
219

  
219 220
            tc = project.tag_counts
220 221
            if tc.empty?
221 222
              s << " <span class='no-tags'>" << l(:field_no_tags) << "</span>"
......
242 243

  
243 244
        end
244 245

  
245
        
246
        
246

  
247

  
247 248
        private
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff