summaryrefslogtreecommitdiff
path: root/includes/bit_setup_inc.php
blob: f024dea0a992ee09eaa7b8e6670cceba907638ae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
use Bitweaver\Newsletters\BitNewsletter;
use Bitweaver\Newsletters\BitNewsletterMailer;
global $gBitSystem;

define( 'LIBERTY_SERVICE_NEWSLETTERS', 'newsletters' );

$pRegisterHash = [
	'package_name' => 'newsletters',
	'package_path' => dirname( dirname( __FILE__ ) ) . '/',
	'homeable'     => true,
];
// fix to quieten down VS Code which can't see the dynamic creation of these ...
define( 'NEWSLETTERS_PKG_NAME', $pRegisterHash['package_name'] );
define( 'NEWSLETTERS_PKG_URL', BIT_ROOT_URL . basename( $pRegisterHash['package_path'] ) . '/' );
define( 'NEWSLETTERS_PKG_PATH', BIT_ROOT_PATH . basename( $pRegisterHash['package_path'] ) . '/' );
define( 'NEWSLETTERS_PKG_INCLUDE_PATH', BIT_ROOT_PATH . basename( $pRegisterHash['package_path'] ) . '/includes/'); 
define( 'NEWSLETTERS_PKG_CLASS_PATH', BIT_ROOT_PATH . basename( $pRegisterHash['package_path'] ) . '/includes/classes/');
define( 'NEWSLETTERS_PKG_ADMIN_PATH', BIT_ROOT_PATH . basename( $pRegisterHash['package_path'] ) . '/admin/'); 

$gBitSystem->registerPackage( $pRegisterHash );

if( $gBitSystem->isPackageActive( NEWSLETTERS_PKG_NAME ) ) {
	$menuHash = [
		'package_name'  => NEWSLETTERS_PKG_NAME,
		'index_url'     => NEWSLETTERS_PKG_URL . 'index.php',
		'menu_template' => 'bitpackage:newsletters/menu_newsletters.tpl',
	];
	$gBitSystem->registerAppMenu( $menuHash );
	if( isset( $_GET['ct'] ) && strlen( $_GET['ct'] ) == 32 ) {
		require_once NEWSLETTERS_PKG_CLASS_PATH . 'BitNewsletterMailer.php';
		BitNewsletterMailer::storeClickthrough( $_GET['ct'] );
	}

	$gLibertySystem->registerService( LIBERTY_SERVICE_NEWSLETTERS, NEWSLETTERS_PKG_NAME, [
		'users_expunge_function'  => 'newsletters_user_expunge',
		'users_register_function' => 'newsletters_user_register',
	] );

	// make sure all mail_queue messages from a deleted user are nuked
	function newsletters_user_expunge( &$pObject ) {
		if( is_a( $pObject, 'BitUser' ) && !empty( $pObject->mUserId ) ) {
			$pObject->mDb->StartTrans();
			$pObject->mDb->query( "DELETE FROM `".BIT_DB_PREFIX."mail_queue` WHERE user_id=?", [ $pObject->mUserId ] );
			$pObject->mDb->query( "DELETE FROM `".BIT_DB_PREFIX."mail_subscriptions` WHERE user_id=?", [ $pObject->mUserId ] );
			$pObject->mDb->CompleteTrans();
		}
	}
	
	function newsletters_user_register( &$pObject ) {
		if( !empty( $_REQUEST['newsletter_optin'] ) ) {
			// hidden flag to indicate at least one newsletter was displayed
			require_once NEWSLETTERS_PKG_CLASS_PATH.'BitNewsletter.php';
			require_once NEWSLETTERS_PKG_CLASS_PATH.'BitNewsletterMailer.php';

			if( !empty( $_REQUEST['unsub_all'] ) ) {
				$subHash['unsubscribe_all'] = 'y';
			} else {
				$newsletter = new BitNewsletter();
				$pParamHash = [];
				$newsletters = $newsletter->getList($pParamHash);
				foreach( array_keys( $newsletters ) as $nlContentId ) {
					if( empty( $_REQUEST['nl_content_id'] ) || !in_array( $nlContentId, $_REQUEST['nl_content_id'] ) ) {
						$subHash['unsub_content'][] = $nlContentId;
						$subHash['unsubscribe_all'] = NULL;
					}
				}
			}

			if( !empty( $subHash ) ) {
				$subHash['sub_lookup'] = [ 'user_id' => $pObject->mUserId ];
				BitNewsletterMailer::storeSubscriptions( $subHash );
			}
		}
	}
}