Passed
Branch master (df5e39)
by Christian
02:53
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
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 View Code Duplication
		if ( ! $button = \PodloveSubscribeButton\Model\Button::get_button_by_name($instance['button']) )
0 ignored issues
show
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
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
});