public function processRequest($request)
 {
     $db = new WPAM_Data_DataAccess();
     $affiliateFields = $db->getAffiliateFieldRepository()->loadMultipleBy(array('enabled' => true), array('order' => 'asc'));
     if (isset($request['action']) && $request['action'] == 'saveInfo') {
         $validator = new WPAM_Validation_Validator();
         $validator->addValidator('ddBountyType', new WPAM_Validation_SetValidator(array('fixed', 'percent')));
         if ($request['ddBountyType'] === 'fixed') {
             $validator->addValidator('txtBountyAmount', new WPAM_Validation_MoneyValidator());
         } else {
             if ($request['ddBountyType'] === 'percent') {
                 $validator->addValidator('txtBountyAmount', new WPAM_Validation_NumberValidator());
             }
         }
         $affiliateHelper = new WPAM_Util_AffiliateFormHelper();
         $vr = $affiliateHelper->validateForm($validator, $request, $affiliateFields);
         if ($vr->getIsValid()) {
             $model = $affiliateHelper->getNewAffiliate();
             $affiliateHelper->setModelFromForm($model, $affiliateFields, $request);
             $affiliateHelper->setPaymentFromForm($model, $request);
             //send email etc.
             $userHandler = new WPAM_Util_UserHandler();
             if (get_option(WPAM_PluginConfig::$AutoAffiliateApproveIsEnabledOption) == 1) {
                 $userHandler->AutoapproveAffiliate($model, $request['ddBountyType'], $request['txtBountyAmount']);
             } else {
                 $userHandler->approveAffiliate($model, $request['ddBountyType'], $request['txtBountyAmount'], false);
             }
             return new WPAM_Pages_TemplateResponse('admin/affiliate_new_success');
         } else {
             return $this->getForm($affiliateFields, $request, $vr);
         }
     }
     return $this->getForm($affiliateFields, $request);
 }
 public function approveApplication($affiliateId, $bountyType, $bountyAmount)
 {
     if (!wp_get_current_user()->has_cap(WPAM_PluginConfig::$AdminCap)) {
         throw new Exception(__('Access denied.', 'affiliates-manager'));
     }
     if (!is_numeric($bountyAmount)) {
         throw new Exception(__('Invalid bounty amount.', 'affiliates-manager'));
     }
     if (!in_array($bountyType, array("fixed", "percent"))) {
         throw new Exception(__('Invalid bounty type.', 'affiliates-manager'));
     }
     $affiliateId = (int) $affiliateId;
     $db = new WPAM_Data_DataAccess();
     $affiliate = $db->getAffiliateRepository()->load($affiliateId);
     if ($affiliate === null) {
         throw new Exception(__('Invalid affiliate', 'affiliates-manager'));
     }
     if ($affiliate->isPending()) {
         $userHandler = new WPAM_Util_UserHandler();
         $userHandler->approveAffiliate($affiliate, $bountyType, $bountyAmount);
         return new JsonResponse(JsonResponse::STATUS_OK);
     } else {
         throw new Exception(__('Invalid state transition.', 'affiliates-manager'));
     }
 }