forked from publify/publify
/
status.rb
104 lines (83 loc) · 2.41 KB
/
status.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
class Status < Content
require 'twitter'
require 'json'
require 'uri'
include PublifyGuid
include ConfigManager
serialize :settings, Hash
setting :twitter_id, :string, ''
belongs_to :user
validates_presence_of :body
validates_uniqueness_of :permalink
attr_accessor :push_to_twitter
after_create :set_permalink, :shorten_url
default_scope order("published_at DESC")
def set_permalink
self.permalink = "#{self.id}-#{self.body.to_permalink[0..79]}" if self.permalink.nil? or self.permalink.empty?
self.save
end
def set_author(user)
self.author = user.login
self.user = user
end
def html_preprocess(field, html)
PublifyApp::Textfilter::Twitterfilter.filtertext(nil,nil,html,nil).nofollowify
end
def initialize(*args)
super
# Yes, this is weird - PDC
begin
self.settings ||= {}
rescue Exception => e
self.settings = {}
end
end
def send_to_twitter(user)
blog = Blog.default
return if blog.twitter_consumer_key.nil? or blog.twitter_consumer_secret.nil?
return unless user.twitter_configured?
twitter = Twitter::Client.new(
:consumer_key => blog.twitter_consumer_key,
:consumer_secret => blog.twitter_consumer_secret,
:oauth_token => user.twitter_oauth_token,
:oauth_token_secret => user.twitter_oauth_token_secret
)
shortened_url = self.redirects.first.to_url
message = self.body.strip_html
length = calculate_real_length(message)
if length > 115
message = "#{message[0..115]}... #{shortened_url}"
else
message = "#{message} #{shortened_url}"
end
begin
tweet = twitter.update(message)
self.twitter_id = tweet.attrs[:id_str]
self.save
user.update_twitter_profile_image(tweet.attrs[:user][:profile_image_url])
rescue
flash[:error] = "Oooops something wrong happened"
end
end
content_fields :body
def access_by?(user)
user.admin? || user_id == user.id
end
def permalink_url(anchor=nil, only_path=false)
blog.url_for(
:controller => '/statuses',
:action => 'show',
:permalink => permalink,
:anchor => anchor,
:only_path => only_path
)
end
private
def calculate_real_length(message)
uris = URI.extract(message, ['http', 'https', 'ftp'])
uris.each do |uri|
message = message.gsub(uri, "---------------------")
end
return message.length
end
end