id) ? $field->id : $field->template . \rand(0,1000); if ($trigger_update) { $this->addUpdate($field); // make updating standard } $field->publish = false; // Output fields via class - never output. $this->fields[$field_id] = array('field' => $field, 'start' => $start, 'end' => $end); $this->fields = apply_filters('mbsocial/editor/addfield', $this->fields, $field); $this->defined_fields[] = $field_id; } public function addUpdate($field) { $field_id = $field->id; if (is_null($field_id) || $field_id == '') return; // no bad names if (! isset($this->defined_updatable[$field_id])) // no double sets $this->defined_updatable[] = $field_id; } public function namespaceit($var) { return self::$namespace . $var; } public function display_fields($clean = true, $return = false) { $fields = apply_filters('mbsocial/display_fields', $this->fields); $output = ''; foreach($fields as $id => $item) { $field = $item['field']; $output .= $field->output($item['start'], $item['end']); } // auto-update system $updatable = $this->defined_updatable; foreach($updatable as $index => $field) { $updatable[$index] = '#' . $field; } $output .= ' '; if ($clean) { $this->fields = array(); $this->defined_updatable = array(); } if (! $return) echo $output; else return $output; } public function output_defined_fields() { $fields = $this->defined_fields; $fields = implode(',', $fields); echo ''; } /** @param $active_networks - Networks that were saved by the users. This should be loaded instead of the default ones **/ public function get_default_networks($active_networks = array() ) { if (! is_array($active_networks)) { $active_networks = array(); } $networks = mbSocial()->networks()->get(); $selected = array(); $unselected = array(); $readmore = array(); // set active networks. Support doubles. foreach($active_networks as $index => $network_name) { $network = mbSocial()->networks()->get($network_name); if (! is_object($network)) // could be removed network. continue; if ($network->get('is_active')) $selected[$index] = $network; } foreach($networks as $index => $network) { $priority = $network->get('priority'); if (! $network->get('is_active')) { continue; } $is_active = array_search($network->get('network'), $active_networks); // retrieve the array index if ($is_active !== false) { $priority = 'selected'; } if ($priority == 'unselected') $unselected[] = $network; if ($priority == 'readmore') $readmore[] = $network; if ($network->get('network') == 'maxbutton' && $priority != 'readmore') // exceptions { $readmore[] = $network; } } // foreach networks // Sort networks by order saved. ksort($selected); return array('selected' => $selected, 'unselected' => $unselected, 'readmore' => $readmore); } /* Load saved networks, check which ones are selected. Load others as default settings if no save */ public function get_networks($active_networks = array() ) { $networks_array = $this->get_default_networks($active_networks); return $networks_array; } // render icons with input from different icon libraries (/future) public function renderIcon($args) { $defaults = array('icon' => '', 'icon_type' => '', 'icon_size' => 20, 'title' => '', ); $args = wp_parse_args($args, $defaults); $icon_type = $args['icon_type']; $icon = $args['icon']; $icon_size = $args['icon_size']; $title = $args['title']; $faUtils = FAUtils::getInstance(); switch($icon_type) { case 'fa': // FA5 case 'fab': case 'fas': case 'far': $args = array('icon' => trim($icon_type) . ' ' . trim($icon), 'title' => $title); if ($icon_size) { $args['size'] = $icon_size; } $svg = $faUtils->getFASVG($args); $output = "$svg"; break; case 'nucleo': $output = " "; break; case 'svg': case 'png': // via network settings, or whatever. $output = "" . $title . ""; break; case 'image': // via media uploader case 'image-remote': if ($icon_type == 'image-remote') // when loading a custom network, before import { $url = $args['image_url']; $output = ''; } else { $image_id = isset($args['image_id']) ? $args['image_id'] : false; $image_size = isset($args['image_size']) ? $args['image_size'] : false; $img_data = wp_get_attachment_image_src($image_id, $image_size); $output = ''; if ($img_data) { $width = $img_data[1]; $height = $img_data[2]; $url = $img_data[0]; $output = ''; } } break; default: $output = ''; break; } return apply_filters('display/render/icon', $output, $args); } public function applyVars($string) { //$vars = $this->getShareData(); $w = MBSocial()->whistle(); preg_match_all('/\{(.*?)\}/im', $string, $matches); //$vars = (isset($vars[0]) && count($vars[0]) > 0) ? $vars[0] : array(); if (count($matches) == 0) return $string; $vars = $matches[0]; // i.e. {url} $clean_vars = $matches[1]; // i.e. url for($i = 0; $i < count($vars); $i++) { $var = $vars[$i]; $clean_var = $clean_vars[$i]; if (strpos($string, $var) !== false) { $val = $w->ask('display/vars/' . $clean_var); $string = str_replace($var, $val, $string); } } return $string; } public function header( $args = array() ) { $defaults = array( 'title' => '', ); $args = array_merge($defaults, $args); extract($args); include_once( mbSocial()->get_plugin_path() . '/admin/header.php'); } public function footer() { include_once( mbSocial()->get_plugin_path() . '/admin/footer.php'); } public function getProMessage() { return __( sprintf('You can only change these settings in the PRO version. Click %shere%s for upgrading to MaxButtons PRO', ' ', '') ); } public function do_review_notice () { $current_user_id = get_current_user_id(); $version = MBSOCIAL_VERSION_NUM; $review = get_user_meta( $current_user_id, 'mbsocial_review_notice' , true ); if ($review == '') { //$created = get_option("MBFREE_CREATED"); $show = time() + (7* DAY_IN_SECONDS); update_user_meta($current_user_id, 'mbsocial_review_notice', $show); return; } $display_review = false; if ($review == 'off') { return; // no show } elseif (is_numeric($review)) { $now = time(); if ($now > $review) { $display_review = true; } } // load style / script. It's seperated since it should show everywhere in admin. if ($display_review) { add_action( 'admin_notices', array( $this, 'mbsocial_review_notice')); // registered in admin scripts if (method_exists(MB(), 'load_library')) MB()->load_library('review_notice'); } } public function mbsocial_review_notice() { include_once( mbSocial()->get_plugin_path() . '/admin/review_notice.php'); } public function save_review_notice() { $status = isset($_POST["status"]) ? sanitize_text_field($_POST["status"]) : ''; $current_user_id = get_current_user_id(); $updated = false; if ($status == 'off') { $updated = true; update_user_meta($current_user_id, 'mbsocial_review_notice', 'off'); } if ($status == 'later') { $updated = true; $later = time() + (14 * DAY_IN_SECONDS ); update_user_meta($current_user_id, 'mbsocial_review_notice', $later); } if ($status == 'reviewoffer-dismiss') // different ad! { $updated = true; update_user_meta($current_user_id, 'mbsocial_review_notice', 'off'); } echo json_encode(array("updated" => $updated)) ; exit(); } }