class BuntoImport::Importers::Joomla3
Public Class Methods
process(options)
click to toggle source
# File lib/bunto-import/importers/joomla3.rb, line 30 def self.process(options) dbname = options.fetch('dbname') user = options.fetch('user') pass = options.fetch('password', '') host = options.fetch('host', "localhost") cid = options.fetch('category', 0) table_prefix = options.fetch('prefix', "jos_") db = Sequel.mysql(dbname, :user => user, :password => pass, :host => host, :encoding => 'utf8') FileUtils.mkdir_p("_posts") # Reads a MySQL database via Sequel and creates a post file for each # post in #__content that is published. query = "SELECT `cn`.`title`, `cn`.`alias`, `cn`.`introtext`, CONCAT(`cn`.`introtext`,`cn`.`fulltext`) AS `content`, " query << "`cn`.`created`, `cn`.`id`, `ct`.`title` AS `category`, `u`.`name` AS `author` " query << "FROM `#{table_prefix}content` AS `cn` JOIN `#{table_prefix}categories` AS `ct` ON `cn`.`catid` = `ct`.`id` " query << "JOIN `#{table_prefix}users` AS `u` ON `cn`.`created_by` = `u`.`id` " query << "WHERE (`cn`.`state` = '1' OR `cn`.`state` = '2') " # Only published and archived content items to be imported if cid > 0 query << " AND `cn`.`catid` = '#{cid}' " else query << " AND `cn`.`catid` != '2' " #Filter out uncategorized content end db[query].each do |post| # Get required fields and construct Bunto compatible name. title = post[:title] slug = post[:alias] date = post[:created] author = post[:author] category = post[:category] content = post[:content] excerpt = post[:introtext] name = "%02d-%02d-%02d-%s.markdown" % [date.year, date.month, date.day, slug] # Get the relevant fields as a hash, delete empty fields and convert # to YAML for the header. data = { 'layout' => 'post', 'title' => title.to_s, 'joomla_id' => post[:id], 'joomla_url' => slug, 'date' => date, 'author' => author, 'excerpt' => excerpt.strip.to_s, 'category' => category }.delete_if { |k,v| v.nil? || v == '' }.to_yaml # Write out the data and content to file File.open("_posts/#{name}", "w") do |f| f.puts data f.puts "---" f.puts content end end end
require_deps()
click to toggle source
# File lib/bunto-import/importers/joomla3.rb, line 21 def self.require_deps BuntoImport.require_with_fallback(%w[ rubygems sequel fileutils safe_yaml ]) end
specify_options(c)
click to toggle source
# File lib/bunto-import/importers/joomla3.rb, line 12 def self.specify_options(c) c.option 'dbname', '--dbname', 'Database name' c.option 'user', '--user', 'Database user name' c.option 'password', '--password', "Database user's password (default: '')" c.option 'host', '--host', 'Database host name' c.option 'category', '--category', 'ID of the category' c.option 'prefix', '--prefix', 'Table prefix name' end
validate(options)
click to toggle source
# File lib/bunto-import/importers/joomla3.rb, line 4 def self.validate(options) %w[dbname user prefix].each do |option| if options[option].nil? abort "Missing mandatory option --#{option}." end end end