Passed
Push — master ( afd9ab...a90ff6 )
by Christian
02:36
created

podlove.php (11 issues)

1
<?php
2
/**
3
 * Plugin Name: Podlove Subscribe Button
4
 * Plugin URI:  https://wordpress.org/plugins/podlove-subscribe-button/
5
 * Description: Brings the Podlove Subscribe Button to your WordPress installation.
6
 * Version:     1.4.0-beta
7
 * Author:      Podlove
8
 * Author URI:  https://podlove.org/
9
 * License:     MIT
10
 * License URI: license.txt
11
 * Text Domain: podlove-subscribe-button
12
 * Domain Path: /languages
13
 */
14
15
$correct_php_version = version_compare( phpversion(), "5.3", ">=" );
16
17
if ( ! $correct_php_version ) {
18
	printf( __( 'Podlove Subscribe Button Plugin requires %s or higher.<br>', 'podlove-subscribe-button' ), '<code>PHP 5.3</code>' );
19
	echo '<br />';
20
	printf( __( 'You are running %s', 'podlove-subscribe-button' ), '<code>PHP ' . phpversion() . '</code>' );
21
	exit;
22
}
23
24
// Constants
25
require('constants.php');
26
require('settings/buttons.php');
27
// Models
28
require('model/base.php');
29
require('model/button.php');
30
require('model/network_button.php');
31
// Table
32
require('settings/buttons_list_table.php');
33
// Media Types
34
require('media_types.php');
35
// Widget
36
require('widget.php');
37
// Version control
38
require('version.php');
39
// Helper functions
40
require('helper.php');
0 ignored issues
show
"require" is a statement not a function; no parentheses are required
Loading history...
Expected 1 spaces after opening bracket; 0 found
Loading history...
Expected 1 spaces before closing bracket; 0 found
Loading history...
41
42
register_activation_hook( __FILE__, array( 'PodloveSubscribeButton', 'build_models' ) );
43
44
PodloveSubscribeButton::run();
45
46
/**
47
 * Class PodloveSubscribeButton
48
 */
49
class PodloveSubscribeButton {
50
51
	/**
52
	 * @var string current plugin version
53
	 */
54
	public static $version = '1.4.0-beta';
55
56
	public static function run() {
0 ignored issues
show
Coding Style Documentation introduced by
Missing function doc comment
Loading history...
57
		add_action( 'plugins_loaded', array( __CLASS__, 'load_translations' ) );
58
		add_action( 'init', array( __CLASS__, 'register_shortcode' ) );
59
		add_action( 'admin_init', array( __CLASS__, 'register_settings' ) );
60
		add_action( 'admin_init', array( 'PodloveSubscribeButton\Settings\Buttons', 'process_form' ) );
61
		self::menu();
62
63
	}
64
65
	public static function menu() {
0 ignored issues
show
Coding Style Documentation introduced by
Missing function doc comment
Loading history...
66
		add_action( 'admin_menu', array( 'PodloveSubscribeButton', 'admin_menu' ) );
67
68
		if ( is_network_admin() ) {
69
			add_action( 'network_admin_menu', array( 'PodloveSubscribeButton', 'admin_network_menu' ) );
70
		}
71
72
	}
73
74
	public static function enqueue_assets( $hook ) {
75
76
		$pages = array( 'settings_page_podlove-subscribe-button', 'widgets.php' );
77
78
		if ( ! in_array( $hook, $pages )  ) {
79
			return;
80
		}
81
82
		// CSS Stylesheet
83
		wp_register_style( 'podlove-subscribe-button', plugin_dir_url( __FILE__ ) . 'style.css', false, self::$version );
84
		wp_enqueue_style( 'podlove-subscribe-button' );
85
86
		// Spectrum JS
87
		wp_enqueue_style( 'podlove-subscribe-button-spectrum', plugin_dir_url( __FILE__ ) . 'js/spectrum/spectrum.css', array(), '1.8.0' );
88
		wp_enqueue_script( 'podlove-subscribe-button-spectrum', plugin_dir_url( __FILE__ ) . 'js/spectrum/spectrum.js', array( 'jquery' ), '1.8.0' );
89
90
		// Admin JS
91
		wp_register_script( 'podlove-subscribe-button-admin-tools', plugin_dir_url( __FILE__ ) . 'js/admin.js', array( 'jquery' ), self::$version );
92
		$js_translations = array(
93
			'select_color'  => __( 'Select Color', 'podlove-subscribe-button' ),
94
			'cancel'        => __( 'Cancel', 'podlove-subscribe-button' ),
95
			'media_library' => __( 'Media Library', 'podlove-subscribe-button' ),
96
			'use_for'       => __( 'Use for Podcast Cover Art', 'podlove-subscribe-button' ),
97
		);
98
		wp_localize_script( 'podlove-subscribe-button-admin-tools', 'i18n', $js_translations );
99
		wp_enqueue_script( 'podlove-subscribe-button-admin-tools' );
100
101
	}
102
103
	public static function admin_menu() {
104
		add_options_page(
105
			'Podlove Subscribe Button Options',
106
			'Podlove Subscribe Button',
107
			'manage_options',
108
			'podlove-subscribe-button',
109
			array( 'PodloveSubscribeButton\Settings\Buttons', 'page' )
110
		);
111
112
	}
113
114
	public static function admin_network_menu() {
115
		add_submenu_page(
116
			'settings.php',
117
			'Podlove Subscribe Button Options',
118
			'Podlove Subscribe Button',
119
			'manage_options',
120
			'podlove-subscribe-button',
121
			array( 'PodloveSubscribeButton\Settings\Buttons', 'page' )
122
		);
123
124
	}
125
126
	public static function load_translations() {
0 ignored issues
show
Method name "PodloveSubscribeButton::load_translations" is not in camel caps format
Loading history...
Coding Style Documentation introduced by
Missing function doc comment
Loading history...
127
		load_plugin_textdomain( 'podlove-subscribe-button', false, dirname(plugin_basename( __FILE__)) . '/languages/' );
128
129
	}
130
131
	public static function register_settings() {
0 ignored issues
show
Method name "PodloveSubscribeButton::register_settings" is not in camel caps format
Loading history...
Coding Style Documentation introduced by
Missing function doc comment
Loading history...
132
		$settings = array(
133
			'size',
134
			'autowidth',
135
			'style',
136
			'format',
137
			'color',
138
		);
139
140
		foreach ( $settings as $setting ) {
141
			register_setting( 'podlove-subscribe-button', 'podlove_subscribe_button_default_' . $setting );
142
		}
143
144
	}
145
146
	public static function register_shortcode() {
0 ignored issues
show
Method name "PodloveSubscribeButton::register_shortcode" is not in camel caps format
Loading history...
Coding Style Documentation introduced by
Missing function doc comment
Loading history...
147
		add_shortcode( 'podlove-subscribe-button', array( 'PodloveSubscribeButton', 'shortcode' ) );
148
149
	}
150
151
	public static function build_models() {
152
		// Build Databases
153
		\PodloveSubscribeButton\Model\Button::build();
154
		if ( is_multisite() )
155
			\PodloveSubscribeButton\Model\NetworkButton::build();
156
157
		// Set Button "default" values
158
		$default_values = array(
159
				'size' => 'big',
160
				'autowidth' => 'on',
161
				'color' => '#599677',
162
				'style' => 'filled',
163
				'format' => 'rectangle'
164
			);
165
166
		foreach ($default_values as $option => $default_value) {
167
			if ( ! get_option('podlove_subscribe_button_default_' . $option ) ) {
168
				update_option('podlove_subscribe_button_default_' . $option, $default_value);
169
			}
170
		}
171
	}
172
173
	public static function shortcode( $args ) {
174
		if ( ! $args || ! isset($args['button']) ) {
175
			return __('You need to create a Button first and provide its ID.', 'podlove-subscribe-button');
176
		} else {
177
			$buttonid = $args['button'];
178
		}
179
180
		// Fetch the (network)button by it's name
181
		if ( ! $button = \PodloveSubscribeButton\Model\Button::get_button_by_name($args['button']) )
182
			return sprintf( __('Oops. There is no button with the ID "%s".', 'podlove-subscribe-button'), $args['button'] );
183
184
		// Get button styling and options
185
		$autowidth = self::interpret_width_attribute( self::get_array_value_with_fallback($args, 'width') );
186
		$size = self::get_attribute( 'size', self::get_array_value_with_fallback($args, 'size') );
187
		$style = self::get_attribute( 'style', self::get_array_value_with_fallback($args, 'style') );
188
		$format = self::get_attribute( 'format', self::get_array_value_with_fallback($args, 'format') );
189
		$color = self::get_attribute( 'color', self::get_array_value_with_fallback($args, 'color') );
190
191
		if ( isset($args['language']) ) {
192
			$language = $args['language'];
193
		} else {
194
			$language = 'en';
195
		}
196
197
		if ( isset($args['color']) ) {
198
			$color = $args['color'];
199
		} else {
200
			$color = get_option('podlove_subscribe_button_default_color', '#599677');
201
		}
202
203
		if ( isset($args['hide']) && $args['hide'] == 'true' ) {
204
			$hide = true;
205
		} else {
206
			$hide = false;
207
		}
208
209
		// Render button
210
		return $button->render($size, $autowidth, $style, $format, $color, $hide, $buttonid, $language);
211
	}
212
213
	public static function get_array_value_with_fallback($args, $key) {
214
		if ( isset($args[$key]) )
215
			return $args[$key];
216
217
		return false;
218
	}
219
220
	/**
221
	 * @param  string $attribute
222
	 * @param  string $attribute_value
223
	 * @return string
224
	 */
225
	private static function get_attribute($attribute=null, $attribute_value=null) {
226
		if ( isset($attribute_value) && ctype_alnum($attribute_value) && key_exists( $attribute_value, \PodloveSubscribeButton\Model\Button::$$attribute ) ) {
227
			return $attribute_value;
228
		} else {
229
			return get_option('podlove_subscribe_button_default_' . $attribute, \PodloveSubscribeButton\Model\Button::$properties[$attribute]);
230
		}
231
	}
232
233
	/**
234
	 * Interprets the provided width attribute and return either auto- or a specific width
235
	 * @param  string $width_attribute
236
	 * @return string
237
	 */
238
	private static function interpret_width_attribute( $width_attribute = null ) {
239
		if ( $width_attribute == 'auto' )
240
			return 'on';
241
		if ( $width_attribute && $width_attribute !== 'auto' )
242
			return 'off';
243
244
		return get_option( 'podlove_subscribe_button_default_autowidth', 'on' );
245
	}
246
}
247