1 | <?php |
||
2 | /** |
||
3 | * @author Podlove <[email protected]> |
||
4 | * @copyright Copyright (c) 2014-2018, Podlove |
||
5 | * @license https://github.com/podlove/podlove-subscribe-button-wp-plugin/blob/master/LICENSE MIT |
||
6 | * @package Podlove\PodloveSubscribeButton |
||
7 | * @version 1.4.0-beta |
||
8 | */ |
||
9 | |||
10 | /** |
||
11 | * Plugin Name: Podlove Subscribe Button |
||
12 | * Plugin URI: https://wordpress.org/plugins/podlove-subscribe-button/ |
||
13 | * Description: Brings the Podlove Subscribe Button to your WordPress installation. |
||
14 | * Version: 1.4.0-beta |
||
15 | * Author: Podlove |
||
16 | * Author URI: https://podlove.org/ |
||
17 | * License: MIT |
||
18 | * License URI: license.txt |
||
19 | * Text Domain: podlove-subscribe-button |
||
20 | */ |
||
21 | |||
22 | /** Check if PHP version is sufficient */ |
||
23 | if ( ! version_compare( phpversion(), '5.4', ">=" ) ) { |
||
24 | |||
25 | function podlove_psb_php_notice() { |
||
26 | ?> |
||
27 | <div id="message" class="error"> |
||
28 | <p> |
||
29 | <strong>The Podlove Subscribe Button Plugin could not be activated</strong> |
||
30 | </p> |
||
31 | <p> |
||
32 | The Podlove Subscribe Button Plugin requires <code>PHP 5.3</code> or higher.<br> |
||
33 | You are running <code>PHP <?php echo phpversion(); ?></code>.<br> |
||
34 | Please ask your hoster how to upgrade to an up-to-date PHP version. |
||
35 | </p> |
||
36 | </div> |
||
37 | <?php |
||
38 | } |
||
39 | |||
40 | function podlove_psb_deactivate() { |
||
41 | deactivate_plugins( plugin_basename( __FILE__ ) ); |
||
42 | } |
||
43 | |||
44 | add_action( 'admin_notices', 'podlove_psb_php_notice' ); |
||
45 | add_action( 'admin_init', 'podlove_psb_deactivate' ); |
||
46 | |||
47 | return; |
||
48 | |||
49 | } |
||
50 | |||
51 | require_once __DIR__ . '/vendor/autoload.php'; |
||
52 | |||
53 | register_activation_hook( __FILE__, array( 'PodloveSubscribeButton\Setup', 'activation' ) ); |
||
54 | register_deactivation_hook( __FILE__, array( 'PodloveSubscribeButton\Setup', 'deactivation' ) ); |
||
55 | register_uninstall_hook( __FILE__, array( 'PodloveSubscribeButton\Setup', 'uninstall' ) ); |
||
56 | |||
57 | PodloveSubscribeButton\Migration::eval_db(); |
||
58 | PodloveSubscribeButton::run(); |
||
59 | |||
60 | /** |
||
61 | * Class PodloveSubscribeButton |
||
62 | */ |
||
63 | class PodloveSubscribeButton { |
||
64 | |||
65 | /** |
||
66 | * @var string current plugin version |
||
67 | */ |
||
68 | public static $version = '1.4.0-beta'; |
||
69 | |||
70 | public static function run() { |
||
71 | add_action( 'plugins_loaded', array( __CLASS__, 'load_translations' ) ); |
||
72 | add_action( 'init', array( __CLASS__, 'register_shortcode' ) ); |
||
73 | add_action( 'admin_init', array( __CLASS__, 'register_settings' ) ); |
||
74 | add_action( 'admin_init', array( 'PodloveSubscribeButton\Settings\Buttons', 'process_form' ) ); |
||
75 | add_action( 'admin_enqueue_scripts', array( __CLASS__, 'enqueue_assets' ) ); |
||
76 | add_action( 'widgets_init', array( __CLASS__, 'widgets' ) ); |
||
77 | self::menu(); |
||
78 | |||
79 | } |
||
80 | |||
81 | public static function widgets() { |
||
82 | register_widget( '\PodloveSubscribeButton\Widget' ); |
||
83 | |||
84 | } |
||
85 | |||
86 | public static function menu() { |
||
87 | add_action( 'admin_menu', array( 'PodloveSubscribeButton', 'admin_menu' ) ); |
||
88 | |||
89 | if ( is_network_admin() ) { |
||
90 | add_action( 'network_admin_menu', array( 'PodloveSubscribeButton', 'admin_network_menu' ) ); |
||
91 | } |
||
92 | |||
93 | } |
||
94 | |||
95 | public static function enqueue_assets( $hook ) { |
||
96 | |||
97 | $pages = array( 'settings_page_podlove-subscribe-button', 'widgets.php' ); |
||
98 | |||
99 | if ( ! in_array( $hook, $pages ) ) { |
||
100 | return; |
||
101 | } |
||
102 | |||
103 | // CSS Stylesheet |
||
104 | wp_register_style( 'podlove-subscribe-button', \PodloveSubscribeButton\Helpers::get_url( '' ) . 'css/style.css' , false, self::$version ); |
||
105 | wp_enqueue_style( 'podlove-subscribe-button' ); |
||
106 | |||
107 | // Admin JS |
||
108 | wp_enqueue_style( 'wp-color-picker' ); |
||
109 | wp_register_script( 'podlove-subscribe-button-admin-tools', \PodloveSubscribeButton\Helpers::get_url( '' ) . 'js/admin.js', array( 'jquery', 'wp-color-picker' ), self::$version ); |
||
110 | $js_translations = array( |
||
111 | 'media_library' => __( 'Media Library', 'podlove-subscribe-button' ), |
||
112 | 'use_for' => __( 'Use for Podcast Cover Art', 'podlove-subscribe-button' ), |
||
113 | ); |
||
114 | wp_localize_script( 'podlove-subscribe-button-admin-tools', 'i18n', $js_translations ); |
||
115 | wp_enqueue_script( 'podlove-subscribe-button-admin-tools' ); |
||
116 | |||
117 | } |
||
118 | |||
119 | public static function admin_menu() { |
||
120 | add_options_page( |
||
121 | __( 'Podlove Subscribe Button Options', 'podlove-subscribe-button' ), |
||
122 | __( 'Podlove Subscribe Button', 'podlove-subscribe-button' ), |
||
123 | 'manage_options', |
||
124 | 'podlove-subscribe-button', |
||
125 | array( 'PodloveSubscribeButton\Settings\Buttons', 'page' ) |
||
126 | ); |
||
127 | |||
128 | } |
||
129 | |||
130 | public static function admin_network_menu() { |
||
131 | add_submenu_page( |
||
132 | 'settings.php', |
||
133 | __( 'Podlove Subscribe Button Options', 'podlove-subscribe-button' ), |
||
134 | __( 'Podlove Subscribe Button', 'podlove-subscribe-button' ), |
||
135 | 'manage_options', |
||
136 | 'podlove-subscribe-button', |
||
137 | array( 'PodloveSubscribeButton\Settings\Buttons', 'page' ) |
||
138 | ); |
||
139 | |||
140 | } |
||
141 | |||
142 | public static function load_translations() { |
||
143 | load_plugin_textdomain( 'podlove-subscribe-button' ); |
||
144 | |||
145 | } |
||
146 | |||
147 | public static function register_settings() { |
||
0 ignored issues
–
show
Coding Style
introduced
by
![]() |
|||
148 | $settings = array( |
||
149 | 'size', |
||
150 | 'autowidth', |
||
151 | 'style', |
||
152 | 'format', |
||
153 | 'color', |
||
154 | 'language', |
||
155 | ); |
||
156 | |||
157 | foreach ( $settings as $setting ) { |
||
158 | register_setting( 'podlove-subscribe-button', 'podlove_subscribe_button_default_' . $setting ); |
||
159 | } |
||
160 | |||
161 | } |
||
162 | |||
163 | static function get_option( $key, $default = false ) { |
||
0 ignored issues
–
show
Comprehensibility
Best Practice
introduced
by
It is recommend to declare an explicit visibility for
get_option .
Generally, we recommend to declare visibility for all methods in your source code. This has the advantage of clearly communication to other developers, and also yourself, how this method should be consumed. If you are not sure which visibility to choose, it is a good idea to start with
the most restrictive visibility, and then raise visibility as needed, i.e.
start with ![]() |
|||
164 | |||
165 | return \get_option( 'podlove_subscribe_button_default_' . $key, $default ); |
||
166 | |||
167 | } |
||
168 | |||
169 | public static function register_shortcode() { |
||
170 | add_shortcode( 'podlove-subscribe-button', array( 'PodloveSubscribeButton', 'shortcode' ) ); |
||
171 | |||
172 | } |
||
173 | |||
174 | |||
175 | |||
176 | /** |
||
177 | * Add the shortcode |
||
178 | * |
||
179 | * @param $args |
||
180 | * |
||
181 | * @return string|void |
||
182 | */ |
||
183 | public static function shortcode( $args ) { |
||
184 | if ( ! $args || ! isset( $args[ 'button' ] ) ) { |
||
185 | return __( 'You need to create a Button first and provide its ID.', 'podlove-subscribe-button' ); |
||
186 | } else { |
||
187 | $buttonid = $args[ 'button' ]; |
||
188 | } |
||
189 | |||
190 | // Fetch the (network)button by it's name |
||
191 | if ( ! $button = \PodloveSubscribeButton\Model\Button::get_button_by_name( $args[ 'button' ] ) ) |
||
192 | return sprintf( __( 'Oops. There is no button with the ID "%s".', 'podlove-subscribe-button' ), $args[ 'button' ] ); |
||
193 | |||
194 | // Get button styling and options |
||
195 | $autowidth = self::interpret_width_attribute( self::get_array_value_with_fallback( $args, 'width' ) ); |
||
196 | $size = self::get_attribute( 'size', self::get_array_value_with_fallback( $args, 'size' ) ); |
||
197 | $style = self::get_attribute( 'style', self::get_array_value_with_fallback( $args, 'style' ) ); |
||
198 | $format = self::get_attribute( 'format', self::get_array_value_with_fallback( $args, 'format' ) ); |
||
199 | |||
200 | if ( isset( $args[ 'language' ] ) ) { |
||
201 | $language = $args[ 'language' ]; |
||
202 | } else { |
||
203 | $language = self::get_attribute( 'language', self::get_array_value_with_fallback( $args, 'language' ) ); |
||
204 | } |
||
205 | |||
206 | if ( isset( $args[ 'color' ] ) ) { |
||
207 | $color = $args[ 'color' ]; |
||
208 | } else { |
||
209 | $color = self::get_attribute( 'color', self::get_array_value_with_fallback( $args, 'color' ) ); |
||
210 | } |
||
211 | |||
212 | if ( isset( $args[ 'hide' ] ) && $args[ 'hide' ] == 'true' ) { |
||
213 | $hide = true; |
||
214 | } else { |
||
215 | $hide = false; |
||
216 | } |
||
217 | |||
218 | // Render button |
||
219 | return $button->render( $size, $autowidth, $style, $format, $color, $hide, $buttonid, $language ); |
||
220 | |||
221 | } |
||
222 | |||
223 | public static function get_array_value_with_fallback( $args, $key ) { |
||
224 | if ( isset( $args[ $key ] ) ) { |
||
225 | return $args[ $key ]; |
||
226 | } |
||
227 | |||
228 | return false; |
||
229 | |||
230 | } |
||
231 | |||
232 | /** |
||
233 | * @param string $attribute |
||
234 | * @param string $attribute_value |
||
235 | * @return string |
||
236 | */ |
||
237 | private static function get_attribute( $attribute = null, $attribute_value = null ) { |
||
238 | if ( isset( $attribute_value ) && ctype_alnum( $attribute_value ) && key_exists( $attribute_value, \PodloveSubscribeButton\Model\Button::$$attribute ) ) { |
||
239 | return $attribute_value; |
||
240 | } else { |
||
241 | return get_option( 'podlove_subscribe_button_default_' . $attribute, \PodloveSubscribeButton\Model\Button::$properties[ $attribute ] ); |
||
242 | } |
||
243 | |||
244 | } |
||
245 | |||
246 | /** |
||
247 | * Interprets the provided width attribute and return either auto- or a specific width |
||
248 | * |
||
249 | * @param string $width_attribute |
||
250 | * @return string |
||
251 | */ |
||
252 | private static function interpret_width_attribute( $width_attribute = null ) { |
||
253 | if ( $width_attribute == 'auto' ) { |
||
254 | return 'on'; |
||
255 | } |
||
256 | |||
257 | if ( $width_attribute && $width_attribute !== 'auto' ) { |
||
258 | return 'off'; |
||
259 | } |
||
260 | |||
261 | return self::get_option( 'autowidth', 'on' ); |
||
262 | |||
263 | } |
||
264 | |||
265 | public static function plugin_file() { |
||
266 | return __FILE__; |
||
267 | } |
||
268 | |||
269 | } // END class |
||
270 |