public function __construct() {
		$this->codeName = self::CODE_NAME;
		$this->name = $this->_('Commission Groups');
		$this->description = $this->_('Commission groups allow you to set different commissions for different users for the same campaign.<br/><a href="%s" target="_blank">More help in our Knowledge Base</a>',Gpf_Application::getKnowledgeHelpUrl('343724-Commission-groups'));
		$this->version = '1.0.0';
		$this->pluginType = self::PLUGIN_TYPE_FEATURE;
	}
 private function throwException()
 {
     if ($this->message == "") {
         throw new Gpf_DbEngine_Row_ConstraintException($this->columnName, $this->columnName . $this->_(' has not valid Smarty Syntax. More information: ') . Gpf_Application::getKnowledgeHelpUrl('079741-Invalid-Smarty-syntax'));
     }
     throw new Gpf_DbEngine_Row_ConstraintException($this->columnName, $this->message);
 }
    public function __construct() {
        $this->codeName = self::CODE;
        $this->name = $this->_('Performance rewards');
        $this->description = $this->_('Performance rewards is a powerful featuure that allows you to reward your affiliates for their performance.<br/><a href="%s" target="_blank">More help in our Knowledge Base</a>', Gpf_Application::getKnowledgeHelpUrl('466568-Performance-rewards'));
        $this->version = '1.0.0';
        $this->pluginType = self::PLUGIN_TYPE_FEATURE;

        $this->addImplementation('PostAffiliate.Transaction.afterSave', 'Pap_Features_PerformanceRewards_Main', 'checkRules');
    }
    public function __construct() {
        $this->codeName =  'MultipleMerchants';
        $this->name = $this->_('Multiple merchants');
        $this->description = $this->_('Multiple merchants feature allows you to have more merchants (administrators) who can access %s. All admins will be able to see same campaigns! In case you are looking for affiliate network functionality, where each merchant can administer own campaigns, please visit our home page and look for Post Affiliate Network section.<br/><a href="%s" target="_blank">More help in our Knowledge Base</a>', Gpf_Settings::get(Pap_Settings::BRANDING_TEXT_POST_AFFILIATE_PRO), Gpf_Application::getKnowledgeHelpUrl('732104-Multiple-merchants'));
        $this->version = '1.0.0';
        $this->pluginType = self::PLUGIN_TYPE_FEATURE;

        $this->addImplementation('PostAffiliate.merchant.menu', 'Pap_Features_MultipleMerchants_Main', 'addToMenu');
    }
    public function __construct() {
        $this->codeName = 'CompressedCommissionPlacementModel';
        $this->name = $this->_('Compressed commission placement model');
        $this->description = $this->_('This feature applies compressed commission placement model.<br/><a href="%s" target="_blank">More help in our Knowledge Base</a>',Gpf_Application::getKnowledgeHelpUrl('285838-Compressed-commission-placement-model'));
        $this->version = '1.0.0';
        $this->pluginType = self::PLUGIN_TYPE_FEATURE;

        $this->addImplementation('PostAffiliate.merchant.menu', 'Pap_Features_CompressedCommissionPlacementModel_Main', 'addToMenu');
        $this->addImplementation('Core.defineSettings', 'Pap_Features_CompressedCommissionPlacementModel_Main', 'initSettings');
    }
 protected function checkAndSavePayoutInvoice(Gpf_Rpc_Form $form, $templateSource, $settingName) {
 	$template = new Gpf_Templates_Template($templateSource, '', Gpf_Templates_Template::FETCH_TEXT);
     if ($template->isValid()) {
     	Gpf_Settings::set($settingName, $templateSource);
         $form->setInfoMessage($this->getInfoMessage());
         return;
     }
     $form->setErrorMessage($this->_('Invalid Smarty syntax. More information: ') .
     Gpf_Application::getKnowledgeHelpUrl(Pap_Common_Constants::SMARTY_SYNTAX_URL));
 }
    public function __construct() {
        $this->codeName = 'CpmCommission';
        $this->name = $this->_('CPM commissions');
        $this->description = $this->_('CPM (cost per mille) commissions are a special type of commissions that are rewarded for 1000 impressions, which means for displaying your banners 1000 times.<br/><a href="%s" target="_blank">More help in our Knowledge Base</a>', Gpf_Application::getKnowledgeHelpUrl('875056-CPM-commissions'));
        $this->version = '1.0.0';
        $this->pluginType = self::PLUGIN_TYPE_FEATURE;

        $this->addImplementation('Tracker.impression.afterSave', 'Pap_Features_CpmCommission_Main', 'saveCommission', 5);
        $this->addImplementation('PostAffiliate.CampaignForm.insertDefaultCommissionTypes',  'Pap_Features_CpmCommission_Main', 'insertDefaultCommissionType');
    }
 public function __construct() {
     $this->codeName = 'SiteReplication';
     $this->name = $this->_('Site Replication');
     $this->description = $this->_('Site Replication is a special type of banner that replicates pages created by you so they are specific for affiliate. They can contain variables like affiliate refid, name, ... .%s<br/>', '<a href="'.Gpf_Application::getKnowledgeHelpUrl('856887-Site-Replication').'" target="_blank">'.$this->_('More help in our Knowledge Base').'</a>');
     $this->version = '1.0.0';
     $this->pluginType = self::PLUGIN_TYPE_FEATURE;
     
     $this->addImplementation('PostAffiliate.BannerFactory.getBannerObjectFromType', 'Pap_Features_SiteReplication_Config', 'getBanner');
     $this->addImplementation('PostAffiliate.BannerForm.load', 'Pap_Features_SiteReplication_Config', 'load');
 }
 public function __construct() {
     $this->codeName = 'ZipBanner';
     $this->name = $this->_('Zip Banner');
     $this->description = $this->_('Zip banner is a special type of banner that allows you to create zip files with banner images, templates, ... You can use user variables that are raplaced with properiate values. %s<br/>', '<a href="' . Gpf_Application::getKnowledgeHelpUrl('968931-Zip-Banner') . '" target="_blank">' . $this->_('More help in our Knowledge Base') . '</a>');
     $this->version = '1.0.0';
     $this->pluginType = self::PLUGIN_TYPE_FEATURE;
     
     $this->addImplementation('PostAffiliate.BannerFactory.getBannerObjectFromType', 'Pap_Features_ZipBanner_Config', 'getBanner');
     $this->addImplementation('PostAffiliate.BannerForm.load', 'Pap_Features_ZipBanner_Config', 'load');
 }
	public function __construct() {
		$this->codeName =  'AffiliateCampaigns';
		$this->name = $this->_('Affiliate campaigns');
		$this->description = $this->_('Enable variable {$affiliatecampaigns} in email templates. This variable will contain associative array of all user campaigns. <a href="%s" target="_blank">%s</a>', Gpf_Application::getKnowledgeHelpUrl('047476-Affiliate-Campaigns-Plugin'), $this->_('Read more in our Knowledge Base'));
		$this->version = '1.0.0';
		$this->addRequirement('PapCore', '4.2.5.0');

		$this->addImplementation('PostAffiliate.UserMail.initTemplateVariables', 'AffiliateCampaigns_Main', 'initCampaignsVariable');
		$this->addImplementation('PostAffiliate.UserMail.setVariableValues', 'AffiliateCampaigns_Main', 'setCampaignsVariable');
	}
	public function __construct() {
		$this->codeName = 'HoverBanner';
		$this->name = $this->_('Hover Banner');
		$this->description = $this->_('Enables hover (DIV on page) banner').
		'<br><a href="' . Gpf_Application::getKnowledgeHelpUrl('247495-Hover-Banner') . '" target="_blank">'.$this->_('More help in our Knowledge Base').'</a>';
		$this->version = '1.0.0';
		$this->pluginType = self::PLUGIN_TYPE_FEATURE;

		$this->addImplementation('PostAffiliate.BannerFactory.getBannerObjectFromType', 'Pap_Features_HoverBanner_Main', 'getBanner');
	}
    public function __construct() {
        $this->codeName = 'BrandingFree';
        $this->name = $this->_('Branding free');
        $this->description = $this->_('Branding Free is a special feature that allows you to change the links in the footer of panels and signup form from "Powered by %s" to your own text and link.<br/><a href="%s" target="_blank">More help in our Knowledge Base</a>', Gpf_Settings::get(Pap_Settings::BRANDING_TEXT_POST_AFFILIATE_PRO), Gpf_Application::getKnowledgeHelpUrl('522705-Branding-Free'));

        $this->version = '1.0.0';
        $this->pluginType = self::PLUGIN_TYPE_FEATURE;
        
        $this->addImplementation('PostAffiliate.AffiliateGeneralSettingsForm.load', 'Pap_Features_BrandingFree_Config', 'load');
        $this->addImplementation('PostAffiliate.AffiliateGeneralSettingsForm.save', 'Pap_Features_BrandingFree_Config', 'save');
    }
    public function __construct() {
        $this->codeName =  'AutoResponsePlus';
        $this->name = $this->_('Auto response plus');
        $this->description = $this->_('Register your new affiliates automatically to AutoResponsePlus<br/><a href="%s" target="_blank">More help in our Knowledge Base</a>', Gpf_Application::getKnowledgeHelpUrl('798014-Auto-response-plus-plugin-configuration'));
        $this->configurationClassName = 'AutoResponsePlus_Config';
        $this->version = '1.0.1';
        $this->addRequirement('PapCore', '4.1.30.0');

        $this->addImplementation('Core.defineSettings', 'AutoResponsePlus_Main', 'initSettings');
        $this->addImplementation('PostAffiliate.signup.after', 'AutoResponsePlus_Main', 'sendMail');
    }
 public function __construct() {
     $this->codeName = 'CampaignsCategories';
     $this->name = $this->_('Campaigns categories');
     $this->description = $this->_('Campaigns categories allow you to categorize your campaigns to tree-like structure. <br/><a href="%s" target="_blank">More help in our Knowledge Base</a>',Gpf_Application::getKnowledgeHelpUrl('268879-Campaigns-categories'));
     $this->version = '1.0.0';
     $this->pluginType = self::PLUGIN_TYPE_FEATURE;
     
     $this->addImplementation('PostAffiliate.merchant.menu',
                              'Pap_Features_CampaignsCategories_Main', 'addToMenu');
     $this->addImplementation('CampaignGrid.modifyWhere',
                              'Pap_Features_CampaignsCategories_Main', 'addCategoryFilterToMerchantCategoryList');
 }
    public function __construct() {
        $this->codeName = 'BannersCategories';
        $this->name = $this->_('Banners categories');
        $this->description = $this->_('Banners categories allow you to categorize your banners to tree-like structure.') . '<br/><a href="'.Gpf_Application::getKnowledgeHelpUrl('441949-Banners-categories').'" target="_blank">' . $this->_('More help in our Knowledge Base') . '</a>';
        $this->version = '1.0.0';
        $this->pluginType = self::PLUGIN_TYPE_FEATURE;

        $this->addImplementation('PostAffiliate.merchant.menu',
                                 'Pap_Features_BannersCategories_Main', 'addToMenu');
        $this->addImplementation('BannersGrid.modifyWhere',
                                 'Pap_Features_BannersCategories_Main', 'addCategoryFilterToMerchantCategoryList');
    }
    public function __construct() {
        $this->codeName = 'RebrandPdfBanner';
        $this->name = $this->_('RebrandPdf Banner');
        $this->description = $this->_('It alows you to create a special type of promo materials - rebrandable e-books. You can create your PDF e-book only once and upload it to %s.Your affiliates will automatically get their own re-branded copy of the book, with their name, affiliate links, texts, etc. There is no need to run any Windows program for branding, they will simply download rebranded PDF. All the rebranding is made automatically in the background.<br/><a href="%s" target="_blank">%s</a>', Gpf_Settings::get(Pap_Settings::BRANDING_TEXT_POST_AFFILIATE_PRO), Gpf_Application::getKnowledgeHelpUrl('443650-Rebrand-PDF-Banner') ,$this->_('Read more in our Knowledge Base'));
        $this->version = '1.0.0';
        $this->pluginType = self::PLUGIN_TYPE_FEATURE;

        $this->addImplementation('PostAffiliate.BannerFactory.getBannerObjectFromType'
        , 'Pap_Features_RebrandPdfBanner_Config', 'getBanner');
        $this->addImplementation(Pap_Tracking_BannerViewer::EXT_POINT_NAME,
        'Pap_Features_RebrandPdfBanner_Config' , 'processRequest');
    }
 public function __construct() {
     
     $this->codeName = 'MailToFriend';
     $this->name = $this->_('Mail to friend');
     $this->description = $this->_('This feature allows affiliates to send the promo emails directly from their panel to friends. %s', '<a href="'.Gpf_Application::getKnowledgeHelpUrl('049877-Mail-to-friend').'" target="_blank">'.$this->_('More details read in our Knowledge Base').'</a>');
     $this->version = '1.0.0';
     $this->pluginType = self::PLUGIN_TYPE_FEATURE;
     
     $this->addImplementation('PostAffiliate.AffiliateGeneralSettingsForm.loadGeneral','Pap_Features_MailToFriend_Main','loadSetting');
     $this->addImplementation('PostAffiliate.AffiliateGeneralSettingsForm.saveGeneral','Pap_Features_MailToFriend_Main','saveSetting');
     $this->addImplementation('Gpf_Db_Mail.scheduleNow','Pap_Features_MailToFriend_Main','raiseScheduledTime');
     
 }
    public function __construct() {
        $this->codeName = 'PagePeelBanner';
        $this->name = $this->_('Page Peel Banner');
        $this->description = $this->_('Peelbanners are also known as magic corners or pagepeels. They are displayed as a small animated corner of the page and wakes the curiosity of most users. Only if the user moves his mouse onto, it peels impressively over the real homepage.').
        '<br><a href="' . Gpf_Application::getKnowledgeHelpUrl('417086-Page-Peel-Banner') . '" target="_blank">'.$this->_('More help in our Knowledge Base').'</a>';
        $this->version = '1.0.0';
        $this->pluginType = self::PLUGIN_TYPE_FEATURE;

        $this->addImplementation('PostAffiliate.BannerFactory.getBannerObjectFromType',
		 'Pap_Features_PagePeelBanner_Handler', 'getBanner');
        $this->addImplementation(Pap_Tracking_BannerViewer::EXT_POINT_NAME,
        'Pap_Features_PagePeelBanner_Handler' , 'processViewerRequest');
    }
 public function __construct() {
     $this->codeName = 'SignupActionCommissions';
     $this->name = $this->_('Action commission for signup');
     $this->description = $this->_('This plugin helps you to use action commission for signups. You need to have action commission feature activated! Create an action commission in a campaign and remember its code. After activation of this plugin, configure it and set the action commission code. You are also allowed to define campaign ID to apply action from campaign that is not set as default.') .
     ' <a href="' . Gpf_Application::getKnowledgeHelpUrl('312904-Action-commission-for-signup') . '" target="_blank">' . $this->_('Read more in our Knowledge Base') . '</a>';
     $this->version = '1.1.0';
     $this->configurationClassName = 'SignupActionCommissions_Config';
     
     $this->addRequirement('PapCore', '4.1.10.1');
     
     $this->addImplementation('Core.defineSettings', 'SignupActionCommissions_Main', 'initSettings');
     $this->addImplementation('PostAffiliate.signup.after', 'SignupActionCommissions_Main', 'addCommission');
 }
    public function __construct() {
        $this->codeName =  'SaleFraudProtection';
        $this->name = $this->_('Sale Tracking Fraud Protection');
        $this->description = $this->_('Sale will be tracked <b>ONLY</b> if sale fraud protection parameter is correctly set. If you want to setup this plugin correctly, visit our <a href="%s" target="_blank">Knowledgebase</a>.', Gpf_Application::getKnowledgeHelpUrl('564929-Sale-tracking-fraud-protection'));
        $this->version = '1.0.0';               
        $this->addRequirement('PapCore', '4.1.10.1');
        $this->configurationClassName = 'SaleFraudProtection_Config';
        
        $this->addImplementation('Core.defineSettings', 'SaleFraudProtection_Main', 'initSettings');
        $this->addImplementation('Tracker.action.beforeSaveCommissions', 'SaleFraudProtection_Main', 'process');
		$this->addImplementation('PostAffiliate.OfflineSaleForm.load', 'SaleFraudProtection_Main', 'loadCoupon');
		$this->addImplementation('PostAffiliate.OfflineSaleForm.createSale', 'SaleFraudProtection_Main', 'createOfflineSale');
    }
	public function __construct() {
		$this->codeName = 'ForcedMatrix';
		$this->name = $this->_('Forced matrix');
		$this->description = $this->_('Forced matrix allows you to limit to the number of referrals of subaffiliates any affiliate can refer. It means that every affiliate can have only specified number of children. <a href="%s" target="_blank">More details read in our Knowledge Base</a>', Gpf_Application::getKnowledgeHelpUrl('237945-Forced-Matrix'));
		$this->version = '1.0.0';
		$this->pluginType = self::PLUGIN_TYPE_FEATURE;

		$this->addImplementation('PostAffiliate.AffiliateSignupForm.save', 'Pap_Features_ForcedMatrix_Main', 'save');
		$this->addImplementation('PostAffiliate.AffiliateSignupForm.load', 'Pap_Features_ForcedMatrix_Main', 'load');
        $this->addImplementation('PostAffiliate.AffiliateForm.fillAdd', 'Pap_Features_ForcedMatrix_Main', 'computeParentFor');
        $this->addImplementation('PostAffiliate.AffiliateForm.afterSave', 'Pap_Features_ForcedMatrix_Main', 'processFillBonus');        
        $this->addImplementation('PostAffiliate.AffiliateForm.assignParent', 'Pap_Features_ForcedMatrix_Main', 'computeParentForUnrefferedAffiliate');
        $this->addImplementation('PostAffiliate.Features.PerformanceRewards.Action.createActionList', 'Pap_Features_ForcedMatrix_Main', 'addAction');
	}
	public function __construct() {
		$this->codeName =  'MultipleCurrencies';
		$this->name = $this->_('Multiple currencies');
		$this->description = $this->_('Multiple currencies allow you to track sales in multiple currencies.<br/><a href="%s" target="_blank">More help in our Knowledge Base</a>', Gpf_Application::getKnowledgeHelpUrl('552997-Multiple-currencies'));
		$this->version = '1.0.0';
		$this->pluginType = self::PLUGIN_TYPE_FEATURE;
		
		$this->addImplementation('PostAffiliate.CurrencyForm.save', 'Pap_Features_MultipleCurrency_Main', 'currencySave');
		$this->addImplementation('PostAffiliate.CurrencyForm.load', 'Pap_Features_MultipleCurrency_Main', 'currencyLoad');
	    $this->addImplementation('Tracker.action.computeTotalCost', 'Pap_Features_MultipleCurrency_Main', 'computeTotalCost');
	    $this->addImplementation('Tracker.action.computeFixedCost', 'Pap_Features_MultipleCurrency_Main', 'computeFixedCost');
	    $this->addImplementation('Tracker.action.computeCommission', 'Pap_Features_MultipleCurrency_Main', 'computeCommission');
	    
	}
    public function __construct() {
        $this->codeName = 'AffiliateTrackingCode';
        $this->name = $this->_('Affiliate Sale Tracking Codes');
        $this->description = $this->_('This feature allows your affiliate to place their own sale tracking codes on your thank you page. %s<br/>', '<a href="'.Gpf_Application::getKnowledgeHelpUrl('573712-Affiliate-Sale-Tracking-Codes').'" target="_blank">'.$this->_('More help in our Knowledge Base').'</a>');
        $this->version = '1.0.0';
        $this->pluginType = self::PLUGIN_TYPE_FEATURE;

        $this->addImplementation('PostAffiliate.merchant.menu', 'Pap_Features_AffiliateTrackingCode_Main', 'addToMerchantMenu');
        $this->addImplementation('Tracker.action.afterSaveCommissions', 'Pap_Features_AffiliateTrackingCode_Main', 'displayAffiliateTrackingCode');

        $this->addImplementation('PostAffiliate.Affiliates.Campaigns.initViewColumns', 'Pap_Features_AffiliateTrackingCode_Main', 'initAffiliateCampaignsGridViewColumns');
        $this->addImplementation('PostAffiliate.Affiliates.Campaigns.initDefaultView', 'Pap_Features_AffiliateTrackingCode_Main', 'initAffiliateCampaignsGridDefaultView');
        $this->addImplementation('PostAffiliate.AffiliatePrivileges.initDefault', 'Pap_Features_AffiliateTrackingCode_Main', 'initDefaultAffiliatePrivileges');
    }
    public function __construct() {
        $this->codeName = self::CODE;
        $this->name = $this->_('Split Commissions');
        $this->description = $this->_('Split Commissions feature allows you to split commission between all affiliates from which customers get on your site and buy
            your product. You can also set bonus for first and last affiliate so new rewarding system can be compatible with old.').
            '<br><a href="' . Gpf_Application::getKnowledgeHelpUrl('159984-Split-Commissions') . '" target="_blank">'.$this->_('More help in our Knowledge Base').'</a>';
        $this->version = '1.0.0';
        $this->pluginType = self::PLUGIN_TYPE_FEATURE;
        
        $this->addRefuse('LifetimeCommissions');

        $this->addImplementation('Core.defineSettings', 'Pap_Features_SplitCommissions_Config', 'initSettingsEmailNotifications');

        $this->addImplementation('PostAffiliate.EmailNotificationsForm.save',
                                 'Pap_Features_SplitCommissions_Config', 'saveSettingsEmailNotifications');
        $this->addImplementation('PostAffiliate.EmailNotificationsForm.load',
                                 'Pap_Features_SplitCommissions_Config', 'loadSettingsEmailNotifications');
        
        $this->addImplementation('PostAffiliate.CommissionTypeForm.saveSettings',
                                 'Pap_Features_SplitCommissions_SplitCommissionsForm', 'saveSettings');
        $this->addImplementation('PostAffiliate.CommissionTypeForm.loadSettings',
                                 'Pap_Features_SplitCommissions_SplitCommissionsForm', 'loadSettings');

        $this->addImplementation('PostAffiliate.click.beforeSaveVisitorAffiliate',
                                 'Pap_Features_SplitCommissions_SaveVisitorAffiliate', 'saveVisitorAffiliate');

        $this->addImplementation('Tracker.action.afterSaveCommissions',
                                 'Pap_Features_SplitCommissions_SplitCommissions', 'clearData');
        $this->addImplementation('Tracker.action.saveCommissions',
                                 'Pap_Features_SplitCommissions_SplitCommissions', 'saveCommissions');
        $this->addImplementation('Tracker.saveCommissions.beforeSaveTransaction',
                                 'Pap_Features_SplitCommissions_SplitCommissions', 'applySplitCommission', 1);

        $this->addImplementation('PostAffiliate.Pap_Stats_Computer_Transactions.initSelectClause',
                                 'Pap_Features_SplitCommissions_SplitCommissions', 'initSelectClause');
        $this->addImplementation('PostAffiliate.Pap_Stats_Computer_Transactions.initGroupBy',
                                 'Pap_Features_SplitCommissions_SplitCommissions', 'initGroupBy');
        $this->addImplementation('PostAffiliate.Pap_Stats_Computer_Transactions.processResult',
                                 'Pap_Features_SplitCommissions_SplitCommissions', 'processResult');

        $this->addImplementation('Tracker.action.recognizeParametersStarted',
                                 'Pap_Features_SplitCommissions_RecognizeVisitorAffiliate', 'recognize');
        
        $this->addImplementation('Tracker.action.recognizeAfterFraudProtection',
                                 'Pap_Features_SplitCommissions_RecognizeVisitorAffiliate', 'addForcedAffiliateToVisitorAffiliates');

        $this->addImplementation('Pap_Stats_Computer_TransactionsStatsBuilder.buildGroupBy',
                                 'Pap_Features_SplitCommissions_SplitCommissions', 'transactionsStatsBuilderbuildGroupBy');
    }
 public function __construct() {
     $this->codeName = 'PayoutFieldsEncryption';
     $this->name = $this->_('Payout fields encryption');
     $this->description = $this->_('This features encrypts all payout field values that are stored to database. You have to configure password and initialization vector after feature activation. %s<br/>', '<a href="'.Gpf_Application::getKnowledgeHelpUrl('477120-Payout-fields-encryption').'" target="_blank">'.$this->_('More help in our Knowledge Base').'</a>');
     $this->version = '1.0.0';
     $this->configurationClassName = 'Pap_Features_PayoutFieldsEncryption_Config';
     $this->pluginType = self::PLUGIN_TYPE_FEATURE;
     
     $this->addRequirement('PapCore', '4.1.12.0');
     
     $this->addImplementation('Core.defineSettings', 'Pap_Features_PayoutFieldsEncryption_Main', 'initSettings');
     
     $this->addImplementation('PostAffiliate.PayoutOption.getValue', 'Pap_Features_PayoutFieldsEncryption_Main', 'decodeValue');
     $this->addImplementation('PostAffiliate.PayoutOption.setValue', 'Pap_Features_PayoutFieldsEncryption_Main', 'encodeValue');
 }
    public function __construct() {
        $this->codeName = 'Coupon';
        $this->name = $this->_('Coupons and Offline Sales');
        $this->description = $this->_('Coupons feature allows you to use coupons and offline sales form for offline marketing. %s', '<a href="'.Gpf_Application::getKnowledgeHelpUrl('299578-Coupons').'" target="_blank">'.$this->_('More help in our Knowledge Base').'</a>');
        $this->version = '1.0.0';
        $this->pluginType = self::PLUGIN_TYPE_FEATURE;

        $this->addImplementation('PostAffiliate.BannerFactory.getBannerObjectFromType', 'Pap_Features_Coupon_Main', 'getBanner');
        $this->addImplementation('PostAffiliate.merchant.menu', 'Pap_Features_Coupon_Main', 'addToMenu');
        $this->addImplementation('Tracker.action.recognizeParametersStarted', 'Pap_Features_Coupon_Main', 'recognizeParameters');
        $this->addImplementation('PostAffiliate.Banner.replaceBannerConstants', 'Pap_Features_Coupon_Constants', 'replaceCouponConstants');
        $this->addImplementation('PostAffiliate.RebrandPdfBanner_Variables.getAll', 'Pap_Features_Coupon_Constants', 'getCouponConstants');
        $this->addImplementation('PostAffiliate.RebrandPdfBanner_Variables.getValue', 'Pap_Features_Coupon_Constants', 'getCouponValue');
        $this->addImplementation('Tracker.action.afterSaveCommissions', 'Pap_Features_Coupon_Main', 'increaseUseCount');
    }
    public function __construct() {
        $this->codeName = 'ActionCommission';
        $this->name = $this->_('Action commissions');
        $this->description = $this->_('Action Commissions feature allows you to define per action, or per "anything" commissions.<br/>This way you can define commissions for example per user registration, per download, per visiting specific page, etc.<br/><a href="%s" target="_blank">More help in our Knowledge Base</a>', Gpf_Application::getKnowledgeHelpUrl('131732-Action-Commissions'));
        $this->version = '1.0.0';
        $this->pluginType = self::PLUGIN_TYPE_FEATURE;

        $this->addImplementation('PostAffiliate.Stats.initTransactionTypes', 'Pap_Features_ActionCommission_Main', 'initTransactionTypes');
        $this->addImplementation('PostAffiliate.StatisticsBase.initDataTypes', 'Pap_Features_ActionCommission_Main', 'initDataTypes');
        $this->addImplementation('PostAffiliate.Pap_Common_StatsGrid.initStatsColumns', 'Pap_Features_ActionCommission_Main', 'initStatsColumns');
        $this->addImplementation('PostAffiliate.Pap_Common_StatsGrid.buildStatsFrom', 'Pap_Features_ActionCommission_Main', 'buildStatsFrom');
        $this->addImplementation('PostAffiliate.Pap_Common_StatsGrid.addAllActionsViewColumns', 'Pap_Features_ActionCommission_Main', 'addAllActionsViewColumns');
        $this->addImplementation('PostAffiliate.CommissionTypeForm.saveSettings', 'Pap_Features_ActionCommission_CommissionsForm', 'save');
        $this->addImplementation('PostAffiliate.Pap_Common_Reports_TransactionsGridBase.getCustomFilterFields', 'Pap_Features_ActionCommission_Main', 'getCustomFilterFields');
        $this->addImplementation('PostAffiliate.Pap_Common_Reports_TransactionsGridBase.addFilter', 'Pap_Features_ActionCommission_Main', 'addFilter');
    }
    public function __construct() {
        $this->codeName = 'BannerRotator';
        $this->name = $this->_('Banner Rotator');
        $this->description = $this->_('Banner rotator is a special type of banner that rotates other banners.<br/>When affiliate inserts rotator to his page, the rotator displays banners that are assigned to the rotator, so the visitor will see another banner every time he visits the affiliates page.<br/><a href="%s" target="_blank">More help in our Knowledge Base</a>', Gpf_Application::getKnowledgeHelpUrl('583949-Banner-rotator'));
        $this->version = '1.0.0';
        $this->pluginType = self::PLUGIN_TYPE_FEATURE;
        
        $this->addImplementation('PostAffiliate.BannerFactory.getBannerObjectFromType', 'Pap_Features_BannerRotator_Config', 'getBanner');
        
        $this->addImplementation('Tracker.impression.afterSave', 'Pap_Features_BannerRotator_Tracking', 'saveRotatorImpression');

        $this->addImplementation('Tracker.click.beforeSaveClick', 'Pap_Features_BannerRotator_Tracking', 'saveRotatorClick');
        
        $this->addImplementation('PostAffiliate.Pap_Db_Table_ClicksImpressions.getStatsSelect', 'Pap_Features_BannerRotator_Main', 'getStatsSelect');

        $this->addImplementation('Tracker.ImpressionProcessor.getAllImpressions', 'Pap_Features_BannerRotator_Tracking', 'getAllImpressionsForProcessing');
    }
 public function __construct() {
     
     $this->codeName = 'ReCaptcha';
     $this->name = $this->_('ReCaptcha');
     $this->description = $this->_('ReCaptcha lets you embed a CAPTCHA in your signup in order to protect it against spam and other types of automated abuse.').
         '<br><a href="' . Gpf_Application::getKnowledgeHelpUrl('396134-ReCaptcha') . '" target="_blank">'.$this->_('More help in our Knowledge Base').'</a>';
     $this->version = '1.0.0';
     $this->pluginType = self::PLUGIN_TYPE_FEATURE;
     
     $this->addImplementation('Pap_Signup_AffiliateForm.checkBeforeSaveNotApi', 'Pap_Features_ReCaptcha_Main','validateCaptcha');
     $this->addImplementation('Pap_Features_AffiliateNetwork_Signup_AccountSignupForm.checkBeforeSaveNotApi', 'Pap_Features_ReCaptcha_Main','validateCaptchaAccount');
     $this->addImplementation('PostAffiliate.AffiliateSignupForm.save', 'Pap_Features_ReCaptcha_Main', 'saveSettings');
     $this->addImplementation('PostAffiliate.AffiliateSignupForm.load', 'Pap_Features_ReCaptcha_Main', 'loadSettings');
     $this->addImplementation('Core.initJsResources', 'Pap_Features_ReCaptcha_Main', 'initJsResource');
     $this->addImplementation('PostAffiliate.ApplicationSettings.loadSetting', 'Pap_Features_ReCaptcha_Main', 'addApplicationSettings');
     $this->addImplementation('PostAffiliate.AccountSignupSettingsForm.save', 'Pap_Features_ReCaptcha_Main', 'saveAccountSettings');
     $this->addImplementation('PostAffiliate.AccountSignupSettingsForm.load', 'Pap_Features_ReCaptcha_Main', 'loadAccountSettings');
 }
    public function __construct() {
        $this->codeName =  'TopLevelAffiliateFixedCommision';
        $this->name = $this->_('Top Level Affiliate Fixed Commision');
        $this->description = $this->_('Top level affiliate takes fixed percent of commission in each sale. It is not recommended to use this plugin with activated Top Level Affiliate Commision! '.
        'If you want to setup this plugin correctly, visit our <a href="%s" target="_blank">Knowledgebase</a>.', Gpf_Application::getKnowledgeHelpUrl('239312-Top-Level-Affiliate-Fixed-Commission'));
        $this->version = '1.0.0';
        $this->configurationClassName = 'TopLevelAffiliateFixedCommision_PluginConfig';

        $this->addRequirement('PapCore', '4.2.0.14');

        $this->addImplementation('Tracker.saveAllCommissions', 'TopLevelAffiliateFixedCommision_Main', 'modifyCommission');
        $this->addImplementation('Core.defineSettings', 'TopLevelAffiliateFixedCommision_Main', 'initSettings');
        
        $this->addImplementation('PostAffiliate.CommissionTypeEditAdditionalForm.initFields', 
        	'TopLevelAffiliateFixedCommision_Config', 'initFieldsInForm');
        $this->addImplementation('PostAffiliate.CommissionTypeEditAdditionalForm.save',
            'TopLevelAffiliateFixedCommision_Config', 'save');
        $this->addImplementation('PostAffiliate.CommissionTypeEditAdditionalForm.load',
            'TopLevelAffiliateFixedCommision_Config', 'load');        
    }