wp_wrapper 0.0.2
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.
- checksums.yaml +7 -0
- data/Gemfile +12 -0
- data/LICENSE.txt +50 -0
- data/README.markdown +3 -0
- data/Rakefile +87 -0
- data/lib/wp_wrapper/client.rb +63 -0
- data/lib/wp_wrapper/modules/api.rb +20 -0
- data/lib/wp_wrapper/modules/authorization.rb +46 -0
- data/lib/wp_wrapper/modules/options.rb +28 -0
- data/lib/wp_wrapper/modules/plugins/akismet.rb +17 -0
- data/lib/wp_wrapper/modules/plugins/gocodes.rb +18 -0
- data/lib/wp_wrapper/modules/plugins/tracking_code.rb +20 -0
- data/lib/wp_wrapper/modules/plugins/w3_total_cache.rb +129 -0
- data/lib/wp_wrapper/modules/plugins/wordpress_seo.rb +150 -0
- data/lib/wp_wrapper/modules/plugins.rb +57 -0
- data/lib/wp_wrapper/modules/profiles.rb +66 -0
- data/lib/wp_wrapper/modules/setup.rb +65 -0
- data/lib/wp_wrapper/modules/themes.rb +71 -0
- data/lib/wp_wrapper/modules/upgrade.rb +137 -0
- data/lib/wp_wrapper/railtie.rb +12 -0
- data/lib/wp_wrapper.rb +24 -0
- data/spec/spec_helper.rb +43 -0
- data/spec/wordpress.yml.example +8 -0
- data/spec/wp_wrapper/authentication_spec.rb +18 -0
- data/wp_wrapper.gemspec +51 -0
- metadata +138 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 84593928500719e7492d7872902ed82016bd59dd
|
4
|
+
data.tar.gz: ec08aebed77d677a320cb64b9005a47723883968
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bfc21471d832c2c500894e759ed99d8418199e586c58ce7c3b386a106b369a4c81f662fedf26417ba4d014565ce96e251411efc02bd7906ff94ba7453581883d
|
7
|
+
data.tar.gz: fa650d62900e6d038d3aa015f5a0454698da384e97326dd6762da62242b09687842c40972227f1ac3ae2ef47bb309548e4e458a19877ef17199daca1d64820f0
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
|
2
|
+
Version 0.9.3
|
3
|
+
|
4
|
+
Copyright (c) 2011, Majestic-12 Ltd
|
5
|
+
|
6
|
+
All rights reserved.
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
Redistribution and use in source and binary forms, with or without
|
11
|
+
|
12
|
+
modification, are permitted provided that the following conditions are met:
|
13
|
+
|
14
|
+
* Redistributions of source code must retain the above copyright
|
15
|
+
|
16
|
+
notice, this list of conditions and the following disclaimer.
|
17
|
+
|
18
|
+
* Redistributions in binary form must reproduce the above copyright
|
19
|
+
|
20
|
+
notice, this list of conditions and the following disclaimer in the
|
21
|
+
|
22
|
+
documentation and/or other materials provided with the distribution.
|
23
|
+
|
24
|
+
* Neither the name of the Majestic-12 Ltd nor the
|
25
|
+
|
26
|
+
names of its contributors may be used to endorse or promote products
|
27
|
+
|
28
|
+
derived from this software without specific prior written permission.
|
29
|
+
|
30
|
+
|
31
|
+
|
32
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
33
|
+
|
34
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
35
|
+
|
36
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
37
|
+
|
38
|
+
DISCLAIMED. IN NO EVENT SHALL Majestic-12 Ltd BE LIABLE FOR ANY
|
39
|
+
|
40
|
+
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
41
|
+
|
42
|
+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
43
|
+
|
44
|
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
45
|
+
|
46
|
+
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
47
|
+
|
48
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
49
|
+
|
50
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/README.markdown
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
## helper functions
|
2
|
+
|
3
|
+
def name
|
4
|
+
@name ||= Dir['*.gemspec'].first.split('.').first
|
5
|
+
end
|
6
|
+
|
7
|
+
def version
|
8
|
+
line = File.read("lib/#{name}.rb")[/^\s*VERSION\s*=\s*.*/]
|
9
|
+
line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1]
|
10
|
+
end
|
11
|
+
|
12
|
+
def gemspec_file
|
13
|
+
"#{name}.gemspec"
|
14
|
+
end
|
15
|
+
|
16
|
+
def gem_file
|
17
|
+
"#{name}-#{version}.gem"
|
18
|
+
end
|
19
|
+
|
20
|
+
def replace_header(head, header_name)
|
21
|
+
head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
|
22
|
+
end
|
23
|
+
|
24
|
+
begin
|
25
|
+
# Rspec 2.0
|
26
|
+
require 'rspec/core/rake_task'
|
27
|
+
|
28
|
+
desc 'Default: run specs'
|
29
|
+
task :default => :spec
|
30
|
+
RSpec::Core::RakeTask.new do |t|
|
31
|
+
t.pattern = "spec/**/*_spec.rb"
|
32
|
+
end
|
33
|
+
|
34
|
+
RSpec::Core::RakeTask.new('rcov') do |t|
|
35
|
+
t.pattern = "spec/**/*_spec.rb"
|
36
|
+
t.rcov = true
|
37
|
+
t.rcov_opts = ['--exclude', 'spec']
|
38
|
+
end
|
39
|
+
|
40
|
+
rescue LoadError
|
41
|
+
puts "Rspec not available. Install it with: gem install rspec"
|
42
|
+
end
|
43
|
+
|
44
|
+
## release management tasks
|
45
|
+
|
46
|
+
desc "Commit, create tag v#{version} and build and push #{gem_file} to Rubygems"
|
47
|
+
task :release => :build do
|
48
|
+
sh "git commit --allow-empty -a -m 'Release #{version}'"
|
49
|
+
sh "git tag v#{version}"
|
50
|
+
sh "git push"
|
51
|
+
sh "git push origin v#{version}"
|
52
|
+
sh "gem push pkg/#{gem_file}"
|
53
|
+
end
|
54
|
+
|
55
|
+
desc "Build #{gem_file} into the pkg directory"
|
56
|
+
task :build => :gemspec do
|
57
|
+
sh "mkdir -p pkg"
|
58
|
+
sh "gem build #{gemspec_file}"
|
59
|
+
sh "mv #{gem_file} pkg"
|
60
|
+
end
|
61
|
+
|
62
|
+
desc "Generate #{gemspec_file}"
|
63
|
+
task :gemspec do
|
64
|
+
# read spec file and split out manifest section
|
65
|
+
spec = File.read(gemspec_file)
|
66
|
+
head, manifest, tail = spec.split(" # = MANIFEST =\n")
|
67
|
+
|
68
|
+
# replace name version and date
|
69
|
+
replace_header(head, :name)
|
70
|
+
replace_header(head, :version)
|
71
|
+
|
72
|
+
# determine file list from git ls-files
|
73
|
+
files = `git ls-files`.
|
74
|
+
split("\n").
|
75
|
+
sort.
|
76
|
+
reject { |file| file =~ /^\./ }.
|
77
|
+
reject { |file| file =~ /^(rdoc|pkg)/ }.
|
78
|
+
map { |file| " #{file}" }.
|
79
|
+
join("\n")
|
80
|
+
|
81
|
+
# piece file back together and write
|
82
|
+
manifest = " s.files = %w[\n#{files}\n ]\n"
|
83
|
+
spec = [head, manifest, tail].join(" # = MANIFEST =\n")
|
84
|
+
File.open(gemspec_file, 'w') { |io| io.write(spec) }
|
85
|
+
puts "Updated #{gemspec_file}"
|
86
|
+
end
|
87
|
+
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module WpWrapper
|
2
|
+
class Client
|
3
|
+
attr_accessor :url, :username, :password
|
4
|
+
attr_accessor :environment, :logged_in
|
5
|
+
attr_accessor :http_client, :mechanize_client
|
6
|
+
|
7
|
+
def initialize(options = {})
|
8
|
+
options.symbolize_keys! if options.respond_to?(:symbolize_keys!)
|
9
|
+
|
10
|
+
self.url = options.fetch(:url, nil)
|
11
|
+
self.url = "#{self.url}/" unless self.url.nil? || self.url =~ /\/$/i
|
12
|
+
|
13
|
+
self.username = options.fetch(:username, nil)
|
14
|
+
self.password = options.fetch(:password, nil)
|
15
|
+
self.logged_in = false
|
16
|
+
|
17
|
+
self.http_client = HttpUtilities::Http::Client.new
|
18
|
+
self.mechanize_client = HttpUtilities::Http::Mechanize::Client.new
|
19
|
+
end
|
20
|
+
|
21
|
+
include WpWrapper::Modules::Authorization
|
22
|
+
include WpWrapper::Modules::Setup
|
23
|
+
include WpWrapper::Modules::Upgrade
|
24
|
+
include WpWrapper::Modules::Themes
|
25
|
+
include WpWrapper::Modules::Plugins
|
26
|
+
include WpWrapper::Modules::Options
|
27
|
+
include WpWrapper::Modules::Profiles
|
28
|
+
include WpWrapper::Modules::Api
|
29
|
+
|
30
|
+
protected
|
31
|
+
def logged_in?
|
32
|
+
return self.logged_in
|
33
|
+
end
|
34
|
+
|
35
|
+
def get_url(type = :home, options = {})
|
36
|
+
absolute = options.fetch(:absolute, true)
|
37
|
+
admin_prefix = options.fetch(:admin_prefix, "wp-admin/")
|
38
|
+
uri = absolute ? self.url : ""
|
39
|
+
|
40
|
+
return case type
|
41
|
+
when :home then "#{uri}"
|
42
|
+
when :admin then "#{uri}#{admin_prefix}"
|
43
|
+
when :upgrade then "#{uri}#{admin_prefix}update-core.php"
|
44
|
+
when :general_options then "#{uri}#{admin_prefix}options-general.php"
|
45
|
+
when :write_options then "#{uri}#{admin_prefix}options-writing.php"
|
46
|
+
when :read_options then "#{uri}#{admin_prefix}options-reading.php"
|
47
|
+
when :discussion_options then "#{uri}#{admin_prefix}options-discussion.php"
|
48
|
+
when :plugins then "#{uri}#{admin_prefix}plugins.php"
|
49
|
+
when :themes then "#{uri}#{admin_prefix}themes.php"
|
50
|
+
when :profile then "#{uri}#{admin_prefix}profile.php"
|
51
|
+
when :new_user then "#{uri}#{admin_prefix}user-new.php"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def set_options_and_submit(url, form_identifier = {}, fields = {}, submit_identifier = :first, options = {})
|
56
|
+
login unless logged_in?
|
57
|
+
|
58
|
+
form_page_url = "#{get_url(:admin)}/#{url}"
|
59
|
+
response = self.mechanize_client.set_form_and_submit(form_page_url, form_identifier, submit_identifier, fields, options)
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module WpWrapper
|
2
|
+
module Modules
|
3
|
+
module Api
|
4
|
+
|
5
|
+
def enable_xml_rpc_api
|
6
|
+
if (login)
|
7
|
+
write_options_page = self.mechanize_client.open_url(get_url(:write_options))
|
8
|
+
|
9
|
+
if (write_options_page)
|
10
|
+
form = write_options_page.form_with(:action => /options\.php/i)
|
11
|
+
form.checkbox_with(:name => 'enable_xmlrpc').checked = true
|
12
|
+
|
13
|
+
updated_page = form.submit(form.buttons.first)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module WpWrapper
|
2
|
+
module Modules
|
3
|
+
|
4
|
+
module Authorization
|
5
|
+
|
6
|
+
def login(retries = 3)
|
7
|
+
success = logged_in?
|
8
|
+
|
9
|
+
if (!success && retries > 0)
|
10
|
+
login_page = self.mechanize_client.open_url(get_url(:admin))
|
11
|
+
agent = self.mechanize_client.agent
|
12
|
+
|
13
|
+
if (login_page)
|
14
|
+
login_form = login_page.form_with(:name => 'loginform')
|
15
|
+
|
16
|
+
if (login_form)
|
17
|
+
login_form.field_with(:name => 'log').value = self.username
|
18
|
+
login_form.field_with(:name => 'pwd').value = self.password
|
19
|
+
|
20
|
+
begin
|
21
|
+
logged_in_page = login_form.submit
|
22
|
+
log_out_link = logged_in_page.link_with(:href => /wp-login\.php\?action=logout/i)
|
23
|
+
self.logged_in = !log_out_link.nil?
|
24
|
+
success = self.logged_in
|
25
|
+
|
26
|
+
puts "#{Time.now}: Url: #{self.url}. Successfully logged in? #{self.logged_in}"
|
27
|
+
|
28
|
+
rescue Exception => e
|
29
|
+
puts "#{Time.now}: Url: #{self.url}. Failed to login. Error Class: #{e.class.name}. Error Message: #{e.message}"
|
30
|
+
login(retries - 1) if (retries > 0)
|
31
|
+
end
|
32
|
+
|
33
|
+
else
|
34
|
+
puts "\n\n#{Time.now}: Url: #{self.url}. Something's broken! Can't find wp-admin login form! Retrying...\n\n"
|
35
|
+
login(retries - 1) if (retries > 0)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
return success
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module WpWrapper
|
2
|
+
module Modules
|
3
|
+
module Options
|
4
|
+
|
5
|
+
def set_blog_description(description)
|
6
|
+
return set_options(:general, {:blogdescription => {:value => description, :type => :input}})
|
7
|
+
end
|
8
|
+
|
9
|
+
def disable_comments_and_trackbacks
|
10
|
+
options = {
|
11
|
+
:default_pingback_flag => {:checked => false, :type => :checkbox},
|
12
|
+
:default_ping_status => {:checked => false, :type => :checkbox},
|
13
|
+
:default_comment_status => {:checked => false, :type => :checkbox},
|
14
|
+
:comments_notify => {:checked => false, :type => :checkbox},
|
15
|
+
:moderation_notify => {:checked => false, :type => :checkbox}
|
16
|
+
}
|
17
|
+
|
18
|
+
return set_options(:discussion, options)
|
19
|
+
end
|
20
|
+
|
21
|
+
def set_options(type, options = {})
|
22
|
+
url = get_url("#{type}_options".to_sym, absolute: false, admin_prefix: '')
|
23
|
+
return set_options_and_submit(url, {action: /options\.php/i}, options)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module WpWrapper
|
2
|
+
module Modules
|
3
|
+
module Plugins
|
4
|
+
module Akismet
|
5
|
+
|
6
|
+
def configure_akismet(api_key)
|
7
|
+
options = {
|
8
|
+
:key => {:value => api_key, :type => :input}
|
9
|
+
}
|
10
|
+
|
11
|
+
response = set_options_and_submit("options-general.php?page=akismet-key-config", {:id => 'akismet-enter-api-key'}, options)
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module WpWrapper
|
2
|
+
module Modules
|
3
|
+
module Plugins
|
4
|
+
module Gocodes
|
5
|
+
|
6
|
+
def configure_gocodes(url_trigger = 'go')
|
7
|
+
options = {
|
8
|
+
:urltrigger => {:value => url_trigger, :type => :input},
|
9
|
+
:nofollow => {:checked => true, :type => :checkbox},
|
10
|
+
}
|
11
|
+
|
12
|
+
return set_options_and_submit("options-general.php?page=gocodes/gocodes.php", {:action => /page=gocodes\/gocodes\.php/i}, options)
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module WpWrapper
|
2
|
+
module Modules
|
3
|
+
module Plugins
|
4
|
+
module TrackingCode
|
5
|
+
|
6
|
+
def configure_tracking_code(tracking_code)
|
7
|
+
options = {
|
8
|
+
'data[tracking_head][code]' => {:value => tracking_code, :type => :input},
|
9
|
+
'data[tracking_head][disable]' => {:checked => false, :type => :checkbox},
|
10
|
+
'data[tracking_footer][code]' => {:value => '', :type => :input},
|
11
|
+
'data[tracking_footer][disable]' => {:checked => true, :type => :checkbox},
|
12
|
+
}
|
13
|
+
|
14
|
+
return set_options_and_submit("options-general.php?page=tracking-code", {:method => /post/i}, options)
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
module WpWrapper
|
2
|
+
module Modules
|
3
|
+
module Plugins
|
4
|
+
module W3TotalCache
|
5
|
+
|
6
|
+
def configure_w3_total_cache(caching_mechanism = :memcached, options = {})
|
7
|
+
configure_general_settings(caching_mechanism, options)
|
8
|
+
configure_page_cache
|
9
|
+
configure_minification
|
10
|
+
configure_browser_cache
|
11
|
+
activate_configuration
|
12
|
+
end
|
13
|
+
|
14
|
+
def configure_general_settings(caching_mechanism, options = {})
|
15
|
+
caching_options = {}
|
16
|
+
cache_sections = [:pg, :db, :object]
|
17
|
+
|
18
|
+
url = "admin.php?page=w3tc_general"
|
19
|
+
form_identifier = {:id => 'w3tc_form'}
|
20
|
+
button_identifier = {:name => 'w3tc_save_options'}
|
21
|
+
|
22
|
+
varnish_server = options.fetch(:varnish_server, "localhost")
|
23
|
+
|
24
|
+
cache_sections.each do |cache_section|
|
25
|
+
section_options = {
|
26
|
+
"#{cache_section}cache.enabled" => {:checked => true, :type => :checkbox},
|
27
|
+
"#{cache_section}cache.engine" => {:value => caching_mechanism, :type => :select}
|
28
|
+
}
|
29
|
+
|
30
|
+
caching_options.merge!(section_options)
|
31
|
+
end
|
32
|
+
|
33
|
+
minify_options = {
|
34
|
+
"minify.enabled" => {:checked => true, :type => :checkbox},
|
35
|
+
"minify.engine" => {:value => caching_mechanism, :type => :select},
|
36
|
+
#"minify.auto" => {:checked => true, :type => :radiobutton}
|
37
|
+
}
|
38
|
+
|
39
|
+
caching_options.merge!(minify_options)
|
40
|
+
|
41
|
+
browser_cache_options = {
|
42
|
+
"browsercache.enabled" => {:checked => true, :type => :checkbox},
|
43
|
+
}
|
44
|
+
|
45
|
+
caching_options.merge!(browser_cache_options)
|
46
|
+
|
47
|
+
varnish_options = {
|
48
|
+
"varnish.enabled" => {:checked => true, :type => :checkbox},
|
49
|
+
"varnish.servers" => {:value => varnish_server, :type => :input}
|
50
|
+
}
|
51
|
+
|
52
|
+
caching_options.merge!(varnish_options)
|
53
|
+
|
54
|
+
return set_options_and_submit(url, form_identifier, caching_options, button_identifier)
|
55
|
+
end
|
56
|
+
|
57
|
+
def configure_page_cache
|
58
|
+
url = "admin.php?page=w3tc_pgcache"
|
59
|
+
form_identifier = {:action => /admin\.php\?page=w3tc_pgcache/i, :index => 1}
|
60
|
+
button_identifier = {:name => 'w3tc_save_options'}
|
61
|
+
|
62
|
+
options = {
|
63
|
+
"pgcache.cache.feed" => {:checked => true, :type => :checkbox},
|
64
|
+
}
|
65
|
+
|
66
|
+
return set_options_and_submit(url, form_identifier, options, button_identifier)
|
67
|
+
end
|
68
|
+
|
69
|
+
def configure_minification
|
70
|
+
url = "admin.php?page=w3tc_minify"
|
71
|
+
form_identifier = {:action => /admin\.php\?page=w3tc_minify/i, :index => 1}
|
72
|
+
button_identifier = {:name => 'w3tc_save_options'}
|
73
|
+
|
74
|
+
options = {
|
75
|
+
"minify.html.enable" => {:checked => true, :type => :checkbox},
|
76
|
+
"minify.html.inline.css" => {:checked => true, :type => :checkbox},
|
77
|
+
"minify.html.inline.js" => {:checked => true, :type => :checkbox},
|
78
|
+
"minify.auto.disable_filename_length_test" => {:checked => true, :type => :checkbox},
|
79
|
+
}
|
80
|
+
|
81
|
+
return set_options_and_submit(url, form_identifier, options, button_identifier)
|
82
|
+
end
|
83
|
+
|
84
|
+
def configure_browser_cache
|
85
|
+
options = {}
|
86
|
+
|
87
|
+
url = "admin.php?page=w3tc_browsercache"
|
88
|
+
form_identifier = {:action => /admin\.php\?page=w3tc_browsercache/i, :index => 1}
|
89
|
+
button_identifier = {:name => 'w3tc_save_options'}
|
90
|
+
|
91
|
+
sections = [
|
92
|
+
:cssjs, :html, :other
|
93
|
+
]
|
94
|
+
|
95
|
+
sections.each do |section|
|
96
|
+
section_options = {
|
97
|
+
"browsercache.#{section}.expires" => {:checked => true, :type => :checkbox},
|
98
|
+
"browsercache.#{section}.cache.control" => {:checked => true, :type => :checkbox},
|
99
|
+
"browsercache.#{section}.etag" => {:checked => true, :type => :checkbox},
|
100
|
+
}
|
101
|
+
|
102
|
+
options.merge!(section_options)
|
103
|
+
end
|
104
|
+
|
105
|
+
return set_options_and_submit(url, form_identifier, options)
|
106
|
+
end
|
107
|
+
|
108
|
+
def activate_configuration
|
109
|
+
url = "#{get_url(:admin)}admin.php?page=w3tc_general"
|
110
|
+
page = self.mechanize_client.get_page(url)
|
111
|
+
|
112
|
+
parser = page ? self.mechanize_client.get_parser(page) : nil
|
113
|
+
input = parser ? parser.at_css('input[value = "deploy"]') : nil
|
114
|
+
|
115
|
+
if (input)
|
116
|
+
on_click = input["onclick"]
|
117
|
+
url = on_click.gsub("admin.php?page=w3tc_general", url)
|
118
|
+
url = url.gsub(/^document\.location\.href='/i, "").gsub(/';$/, "")
|
119
|
+
|
120
|
+
puts "Will activate new W3 Total Cache-configuration. Activation url: #{url}"
|
121
|
+
|
122
|
+
self.http_client.retrieve_raw_content(url)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
@@ -0,0 +1,150 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module WpWrapper
|
4
|
+
module Modules
|
5
|
+
module Plugins
|
6
|
+
module WordpressSeo
|
7
|
+
|
8
|
+
def configure_wordpress_seo(language = :sv)
|
9
|
+
login unless logged_in?
|
10
|
+
|
11
|
+
options = get_author_options
|
12
|
+
|
13
|
+
options.merge!(get_taxonomy_options)
|
14
|
+
options.merge!(get_title_options(language))
|
15
|
+
|
16
|
+
url = "#{get_url(:admin)}/admin.php?page=wpseo_titles"
|
17
|
+
|
18
|
+
page = self.mechanize_client.get_page(url)
|
19
|
+
form = self.mechanize_client.get_form(page, {:action => /wp-admin\/options\.php/i})
|
20
|
+
|
21
|
+
if (form)
|
22
|
+
options.each do |key, values|
|
23
|
+
case values[:type]
|
24
|
+
when :input
|
25
|
+
form[key] = values[:value]
|
26
|
+
when :checkbox
|
27
|
+
form[key] = "on" if values[:checked]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
form.submit
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
def get_author_options
|
37
|
+
options = {
|
38
|
+
"wpseo_titles[noindex-author-wpseo]" => {:type => :checkbox, :checked => true},
|
39
|
+
"wpseo_titles[disable-author]" => {:type => :checkbox, :checked => true},
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
43
|
+
def get_taxonomy_options
|
44
|
+
options = {
|
45
|
+
"wpseo_titles[noindex-tax-category]" => {:type => :checkbox, :checked => true},
|
46
|
+
"wpseo_titles[noindex-tax-post_tag]" => {:type => :checkbox, :checked => true},
|
47
|
+
"wpseo_titles[noindex-tax-post_format]" => {:type => :checkbox, :checked => true},
|
48
|
+
}
|
49
|
+
|
50
|
+
return options
|
51
|
+
end
|
52
|
+
|
53
|
+
def get_title_options(language = :sv)
|
54
|
+
options = {
|
55
|
+
"wpseo_titles[forcerewritetitle]" => {:type => :checkbox, :checked => true},
|
56
|
+
"wpseo_titles[title-home]" => {:type => :input, :value => '%%sitename%% %%page%%'},
|
57
|
+
"wpseo_titles[title-search]" => {:type => :input, :value => translate_pattern(:search, language)},
|
58
|
+
"wpseo_titles[title-404]" => {:type => :input, :value => translate_pattern(:not_found, language)}
|
59
|
+
}
|
60
|
+
|
61
|
+
standard_pattern = '%%title%% %%page%% %%sep%% %%sitename%%'
|
62
|
+
standard_term_pattern = translate_pattern(:term, language)
|
63
|
+
|
64
|
+
types = {
|
65
|
+
:post => {:pattern => standard_pattern, :noindex => false},
|
66
|
+
:page => {:pattern => standard_pattern, :noindex => false},
|
67
|
+
:attachment => {:pattern => standard_pattern, :noindex => true},
|
68
|
+
:wooframework => {:pattern => standard_pattern, :noindex => false},
|
69
|
+
:category => {:pattern => standard_term_pattern, :noindex => false},
|
70
|
+
:post_tag => {:pattern => standard_term_pattern, :noindex => true},
|
71
|
+
:post_format => {:pattern => standard_term_pattern, :noindex => true},
|
72
|
+
:author => {:pattern => translate_pattern(:author, language), :noindex => true},
|
73
|
+
:archive => {:pattern => '%%date%% %%page%% %%sep%% %%sitename%%', :noindex => true},
|
74
|
+
}
|
75
|
+
|
76
|
+
types.each do |key, values|
|
77
|
+
type_options = {
|
78
|
+
"wpseo_titles[title-#{key}]" => {:type => :input, :value => values[:pattern]},
|
79
|
+
"wpseo_titles[noindex-#{key}]" => {:type => :checkbox, :checked => values[:noindex]}
|
80
|
+
}
|
81
|
+
|
82
|
+
options.merge!(type_options)
|
83
|
+
end
|
84
|
+
|
85
|
+
return options
|
86
|
+
end
|
87
|
+
|
88
|
+
def configure_wordpress_seo_sitemaps(not_included_post_types: [], not_included_taxonomies: [], disable_author_sitemap: true)
|
89
|
+
login unless logged_in?
|
90
|
+
|
91
|
+
url = "#{get_url(:admin)}/admin.php?page=wpseo_xml"
|
92
|
+
page = self.mechanize_client.get_page(url)
|
93
|
+
form = self.mechanize_client.get_form(page, {:action => /wp-admin\/options\.php/i})
|
94
|
+
|
95
|
+
options = {
|
96
|
+
"wpseo_xml[enablexmlsitemap]" => {:type => :checkbox, :checked => true}
|
97
|
+
}
|
98
|
+
|
99
|
+
if (disable_author_sitemap)
|
100
|
+
options["wpseo_xml[disable_author_sitemap]"] = {:type => :checkbox, :checked => true}
|
101
|
+
end
|
102
|
+
|
103
|
+
not_included_post_types.each do |post_type|
|
104
|
+
post_type_options = {
|
105
|
+
"wpseo_xml[post_types-#{post_type}-not_in_sitemap]" => {:type => :checkbox, :checked => true}
|
106
|
+
}
|
107
|
+
|
108
|
+
options.merge!(post_type_options)
|
109
|
+
end
|
110
|
+
|
111
|
+
not_included_taxonomies.each do |taxonomy|
|
112
|
+
taxonomy_options = {
|
113
|
+
"wpseo_xml[taxonomies-#{taxonomy}-not_in_sitemap]" => {:type => :checkbox, :checked => true}
|
114
|
+
}
|
115
|
+
|
116
|
+
options.merge!(taxonomy_options)
|
117
|
+
end
|
118
|
+
|
119
|
+
if (form)
|
120
|
+
options.each do |key, values|
|
121
|
+
case values[:type]
|
122
|
+
when :input
|
123
|
+
form[key] = values[:value] if (form.has_field?(key))
|
124
|
+
when :checkbox
|
125
|
+
form.checkbox_with(name: key).check rescue nil if values[:checked]
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
form.submit
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
#Retarded method for now, look into I18n later
|
134
|
+
def translate_pattern(key, language = :en)
|
135
|
+
case key
|
136
|
+
when :search
|
137
|
+
language.eql?(:sv) ? 'Du sökte efter %%searchphrase%% %%page%% %%sep%% %%sitename%%' : 'You searched for %%searchphrase%% %%page%% %%sep%% %%sitename%%'
|
138
|
+
when :not_found
|
139
|
+
language.eql?(:sv) ? 'Sidan kunde inte hittas %%sep%% %%sitename%%' : 'Page Not Found %%sep%% %%sitename%%'
|
140
|
+
when :author
|
141
|
+
language.eql?(:sv) ? '%%name%%, Författare %%sitename%% %%page%%' : '%%name%%, Author at %%sitename%% %%page%%'
|
142
|
+
when :term
|
143
|
+
language.eql?(:sv) ? '%%term_title%% Arkiv %%page%% %%sep%% %%sitename%%' : '%%term_title%% Archives %%page%% %%sep%% %%sitename%%'
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|