Passed
Pull Request — master (#4)
by Warwick
02:43
created

Output::sharing_buttons()   D

Complexity

Conditions 18
Paths 15

Size

Total Lines 54
Code Lines 33

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
cc 18
eloc 33
nc 15
nop 3
dl 0
loc 54
rs 4.8666
c 3
b 0
f 0

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
namespace lsx\sharing\classes\frontend;
3
4
/**
5
 * Houses the functions for the Settings page.
6
 *
7
 * @package lsx-sharing
8
 */
9
class Output {
10
11
	/**
12
	 * Holds class instance
13
	 *
14
	 * @since 1.0.0
15
	 *
16
	 * @var      object \lsx\sharing\classes\frontend\Output()
17
	 */
18
	protected static $instance = null;
19
20
	/**
21
	 * Contructor
22
	 */
23
	public function __construct() {
24
		add_action( 'wp_enqueue_scripts', array( $this, 'assets' ), 5 );
0 ignored issues
show
Bug introduced by
The function add_action was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

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

24
		/** @scrutinizer ignore-call */ 
25
  add_action( 'wp_enqueue_scripts', array( $this, 'assets' ), 5 );
Loading history...
25
		add_filter( 'wp_kses_allowed_html', array( $this, 'wp_kses_allowed_html' ), 10, 2 );
0 ignored issues
show
Bug introduced by
The function add_filter was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

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

25
		/** @scrutinizer ignore-call */ 
26
  add_filter( 'wp_kses_allowed_html', array( $this, 'wp_kses_allowed_html' ), 10, 2 );
Loading history...
26
		add_shortcode( 'lsx_sharing_buttons', array( $this, 'sharing_buttons_shortcode' ) );
0 ignored issues
show
Bug introduced by
The function add_shortcode was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

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

26
		/** @scrutinizer ignore-call */ 
27
  add_shortcode( 'lsx_sharing_buttons', array( $this, 'sharing_buttons_shortcode' ) );
Loading history...
27
		// Storefront (storefront_loop_post, storefront_single_post).
28
		add_action( 'storefront_post_content_before', array( $this, 'sharing_buttons_template' ), 20 );
29
		// WooCommerce.
30
		add_action( 'woocommerce_share', array( $this, 'sharing_buttons_template' ) );
31
	}
32
33
	/**
34
	 * Return an instance of this class.
35
	 *
36
	 * @since 1.0.0
37
	 *
38
	 * @return    object \lsx\sharing\classes\frontend\Output()    A single instance of this class.
39
	 */
40
	public static function get_instance() {
41
		// If the single instance hasn't been set, set it now.
42
		if ( null == self::$instance ) {
43
			self::$instance = new self();
44
		}
45
		return self::$instance;
46
	}
47
48
	/**
49
	 * Enques the assets.
50
	 */
51
	public function assets() {
52
		if ( defined( 'WP_DEBUG' ) && true === WP_DEBUG ) {
0 ignored issues
show
Bug introduced by
The constant lsx\sharing\classes\frontend\WP_DEBUG was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
53
			$min = '';
54
		} else {
55
			$min = '.min';
56
		}
57
		/* Remove assets completely if all sharing options are off */
58
59
		if ( \lsx\sharing\includes\functions\is_disabled() ) {
60
			return '';
61
		}
62
63
		// Set our variables.
64
		$post_type = get_post_type();
0 ignored issues
show
Bug introduced by
The function get_post_type was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

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

64
		$post_type = /** @scrutinizer ignore-call */ get_post_type();
Loading history...
65
66
		/* Only show the assets if the post type sharing option is on */
67
		if ( ! \lsx\sharing\includes\functions\is_pt_disabled( $post_type ) ) {
68
69
			wp_enqueue_script( 'lsx-sharing', LSX_SHARING_URL . 'assets/js/lsx-sharing' . $min . '.js', array( 'jquery' ), LSX_SHARING_VER, true );
0 ignored issues
show
Bug introduced by
The function wp_enqueue_script was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

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

69
			/** @scrutinizer ignore-call */ 
70
   wp_enqueue_script( 'lsx-sharing', LSX_SHARING_URL . 'assets/js/lsx-sharing' . $min . '.js', array( 'jquery' ), LSX_SHARING_VER, true );
Loading history...
70
71
			$params = apply_filters( 'lsx_sharing_js_params', array(
0 ignored issues
show
Bug introduced by
The function apply_filters was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

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

71
			$params = /** @scrutinizer ignore-call */ apply_filters( 'lsx_sharing_js_params', array(
Loading history...
72
				'ajax_url' => admin_url( 'admin-ajax.php' ),
0 ignored issues
show
Bug introduced by
The function admin_url was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

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

72
				'ajax_url' => /** @scrutinizer ignore-call */ admin_url( 'admin-ajax.php' ),
Loading history...
73
			));
74
75
			wp_localize_script( 'lsx-sharing', 'lsx_sharing_params', $params );
0 ignored issues
show
Bug introduced by
The function wp_localize_script was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

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

75
			/** @scrutinizer ignore-call */ 
76
   wp_localize_script( 'lsx-sharing', 'lsx_sharing_params', $params );
Loading history...
76
77
			wp_enqueue_style( 'lsx-sharing', LSX_SHARING_URL . 'assets/css/lsx-sharing.css', array(), LSX_SHARING_VER );
0 ignored issues
show
Bug introduced by
The function wp_enqueue_style was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

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

77
			/** @scrutinizer ignore-call */ 
78
   wp_enqueue_style( 'lsx-sharing', LSX_SHARING_URL . 'assets/css/lsx-sharing.css', array(), LSX_SHARING_VER );
Loading history...
78
			wp_style_add_data( 'lsx-sharing', 'rtl', 'replace' );
0 ignored issues
show
Bug introduced by
The function wp_style_add_data was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

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

78
			/** @scrutinizer ignore-call */ 
79
   wp_style_add_data( 'lsx-sharing', 'rtl', 'replace' );
Loading history...
79
		}
80
	}
81
82
	/**
83
	 * Display/return sharing buttons.
84
	 */
85
	public function sharing_buttons( $buttons = array( 'facebook', 'twitter', 'pinterest' ), $echo = false, $post_id = false ) {
86
		$sharing_content = '';
87
88
		if ( ( is_preview() || is_admin() ) && ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
0 ignored issues
show
Bug introduced by
The constant lsx\sharing\classes\frontend\DOING_AJAX was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
Bug introduced by
The function is_admin was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

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

88
		if ( ( is_preview() || /** @scrutinizer ignore-call */ is_admin() ) && ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
Loading history...
Bug introduced by
The function is_preview was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

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

88
		if ( ( /** @scrutinizer ignore-call */ is_preview() || is_admin() ) && ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
Loading history...
89
			return '';
90
		}
91
92
		//Set our variables
93
		global $post;
94
		$share_post = $post;
95
		if ( false !== $post_id ) {
96
			$share_post = get_post( $post_id );
0 ignored issues
show
Bug introduced by
The function get_post was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

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

96
			$share_post = /** @scrutinizer ignore-call */ get_post( $post_id );
Loading history...
97
			$post_type = get_post_type( $post_id );
0 ignored issues
show
Bug introduced by
The function get_post_type was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

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

97
			$post_type = /** @scrutinizer ignore-call */ get_post_type( $post_id );
Loading history...
98
		} else {
99
			$post_type = get_post_type();
100
		}
101
102
		if ( \lsx\sharing\includes\functions\is_disabled() || \lsx\sharing\includes\functions\is_pt_disabled( $post_type ) ) {
103
			return '';
104
		}
105
106
		if ( ( is_array( $buttons ) && count( $buttons ) > 0 ) ) {
107
			$sharing_content .= '<div class="lsx-sharing-content"><p>';
108
109
			$sharing_text = \lsx\sharing\includes\functions\get_sharing_text( $post_type );
110
			if ( '' !== $sharing_text ) {
111
				$sharing_content .= '<span class="lsx-sharing-label">' . $sharing_text . '</span>';
112
			}
113
114
			foreach ( $buttons as $id => $button ) {
115
				$button_obj = new \lsx\sharing\classes\frontend\Button( $button, $this->options, $post_type );
0 ignored issues
show
Bug Best Practice introduced by
The property options does not exist on lsx\sharing\classes\frontend\Output. Did you maybe forget to declare it?
Loading history...
116
117
				if ( ! empty( $button_obj ) ) {
118
					$url = $button_obj->get_link( $share_post );
119
120
					if ( ! empty( $url ) ) {
121
						if ( 'email' === $button ) {
122
							if ( ! isset( $this->options['display'] ) || empty( $this->options['display']['sharing_email_form_id'] ) ) {
123
								continue;
124
							}
125
							$sharing_content .= '<span class="lsx-sharing-button lsx-sharing-button-' . esc_attr( $button ) . '"><a href="#lsx-sharing-email" data-toggle="modal" data-link="' . esc_url( $url ) . '"><span class="fa" aria-hidden="true"></span></a></span>';
0 ignored issues
show
Bug introduced by
The function esc_url was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

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

125
							$sharing_content .= '<span class="lsx-sharing-button lsx-sharing-button-' . esc_attr( $button ) . '"><a href="#lsx-sharing-email" data-toggle="modal" data-link="' . /** @scrutinizer ignore-call */ esc_url( $url ) . '"><span class="fa" aria-hidden="true"></span></a></span>';
Loading history...
Bug introduced by
The function esc_attr was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

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

125
							$sharing_content .= '<span class="lsx-sharing-button lsx-sharing-button-' . /** @scrutinizer ignore-call */ esc_attr( $button ) . '"><a href="#lsx-sharing-email" data-toggle="modal" data-link="' . esc_url( $url ) . '"><span class="fa" aria-hidden="true"></span></a></span>';
Loading history...
126
						} else {
127
							$sharing_content .= '<span class="lsx-sharing-button lsx-sharing-button-' . esc_attr( $button ) . '"><a href="' . esc_url( $url ) . '" target="_blank" rel="noopener noreferrer"><span class="fa" aria-hidden="true"></span></a></span>';
128
						}
129
					}
130
				}
131
			}
132
			$sharing_content .= '</p></div>';
133
		}
134
135
		if ( $echo ) {
136
			echo wp_kses_post( $sharing_content );
0 ignored issues
show
Bug introduced by
The function wp_kses_post was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

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

136
			echo /** @scrutinizer ignore-call */ wp_kses_post( $sharing_content );
Loading history...
137
		} else {
138
			return $sharing_content;
139
		}
140
	}
141
142
	/**
143
	 * Sharing buttons shortcode.
144
	 */
145
	public function sharing_buttons_shortcode( $atts ) {
146
		$atts = shortcode_atts( array(
0 ignored issues
show
Bug introduced by
The function shortcode_atts was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

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

146
		$atts = /** @scrutinizer ignore-call */ shortcode_atts( array(
Loading history...
147
			'buttons' => '',
148
		), $atts, 'lsx_sharing_buttons' );
149
150
		if ( empty( $atts['buttons'] ) ) {
151
			return '';
152
		}
153
154
		$no_whitespaces = preg_replace( '/\s*,\s*/', ',', filter_var( $atts['buttons'], FILTER_SANITIZE_STRING ) );
155
		$buttons        = explode( ',', $no_whitespaces );
156
157
		if ( is_array( $buttons ) && count( $buttons ) > 0 ) {
158
			return $this->sharing_buttons( $buttons );
159
		}
160
	}
161
162
	/**
163
	 * Display buttons (template hook).
164
	 */
165
	public function sharing_buttons_template() {
166
		echo wp_kses_post( $this->sharing_buttons() );
0 ignored issues
show
Bug introduced by
The function wp_kses_post was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

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

166
		echo /** @scrutinizer ignore-call */ wp_kses_post( $this->sharing_buttons() );
Loading history...
167
	}
168
169
	/**
170
	 * Allow data params for Bootstrap modal.
171
	 */
172
	public function wp_kses_allowed_html( $allowedtags, $context ) {
0 ignored issues
show
Unused Code introduced by
The parameter $context is not used and could be removed. ( Ignorable by Annotation )

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

172
	public function wp_kses_allowed_html( $allowedtags, /** @scrutinizer ignore-unused */ $context ) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
173
		$allowedtags['a']['data-toggle'] = true;
174
		$allowedtags['a']['data-link']   = true;
175
		return $allowedtags;
176
	}
177
}
178