/** * Construct */ function __construct($type = 'mycred_default') { // Prep $this->is_multisite = is_multisite(); $this->use_master_template = mycred_override_settings(); $this->use_central_logging = mycred_centralize_log(); if ($type == '' || $type === NULL) { $type = 'mycred_default'; } // Load Settings $option_id = 'mycred_pref_core'; if ($type != 'mycred_default' && $type != '') { $option_id .= '_' . $type; } $this->core = mycred_get_option($option_id, $this->defaults()); if ($this->core !== false) { foreach ((array) $this->core as $key => $value) { $this->{$key} = $value; } } if ($type != '') { $this->cred_id = $type; } if (defined('MYCRED_LOG_TABLE')) { $this->log_table = MYCRED_LOG_TABLE; } else { global $wpdb; if ($this->is_multisite && $this->use_central_logging) { $this->log_table = $wpdb->base_prefix . 'myCRED_log'; } else { $this->log_table = $wpdb->prefix . 'myCRED_log'; } } do_action_ref_array('mycred_settings', array(&$this)); }
/** * Construct */ public function __construct() { $skey = mycred_get_option('mycred_key', false); if ($skey === false) { $skey = $this->reset_key(); } $this->skey = $skey; }
function mycred_update_to_onefive($version = NULL) { if ($version === NULL) { return; } // Clean up after the 1.4.6 Email Notice bug if (version_compare($version, '1.4.7', '<')) { $cron = get_option('cron'); if (!empty($cron)) { foreach ($cron as $time => $job) { if (isset($job['mycred_send_email_notices'])) { unset($cron[$time]); } } update_option('cron', $cron); } } // 1.4 Update if (version_compare($version, '1.4', '>=')) { delete_option('mycred_update_req_settings'); delete_option('mycred_update_req_hooks'); } // 1.5 Update if (version_compare($version, '1.5', '<') && class_exists('myCRED_buyCRED_Module')) { // Update buyCRED Settings $type_set = 'mycred_default'; $setup = mycred_get_option('mycred_pref_core', false); if (isset($setup['buy_creds'])) { if (isset($setup['buy_creds']['type'])) { $type_set = $setup['buy_creds']['type']; unset($setup['buy_creds']['type']); $setup['buy_creds']['types'] = array($type_set); mycred_update_option('mycred_pref_core', $setup); } } // Update buyCRED Gateways Settings $buy_cred = mycred_get_option('mycred_pref_buycreds', false); if (isset($buy_cred['gateway_prefs'])) { foreach ($buy_cred['gateway_prefs'] as $gateway_id => $prefs) { if (!isset($prefs['exchange'])) { continue; } $buy_cred['gateway_prefs'][$gateway_id]['exchange'] = array($type_set => $prefs['exchange']); } $buy_cred['active'] = array(); mycred_update_option('mycred_pref_buycreds', $buy_cred); add_option('mycred_buycred_reset', 'true'); } // Update complted update_option('mycred_version', '1.5.4'); } else { delete_option('mycred_buycred_reset'); } }
/** * Construct */ public function __construct($custom_key = NULL) { if ($custom_key !== NULL) { $this->skey = $custom_key; } else { $skey = mycred_get_option('mycred_key', false); if ($skey === false) { $skey = $this->reset_key(); } $this->skey = $skey; } }
/** * Save * Saves the given preference id for rates. * from the active list. * @since 1.2 * @version 1.1 */ public function save($id, $now) { if (!isset($this->prefs[$id])) { return; } $this->prefs[$id] = $now; // Get Bank settings $bank = mycred_get_option('mycred_pref_bank'); // Update settings $bank['service_prefs'][$this->id] = $this->prefs; // Save new settings mycred_update_option('mycred_pref_bank', $bank); }
/** * Set Settings * @since 0.1 * @version 1.2 */ function set_settings() { $module = $this->module_name; // Reqest not to register any settings if ($this->register === false) { // If settings does not exist apply defaults if (!isset($this->core->{$module})) { $this->{$module} = $this->default_prefs; } else { $this->{$module} = $this->core->{$module}; } // Apply defaults in case new settings have been applied if (!empty($defaults)) { $this->{$module} = mycred_apply_defaults($this->default_prefs, $this->{$module}); } } else { // Option IDs must be provided if (!empty($this->option_id)) { // Array = more then one if (is_array($this->option_id)) { // General settings needs not to be loaded $pattern = 'mycred_pref_core'; //$matches = array_filter( $this->option_id, function( $a ) use ( $pattern ) { return preg_grep( $a, $pattern ); } ); //if ( ! empty( $matches ) ) $this->{$module} = $this->core; // Loop and grab foreach ($this->option_id as $option_id => $option_name) { $settings = mycred_get_option($option_name, false); if ($settings === false && array_key_exists($option_id, $defaults)) { $this->{$module}[$option_name] = $this->default_prefs[$option_id]; } else { $this->{$module}[$option_name] = $settings; } // Apply defaults in case new settings have been applied if (array_key_exists($option_id, $defaults)) { $this->{$module}[$option_name] = mycred_apply_defaults($this->default_prefs[$option_id], $this->{$module}[$option_name]); } } } else { // General settings needs not to be loaded if (str_replace('mycred_pref_core', '', $this->option_id) == '') { $this->{$module} = $this->core; } else { $this->{$module} = mycred_get_option($this->option_id, false); if ($this->{$module} === false && !empty($this->default_prefs)) { $this->{$module} = $this->default_prefs; } // Apply defaults in case new settings have been applied if (!empty($this->default_prefs)) { $this->{$module} = mycred_apply_defaults($this->default_prefs, $this->{$module}); } } } if (is_array($this->{$module})) { foreach ($this->{$module} as $key => $value) { $this->{$key} = $value; } } } } }
function mycred_update_to_onesix($version = NULL) { if ($version === NULL) { return; } // 1.6 Update if (version_compare($version, '1.6', '<')) { global $wpdb; $types = mycred_get_types(); // Remove Login hook markers if (count($types) == 1) { $wpdb->delete($wpdb->usermeta, array('meta_key' => 'mycred_last_login'), array('%s')); } else { foreach ($types as $type_id => $label) { $wpdb->delete($wpdb->usermeta, array('meta_key' => 'mycred_last_login_' . $type_id), array('%s')); } } // Update email notices to support multiple point types if (class_exists('myCRED_Email_Notice_Module')) { $notices = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'mycred_email_notice' AND post_status != 'trash';"); if (!empty($notices)) { foreach ($notices as $notice_id) { update_post_meta((int) $notice_id, 'mycred_email_ctype', 'all'); } } } // Update ranks to support multiple point types if (class_exists('myCRED_Ranks_Module')) { $ranks = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'mycred_rank' AND post_status != 'trash';"); if (!empty($ranks)) { foreach ($ranks as $rank_id) { update_post_meta((int) $rank_id, 'ctype', 'mycred_default'); } } } } elseif (version_compare($version, '1.6.7', '<')) { $addons = mycred_get_option('mycred_pref_addons'); $addons = maybe_unserialize($addons); // Remove built-in add-ons Paths. if (!empty($addons['installed'])) { foreach ($addons['installed'] as $id => $info) { $addons['installed'][$id]['path'] = str_replace(myCRED_ADDONS_DIR, '', $info['path']); } mycred_update_option('mycred_pref_addons', $addons); } } // Update complted update_option('mycred_version', myCRED_VERSION); }
/** * Sanititze Settings * @filter 'mycred_save_core_prefs' * @since 0.1 * @version 1.4.1 */ public function sanitize_settings($post) { $new_data = array(); if ($this->mycred_type == 'mycred_default') { if (isset($post['types'])) { $types = array('mycred_default' => mycred_label()); foreach ($post['types'] as $item => $data) { // Make sure it is not marked as deleted if (isset($post['delete_types']) && in_array($item, $post['delete_types'])) { continue; } // Skip if empty if (empty($data['key']) || empty($data['label'])) { continue; } // Add if not in array already if (!array_key_exists($data['key'], $types)) { $key = str_replace(array(' ', '-'), '_', $data['key']); $key = sanitize_key($key); $types[$key] = sanitize_text_field($data['label']); } } mycred_update_option('mycred_types', $types); unset($post['types']); if (isset($post['delete_types'])) { unset($post['delete_types']); } } $new_data['format'] = $this->core->core['format']; if (isset($post['format']['type']) && $post['format']['type'] != '') { $new_data['format']['type'] = absint($post['format']['type']); } if (isset($post['format']['decimals'])) { $new_data['format']['decimals'] = absint($post['format']['decimals']); } } else { $main_settings = mycred_get_option('mycred_pref_core'); $new_data['format'] = $main_settings['format']; if (isset($post['format']['decimals'])) { $new_decimals = absint($post['format']['decimals']); if ($new_decimals <= $main_settings['format']['decimals']) { $new_data['format']['decimals'] = $new_decimals; } } } // Format $new_data['cred_id'] = $this->mycred_type; $new_data['format']['separators']['decimal'] = $this->maybe_whitespace($post['format']['separators']['decimal']); $new_data['format']['separators']['thousand'] = $this->maybe_whitespace($post['format']['separators']['thousand']); // Name $new_data['name'] = array('singular' => sanitize_text_field($post['name']['singular']), 'plural' => sanitize_text_field($post['name']['plural'])); // Look $new_data['before'] = sanitize_text_field($post['before']); $new_data['after'] = sanitize_text_field($post['after']); // Capabilities $new_data['caps'] = array('plugin' => sanitize_text_field($post['caps']['plugin']), 'creds' => sanitize_text_field($post['caps']['creds'])); // Max $new_data['max'] = $this->core->number($post['max']); // Make sure multisites uses capabilities that exists if (in_array($new_data['caps']['creds'], array('create_users', 'delete_themes', 'edit_plugins', 'edit_themes', 'edit_users')) && is_multisite()) { $new_data['caps']['creds'] = 'delete_users'; } // Excludes $new_data['exclude'] = array('plugin_editors' => isset($post['exclude']['plugin_editors']) ? $post['exclude']['plugin_editors'] : 0, 'cred_editors' => isset($post['exclude']['cred_editors']) ? $post['exclude']['cred_editors'] : 0, 'list' => sanitize_text_field($post['exclude']['list'])); // Remove Exclude users balances if ($new_data['exclude']['list'] != '') { $excluded_ids = explode(',', $new_data['exclude']['list']); if (!empty($excluded_ids)) { foreach ((array) $excluded_ids as $user_id) { $user_id = absint(trim($user_id)); if ($user_id == 0) { continue; } mycred_delete_user_meta($user_id, $this->mycred_type); mycred_delete_user_meta($user_id, $this->mycred_type, '_total'); } } } // User deletions $new_data['delete_user'] = isset($post['delete_user']) ? $post['delete_user'] : 0; $action_hook = ''; if (!$this->is_main_type) { $action_hook = $this->mycred_type; } $new_data = apply_filters('mycred_save_core_prefs' . $action_hook, $new_data, $post, $this); return $new_data; }
function mycred_use_coupon($code = '', $user_id = 0) { // Missing required information if (empty($code) || $user_id === 0) { return 'missing'; } // Get coupon by code (post title) $coupon = mycred_get_coupon_post($code); // Coupon does not exist if ($coupon === NULL) { return 'missing'; } // Check Expiration $expires = mycred_get_coupon_expire_date($coupon->ID, true); if (!empty($expires) && $expires !== 0 && $expires < date_i18n('U')) { wp_trash_post($coupon->ID); return 'expired'; } // Get Global Count $global_count = mycred_get_global_coupon_count($coupon->ID); // We start with enforcing the global count $global_max = mycred_get_coupon_global_max($coupon->ID); if ($global_count >= $global_max) { wp_trash_post($coupon->ID); return 'expired'; } $type = get_post_meta($coupon->ID, 'type', true); if (empty($type)) { $type = 'mycred_default'; } $mycred = mycred($type); // Get User max $user_count = mycred_get_users_coupon_count($code, $user_id); // Next we enforce the user max $user_max = mycred_get_coupon_user_max($coupon->ID); if ($user_count >= $user_max) { return 'max'; } // Min balance requirement $users_balance = $mycred->get_users_cred($user_id, $type); $min_balance = mycred_get_coupon_min_balance($coupon->ID); if ($min_balance > $mycred->zero() && $users_balance < $min_balance) { return 'min_balance'; } // Max balance requirement $max_balance = mycred_get_coupon_max_balance($coupon->ID); if ($max_balance > $mycred->zero() && $users_balance >= $max_balance) { return 'max_balance'; } // Ready to use coupon! $value = mycred_get_coupon_value($coupon->ID); $value = $mycred->number($value); // Get Coupon log template $settings = mycred_get_option('mycred_pref_core'); if (!isset($mycred->core['coupons']['log'])) { $mycred->core['coupons']['log'] = __('Coupon redemption', 'mycred'); } // Apply Coupon $mycred->add_creds('coupon', $user_id, $value, $mycred->core['coupons']['log'], $coupon->ID, $code, $type); do_action('mycred_use_coupon', $user_id, $coupon); // Increment global counter $global_count++; update_post_meta($coupon->ID, 'global_count', $global_count); // If the updated counter reaches the max, trash the coupon now if ($global_count >= $global_max) { wp_trash_post($coupon->ID); } return $mycred->number($users_balance + $value); }
/** * Save User Override * @since 1.5.2 * @version 1.0.1 */ function save_user_override() { // Save interest rate if (isset($_POST['mycred_adjust_users_interest_rate_run']) && isset($_POST['mycred_adjust_users_interest_rate'])) { $ctype = sanitize_key($_GET['ctype']); $user_id = absint($_GET['user_id']); $rate = $_POST['mycred_adjust_users_interest_rate']; if ($rate != '') { if (isfloat($rate)) { $rate = (double) $rate; } else { $rate = (int) $rate; } mycred_update_user_meta($user_id, 'mycred_banking_rate_' . $ctype, '', $rate); } else { mycred_delete_user_meta($user_id, 'mycred_banking_rate_' . $ctype); } wp_safe_redirect(add_query_arg(array('result' => 'banking_interest_rate'))); exit; } elseif (isset($_POST['mycred_exclude_users_interest_rate'])) { $ctype = sanitize_key($_GET['ctype']); $user_id = absint($_GET['user_id']); $excluded = explode(',', $this->prefs['exclude_ids']); $clean_ids = array(); if (!empty($excluded)) { foreach ($excluded as $id) { if ($id == 0) { continue; } $clean_ids[] = (int) trim($id); } } if (!in_array($user_id, $clean_ids) && $user_id != 0) { $clean_ids[] = $user_id; } $option_id = 'mycred_pref_bank'; if (!$this->is_main_type) { $option_id .= '_' . $ctype; } $data = mycred_get_option($option_id); $data['service_prefs'][$this->id]['exclude_ids'] = implode(',', $clean_ids); mycred_update_option($option_id, $data); wp_safe_redirect(add_query_arg(array('result' => 'banking_interest_excluded'))); exit; } elseif (isset($_POST['mycred_include_users_interest_rate'])) { $ctype = sanitize_key($_GET['ctype']); $user_id = absint($_GET['user_id']); $excluded = explode(',', $this->prefs['exclude_ids']); if (!empty($excluded)) { $clean_ids = array(); foreach ($excluded as $id) { $clean_id = (int) trim($id); if ($clean_id != $user_id && $user_id != 0) { $clean_ids[] = $clean_id; } } $option_id = 'mycred_pref_bank'; if (!$this->is_main_type) { $option_id .= '_' . $ctype; } $data = mycred_get_option($option_id); $data['service_prefs'][$this->id]['exclude_ids'] = implode(',', $clean_ids); mycred_update_option($option_id, $data); wp_safe_redirect(add_query_arg(array('result' => 'banking_interest_included'))); exit; } } }
/** * Update Cycles * @since 1.5.2 * @version 1.0 */ public function update_cycles() { // Manage cycles if it's not set to unlimited if ($this->prefs['cycles'] != '-1' && $this->prefs['cycles'] != 0) { // Prep option id for this addon. $option_id = 'mycred_pref_bank'; if (!$this->is_main_type) { $option_id .= '_' . $this->mycred_type; } // Get addon settings $addon = mycred_get_option($option_id); // Deduct cycle $current_cycle = (int) $this->prefs['cycles']; $current_cycle--; $addon['service_prefs'][$this->id]['cycles'] = $current_cycle; // If we reach zero, disable this service if ($current_cycle == 0 && in_array($this->id, $addon['active'])) { $new_active = array(); foreach ($addon['active'] as $active) { if ($active == $this->id || in_array($active, $new_active)) { continue; } $new_active[] = $active; } $addon['active'] = $new_active; } // Update settings mycred_update_option($option_id, $addon); } }
/** * Last Run * @since 1.2 * @version 1.1 */ public function get_last_run($instance = '') { $key = 'mycred_banking_' . $this->id . '_' . $instance . $this->mycred_type; return mycred_get_option($key, 'n/a'); }
function mycred_render_shortcode_video($atts) { global $mycred_video_points; $hooks = mycred_get_option('mycred_pref_hooks', false); if ($hooks === false) { return; } $prefs = $hooks['hook_prefs']['video_view']; extract(shortcode_atts(array('id' => NULL, 'width' => 560, 'height' => 315, 'amount' => $prefs['creds'], 'logic' => $prefs['logic'], 'interval' => $prefs['interval'], 'ctype' => 'mycred_default'), $atts)); // ID is required if ($id === NULL || empty($id)) { return __('A video ID is required for this shortcode', 'mycred'); } // Interval if (strlen($interval) < 3) { $interval = abs($interval * 1000); } // Video ID $video_id = str_replace('-', '__', $id); // Create key $key = mycred_create_token(array('youtube', $video_id, $amount, $logic, $interval)); if (!isset($mycred_video_points) || !is_array($mycred_video_points)) { $mycred_video_points = array(); } // Construct YouTube Query $query = apply_filters('mycred_video_query_youtube', array('enablejsapi' => 1, 'version' => 3, 'playerapiid' => 'mycred_vvideo_v' . $video_id, 'rel' => 0, 'controls' => 1, 'showinfo' => 0), $atts, $video_id); // Construct Youtube Query Address $url = 'https://www.youtube.com/embed/' . $id; $url = add_query_arg($query, $url); $mycred_video_points[] = 'youtube'; // Make sure video source ids are unique $mycred_video_points = array_unique($mycred_video_points); ob_start(); ?> <div class="mycred-video-wrapper youtube-video"> <iframe id="mycred_vvideo_v<?php echo $video_id; ?> " class="mycred-video mycred-youtube-video" data-vid="<?php echo $video_id; ?> " src="<?php echo $url; ?> " width="<?php echo $width; ?> " height="<?php echo $height; ?> " frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe> <script type="text/javascript"> function mycred_vvideo_v<?php echo $video_id; ?> ( state ) { duration[ "<?php echo $video_id; ?> " ] = state.target.getDuration(); mycred_view_video( "<?php echo $video_id; ?> ", state.data, "<?php echo $logic; ?> ", "<?php echo $interval; ?> ", "<?php echo $key; ?> ", "<?php echo $ctype; ?> " ); } </script> </div> <?php $output = ob_get_contents(); ob_end_clean(); // Return the shortcode output return apply_filters('mycred_video_output', $output, $atts); }
function mycred_render_shortcode_total_points($atts) { extract(shortcode_atts(array('type' => 'mycred_default', 'ref' => '', 'ref_id' => '', 'user_id' => '', 'formatted' => 1), $atts)); $types = mycred_get_types(); if (!array_key_exists($type, $types)) { $type = 'mycred_default'; } // First we construct the meta_key $point_type = $type; if (is_multisite() && $GLOBALS['blog_id'] > 1 && !mycred_centralize_log()) { $type .= '_' . $GLOBALS['blog_id']; } elseif (is_multisite() && $GLOBALS['blog_id'] > 1 && !mycred_override_settings()) { $type .= '_' . $GLOBALS['blog_id']; } $mycred = mycred($point_type); global $wpdb; // Simple if ($ref == '' && $ref_id == '' && $user_id == '') { // Check if cached value exists $total = mycred_get_option('mycred-cache-total-' . $point_type, false); if ($total === false) { // Add up all balances $total = $wpdb->get_var($wpdb->prepare("SELECT SUM( meta_value ) FROM {$wpdb->usermeta} WHERE meta_key = %s", $type)); if ($total !== NULL) { mycred_update_option('mycred-cache-total-' . $point_type, $total); } } } else { $wheres = array(); $wheres[] = $wpdb->prepare("ctype = %s", $point_type); $ref = sanitize_key($ref); if (strlen($ref) > 0) { // Either we have just one reference $multiple = explode(',', $ref); if (count($multiple) == 1) { $wheres[] = $wpdb->prepare("ref = %s", $ref); } else { $_clean = array(); foreach ($multiple as $ref) { $ref = sanitize_key($ref); if (strlen($ref) > 0) { $_clean[] = $ref; } } if (!empty($_clean)) { $wheres[] = "ref IN ( '" . implode("', '", $_clean) . "' )"; } } } $ref_id = sanitize_text_field($ref); if (strlen($ref_id) > 0) { $wheres[] = $wpdb->prepare("ref_id = %d", $ref_id); } $user_id = sanitize_text_field($ref); if (strlen($user_id) > 0) { $wheres[] = $wpdb->prepare("user_id = %d", $user_id); } $wheres = implode(" AND ", $wheres); $total = $wpdb->get_var("SELECT SUM( creds ) FROM {$mycred->log_table} WHERE {$wheres};"); } if ($total === NULL) { $total = 0; } if ($formatted == 1) { return $mycred->format_creds($total); } return $total; }