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

widget.php (5 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 7 and the first side effect is on line 5.

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
namespace PodloveSubscribeButton;
4
5
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
6
7
class Podlove_Subscribe_Button_Widget extends \WP_Widget {
8
9
	public function __construct() {
10
		parent::__construct(
11
					'podlove_subscribe_button_wp_plugin_widget',
12
					( self::is_podlove_publisher_active() ? 'Podlove Subscribe Button' : 'Podlove Subscribe Button (WordPress plugin)' ),
13
					array( 'description' => __( 'Adds a Podlove Subscribe Button to your Sidebar', 'podlove-subscribe-button' ), )
14
				);
15
	}
16
17
	public static $widget_settings = array('infotext', 'title', 'size', 'style', 'format', 'autowidth', 'button', 'color');
18
19
	public static function is_podlove_publisher_active() {
20
		if ( is_plugin_active("podlove-publisher/plugin.php") )
21
			return true;
22
23
		return false;
24
	}
25
26
	public function widget( $args, $instance ) {
27
		// Fetch the (network)button by it's name
28
		if ( ! $button = \PodloveSubscribeButton\Model\Button::get_button_by_name($instance['button']) )
29
			return sprintf( __('Oops. There is no button with the ID "%s".', 'podlove-subscribe-button'), $args['button'] );
30
31
		echo $args['before_widget'];
32
		echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ). $args['after_title'];
33
34
		echo $button->render(
35
				\PodloveSubscribeButton::get_array_value_with_fallback($instance, 'size'),
36
				\PodloveSubscribeButton::get_array_value_with_fallback($instance, 'autowidth'),
37
				\PodloveSubscribeButton::get_array_value_with_fallback($instance, 'style'),
38
				\PodloveSubscribeButton::get_array_value_with_fallback($instance, 'format'), 
39
				\PodloveSubscribeButton::get_array_value_with_fallback($instance, 'color')
40
			);
41
		
42
		if ( strlen($instance['infotext']) )
43
			echo wpautop($instance['infotext']);
44
45
		echo $args['after_widget'];
46
	}	
47
48
	public function form( $instance ) {
49
		foreach (self::$widget_settings as $setting) {
50
			$$setting = isset( $instance[$setting] ) ? $instance[$setting] : '';
51
		}
52
53
		$buttons = \PodloveSubscribeButton\Model\Button::all();
54
		if ( is_multisite() )
55
			$network_buttons = \PodloveSubscribeButton\Model\NetworkButton::all();
56
57
		$buttons_as_options = function ($buttons) {
58
			foreach ($buttons as $subscribebutton) {
59
				echo "<option value='".$subscribebutton->name."' ".( $subscribebutton->name == $button ? 'selected=\"selected\"' : '' )." >".$subscribebutton->title." (".$subscribebutton->name.")</option>";
0 ignored issues
show
The variable $button does not exist. Did you mean $buttons?

This check looks for variables that are accessed but have not been defined. It raises an issue if it finds another variable that has a similar name.

The variable may have been renamed without also renaming all references.

Loading history...
60
			}
61
		}
62
		?>
63
		<p>
64
			<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title', 'podlove-subscribe-button' ); ?></label> 
65
			<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $title; ?>" />
0 ignored issues
show
The variable $title does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
66
67
			<label for="<?php echo $this->get_field_id( 'color' ); ?>"><?php _e( 'Color', 'podlove-subscribe-button' ); ?></label>
68
			<input class="podlove_subscribe_button_color" id="<?php echo $this->get_field_id( 'color' ); ?>" name="<?php echo $this->get_field_name( 'color' ); ?>" value="<?php echo $color; ?>" />
0 ignored issues
show
The variable $color does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
69
			<style type="text/css">
70
				.sp-replacer {
71
					display: flex;
72
				}
73
				.sp-preview {
74
					flex-grow: 10;
75
				}
76
			</style>
77
78
			<label for="<?php echo $this->get_field_id( 'button' ); ?>"><?php _e( 'Button', 'podlove-subscribe-button' ); ?></label> 
79
			<select class="widefat" id="<?php echo $this->get_field_id( 'button' ); ?>"
80
				      name="<?php echo $this->get_field_name( 'button' ); ?>">
81
				<?php if ( isset($network_buttons) && count($network_buttons) > 0 ) : ?>
82
					<optgroup label="<?php _e('Local', 'podlove'); ?>">
83
						<?php $buttons_as_options($buttons); ?>
84
					</optgroup>
85
					<optgroup label="<?php _e('Network', 'podlove'); ?>">
86
						<?php $buttons_as_options($network_buttons); ?>
87
					</optgroup>
88
				<?php else : 
89
					$buttons_as_options($buttons);
90
				 endif; ?>
91
			</select>
92
93
			<?php
94
			$customize_options = array(
95
					'size' => array(
96
							'name' => 'Size',
97
							'options' => \PodloveSubscribeButton\Model\Button::$size
98
						),
99
					'style' => array(
100
							'name' => 'Style',
101
							'options' => \PodloveSubscribeButton\Model\Button::$style
102
						),
103
					'format' => array(
104
							'name' => 'Format',
105
							'options' => \PodloveSubscribeButton\Model\Button::$format
106
						),
107
					'autowidth' => array(
108
							'name' => 'Autowidth',
109
							'options' => \PodloveSubscribeButton\Model\Button::$width
110
						)
111
				);
112
113
			foreach ($customize_options as $slug => $properties) : ?>
114
				<label for="<?php echo $this->get_field_id( $slug ); ?>"><?php _e( $properties['name'], 'podlove-subscribe-button' ); ?></label> 
115
				<select class="widefat" id="<?php echo $this->get_field_id( $slug ); ?>" name="<?php echo $this->get_field_name( $slug ); ?>">
116
					<option value="default" <?php echo ( $$slug == 'default' ? 'selected="selected"' : '' ); ?>><?php _e( 'Default ' . $properties['name'], 'podlove-subscribe-button' ) ?></option>
117
					<optgroup>
118
						<?php foreach ( $properties['options'] as $property => $name ) : ?>
119
						<option value="<?php echo $property; ?>" <?php echo ( $$slug == $property ? 'selected="selected"' : '' ); ?>><?php _e( $name, 'podlove-subscribe-button' ) ?></option>
120
						<?php endforeach; ?>
121
					</optgroup>
122
				</select>
123
			<?php endforeach; ?>
124
		
125
			<label for="<?php echo $this->get_field_id( 'infotext' ); ?>"><?php _e( 'Description', 'podlove-subscribe-button' ); ?></label> 
126
			<textarea class="widefat" rows="10" id="<?php echo $this->get_field_id( 'infotext' ); ?>" name="<?php echo $this->get_field_name( 'infotext' ); ?>"><?php echo $infotext; ?></textarea>
0 ignored issues
show
The variable $infotext does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
127
		</p>
128
		<?php 
129
	}
130
131
	public function update( $new_instance, $old_instance ) {
132
		$instance = array();
133
134
		foreach (self::$widget_settings as $setting) {
135
			$instance[$setting]  = ( ! empty( $new_instance[$setting] ) ) ? strip_tags( $new_instance[$setting] ) : '';
136
		}
137
138
		return $instance;
139
	}
140
}
141
add_action( 'widgets_init', function(){
142
     register_widget( '\PodloveSubscribeButton\Podlove_Subscribe_Button_Widget' );
143
});