PluginProbe
Social Share Buttons / 1.6
Social Share Buttons v1.6
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.6, at classes/class-admin.php

360 lines 8.8 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
211 $width = $img_data[1];
212 $height = $img_data[2];
213 $url = $img_data[0];
214 $output = '<span class="mb-icon ' . $icon_type . '"><img src="' . $url . '" width="' . $width . '" height="' . $height . '" border="0" /></span>';
215 }
216 break;
217 default:
218 $output = '';
219 break;
220 }
221
222 return apply_filters('display/render/icon', $output, $args);
223 }
224
225 public function applyVars($string)
226 {
227 //$vars = $this->getShareData();
228 $w = MBSocial()->whistle();
229
230 preg_match_all('/\{(.*?)\}/im', $string, $matches);
231 //$vars = (isset($vars[0]) && count($vars[0]) > 0) ? $vars[0] : array();
232
233 if (count($matches) == 0)
234 return $string;
235
236 $vars = $matches[0]; // i.e. {url}
237 $clean_vars = $matches[1]; // i.e. url
238
239 for($i = 0; $i < count($vars); $i++)
240 {
241 $var = $vars[$i];
242 $clean_var = $clean_vars[$i];
243
244 if (strpos($string, $var) !== false)
245 {
246 $val = $w->ask('display/vars/' . $clean_var);
247 $string = str_replace($var, $val, $string);
248 }
249
250 }
251
252 return $string;
253 }
254
255 public function header( $args = array() )
256 {
257 $defaults = array(
258 'title' => '',
259 );
260
261 $args = array_merge($defaults, $args);
262 extract($args);
263
264 include_once( mbSocial()->get_plugin_path() . '/admin/header.php');
265 }
266
267 public function footer()
268 {
269 include_once( mbSocial()->get_plugin_path() . '/admin/footer.php');
270 }
271
272 public function getProMessage()
273 {
274 return __( sprintf('You can only change these settings in the PRO version. Click %shere%s for upgrading to MaxButtons PRO', '
275 <a href="https://maxbuttons.com" target="_blank">', '</a>') );
276 }
277
278
279 public function do_review_notice () {
280
281 $current_user_id = get_current_user_id();
282 $version = MBSOCIAL_VERSION_NUM;
283
284 $review = get_user_meta( $current_user_id, 'mbsocial_review_notice' , true );
285
286 if ($review == '')
287 {
288 //$created = get_option("MBFREE_CREATED");
289 $show = time() + (7* DAY_IN_SECONDS);
290 update_user_meta($current_user_id, 'mbsocial_review_notice', $show);
291 return;
292 }
293
294 $display_review = false;
295
296 if ($review == 'off')
297 { return; // no show
298
299 }
300 elseif (is_numeric($review))
301 {
302 $now = time();
303
304 if ($now > $review)
305 {
306 $display_review = true;
307
308 }
309 }
310
311 // load style / script. It's seperated since it should show everywhere in admin.
312 if ($display_review)
313 {
314 add_action( 'admin_notices', array( $this, 'mbsocial_review_notice'));
315 // registered in admin scripts
316 if (method_exists(MB(), 'load_library'))
317 MB()->load_library('review_notice');
318 }
319
320 }
321
322 public function mbsocial_review_notice()
323 {
324 include_once( mbSocial()->get_plugin_path() . '/admin/review_notice.php');
325 }
326
327 public function save_review_notice()
328 {
329 $status = isset($_POST["status"]) ? sanitize_text_field($_POST["status"]) : '';
330 $current_user_id = get_current_user_id();
331
332 $updated = false;
333
334 if ($status == 'off')
335 {
336 $updated = true;
337 update_user_meta($current_user_id, 'mbsocial_review_notice', 'off');
338
339 }
340 if ($status == 'later')
341 {
342 $updated = true;
343 $later = time() + (14 * DAY_IN_SECONDS );
344
345 update_user_meta($current_user_id, 'mbsocial_review_notice', $later);
346 }
347 if ($status == 'reviewoffer-dismiss') // different ad!
348 {
349 $updated = true;
350 update_user_meta($current_user_id, 'mbsocial_review_notice', 'off');
351
352 }
353
354 echo json_encode(array("updated" => $updated)) ;
355
356 exit();
357 }
358
359 }
360