From 484627ca589871f7597d0ac570ec1b0bccfffe79 Mon Sep 17 00:00:00 2001 From: Seamus Lee Date: Sat, 22 Jun 2019 17:11:32 +1000 Subject: [PATCH] dev/core#1067 Clean Money before creating Campaign record and add test --- CRM/Campaign/Form/Campaign.php | 52 ++++++++------- .../CRM/Campaign/Form/CampaignTest.php | 63 +++++++++++++++++++ 2 files changed, 91 insertions(+), 24 deletions(-) create mode 100644 tests/phpunit/CRM/Campaign/Form/CampaignTest.php diff --git a/CRM/Campaign/Form/Campaign.php b/CRM/Campaign/Form/Campaign.php index 06a3c6130b..813d340055 100644 --- a/CRM/Campaign/Form/Campaign.php +++ b/CRM/Campaign/Form/Campaign.php @@ -81,7 +81,7 @@ class CRM_Campaign_Form_Campaign extends CRM_Core_Form { $this->assign('context', $this->_context); $this->_action = CRM_Utils_Request::retrieve('action', 'String', $this); - $this->_campaignId = CRM_Utils_Request::retrieve('id', 'Positive', $this); + $this->_campaignId = CRM_Utils_Request::retrieve('id', 'Positive'); $title = NULL; if ($this->_action & CRM_Core_Action::UPDATE) { @@ -186,6 +186,7 @@ class CRM_Campaign_Form_Campaign extends CRM_Core_Form { //lets assign custom data type and subtype. $this->assign('customDataType', 'Campaign'); $this->assign('entityID', $this->_campaignId); + $this->assign('id', $this->_campaignId); $this->assign('customDataSubType', CRM_Utils_Array::value('campaign_type_id', $this->_values)); $attributes = CRM_Core_DAO::getAttribute('CRM_Campaign_DAO_Campaign'); @@ -288,10 +289,9 @@ class CRM_Campaign_Form_Campaign extends CRM_Core_Form { */ public function postProcess() { // store the submitted values in an array - $params = $this->controller->exportValues($this->_name); - $session = CRM_Core_Session::singleton(); - $groups = []; + $session = CRM_Core_Session::singleton(); + $params = $this->controller->exportValues($this->_name); if (isset($this->_campaignId)) { if ($this->_action & CRM_Core_Action::DELETE) { CRM_Campaign_BAO_Campaign::del($this->_campaignId); @@ -309,7 +309,25 @@ class CRM_Campaign_Form_Campaign extends CRM_Core_Form { $params['is_active'] = CRM_Utils_Array::value('is_active', $params, FALSE); $params['last_modified_id'] = $session->get('userID'); $params['last_modified_date'] = date('YmdHis'); + $result = self::submit($params, $this); + if (!$result['is_error']) { + CRM_Core_Session::setStatus(ts('Campaign %1 has been saved.', [1 => $result['values'][$result['id']]['title']]), ts('Saved'), 'success'); + $session->pushUserContext(CRM_Utils_System::url('civicrm/campaign', 'reset=1&subPage=campaign')); + $this->ajaxResponse['id'] = $result['id']; + $this->ajaxResponse['label'] = $result['values'][$result['id']]['title']; + } + $buttonName = $this->controller->getButtonName(); + if ($buttonName == $this->getButtonName('upload', 'new')) { + CRM_Core_Session::setStatus(ts(' You can add another Campaign.'), '', 'info'); + $session->replaceUserContext(CRM_Utils_System::url('civicrm/campaign/add', 'reset=1&action=add')); + } + else { + $session->replaceUserContext(CRM_Utils_System::url('civicrm/campaign', 'reset=1&subPage=campaign')); + } + } + public static function submit($params = [], $form) { + $groups = []; if (is_array($params['includeGroups'])) { foreach ($params['includeGroups'] as $key => $id) { if ($id) { @@ -322,7 +340,7 @@ class CRM_Campaign_Form_Campaign extends CRM_Core_Form { // delete previous includes/excludes, if campaign already existed $groupTableName = CRM_Contact_BAO_Group::getTableName(); $dao = new CRM_Campaign_DAO_CampaignGroup(); - $dao->campaign_id = $this->_campaignId; + $dao->campaign_id = $form->_campaignId; $dao->entity_table = $groupTableName; $dao->find(); while ($dao->fetch()) { @@ -334,27 +352,13 @@ class CRM_Campaign_Form_Campaign extends CRM_Core_Form { CRM_Utils_Array::value('campaign_type_id', $params) ); $params['custom'] = CRM_Core_BAO_CustomField::postProcess($params, - $this->_campaignId, + $form->_campaignId, 'Campaign' ); - - $result = CRM_Campaign_BAO_Campaign::create($params); - - if ($result) { - CRM_Core_Session::setStatus(ts('Campaign %1 has been saved.', [1 => $result->title]), ts('Saved'), 'success'); - $session->pushUserContext(CRM_Utils_System::url('civicrm/campaign', 'reset=1&subPage=campaign')); - $this->ajaxResponse['id'] = $result->id; - $this->ajaxResponse['label'] = $result->title; - } - - $buttonName = $this->controller->getButtonName(); - if ($buttonName == $this->getButtonName('upload', 'new')) { - CRM_Core_Session::setStatus(ts(' You can add another Campaign.'), '', 'info'); - $session->replaceUserContext(CRM_Utils_System::url('civicrm/campaign/add', 'reset=1&action=add')); - } - else { - $session->replaceUserContext(CRM_Utils_System::url('civicrm/campaign', 'reset=1&subPage=campaign')); - } + // dev/core#1067 Clean Money before passing onto BAO to do the create. + $params['goal_revenue'] = CRM_Utils_Rule::cleanMoney($params['goal_revenue']); + $result = civicrm_api3('Campaign', 'create', $params); + return $result; } } diff --git a/tests/phpunit/CRM/Campaign/Form/CampaignTest.php b/tests/phpunit/CRM/Campaign/Form/CampaignTest.php new file mode 100644 index 0000000000..0750a5038c --- /dev/null +++ b/tests/phpunit/CRM/Campaign/Form/CampaignTest.php @@ -0,0 +1,63 @@ +setCurrencySeparators($thousandSeparator); + $this->createLoggedInUser(); + $form = new CRM_Campaign_Form_Campaign(); + $form->_action = CRM_Core_Action::ADD; + $result = CRM_Campaign_Form_Campaign::Submit([ + 'goal_revenue' => '$10' . $thousandSeparator . '000', + 'is_active' => 1, + 'title' => 'Test Campaign', + 'start_date' => date('Y-m-d'), + 'includeGroups' => [], + 'custom' => [], + 'campaign_type_id' => 1, + ], $form); + var_dump($form); + $campaign = $this->callAPISuccess('campaign', 'get', ['id' => $result['id']]); + $this->assertEquals('10000', $campaign['values'][$campaign['id']]['goal_revenue']); + } + +} -- 2.25.1