RE: Contacts plugin ยป init.rb
1 |
require 'redmine' |
---|---|
2 |
require 'base64' |
3 |
require 'dispatcher' |
4 |
|
5 |
Redmine::Plugin.register :redmine_screenshot_paste do |
6 |
name 'Screenshot Paste' |
7 |
author 'Jean-Philippe Lang' |
8 |
description 'Allow pasting a screenshot from the clipboard on the issue form.' |
9 |
version '1.1.0' |
10 |
end
|
11 |
|
12 |
class UploadedScreenshot |
13 |
def initialize(content, name) |
14 |
@raw = StringIO.new(Base64.decode64(content.to_s)) |
15 |
@name = name.to_s.strip |
16 |
@name = "screenshot" if @name.blank? |
17 |
@name << ".png" |
18 |
end
|
19 |
|
20 |
def size |
21 |
@raw.size |
22 |
end
|
23 |
|
24 |
def original_filename |
25 |
@name
|
26 |
end
|
27 |
|
28 |
def content_type |
29 |
"image/png"
|
30 |
end
|
31 |
|
32 |
def read(*args) |
33 |
@raw.read(*args) |
34 |
end
|
35 |
end
|
36 |
|
37 |
module RedmineScreenshotPaste |
38 |
def self.included(base) |
39 |
base.send(:extend, ClassMethods) |
40 |
base.class_eval do |
41 |
class << self |
42 |
alias_method_chain :attach_files, :screenshot |
43 |
end
|
44 |
end
|
45 |
end
|
46 |
|
47 |
module ClassMethods |
48 |
def attach_files_with_screenshot(obj, attachments) |
49 |
screenshot = attachments['screenshot'] |
50 |
if screenshot.is_a?(Hash) |
51 |
file = UploadedScreenshot.new(screenshot.delete('content'), |
52 |
screenshot.delete('name')) |
53 |
screenshot['file'] = file |
54 |
end
|
55 |
attach_files_without_screenshot(obj, attachments) |
56 |
end
|
57 |
end
|
58 |
end
|
59 |
|
60 |
|
61 |
class RedmineScreenshotPasteHook < Redmine::Hook::ViewListener |
62 |
render_on :view_issues_form_details_bottom, :partial => 'screenshot' |
63 |
end
|
64 |
|
65 |
Dispatcher.to_prepare :redmine_screenshot_paste do |
66 |
Attachment.send :include, RedmineScreenshotPaste |
67 |
end
|