Passed
Branch master (b818a9)
by Christian
03:42
created

podlove.php (5 issues)

1
<?php
2
/**
3
 * Plugin Name: Podlove Subscribe Button
4
 * Plugin URI:  http://wordpress.org/extend/plugins/podlove-subscribe-button/
5
 * Description: Brings the Podlove Subscribe Button to your WordPress installation.
6
 * Version:     1.3.3
7
 * Author:      Podlove
8
 * Author URI:  http://podlove.org
9
 * License:     MIT
10
 * License URI: license.txt
11
 * Text Domain: podlove-subscribe-button
12
 */
13
14
$correct_php_version = version_compare( phpversion(), "5.3", ">=" );
15
16
if ( ! $correct_php_version ) {
17
	_e("Podlove Subscribe Button Plugin requires <strong>PHP 5.3</strong> or higher.<br>", 'podlove-subscribe-button');
18
	echo __("You are running PHP ", 'podlove-subscribe-button') . phpversion();
19
	exit;
20
}
21
22
// Constants
23
require('constants.php');
24
require('settings/buttons.php');
25
// Models
26
require('model/base.php');
27
require('model/button.php');
28
require('model/network_button.php');
29
// Table
30
require('settings/buttons_list_table.php');
31
// Media Types
32
require('media_types.php');
33
// Widget
34
require('widget.php');
35
// Version control
36
require('version.php');
37
// Helper functions
38
require('helper.php');
39
40
add_action( 'admin_menu', array( 'PodloveSubscribeButton', 'admin_menu') );
41
if ( is_multisite() )
42
	add_action( 'network_admin_menu', array( 'PodloveSubscribeButton', 'admin_network_menu') );
43
44
add_action( 'admin_init', array( 'PodloveSubscribeButton\Settings\Buttons', 'process_form' ) );
45
register_activation_hook( __FILE__, array( 'PodloveSubscribeButton', 'build_models' ) );
46
47
add_action( 'admin_enqueue_scripts', function () {
48
	wp_register_style( 'podlove-subscribe-button', plugin_dir_url(__FILE__).'style.css' );
49
	wp_enqueue_style( 'podlove-subscribe-button' );
50
51
	wp_enqueue_style('podlove-subscribe-button-spectrum', plugin_dir_url(__FILE__). 'js/spectrum/spectrum.css');
52
	wp_enqueue_script('podlove-subscribe-button-spectrum', plugin_dir_url(__FILE__). 'js/spectrum/spectrum.js', array('jquery'));
53
	wp_enqueue_script('podlove-subscribe-button-admin-tools', plugin_dir_url(__FILE__). 'js/admin.js', array('jquery'));
54
} );
55
56
// Register Settings
57
add_action( 'admin_init', function () {
58
	$settings = array('size', 'autowidth', 'style', 'format', 'color');
59
60
	foreach ($settings as $setting) {
61
		register_setting( 'podlove-subscribe-button', 'podlove_subscribe_button_default_' . $setting );
62
	}
63
} );
64
65
add_shortcode( 'podlove-subscribe-button', array( 'PodloveSubscribeButton', 'shortcode' ) );
66
67
add_action( 'plugins_loaded', function () {
68
	load_plugin_textdomain( 'podlove-subscribe-button' );
69
} );
70
71
72
class PodloveSubscribeButton {
73
74
	public static function admin_menu() {
75
		add_options_page(
76
				'Podlove Subscribe Button Options',
77
				'Podlove Subscribe Button',
78
				'manage_options',
79
				'podlove-subscribe-button',
80
				array( 'PodloveSubscribeButton\Settings\Buttons', 'page')
81
			);
82
	}
83
84
	public static function admin_network_menu() {
85
		add_submenu_page(
86
				'settings.php',
87
				'Podlove Subscribe Button Options',
88
				'Podlove Subscribe Button',
89
				'manage_options',
90
				'podlove-subscribe-button',
91
				array( 'PodloveSubscribeButton\Settings\Buttons', 'page')
92
			);
93
	}
94
95
	public static function build_models() {
96
		// Build Databases
97
		\PodloveSubscribeButton\Model\Button::build();
98
		if ( is_multisite() )
99
			\PodloveSubscribeButton\Model\NetworkButton::build();
100
101
		// Set Button "default" values
102
		$default_values = array(
103
				'size' => 'big',
104
				'autowidth' => 'on',
105
				'color' => '#599677',
106
				'style' => 'filled',
107
				'format' => 'rectangle'
108
			);
109
110
		foreach ($default_values as $option => $default_value) {
111
			if ( ! get_option('podlove_subscribe_button_default_' . $option ) ) {
112
				update_option('podlove_subscribe_button_default_' . $option, $default_value);
113
			}
114
		}
115
	}
116
117
	public static function shortcode( $args ) {
118
		if ( ! $args || ! isset($args['button']) ) {
119
			return __('You need to create a Button first and provide its ID.', 'podlove-subscribe-button');
120
		} else {
121
			$buttonid = $args['button'];
122
		}
123
124
		// Fetch the (network)button by it's name
125
		if ( ! $button = \PodloveSubscribeButton\Model\Button::get_button_by_name($args['button']) )
126
			return sprintf( __('Oops. There is no button with the ID "%s".', 'podlove-subscribe-button'), $args['button'] );
127
128
		// Get button styling and options
129
		$autowidth = self::interpret_width_attribute( self::get_array_value_with_fallback($args, 'width') );
0 ignored issues
show
It seems like self::get_array_value_wi...allback($args, 'width') can also be of type false; however, parameter $width_attribute of PodloveSubscribeButton::...rpret_width_attribute() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

129
		$autowidth = self::interpret_width_attribute( /** @scrutinizer ignore-type */ self::get_array_value_with_fallback($args, 'width') );
Loading history...
130
		$size = self::get_attribute( 'size', self::get_array_value_with_fallback($args, 'size') );
0 ignored issues
show
It seems like self::get_array_value_wi...fallback($args, 'size') can also be of type false; however, parameter $attribute_value of PodloveSubscribeButton::get_attribute() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

130
		$size = self::get_attribute( 'size', /** @scrutinizer ignore-type */ self::get_array_value_with_fallback($args, 'size') );
Loading history...
131
		$style = self::get_attribute( 'style', self::get_array_value_with_fallback($args, 'style') );
132
		$format = self::get_attribute( 'format', self::get_array_value_with_fallback($args, 'format') );
133
		$color = self::get_attribute( 'color', self::get_array_value_with_fallback($args, 'color') );
0 ignored issues
show
The assignment to $color is dead and can be removed.
Loading history...
134
135
		if ( isset($args['language']) ) {
136
			$language = $args['language'];
137
		} else {
138
			$language = 'en';
139
		}
140
141
		if ( isset($args['color']) ) {
142
			$color = $args['color'];
143
		} else {
144
			$color = get_option('podlove_subscribe_button_default_color', '#599677');
145
		}
146
147
		if ( isset($args['hide']) && $args['hide'] == 'true' ) {
148
			$hide = TRUE;
149
		} else {
150
			$hide = FALSE;
151
		}
152
153
		// Render button
154
		return $button->render($size, $autowidth, $style, $format, $color, $hide, $buttonid, $language);
155
	}
156
157
	public static function get_array_value_with_fallback($args, $key) {
158
		if ( isset($args[$key]) )
159
			return $args[$key];
160
161
		return FALSE;
162
	}
163
164
	/**
165
	 * @param  string $attribute
166
	 * @param  string $attribute_value
167
	 * @return string
168
	 */
169
	private static function get_attribute($attribute=NULL, $attribute_value=NULL) {
170
		if ( isset($attribute_value) && ctype_alnum($attribute_value) && key_exists( $attribute_value, \PodloveSubscribeButton\Model\Button::$$attribute ) ) {
171
			return $attribute_value;
172
		} else {
173
			return get_option('podlove_subscribe_button_default_' . $attribute, \PodloveSubscribeButton\Model\Button::$properties[$attribute]);
0 ignored issues
show
Bug Best Practice introduced by
The expression return get_option('podlo...properties[$attribute]) could also return false which is incompatible with the documented return type string. Did you maybe forget to handle an error condition?

If the returned type also contains false, it is an indicator that maybe an error condition leading to the specific return statement remains unhandled.

Loading history...
174
		}
175
	}
176
177
	/**
178
	 * Interprets the provided width attribute and return either auto- or a specific width
179
	 * @param  string $width_attribute
180
	 * @return string
181
	 */
182
	private static function interpret_width_attribute( $width_attribute = NULL ) {
183
		if ( $width_attribute == 'auto' )
184
			return 'on';
185
		if ( $width_attribute && $width_attribute !== 'auto' )
186
			return 'off';
187
188
		return get_option('podlove_subscribe_button_default_autowidth', 'on');
0 ignored issues
show
Bug Best Practice introduced by
The expression return get_option('podlo...fault_autowidth', 'on') could also return false which is incompatible with the documented return type string. Did you maybe forget to handle an error condition?

If the returned type also contains false, it is an indicator that maybe an error condition leading to the specific return statement remains unhandled.

Loading history...
189
	}
190
}