Files
thetempusproject/app/plugins/members/plugin.php
2024-12-05 15:33:25 -05:00

180 lines
5.7 KiB
PHP

<?php
/**
* app/plugins/members/plugin.php
*
* This houses all of the main plugin info and functionality.
*
* @package TP Members
* @version 3.0
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]
*/
namespace TheTempusProject\Plugins;
use TheTempusProject\TheTempusProject as App;
use TheTempusProject\Classes\Plugin;
use Stripe\StripeClient;
use TheTempusProject\Bedrock\Classes\Config;
use TheTempusProject\Hermes\Functions\Route as Routes;
use TheTempusProject\Models\Memberships;
class Members extends Plugin {
public static $stripe;
public static $memberships;
private static $loaded = false;
public $pluginName = 'TP Membership';
public $configName = 'memberships';
public $pluginAuthor = 'JoeyK';
public $pluginWebsite = 'https://TheTempusProject.com';
public $modelVersion = '1.0';
public $pluginVersion = '3.0';
public $pluginDescription = 'A simple plugin which adds a site wide membership system.';
public $permissionMatrix = [
'memberAccess' => [
'pretty' => 'Access Member Areas',
'default' => false,
],
'controlMemberships' => [
'pretty' => 'User can Access and Control user memberships.',
'default' => false,
],
];
public $admin_links = [
[
'text' => '<i class="fa fa-fw fa-arrows-v"></i> Memberships',
'url' => [
[
'text' => '<i class="fa fa-fw fa-database"></i> Products',
'url' => '{ROOT_URL}admin/products',
],
[
'text' => '<i class="fa fa-fw fa-database"></i> Subscriptions',
'url' => '{ROOT_URL}admin/records',
],
[
'text' => '<i class="fa fa-fw fa-database"></i> Invoices',
'url' => '{ROOT_URL}admin/invoices',
],
],
],
];
public $main_links = [
[
'text' => 'Members',
'url' => '{ROOT_URL}member/index',
'filter' => 'member',
],
[
'text' => 'Become a Member',
'url' => '{ROOT_URL}member/join/1',
'filter' => 'nonmember',
],
];
public $resourceMatrix = [
'groups' => [
[
'name' => 'Member',
'permissions' => '{"adminAccess":false}',
]
],
];
public $configMatrix = [
'stripePublishable' => [
'type' => 'text',
'pretty' => 'Stripe Publishable key',
'default' => 'pk_xxxxxxxxxxxxxxx',
],
'stripeSecret' => [
'type' => 'text',
'pretty' => 'Stripe Secret key',
'default' => 'sk_xxxxxxxxxxxxxxx',
],
];
public static $webhookEvents = [
'customer.subscription.created',
'customer.subscription.updated',
'customer.subscription.deleted',
'customer.updated',
'customer.deleted',
'payment_method.automatically_updated',
'invoice.payment_action_required',
'invoice.payment_succeeded',
'checkout.session.completed',
];
public static $userLinks = [
"url" => "{ROOT_URL}member/manage",
"name" => "Subscriptions"
];
public function __construct( $load = false ) {
if ( ! self::$loaded ) {
App::$userCPlinks[] = (object) self::$userLinks;
self::$loaded = true;
}
if ( App::$isLoggedIn ) {
App::$isMember = $this->groupHasMemberAccess( App::$activeGroup );
if ( empty( App::$isMember ) ) {
App::$isMember = $this->userHasActiveMembership( App::$activeUser->ID );
}
}
$this->filters[] = [
'name' => 'member',
'find' => '#{MEMBER}(.*?){/MEMBER}#is',
'replace' => ( App::$isMember ? '$1' : '' ),
'enabled' => true,
];
$this->filters[] = [
'name' => 'nonmember',
'find' => '#{NONMEMBER}(.*?){/NONMEMBER}#is',
'replace' => ( App::$isLoggedIn && ! App::$isMember ? '$1' : '' ),
'enabled' => true,
];
$api_key = Config::getValue( 'memberships/stripeSecret' );
if ( $api_key == 'sk_xxxxxxxxxxxxxxx' || empty($api_key) ) {
self::$stripe = false;
} else {
self::$stripe = new StripeClient( $api_key );
}
parent::__construct( $load );
}
public function groupHasMemberAccess( $activeGroup ) {
if ( $activeGroup->memberAccess == true ) {
return true;
}
return false;
}
public function userHasActiveMembership( $user_id ) {
self::$memberships = new Memberships;
$membership = self::$memberships->findActiveByUserID( $user_id );
if ( empty( $membership ) ) {
return false;
}
return true;
}
public static function webhookSetup() {
$root = Routes::getAddress();
// $root = "https://stripe.joeykimsey.com/";
$response = self::$stripe->webhookEndpoints->create([
'enabled_events' => self::$webhookEvents,
'url' => $root . 'api/stripe/webhook',
]);
return $response;
}
// public static function webhookSetup() {
// $root = Routes::getAddress();
// $root = "https://stripe.joeykimsey.com/";
// $response = self::$stripe->webhookEndpoints->create([
// 'enabled_events' => self::$webhookEvents,
// 'url' => $root . 'api/stripe/webhook',
// ]);
// return $response;
// }
}