Module: Redmine::Acts::Attachable::InstanceMethods

Defined in:
lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



69
70
71
# File 'lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb', line 69

def self.included(base)
  base.extend ClassMethods
end

Instance Method Details

#attach_saved_attachmentsObject



144
145
146
147
148
# File 'lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb', line 144

def attach_saved_attachments
  saved_attachments.each do |attachment|
    self.attachments << attachment
  end
end

#attachments_deletable?(user = User.current) ⇒ Boolean

Returns:

  • (Boolean)


83
84
85
86
# File 'lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb', line 83

def attachments_deletable?(user=User.current)
  (respond_to?(:visible?) ? visible?(user) : true) &&
    user.allowed_to?(self.class.attachable_options[:delete_permission], self.project)
end

#attachments_editable?(user = User.current) ⇒ Boolean

Returns:

  • (Boolean)


78
79
80
81
# File 'lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb', line 78

def attachments_editable?(user=User.current)
  (respond_to?(:visible?) ? visible?(user) : true) &&
    user.allowed_to?(self.class.attachable_options[:edit_permission], self.project)
end

#attachments_visible?(user = User.current) ⇒ Boolean

Returns:

  • (Boolean)


73
74
75
76
# File 'lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb', line 73

def attachments_visible?(user=User.current)
  (respond_to?(:visible?) ? visible?(user) : true) &&
    user.allowed_to?(self.class.attachable_options[:view_permission], self.project)
end

#detach_saved_attachmentsObject



150
151
152
153
154
# File 'lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb', line 150

def detach_saved_attachments
  saved_attachments.each do |attachment|
    attachment.reload
  end
end

#save_attachments(attachments, author = User.current) ⇒ Object



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb', line 96

def save_attachments(attachments, author=User.current)
  if attachments.respond_to?(:to_unsafe_hash)
    attachments = attachments.to_unsafe_hash
  end

  if attachments.is_a?(Hash)
    attachments = attachments.stringify_keys
    attachments = attachments.to_a.sort {|a, b|
      if a.first.to_i > 0 && b.first.to_i > 0
        a.first.to_i <=> b.first.to_i
      elsif a.first.to_i > 0
        1
      elsif b.first.to_i > 0
        -1
      else
        a.first <=> b.first
      end
    }
    attachments = attachments.map(&:last)
  end
  if attachments.is_a?(Array)
    @failed_attachment_count = 0
    attachments.each do |attachment|
      next unless attachment.present?
      a = nil
      if file = attachment['file']
        a = Attachment.create(:file => file, :author => author)
      elsif token = attachment['token'].presence
        a = Attachment.find_by_token(token)
        unless a
          @failed_attachment_count += 1
          next
        end
        a.filename = attachment['filename'] unless attachment['filename'].blank?
        a.content_type = attachment['content_type'] unless attachment['content_type'].blank?
      end
      next unless a
      a.description = attachment['description'].to_s.strip
      if a.new_record? || a.invalid?
        unsaved_attachments << a
      else
        saved_attachments << a
      end
    end
  end
  {:files => saved_attachments, :unsaved => unsaved_attachments}
end

#saved_attachmentsObject



88
89
90
# File 'lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb', line 88

def saved_attachments
  @saved_attachments ||= []
end

#unsaved_attachmentsObject



92
93
94
# File 'lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb', line 92

def unsaved_attachments
  @unsaved_attachments ||= []
end

#warn_about_failed_attachmentsObject



156
157
158
159
160
# File 'lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb', line 156

def warn_about_failed_attachments
  if @failed_attachment_count && @failed_attachment_count > 0
    errors.add :base, ::I18n.t('warning_attachments_not_saved', count: @failed_attachment_count)
  end
end