PluginProbe ʕ •ᴥ•ʔ
Responsive Lightbox & Gallery / trunk
Responsive Lightbox & Gallery vtrunk
2.7.8 trunk 1.0.0 1.0.1 1.0.1.1 1.0.2 1.0.3 1.0.4 1.1.0 1.1.1 1.1.2 1.2.0 1.2.1 1.2.2 1.2.3 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.4.0 1.4.0.1 1.4.1 1.4.11 1.4.12 1.4.13 1.4.14 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.6.0 1.6.1 1.6.10 1.6.11 1.6.12 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 2.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.1 2.2.0 2.2.1 2.2.2 2.2.3 2.2.3.1 2.3.0 2.3.1 2.3.2 2.3.3 2.3.4 2.3.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.6.0 2.6.1 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7
responsive-lightbox / includes / settings / class-settings-addons.php
responsive-lightbox / includes / settings Last commit date
class-settings-addons.php 4 months ago class-settings-base.php 5 months ago class-settings-builder.php 5 months ago class-settings-capabilities.php 5 months ago class-settings-folders.php 4 months ago class-settings-galleries.php 5 months ago class-settings-general.php 5 months ago class-settings-licenses.php 4 months ago class-settings-lightboxes.php 4 months ago class-settings-remote-library.php 5 months ago
class-settings-addons.php
184 lines
1 <?php
2 // exit if accessed directly
3 if ( ! defined( 'ABSPATH' ) )
4 exit;
5
6 /**
7 * Responsive_Lightbox_Settings_Addons class.
8 *
9 * Settings data for Add-ons tab (Settings API).
10 *
11 * @class Responsive_Lightbox_Settings_Addons
12 */
13 class Responsive_Lightbox_Settings_Addons extends Responsive_Lightbox_Settings_Base {
14
15 /**
16 * Tab key identifier.
17 *
18 * @var string
19 */
20 const TAB_KEY = 'addons';
21
22 /**
23 * Class constructor.
24 *
25 * @return void
26 */
27 public function __construct() {
28 parent::__construct();
29
30 add_action( 'wp_ajax_rl-get-addons-feed', [ __CLASS__, 'ajax_get_addons_feed' ] );
31 }
32
33 /**
34 * Validate settings for this tab.
35 *
36 * Override - add-ons tab has no saveable fields.
37 *
38 * @param array $input Input data from form submission.
39 * @return array Validated data.
40 */
41 public function validate( $input ) {
42 // add-ons tab has no saveable fields, return input as-is
43 return $input;
44 }
45
46 /** * Provide settings data for Add-ons tab.
47 *
48 * @param array $data Settings data.
49 * @return array
50 */
51 public function settings_data( $data ) {
52 $data[self::TAB_KEY] = [
53 'option_name' => 'responsive_lightbox_addons',
54 'option_group' => 'responsive_lightbox_addons',
55 'validate' => [ $this, 'validate' ],
56 'sections' => [
57 'responsive_lightbox_addons' => [
58 'title' => __( 'Add-ons / Extensions', 'responsive-lightbox' ),
59 'callback' => [ __CLASS__, 'render_addons_section' ]
60 ]
61 ],
62 'fields' => []
63 ];
64
65 return $data;
66 }
67
68 /**
69 * Render Add-ons section content.
70 *
71 * @return void
72 */
73 public static function render_addons_section() {
74 ?>
75 <p class="description"><?php esc_html_e( 'Enhance your website with these beautiful, easy to use extensions, designed with Responsive Lightbox & Gallery integration in mind.', 'responsive-lightbox' ); ?></p>
76 <br />
77 <?php
78 $addons_html = self::get_cached_addons_feed();
79 $has_feed = $addons_html !== '';
80 $nonce = wp_create_nonce( 'rl_addons_feed' );
81 $error_message = esc_html__( 'There was an error retrieving the extensions list from the server. Please try again later.', 'responsive-lightbox' );
82
83 echo '<div id="rl-addons-feed" class="rl-addons-feed" data-nonce="' . esc_attr( $nonce ) . '" data-loaded="' . ( $has_feed ? '1' : '0' ) . '" data-error-message="' . esc_attr( $error_message ) . '">';
84
85 if ( $has_feed ) {
86 echo self::sanitize_addons_html( $addons_html );
87 } else {
88 echo '<div class="rl-addons-loading"><span class="spinner is-active"></span> ' . esc_html__( 'Loading extensions...', 'responsive-lightbox' ) . '</div>';
89 }
90
91 echo '</div>';
92 }
93
94 /**
95 * AJAX: Get Add-ons feed HTML.
96 *
97 * @return void
98 */
99 public static function ajax_get_addons_feed() {
100 $rl = Responsive_Lightbox();
101 $capability = apply_filters( 'rl_lightbox_settings_capability', $rl->options['capabilities']['active'] ? 'edit_lightbox_settings' : 'manage_options' );
102
103 if ( ! current_user_can( $capability ) )
104 wp_send_json_error( [ 'message' => esc_html__( 'You are not allowed to access this data.', 'responsive-lightbox' ) ] );
105
106 if ( empty( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'rl_addons_feed' ) )
107 wp_send_json_error( [ 'message' => esc_html__( 'Invalid request. Please reload the page and try again.', 'responsive-lightbox' ) ] );
108
109 $addons_html = self::get_addons_feed_html();
110
111 if ( $addons_html === '' )
112 wp_send_json_error( [ 'message' => esc_html__( 'There was an error retrieving the extensions list from the server. Please try again later.', 'responsive-lightbox' ) ] );
113
114 wp_send_json_success( [ 'html' => $addons_html ] );
115 }
116
117 /**
118 * Get cached Add-ons feed HTML (raw).
119 *
120 * @return string
121 */
122 private static function get_cached_addons_feed() {
123 $addons_html = get_transient( 'responsive_lightbox_addons_feed' );
124
125 if ( is_string( $addons_html ) && $addons_html !== '' )
126 return $addons_html;
127
128 return '';
129 }
130
131 /**
132 * Fetch Add-ons feed HTML (raw) and cache it.
133 *
134 * @return string
135 */
136 private static function fetch_addons_feed() {
137 $feed = wp_remote_get( 'https://www.dfactory.co/?feed=addons&product=responsive-lightbox', [ 'sslverify' => true ] );
138
139 if ( is_wp_error( $feed ) )
140 return '';
141
142 $body = wp_remote_retrieve_body( $feed );
143
144 if ( ! is_string( $body ) || $body === '' )
145 return '';
146
147 set_transient( 'responsive_lightbox_addons_feed', $body, 120 );
148
149 return $body;
150 }
151
152 /**
153 * Get Add-ons feed HTML (sanitized).
154 *
155 * @return string
156 */
157 private static function get_addons_feed_html() {
158 $addons_html = self::get_cached_addons_feed();
159
160 if ( $addons_html === '' )
161 $addons_html = self::fetch_addons_feed();
162
163 if ( $addons_html === '' )
164 return '';
165
166 return self::sanitize_addons_html( $addons_html );
167 }
168
169 /**
170 * Sanitize Add-ons feed HTML.
171 *
172 * @param string $addons_html Raw HTML.
173 * @return string
174 */
175 private static function sanitize_addons_html( $addons_html ) {
176 $allowed_html = wp_kses_allowed_html( 'post' );
177
178 $allowed_html['img']['srcset'] = [];
179 $allowed_html['img']['sizes'] = [];
180
181 return wp_kses( $addons_html, $allowed_html );
182 }
183 }
184