<?php if ( ! defined( 'ABSPATH' ) ) exit;
class NF_PromotionManager
* Accepts a string of location to tell let us know where in the app we are sending promotions to.
* Then will return an array of promotions to run in the location.
public function __construct()
$this->maybe_remove_personal();
$this->maybe_remove_sendwp();
$this->sort_active_promotions_by_locations();
public function get_promotions()
return $this->promotions;
* Set our promtions array to our promotions property.
private function set_promotions()
if ( apply_filters( 'ninja_forms_disable_marketing', false ) )
$this->promotions = array();
$this->promotions = Ninja_Forms()->config( 'DashboardPromotions' );
/**************************************************************************
* These funcitons all check to see if the individual add-ons that make up
* our personal membership are active.
****************************************************************************/
private function is_layout_styles_active()
return class_exists( 'NF_Layouts', false );
private function is_conditional_logic_active()
return class_exists( 'NF_ConditionalLogic', false );
private function is_multi_part_active()
return class_exists( 'NF_MultiPart', false );
private function is_file_uploads_active()
return class_exists( 'NF_FU_File_Uploads', false );
* Utilizes the helper methods above to determine if a
* a Membership is active on a site.
private function is_personal_active()
if( $this->is_conditional_logic_active() && $this->is_file_uploads_active() &&
$this->is_layout_styles_active() && $this->is_multi_part_active() ) {
/**************************************************************************
* Promotion Removal Methods
* These funcitons all check for different add-ons/products and remove
* promotions for them if they are in use.
****************************************************************************/
private function maybe_remove_sendwp()
if( phpversion() < '5.6.0' ) {
$this->remove_promotion( 'sendwp' );
} if( $this->is_sendwp_active() ) {
$this->remove_promotion( 'sendwp' );
} elseif( $this->is_ninja_mail_active() ) {
$this->remove_promotion( 'sendwp' );
private function maybe_remove_personal()
if( $this->is_personal_active() ) {
$this->remove_promotion( 'personal' );
/***************************************************************************
****************************************************************************/
* Pass in a promotion type to have it removed from
* the list of active promotions.
private function remove_promotion( $type )
// Loops over promotions and removes unused types of promotions.
foreach( $this->promotions as $promotion ) {
if( $type == $promotion[ 'type' ] ) {
unset( $this->promotions[ $promotion[ 'id' ] ] );
* Sorts our promotions by where they will appear in app.
private function sort_active_promotions_by_locations()
$sorted_locations = array();
foreach( $this->promotions as $promotion ) {
$sorted_locations[ $promotion[ 'location' ] ][] = $promotion;
$this->promotions = $sorted_locations;
private function is_sendwp_active()
if( class_exists( '\SendWP\Mailer', FALSE ) ) {
private function is_ninja_mail_active()
if( class_exists('\NinjaMail\Plugin', FALSE ) ) {