Skip to content

Instantly share code, notes, and snippets.

@panoslyrakis
Last active April 27, 2017 07:08
Show Gist options
  • Save panoslyrakis/fc5373e0eb115baa781e280f55b46889 to your computer and use it in GitHub Desktop.
Save panoslyrakis/fc5373e0eb115baa781e280f55b46889 to your computer and use it in GitHub Desktop.
Add custom date rules for Membership Pro
<?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