wpmu 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in wpmu.gemspec
4
+ gemspec
@@ -0,0 +1,12 @@
1
+ WPMU
2
+ ====
3
+
4
+ **WordPress MulitiSite** a **CLI** toolbox supporting administration of
5
+ blogfarm.
6
+
7
+ Usage
8
+ -----
9
+
10
+ To see usage information please invoke without any arguments
11
+
12
+ $ wmpu
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- mode: ruby -*-
3
+
4
+ require 'wpmu/cli'
5
+ WPMU::CLI.start
@@ -0,0 +1,7 @@
1
+ require "wpmu/version"
2
+
3
+ module WPMU
4
+
5
+ autoload :DB, 'wpmu/db'
6
+ autoload :CLI, 'wpmu/cli'
7
+ end
@@ -0,0 +1,108 @@
1
+ require 'thor'
2
+ require 'php_serialize'
3
+ require 'wpmu/version'
4
+ require 'wpmu/db'
5
+
6
+ module WPMU
7
+
8
+
9
+ class List < Thor
10
+
11
+ desc 'themes', 'lists themes and sites which use them (currently lists only active themes)'
12
+ def themes
13
+ themes_options = get_options('template')
14
+ themes = {}
15
+ themes_options.each do |site_id, options|
16
+ theme_name = options['template']
17
+ themes[theme_name] ||= []
18
+ themes[theme_name] << site_id
19
+ end
20
+
21
+ themes.each do |theme_name, site_ids|
22
+ puts "#{theme_name} - #{site_ids.to_s}"
23
+ end
24
+ end
25
+
26
+ desc 'plugins', 'lists plugins and sites which use them (currently lists only active plugins)'
27
+ def plugins
28
+ plugins_options = get_options('active_plugins')
29
+ plugins = {}
30
+ plugins_options.each do |site_id, options|
31
+ encoded_list = options['active_plugins']
32
+ PHP.unserialize(encoded_list).each do |plugin_name|
33
+ plugins[plugin_name] ||= []
34
+ plugins[plugin_name] << site_id
35
+ end
36
+ end
37
+
38
+ plugins.each do |plugin_name, site_ids|
39
+ puts "#{plugin_name} - #{site_ids.to_s}"
40
+ end
41
+ end
42
+
43
+ desc 'sites', 'lists sites'
44
+ def sites
45
+ sites_options = get_options(%w{blogname siteurl admin_email template active_plugins})
46
+ sites_options.each do |site_id, site_options|
47
+ site_options.each do |key, value|
48
+ if key == 'active_plugins'
49
+ puts "#{site_id}| #{key}:"
50
+ PHP.unserialize(value).each do |plugin|
51
+ puts "\t#{plugin}"
52
+ end if value
53
+ else
54
+ puts "#{site_id}| #{key}: #{value}"
55
+ end
56
+ end
57
+ puts "\n"
58
+ end
59
+ end
60
+
61
+ no_tasks do
62
+
63
+ # get sites ids from table names
64
+ def all_site_ids
65
+ db = WPMU::DB.get
66
+ site_ids = []
67
+ regex = /(\d+)/
68
+
69
+ db.tables.each do |table_name|
70
+ match = regex.match(table_name)
71
+ if match.class == MatchData
72
+ site_ids << match[1].to_i
73
+ end
74
+ end
75
+
76
+ # get unique and sort
77
+ site_ids.uniq.sort
78
+ end
79
+
80
+ # gets given set of optoins for all sites
81
+ def get_options(*option_names)
82
+ option_names.flatten!
83
+ all_sites_options = {}
84
+ all_site_ids.each do |site_id|
85
+ current_site_options = {}
86
+ table = WPMU::DB.get["okfn_org_#{site_id}_options".to_sym]
87
+ option_names.each do |option_name|
88
+ current_site_options[option_name] = table.first(:option_name => option_name)[:option_value].strip
89
+ end
90
+ all_sites_options[site_id] = current_site_options
91
+ end
92
+ all_sites_options
93
+ end
94
+
95
+ end
96
+
97
+ end
98
+
99
+
100
+ class CLI < Thor
101
+
102
+ desc 'list RESOURCES', 'prints listing for given type of resource'
103
+ subcommand 'list', List
104
+
105
+ end
106
+
107
+
108
+ end
@@ -0,0 +1,50 @@
1
+ require 'sequel'
2
+ require 'mysql2'
3
+
4
+ module WPMU
5
+
6
+ class DB
7
+
8
+ class << self
9
+ def get
10
+ #TODO: fetch data from wp-config.php
11
+ @db ||= Sequel.mysql2 connection_options
12
+ end
13
+
14
+ private
15
+
16
+ def connection_options
17
+ @connection_options ||= get_connection_options
18
+ end
19
+
20
+ def get_connection_options
21
+ connection_options = {}
22
+ map = {
23
+ :user => 'DB_USER',
24
+ :database => 'DB_NAME',
25
+ :password => 'DB_PASSWORD',
26
+ :host => 'DB_HOST'
27
+ }
28
+ wp_config_path = File.join Dir.pwd, 'wp-config.php'
29
+ begin
30
+ lines = File.open(wp_config_path){ |f| f.readlines }
31
+ rescue Errno::ENOENT
32
+ puts "couldn't find wp-config.php, please make sure you run command from root directory of your blogfarm!"
33
+ exit 1
34
+ end
35
+ lines.each do |line|
36
+ map.each_pair do |db_key, wp_key|
37
+ regex = /'#{wp_key}', '([^']+)'/
38
+ match = regex.match line
39
+ if match.class == MatchData
40
+ connection_options[db_key] = match[1]
41
+ end
42
+ end
43
+ end
44
+ connection_options
45
+ end
46
+ end
47
+
48
+ end
49
+
50
+ end
@@ -0,0 +1,3 @@
1
+ module WPMU
2
+ VERSION = "0.0.1".freeze
3
+ end
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "wpmu/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "wpmu"
7
+ s.version = WPMU::VERSION.dup
8
+ s.authors = ["elf Pavlik"]
9
+ s.email = ["perpetual-tripper@wwelves.org"]
10
+ s.homepage = "https://gitorious.org/elf-pavlik-misc-repos/wpmu-ruby"
11
+ s.summary = %q{CLI toolset for managing Wordpress Multisite}
12
+ s.description = %q{CLI toolset for managing Wordpress Multisite}
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ s.require_paths = ["lib"]
18
+
19
+ # specify any dependencies here; for example:
20
+ # s.add_development_dependency "rspec"
21
+ # s.add_runtime_dependency "rest-client"
22
+ s.add_runtime_dependency "thor"
23
+ s.add_runtime_dependency "sequel"
24
+ s.add_runtime_dependency "mysql2"
25
+ s.add_runtime_dependency "php-serialize"
26
+ end
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: wpmu
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - elf Pavlik
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-03-27 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: thor
16
+ requirement: &76732910 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *76732910
25
+ - !ruby/object:Gem::Dependency
26
+ name: sequel
27
+ requirement: &76732500 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *76732500
36
+ - !ruby/object:Gem::Dependency
37
+ name: mysql2
38
+ requirement: &76732170 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *76732170
47
+ - !ruby/object:Gem::Dependency
48
+ name: php-serialize
49
+ requirement: &76731690 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *76731690
58
+ description: CLI toolset for managing Wordpress Multisite
59
+ email:
60
+ - perpetual-tripper@wwelves.org
61
+ executables:
62
+ - wpmu
63
+ extensions: []
64
+ extra_rdoc_files: []
65
+ files:
66
+ - .gitignore
67
+ - Gemfile
68
+ - README.md
69
+ - Rakefile
70
+ - bin/wpmu
71
+ - lib/wpmu.rb
72
+ - lib/wpmu/cli.rb
73
+ - lib/wpmu/db.rb
74
+ - lib/wpmu/version.rb
75
+ - wpmu.gemspec
76
+ homepage: https://gitorious.org/elf-pavlik-misc-repos/wpmu-ruby
77
+ licenses: []
78
+ post_install_message:
79
+ rdoc_options: []
80
+ require_paths:
81
+ - lib
82
+ required_ruby_version: !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ requirements: []
95
+ rubyforge_project:
96
+ rubygems_version: 1.8.10
97
+ signing_key:
98
+ specification_version: 3
99
+ summary: CLI toolset for managing Wordpress Multisite
100
+ test_files: []
101
+ has_rdoc: