Last active
April 27, 2017 07:08
-
-
Save panoslyrakis/fc5373e0eb115baa781e280f55b46889 to your computer and use it in GitHub Desktop.
Add custom date rules for Membership Pro
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
Plugin Name: MS - Custom Date rules | |
Plugin URI: https://premium.wpmudev.org/ | |
Description: Add custom date rules for Membership Pro | |
Author: Panos Lyrakis @ WPMUDEV | |
Author URI: https://premium.wpmudev.org/ | |
License: GPLv2 or later | |
*/ | |
if( ! class_exists( 'WPMUDEV_MS_CDate_Rules' ) ){ | |
class WPMUDEV_MS_CDate_Rules | |
{ | |
private static $_instance = null; | |
public $version; | |
public static function get_instance() { | |
if ( is_null( self::$_instance ) ) { | |
self::$_instance = new WPMUDEV_MS_CDate_Rules(); | |
} | |
return self::$_instance; | |
} | |
private function __construct(){ | |
$this->version = '1.0'; | |
add_filter( 'ms_rule_has_access', array( $this, 'ms_rule_has_access' ), 10, 4 ); | |
} | |
public function ms_rule_has_access( $access, $id, $rule_type, $MS_Rule ){ | |
global $post; | |
if( ! $post instanceof WP_Post || ! is_user_logged_in() ){ | |
return $access; | |
} | |
$current_user_id = get_current_user_id(); | |
$user_revealed_pages = get_user_meta( $current_user_id, 'wpmudev-revealed-dripped-pages', true ); | |
if( is_array( $user_revealed_pages ) && in_array( $id, $user_revealed_pages ) ){ | |
return true; | |
} | |
if( ! is_array( $user_revealed_pages ) ){ | |
$user_revealed_pages = array(); | |
} | |
$member = MS_Model_Member::get_current_member(); | |
$memberships = $MS_Rule->get_memberships( $id ); | |
if( ! is_array( $memberships ) || empty( $memberships ) ){ | |
return $access; | |
} | |
foreach( $memberships as $membership_id => $membership_name ){ | |
$membership = MS_Factory::load( | |
'MS_Model_Membership', | |
$membership_id | |
); | |
$is_drippet = $membership->is_dripped(); | |
if( $is_drippet ){ | |
//Days to be used in the format: | |
// monday | |
// tuesday | |
// wednesday | |
// thursday | |
// friday | |
// saturday | |
// sunday | |
$dripped_days_names = array( | |
'monday', | |
'wednesday', | |
'friday', | |
'sunday' | |
); | |
$avail_date = $MS_Rule->get_dripped_avail_date( $id ); | |
$now = MS_Helper_Period::current_date(); | |
if( strtotime( $avail_date ) > strtotime( $now ) ){ | |
return $access; | |
} | |
$subscription = $member->get_subscription( $membership_id ); | |
if( ! $subscription instanceof MS_Model_Relationship || ! isset( $subscription->start_date ) ){ | |
return $access; | |
} | |
$subscription_start = new DateTime( $subscription->start_date . '00:00:00' ); | |
$datetime_now = DateTime::createFromFormat( 'd-m-Y', date( 'd-m-y', strtotime( $now ) ) ); | |
$today = strtolower( $datetime_now->format('l') ); | |
//Is today one of the allowed days? | |
if( in_array( $today, $dripped_days_names ) ){ | |
$user_revealed_pages[] = $id; | |
update_user_meta( $current_user_id, 'wpmudev-revealed-dripped-pages', $user_revealed_pages ); | |
return true; | |
} | |
foreach( $dripped_days_names as $day_name ){ | |
$date = new DateTime( date( 'Y-m-d', strtotime( $subscription_start->format( 'Y-m-d' ) ) ) ); | |
$date->modify( 'next ' . $day_name ); | |
$days_diff = ceil( ( strtotime( $date->format( 'Y-m-d' ) ) - time() ) / (60 * 60 * 24) ); | |
if( $days_diff <= 0 ){ | |
$user_revealed_pages[] = $id; | |
update_user_meta( $current_user_id, 'wpmudev-revealed-dripped-pages', $user_revealed_pages ); | |
return true; | |
} | |
} | |
} | |
else{ | |
//If not dripped | |
return $access; | |
} | |
} | |
return false; | |
} | |
} | |
add_action( 'plugins_loaded', function(){ | |
$GLOBALS['WPMUDEV_MS_CDate_Rules'] = WPMUDEV_MS_CDate_Rules::get_instance(); | |
}, 10 ); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment