PluginProbe
Social Share Buttons / 1.19
Social Share Buttons v1.19
trunk 0.9 1.0 1.1 1.1.1 1.1.2 1.10 1.11 1.12 1.15 1.16 1.17 1.18 1.19 1.2 1.20 1.3 1.30 1.4 1.5 1.6 1.7 1.8 1.9
share-button / classes / class-admin.php

class-admin.php in Social Share Buttons 1.19, at classes/class-admin.php

365 lines 8.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace MBSocial;
3 defined('ABSPATH') or die('No direct access permitted');
4
5 // Helper for admin pages / fields / saving etc.
6
7 class admin
8 {
9 protected $fields = array();
10 protected $defined_fields = array();
11 protected $defined_updatable = array();
12 protected static $namespace;
13
14 public function __construct()
15 {
16 self::$namespace = __NAMESPACE__ . '\\'; // PHP 5.3
17
18 }
19
20 // add a maxfield to be displayed on the admin.
21 public function addfield( $field, $start = '', $end = '', $trigger_update = true)
22 {
23 $field_id = isset($field->id) ? $field->id : $field->template . \rand(0,1000);
24 if ($trigger_update)
25 {
26 $this->addUpdate($field); // make updating standard
27 }
28 $field->publish = false; // Output fields via class - never output.
29
30 $this->fields[$field_id] = array('field' => $field,
31 'start' => $start,
32 'end' => $end);
33 $this->fields = apply_filters('mbsocial/editor/addfield', $this->fields, $field);
34
35 $this->defined_fields[] = $field_id;
36
37 }
38
39 public function addUpdate($field)
40 {
41 $field_id = $field->id;
42 if (is_null($field_id) || $field_id == '')
43 return; // no bad names
44
45 if (! isset($this->defined_updatable[$field_id])) // no double sets
46 $this->defined_updatable[] = $field_id;
47 }
48
49
50 public function namespaceit($var)
51 {
52 return self::$namespace . $var;
53 }
54
55 public function display_fields($clean = true, $return = false)
56 {
57 $fields = apply_filters('mbsocial/display_fields', $this->fields);
58 $output = '';
59
60 foreach($fields as $id => $item)
61 {
62 $field = $item['field'];
63 $output .= $field->output($item['start'], $item['end']);
64 }
65
66 // auto-update system
67 $updatable = $this->defined_updatable;
68 foreach($updatable as $index => $field)
69 {
70 $updatable[$index] = '#' . $field;
71 }
72
73 $output .= ' <span class="updatables hidden">' . implode(',', $updatable) . '</span>';
74
75 if ($clean)
76 {
77 $this->fields = array();
78 $this->defined_updatable = array();
79 }
80
81 if (! $return)
82 echo $output;
83 else
84 return $output;
85
86 }
87
88 public function output_defined_fields()
89 {
90 $fields = $this->defined_fields;
91 $fields = implode(',', $fields);
92
93 echo '<input type="hidden" name="defined_fields" value="' . $fields . '">';
94 }
95
96 /** @param $active_networks - Networks that were saved by the users. This should be loaded instead of the default ones **/
97 public function get_default_networks($active_networks = array() )
98 {
99 if (! is_array($active_networks))
100 {
101 $active_networks = array();
102 }
103 $networks = mbSocial()->networks()->get();
104 $selected = array();
105 $unselected = array();
106 $readmore = array();
107
108 // set active networks. Support doubles.
109 foreach($active_networks as $index => $network_name)
110 {
111 $network = mbSocial()->networks()->get($network_name);
112 if (! is_object($network)) // could be removed network.
113 continue;
114 if ($network->get('is_active'))
115 $selected[$index] = $network;
116 }
117
118 foreach($networks as $index => $network)
119 {
120 $priority = $network->get('priority');
121 if (! $network->get('is_active'))
122 { continue; }
123 $is_active = array_search($network->get('network'), $active_networks); // retrieve the array index
124
125 if ($is_active !== false)
126 {
127 $priority = 'selected';
128 }
129
130 if ($priority == 'unselected')
131 $unselected[] = $network;
132 if ($priority == 'readmore')
133 $readmore[] = $network;
134
135 if ($network->get('network') == 'maxbutton' && $priority != 'readmore') // exceptions
136 {
137
138 $readmore[] = $network;
139 }
140
141
142 } // foreach networks
143
144 // Sort networks by order saved.
145 ksort($selected);
146 return array('selected' => $selected, 'unselected' => $unselected, 'readmore' => $readmore);
147 }
148
149
150
151 /* Load saved networks, check which ones are selected. Load others as default settings if no save */
152 public function get_networks($active_networks = array() )
153 {
154 $networks_array = $this->get_default_networks($active_networks);
155 return $networks_array;
156 }
157
158 // render icons with input from different icon libraries (/future)
159 public function renderIcon($args)
160 {
161 $defaults = array('icon' => '',
162 'icon_type' => '',
163 'icon_size' => 20,
164 'title' => '',
165 );
166
167 $args = wp_parse_args($args, $defaults);
168
169 $icon_type = $args['icon_type'];
170 $icon = $args['icon'];
171 $icon_size = $args['icon_size'];
172 $title = $args['title'];
173
174 $faUtils = FAUtils::getInstance();
175
176 switch($icon_type)
177 {
178 case 'fa': // FA5
179 case 'fab':
180 case 'fas':
181 case 'far':
182 $args = array('icon' => trim($icon_type) . ' ' . trim($icon), 'title' => $title);
183 if ($icon_size)
184 {
185 $args['size'] = $icon_size;
186 }
187
188 $svg = $faUtils->getFASVG($args);
189 $output = "<span class='mb-icon'>$svg</span>";
190 break;
191 case 'nucleo':
192 $output = "<span class='mb-icon'><i class='$icon_type $icon' title='$title' > </i></span>";
193 break;
194 case 'svg':
195 case 'png': // via network settings, or whatever.
196 $output = "<span class='mb-icon " . $icon_type . "'><img src='" . $icon . "' alt='" . $title . "'></span>";
197 break;
198 case 'image': // via media uploader
199 case 'image-remote':
200 if ($icon_type == 'image-remote') // when loading a custom network, before import
201 {
202 $url = $args['image_url'];
203 $output = '<img src="' . $url . '" border="0" />';
204 }
205 else {
206 $image_id = isset($args['image_id']) ? $args['image_id'] : false;
207 $image_size = isset($args['image_size']) ? $args['image_size'] : false;
208
209 $img_data = wp_get_attachment_image_src($image_id, $image_size);
210 $output = '';
211
212 if ($img_data)
213 {
214 $width = $img_data[1];
215 $height = $img_data[2];
216 $url = $img_data[0];
217 $output = '<span class="mb-icon ' . $icon_type . '"><img src="' . $url . '" width="' . $width . '" height="' . $height . '" border="0" /></span>';
218 }
219
220 }
221 break;
222 default:
223 $output = '';
224 break;
225 }
226
227 return apply_filters('display/render/icon', $output, $args);
228 }
229
230 public function applyVars($string)
231 {
232 //$vars = $this->getShareData();
233 $w = MBSocial()->whistle();
234
235 preg_match_all('/\{(.*?)\}/im', $string, $matches);
236 //$vars = (isset($vars[0]) && count($vars[0]) > 0) ? $vars[0] : array();
237
238 if (count($matches) == 0)
239 return $string;
240
241 $vars = $matches[0]; // i.e. {url}
242 $clean_vars = $matches[1]; // i.e. url
243
244 for($i = 0; $i < count($vars); $i++)
245 {
246 $var = $vars[$i];
247 $clean_var = $clean_vars[$i];
248
249 if (strpos($string, $var) !== false)
250 {
251 $val = $w->ask('display/vars/' . $clean_var);
252 $string = str_replace($var, $val, $string);
253 }
254
255 }
256
257 return $string;
258 }
259
260 public function header( $args = array() )
261 {
262 $defaults = array(
263 'title' => '',
264 );
265
266 $args = array_merge($defaults, $args);
267 extract($args);
268
269 include_once( mbSocial()->get_plugin_path() . '/admin/header.php');
270 }
271
272 public function footer()
273 {
274 include_once( mbSocial()->get_plugin_path() . '/admin/footer.php');
275 }
276
277 public function getProMessage()
278 {
279 return __( sprintf('You can only change these settings in the PRO version. Click %shere%s for upgrading to MaxButtons PRO', '
280 <a href="https://maxbuttons.com" target="_blank">', '</a>') );
281 }
282
283
284 public function do_review_notice () {
285
286 $current_user_id = get_current_user_id();
287 $version = MBSOCIAL_VERSION_NUM;
288
289 $review = get_user_meta( $current_user_id, 'mbsocial_review_notice' , true );
290
291 if ($review == '')
292 {
293 //$created = get_option("MBFREE_CREATED");
294 $show = time() + (7* DAY_IN_SECONDS);
295 update_user_meta($current_user_id, 'mbsocial_review_notice', $show);
296 return;
297 }
298
299 $display_review = false;
300
301 if ($review == 'off')
302 { return; // no show
303
304 }
305 elseif (is_numeric($review))
306 {
307 $now = time();
308
309 if ($now > $review)
310 {
311 $display_review = true;
312
313 }
314 }
315
316 // load style / script. It's seperated since it should show everywhere in admin.
317 if ($display_review)
318 {
319 add_action( 'admin_notices', array( $this, 'mbsocial_review_notice'));
320 // registered in admin scripts
321 if (method_exists(MB(), 'load_library'))
322 MB()->load_library('review_notice');
323 }
324
325 }
326
327 public function mbsocial_review_notice()
328 {
329 include_once( mbSocial()->get_plugin_path() . '/admin/review_notice.php');
330 }
331
332 public function save_review_notice()
333 {
334 $status = isset($_POST["status"]) ? sanitize_text_field($_POST["status"]) : '';
335 $current_user_id = get_current_user_id();
336
337 $updated = false;
338
339 if ($status == 'off')
340 {
341 $updated = true;
342 update_user_meta($current_user_id, 'mbsocial_review_notice', 'off');
343
344 }
345 if ($status == 'later')
346 {
347 $updated = true;
348 $later = time() + (14 * DAY_IN_SECONDS );
349
350 update_user_meta($current_user_id, 'mbsocial_review_notice', $later);
351 }
352 if ($status == 'reviewoffer-dismiss') // different ad!
353 {
354 $updated = true;
355 update_user_meta($current_user_id, 'mbsocial_review_notice', 'off');
356
357 }
358
359 echo json_encode(array("updated" => $updated)) ;
360
361 exit();
362 }
363
364 }
365