setup_filters();
self::$instance->setup_actions();
}
return self::$instance;
}
/**
* A dummy constructor to prevent loading more than one instance
*
* @since GamiPress_Activation_Actions_Filters (0.0.1)
*/
private function __construct() { /* Do nothing here */
}
/**
* Setup the actions
*
* @since GamiPress_Activation_Actions_Filters (0.0.1)
* @access private
*
* @uses remove_action() To remove various actions
* @uses add_action() To add various actions
*/
private function setup_actions() {
if ( self::DEBUG )
add_action( 'admin_notices', array( $this, 'print_invalid_achievements') );
}
/**
* Setup the filters
*
* @since GamiPress_Activation_Actions_Filters (0.0.1)
* @access private
*
* @uses remove_filter() To remove various filters
* @uses add_filter() To add various filters
*/
private function setup_filters() {
if ( ! $this->badges_activated() ) {
add_filter( 'gamipress_user_deserves_trigger', '__return_false', 999 );
add_filter( 'user_has_access_to_achievement', '__return_false', 999 );
add_filter( 'gamipress_update_user_trigger_count', array( $this, 'return_zero' ), 999 );
}
add_filter( 'gamipress_settings_addons_meta_boxes', array( $this, 'settings_meta_boxes' ) );
}
public function print_invalid_achievements() {
$screen = get_current_screen();
if ( ! $screen || $screen->base != 'gamipress_page_gamipress_settings' )
return;
$invalid_achievements = $this->get_invalid_achievements();
if ( empty( $invalid_achievements ) )
return;
echo '
';
echo '
GamiPress Activation Addon has detected the following invalid achievements:
';
foreach ( $invalid_achievements as $achievement ) {
echo "
$achievement
";
}
echo '
';
}
private function get_activation_date( $type = 'start' ) {
$gamipress_settings = get_option( 'gamipress_settings' );
return apply_filters( "gamipress_activation_$type",
isset( $gamipress_settings["activate_badges_$type"] ) ? $gamipress_settings["activate_badges_$type"] : '' );
}
private function badges_activated() {
$gamipress_settings = get_option( 'gamipress_settings' );
$activate_badges = ( isset( $gamipress_settings['activate_badges'] ) ) ? $gamipress_settings['activate_badges'] :
$this->activate_badges_default();
$activate_badges_start = $this->get_activation_date( 'start' );
$activate_badges_end = $this->get_activation_date( 'end' );
// if global switch is off, bail
if ( ! $activate_badges )
return false;
// if start date is set and not yet reached, bail
if ( $activate_badges_start && strtotime( $activate_badges_start ) > time() )
return false;
// if end date is set and already over, bail
if ( $activate_badges_end && strtotime( $activate_badges_end ) < time() )
return false;
return true;
}
function get_invalid_achievements() {
$activate_badges_start = $this->get_activation_date( 'start' );
$activate_badges_end = $this->get_activation_date( 'end' );
$invalid_achievements = array();
if ( ! $activate_badges_start && ! $activate_badges_end )
return $invalid_achievements;
$args = array( 'fields' => array('ID', 'display_name', 'user_nicename' ) );
$query = new WP_User_Query( $args );
foreach ( $query->results as $user ) {
$earned_achievements = gamipress_get_user_achievements( array(
'user_id' => $user->ID
) );
foreach ( $earned_achievements as $key => $achievement ) {
$date = $achievement->date_earned;
$last_achievement = get_post( $achievement->ID );
$print = false;
if ( $activate_badges_start && strtotime( $activate_badges_start ) > $date )
$print = "Invalid before start";
if ( $activate_badges_end && strtotime( $activate_badges_end ) < $date )
$print = "Invalid after end";
if ( $print )
$invalid_achievements[] = "$print: User: $user->ID: $user->display_name: " . gmdate("Y-m-d\TH:i:s\Z", $date) . " : $last_achievement->ID:$last_achievement->post_title";
}
}
return $invalid_achievements;
}
/**
* just return 0
* @return 0
*/
public function return_zero() {
return 0;
}
/**
* Activation Settings meta boxes
*
* @since 0.0.1
*
* @param $meta_boxes
*
* @return mixed
*/
public function settings_meta_boxes( $meta_boxes ) {
$default_atts = array(
'data-datepicker' => json_encode( array(
'dateFormat' => 'dd.mm.yy'
) ),
);
$start_date_atts = apply_filters( 'gamipress_activation_start_date_input_attributes', $default_atts );
$end_date_atts = apply_filters( 'gamipress_activation_end_date_input_attributes', $default_atts );
$activate_badges_start = $this->get_activation_date( 'start' );
$activate_badges_end = $this->get_activation_date( 'end' );
$meta_boxes['gamipress-activation-settings'] = array(
'title' => __( 'Activation', 'gamipress-activation-addon' ),
'fields' => array(
'activate_badges' => array(
'name' => __( 'Activate Badges', 'gamipress-activation-addon' ),
'desc' => __( 'Activate the awarding of badges (if unchecked overrides date settings).', 'gamipress-activation-addon' ),
'type' => 'checkbox',
'default' => array( $this, 'activate_badges_default' ),
'classes' => 'gamipress-switch',
),
'activate_badges_start' => array(
'name' => __( 'Activate Badges date', 'gamipress-activation-addon' ),
'desc' => __( 'Activate the awarding of badges on this date (leave empty to activate immediately)', 'gamipress-activation-addon' ),
'type' => 'text_date',
'default' => $activate_badges_start,
'attributes' => $start_date_atts,
),
'activate_badges_end' => array(
'name' => __( 'Deactivate Badges date', 'gamipress-activation-addon' ),
'desc' => __( 'Deactivate the awarding of badges on this date (leave empty to never deactivate)', 'gamipress-activation-addon' ),
'type' => 'text_date',
'default' => $activate_badges_end,
'attributes' => $end_date_atts,
),
'activate_settings_saved' => array(
'type' => 'hidden',
'default' => true
),
)
);
return $meta_boxes;
}
function activate_badges_default() {
$gamipress_settings = get_option( 'gamipress_settings' );
return isset( $gamipress_settings[ 'activate_settings_saved' ] ) ? '' : true;
}
}
GamiPress_Activation_Actions_Filters::instance();