Skip to content

Commit 2b3c700

Browse files
author
Jippe Holwerda
committed
Added multisite support.
1 parent aabcac3 commit 2b3c700

4 files changed

Lines changed: 136 additions & 9 deletions

File tree

src/class-tiny-settings.php

Lines changed: 120 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,21 +28,63 @@ protected static function get_prefixed_name($name) {
2828
private $sizes;
2929
private $tinify_sizes;
3030

31+
public function __construct() {
32+
parent::__construct();
33+
if (is_multisite()) {
34+
add_action('network_admin_menu', $this->get_method('register_multisite_settings'));
35+
add_action('network_admin_edit_save_tinypng_multisite_settings', $this->get_method('save_multisite_settings'), 10, 0);
36+
}
37+
}
38+
3139
public function admin_init() {
3240
$section = self::get_prefixed_name('settings');
3341
add_settings_section($section, self::translate('PNG and JPEG compression'), $this->get_method('render_section'), 'media');
3442

35-
$field = self::get_prefixed_name('api_key');
36-
register_setting('media', $field);
37-
add_settings_field($field, self::translate('TinyPNG API key'), $this->get_method('render_api_key'), 'media', $section, array('label_for' => $field));
43+
if (tiny_is_network_activated()) {
44+
$field = self::get_prefixed_name('api_key');
45+
register_setting('media', $field);
46+
add_settings_field($field, self::translate('Multisite API key'), $this->get_method('render_api_key'), 'media', $section, array('label_for' => $field));
47+
} else {
48+
$field = self::get_prefixed_name('api_key');
49+
register_setting('media', $field);
50+
add_settings_field($field, self::translate('TinyPNG API key'), $this->get_method('render_api_key'), 'media', $section, array('label_for' => $field));
51+
}
3852

3953
$field = self::get_prefixed_name('sizes');
4054
register_setting('media', $field);
4155
add_settings_field($field, self::translate('File compression'), $this->get_method('render_sizes'), 'media', $section);
4256
}
4357

58+
public function register_multisite_settings() {
59+
add_submenu_page('settings.php', self::translate('Multisite PNG and JPEG compression'),
60+
self::translate('PNG and JPEG compression'), 'manage_network_plugins',
61+
self::get_prefixed_name('multisite_settings'), $this->get_method('render_multisite_settings'));
62+
}
63+
4464
public function get_api_key() {
45-
return get_option(self::get_prefixed_name('api_key'));
65+
$key = $this->get_multisite_api_key();
66+
if (empty($key)) {
67+
return get_option(self::get_prefixed_name('api_key'));
68+
} else {
69+
return $key;
70+
}
71+
}
72+
73+
public function get_multisite_api_key() {
74+
if (tiny_is_network_activated()) {
75+
if (defined('TINY_API_KEY')) {
76+
return TINY_API_KEY;
77+
} else {
78+
$key = get_site_option(self::get_prefixed_name('api_key'));
79+
if (!empty($key)) {
80+
return $key;
81+
} else {
82+
return NULL;
83+
}
84+
}
85+
} else {
86+
return NULL;
87+
}
4688
}
4789

4890
protected static function get_intermediate_size($size) {
@@ -102,13 +144,82 @@ public function get_tinify_sizes() {
102144
public function render_section() {
103145
}
104146

147+
public function render_multisite_settings() {
148+
echo '<h2>' . self::translate('PNG and JPEG compression') . '</h2>';
149+
150+
echo '<div class="wrap">';
151+
152+
$section = self::get_prefixed_name('multisite_settings');
153+
add_settings_section($section, '', $this->get_method('render_section'), self::get_prefixed_name('multisite_settings'));
154+
155+
if ( isset( $_GET['updated'] ) ) {
156+
?><div id="message" class="updated"><p><?php _e( 'Options saved.' ) ?></p></div><?php
157+
}
158+
159+
echo '<form method="post" action="edit.php?action=save_tinypng_multisite_settings">';
160+
settings_fields(self::get_prefixed_name('multisite_settings'));
161+
162+
$field = self::get_prefixed_name('multisite_api_key');
163+
add_settings_field($field, self::translate('Multisite API key'), $this->get_method('render_multisite_api_key'), self::get_prefixed_name('multisite_settings'), $section, array('label_for' => $field));
164+
165+
do_settings_sections(self::get_prefixed_name('multisite_settings'));
166+
167+
if (!defined('TINY_API_KEY')) {
168+
submit_button();
169+
}
170+
echo '</form>';
171+
echo '</div>';
172+
}
173+
174+
public function save_multisite_settings() {
175+
$options = array('page' => self::get_prefixed_name('multisite_settings'));
176+
if (array_key_exists(self::get_prefixed_name('api_key'), $_POST)) {
177+
$key = filter_var($_POST[self::get_prefixed_name('api_key')], FILTER_SANITIZE_STRING);
178+
update_site_option(self::get_prefixed_name('api_key'), $key);
179+
$options['updated'] = 'true';
180+
}
181+
wp_redirect(add_query_arg($options, network_admin_url('settings.php')));
182+
exit();
183+
}
184+
185+
public function render_multisite_api_key() {
186+
$field = self::get_prefixed_name('api_key');
187+
$value = $this->get_multisite_api_key();
188+
echo '<input type="text" id="' . $field . '" name="' . $field . '" value="' . htmlspecialchars($value) . '" size="40" ';
189+
if (defined('TINY_API_KEY')) { echo 'readonly = "readonly"'; }
190+
echo '/>';
191+
echo '<p>';
192+
if (defined('TINY_API_KEY')) {
193+
echo self::translate('The API key has been configured in wp-config.php.');
194+
} else {
195+
$link = '<a href="https://tinypng.com/developers">' . self::translate_escape('TinyPNG Developer section') . '</a>';
196+
printf(self::translate_escape('Visit %s to get an API key') . '.', $link);
197+
}
198+
echo '</p>';
199+
}
200+
105201
public function render_api_key() {
106202
$field = self::get_prefixed_name('api_key');
107-
$value = get_option($field, '');
108-
$link = '<a href="https://tinypng.com/developers">' . self::translate_escape('TinyPNG Developer section') . '</a>';
109-
?>
110-
<input type="text" id="<?php echo $field; ?>" name="<?php echo $field; ?>" value="<?php echo htmlspecialchars($value); ?>" size="40"/>
111-
<p><?php printf(self::translate_escape('Visit %s to get an API key') . '.', $link);?></p><?php
203+
$value = $this->get_api_key();
204+
if (tiny_is_network_activated()) {
205+
if (empty($this->get_multisite_api_key())) {
206+
if (empty($value)) {
207+
echo '<p>' . self::translate('Your Network Admin has not configured an API key yet.') . '</p>';
208+
} else {
209+
echo '<p>' . self::translate('You have an API key configured. Your Network Admin can change the key.') . '</p>';
210+
}
211+
} else {
212+
echo '<p>' . self::translate('The API key has been installed by the Network Admin.') . '</p>';
213+
}
214+
} else {
215+
echo '<input type="text" id="' . $field . '" name="' . $field . '" value="' . htmlspecialchars($value) . '" size="40" />';
216+
if (empty($value)) {
217+
echo '<p>';
218+
$link = '<a href="https://tinypng.com/developers">' . self::translate_escape('TinyPNG Developer section') . '</a>';
219+
printf(self::translate_escape('Visit %s to get an API key') . '.', $link);
220+
echo '</p>';
221+
}
222+
}
112223
}
113224

114225
public function render_sizes() {

test/helpers/wordpress.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ public function __construct() {
4545
$this->addMethod('add_settings_section');
4646
$this->addMethod('add_settings_field');
4747
$this->addMethod('get_option');
48+
$this->addMethod('get_site_option');
49+
$this->addMethod('update_site_option');
4850
$this->addMethod('get_post_meta');
4951
$this->addMethod('update_post_meta');
5052
$this->addMethod('get_intermediate_image_sizes');
@@ -53,6 +55,7 @@ public function __construct() {
5355
$this->addMethod('get_post_mime_type');
5456
$this->addMethod('wp_upload_dir');
5557
$this->addMethod('plugin_basename');
58+
$this->addMethod('is_multisite');
5659
$this->defaults();
5760
}
5861

test/unit/TinyTestCase.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ function plugin_autoloader($class) {
1515

1616
spl_autoload_register('plugin_autoloader');
1717

18+
function tiny_is_network_activated() {
19+
return false;
20+
}
21+
1822
abstract class TinyTestCase extends PHPUnit_Framework_TestCase {
1923
protected $wp;
2024

tiny-compress-images.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,15 @@
88
* License: GPLv2 or later
99
*/
1010

11+
12+
function tiny_is_network_activated() {
13+
if (!function_exists('is_plugin_active_for_network')) {
14+
require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
15+
}
16+
17+
return is_plugin_active_for_network(plugin_basename( __FILE__ ));
18+
}
19+
1120
require (dirname(__FILE__) . '/src/class-tiny-php.php');
1221
require (dirname(__FILE__) . '/src/class-tiny-wp-base.php');
1322
require (dirname(__FILE__) . '/src/class-tiny-exception.php');

0 commit comments

Comments
 (0)