2014-03-04 22:47:53 +00:00
|
|
|
module WordPressImport
|
|
|
|
class Page
|
|
|
|
include ::ActionView::Helpers::TagHelper
|
|
|
|
include ::ActionView::Helpers::TextHelper
|
2011-06-02 14:22:50 +00:00
|
|
|
|
2014-03-04 22:47:53 +00:00
|
|
|
attr_reader :node
|
2011-06-02 12:41:31 +00:00
|
|
|
|
2014-03-04 22:47:53 +00:00
|
|
|
def initialize(node)
|
|
|
|
@node = node
|
|
|
|
end
|
2011-06-02 12:41:31 +00:00
|
|
|
|
2014-03-04 22:47:53 +00:00
|
|
|
def inspect
|
|
|
|
"WordPress::Page(#{post_id}): #{title}"
|
|
|
|
end
|
2011-06-02 12:41:31 +00:00
|
|
|
|
2014-03-12 00:57:28 +00:00
|
|
|
def link
|
|
|
|
node.xpath("link").text
|
|
|
|
end
|
|
|
|
|
2014-03-04 22:47:53 +00:00
|
|
|
def title
|
|
|
|
node.xpath("title").text
|
|
|
|
end
|
2011-06-02 12:41:31 +00:00
|
|
|
|
2014-03-04 22:47:53 +00:00
|
|
|
def content
|
|
|
|
node.xpath("content:encoded").text
|
|
|
|
end
|
2011-06-02 12:41:31 +00:00
|
|
|
|
2014-03-04 22:47:53 +00:00
|
|
|
def content_formatted
|
|
|
|
formatted = format_syntax_highlighter(format_paragraphs(content))
|
2011-06-02 14:22:50 +00:00
|
|
|
|
2014-03-04 22:47:53 +00:00
|
|
|
# remove all tags inside <pre> that simple_format created
|
|
|
|
# TODO: replace format_paragraphs with a method, that ignores pre-tags
|
|
|
|
formatted.gsub!(/(<pre.*?>)(.+?)(<\/pre>)/m) do |match|
|
|
|
|
"#{$1}#{strip_tags($2)}#{$3}"
|
2011-06-02 12:41:31 +00:00
|
|
|
end
|
2014-03-04 22:47:53 +00:00
|
|
|
|
|
|
|
formatted
|
|
|
|
end
|
2011-06-02 12:41:31 +00:00
|
|
|
|
2014-03-04 22:47:53 +00:00
|
|
|
def creator
|
|
|
|
node.xpath("dc:creator").text
|
|
|
|
end
|
2011-06-02 12:41:31 +00:00
|
|
|
|
2014-03-04 22:47:53 +00:00
|
|
|
def post_date
|
2014-03-06 04:27:57 +00:00
|
|
|
Time.parse node.xpath("wp:post_date").text
|
|
|
|
end
|
|
|
|
|
|
|
|
def publish_date
|
|
|
|
Time.parse node.xpath("pubDate").text
|
|
|
|
end
|
|
|
|
|
|
|
|
def post_name
|
|
|
|
node.xpath("wp:post_name").text
|
2014-03-04 22:47:53 +00:00
|
|
|
end
|
2011-06-02 12:41:31 +00:00
|
|
|
|
2014-03-04 22:47:53 +00:00
|
|
|
def post_id
|
|
|
|
node.xpath("wp:post_id").text.to_i
|
|
|
|
end
|
2011-06-02 12:41:31 +00:00
|
|
|
|
2014-03-04 22:47:53 +00:00
|
|
|
def parent_id
|
|
|
|
dump_id = node.xpath("wp:post_parent").text.to_i
|
|
|
|
dump_id == 0 ? nil : dump_id
|
|
|
|
end
|
2011-06-02 12:41:31 +00:00
|
|
|
|
2014-03-04 22:47:53 +00:00
|
|
|
def status
|
|
|
|
node.xpath("wp:status").text
|
|
|
|
end
|
2011-06-02 12:41:31 +00:00
|
|
|
|
2014-03-04 22:47:53 +00:00
|
|
|
def draft?
|
|
|
|
status != 'publish'
|
|
|
|
end
|
2011-06-03 09:35:11 +00:00
|
|
|
|
2014-03-04 22:47:53 +00:00
|
|
|
def published?
|
|
|
|
! draft?
|
|
|
|
end
|
2011-06-02 12:41:31 +00:00
|
|
|
|
2014-03-04 22:47:53 +00:00
|
|
|
def ==(other)
|
|
|
|
post_id == other.post_id
|
|
|
|
end
|
2011-06-02 12:41:31 +00:00
|
|
|
|
2014-03-04 22:47:53 +00:00
|
|
|
#NEED:
|
2014-03-06 04:27:57 +00:00
|
|
|
# creator -> "user_id"
|
2014-03-04 22:47:53 +00:00
|
|
|
# wp:post_name -> "slug"
|
|
|
|
# pubDate -> "published_at"
|
|
|
|
#OK:
|
|
|
|
# title -> "title"
|
|
|
|
# content:encoded -> "body"
|
|
|
|
# wp:post_date_gmt -> "created_at"
|
|
|
|
|
2014-03-06 04:27:57 +00:00
|
|
|
def to_rails
|
|
|
|
# :user_id => creator
|
2014-03-04 22:47:53 +00:00
|
|
|
page = ::Page.create!(:id => post_id, :title => title,
|
2014-03-06 04:27:57 +00:00
|
|
|
:created_at => post_date, :slug => post_name,
|
|
|
|
:published_at => publish_date, :body => content_formatted)
|
2014-03-04 22:47:53 +00:00
|
|
|
end
|
2011-06-03 15:34:40 +00:00
|
|
|
|
2014-03-04 22:47:53 +00:00
|
|
|
private
|
2011-06-03 15:34:40 +00:00
|
|
|
|
2014-03-04 22:47:53 +00:00
|
|
|
def format_paragraphs(text, html_options={})
|
|
|
|
# WordPress doesn't export <p>-Tags, so let's run a simple_format over
|
|
|
|
# the content. As we trust ourselves, no sanatize. This code is heavily
|
|
|
|
# inspired by the simple_format rails helper
|
|
|
|
text = ''.html_safe if text.nil?
|
|
|
|
start_tag = tag('p', html_options, true)
|
|
|
|
|
2014-03-06 04:27:57 +00:00
|
|
|
text.gsub!(/\r?\n/, "<br/>\n") # \r\n and \n -> line break
|
2014-03-04 22:47:53 +00:00
|
|
|
text.gsub!(/\n\n+/, "</p>\n\n#{start_tag}") # 2+ newline -> paragraph
|
|
|
|
text.insert 0, start_tag
|
2011-06-03 15:34:40 +00:00
|
|
|
|
2014-03-04 22:47:53 +00:00
|
|
|
text.html_safe.safe_concat("</p>")
|
|
|
|
end
|
2011-06-05 11:38:39 +00:00
|
|
|
|
2014-03-04 22:47:53 +00:00
|
|
|
def format_syntax_highlighter(text)
|
|
|
|
# Support for SyntaxHighlighter (http://alexgorbatchev.com/SyntaxHighlighter/):
|
|
|
|
# In WordPress you can (via a plugin) enclose code in [lang][/lang]
|
|
|
|
# blocks, which are converted to a <pre>-tag with a class corresponding
|
|
|
|
# to the language.
|
|
|
|
#
|
|
|
|
# Example:
|
|
|
|
# [ruby]p "Hello World"[/ruby]
|
|
|
|
# -> <pre class="brush: ruby">p "Hello world"</pre>
|
|
|
|
text.gsub(/\[(\w+)\](.+?)\[\/\1\]/m, '<pre class="brush: \1">\2</pre>')
|
2011-06-01 19:11:57 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|