OpenProject is the leading open source project management software.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
openproject/app/models/my_projects_overview.rb

80 lines
2.5 KiB

#-- encoding: UTF-8
#-- copyright
# OpenProject My Project Page Plugin
#
# Copyright (C) 2011-2014 the OpenProject Foundation (OPF)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# See doc/COPYRIGHT.md for more details.
#++
class MyProjectsOverview < ActiveRecord::Base
after_initialize :initialize_default_values
DEFAULTS = {
"left" => ["project_description", "project_details", "work_package_tracking"],
"right" => ["members", "news_latest"],
"top" => [],
"hidden" => []
}
def initialize_default_values()
# attributes() creates a copy every time it is called, so better not use it in a loop
# (this is also why we send the default-values instead of just setting it on attributes)
attr = attributes()
DEFAULTS.each_key do |attribute_name|
# mysql and postgres handle serialized arrays differently: This check initializes the defaults for both cases -
# this especially deals properly with the case where [] is written into the db and re-read ( which
# is not properly handled by a .blank?- check !!!)
self.send("#{attribute_name}=",DEFAULTS[attribute_name]) if attr[attribute_name].nil? || attr[attribute_name] ==""
end
end
serialize :top
serialize :left
serialize :right
serialize :hidden
belongs_to :project
validate :fields_are_arrays
acts_as_attachable delete_permission: :edit_project, view_permission: :view_project
def fields_are_arrays
Array === top && Array === left && Array === right && Array === hidden
end
def save_custom_element(name, title, new_content)
el = custom_elements.detect {|x| x.first == name}
return unless el
el[1] = title
el[2] = new_content
save
end
def new_custom_element
idx = custom_elements.any? ? custom_elements.sort.last.first.next : "a"
[idx, l(:label_custom_element), "h3. #{l(:info_custom_text)}"]
end
def elements
top + left + right + hidden
end
def custom_elements
elements.select {|x| x.respond_to? :to_ary }
end
end