Completed
Push — master ( 74c2eb...05bb7a )
by Christian
01:23
created

podlove.php (4 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
0 ignored issues
show
Coding Style Compatibility introduced by
For compatibility and reusability of your code, PSR1 recommends that a file should introduce either new symbols (like classes, functions, etc.) or have side-effects (like outputting something, or including other files), but not both at the same time. The first symbol is defined on line 72 and the first side effect is on line 14.

The PSR-1: Basic Coding Standard recommends that a file should either introduce new symbols, that is classes, functions, constants or similar, or have side effects. Side effects are anything that executes logic, like for example printing output, changing ini settings or writing to a file.

The idea behind this recommendation is that merely auto-loading a class should not change the state of an application. It also promotes a cleaner style of programming and makes your code less prone to errors, because the logic is not spread out all over the place.

To learn more about the PSR-1, please see the PHP-FIG site on the PSR-1.

Loading history...
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 {
0 ignored issues
show
Coding Style Compatibility introduced by
PSR1 recommends that each class must be in a namespace of at least one level to avoid collisions.

You can fix this by adding a namespace to your class:

namespace YourVendor;

class YourClass { }

When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.

Loading history...
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') );
130
		$size = self::get_attribute( 'size', self::get_array_value_with_fallback($args, 'size') );
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
$color is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

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]);
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' )
0 ignored issues
show
Bug Best Practice introduced by
The expression $width_attribute of type string|null is loosely compared to true; this is ambiguous if the string can be empty. You might want to explicitly use !== null instead.

In PHP, under loose comparison (like ==, or !=, or switch conditions), values of different types might be equal.

For string values, the empty string '' is a special case, in particular the following results might be unexpected:

''   == false // true
''   == null  // true
'ab' == false // false
'ab' == null  // false

// It is often better to use strict comparison
'' === false // false
'' === null  // false
Loading history...
186
			return 'off';
187
188
		return get_option('podlove_subscribe_button_default_autowidth', 'on');
189
	}
190
}