From 7f20f38eea1a6b94fb7869196d0f982e03c191a0 Mon Sep 17 00:00:00 2001 From: jitendrapurohit Date: Wed, 7 Dec 2016 18:32:17 +0530 Subject: [PATCH] CRM-19722: Fatal Error: Unknown column 'contribution_source' in 'order clause' --- CRM/Contribute/Form/Task.php | 15 ++- .../phpunit/CRM/Contribute/Form/TaskTest.php | 94 +++++++++++++++++++ 2 files changed, 104 insertions(+), 5 deletions(-) create mode 100644 tests/phpunit/CRM/Contribute/Form/TaskTest.php diff --git a/CRM/Contribute/Form/Task.php b/CRM/Contribute/Form/Task.php index 9e943e35a5..df277b2854 100644 --- a/CRM/Contribute/Form/Task.php +++ b/CRM/Contribute/Form/Task.php @@ -101,12 +101,12 @@ class CRM_Contribute_Form_Task extends CRM_Core_Form { $values = $form->controller->exportValues($form->get('searchFormName')); - $form->_task = $values['task']; + $form->_task = CRM_Utils_Array::value('task', $values); $contributeTasks = CRM_Contribute_Task::tasks(); - $form->assign('taskName', $contributeTasks[$form->_task]); + $form->assign('taskName', CRM_Utils_Array::value($form->_task, $contributeTasks)); $ids = array(); - if ($values['radio_ts'] == 'ts_sel') { + if (isset($values['radio_ts']) && $values['radio_ts'] == 'ts_sel') { foreach ($values as $name => $value) { if (substr($name, 0, CRM_Core_Form::CB_PREFIX_LEN) == CRM_Core_Form::CB_PREFIX) { $ids[] = substr($name, CRM_Core_Form::CB_PREFIX_LEN); @@ -115,13 +115,17 @@ class CRM_Contribute_Form_Task extends CRM_Core_Form { } else { $queryParams = $form->get('queryParams'); - $sortOrder = NULL; + $returnProperties = array('contribution_id' => 1); + $sortOrder = $sortCol = NULL; if ($form->get(CRM_Utils_Sort::SORT_ORDER)) { $sortOrder = $form->get(CRM_Utils_Sort::SORT_ORDER); + //Include sort column in select clause. + $sortCol = trim(str_replace(array('`', 'asc', 'desc'), '', $sortOrder)); + $returnProperties[$sortCol] = 1; } $form->_includesSoftCredits = CRM_Contribute_BAO_Query::isSoftCreditOptionEnabled($queryParams); - $query = new CRM_Contact_BAO_Query($queryParams, array('contribution_id'), NULL, FALSE, FALSE, + $query = new CRM_Contact_BAO_Query($queryParams, $returnProperties, NULL, FALSE, FALSE, CRM_Contact_BAO_Query::MODE_CONTRIBUTE ); // @todo the function CRM_Contribute_BAO_Query::isSoftCreditOptionEnabled should handle this @@ -158,6 +162,7 @@ class CRM_Contribute_Form_Task extends CRM_Core_Form { } $form->_contributionIds = $form->_componentIds = $ids; + $form->set('contributionIds', $form->_contributionIds); //set the context for redirection for any task actions $session = CRM_Core_Session::singleton(); diff --git a/tests/phpunit/CRM/Contribute/Form/TaskTest.php b/tests/phpunit/CRM/Contribute/Form/TaskTest.php new file mode 100644 index 0000000000..e58121b6c4 --- /dev/null +++ b/tests/phpunit/CRM/Contribute/Form/TaskTest.php @@ -0,0 +1,94 @@ +quickCleanUpFinancialEntities(); + CRM_Utils_Hook::singleton()->reset(); + } + + /** + * CRM-19722 - Check CRM_Contribute_Form_Task::preProcessCommon() + * executes without any error after sorting the search result. + */ + public function testPreProcessCommonAfterSorting() { + $fields = array( + 'source' => 'contribution_source', + 'status' => 'contribution_status', + 'financialTypes' => 'financial_type', + ); + $financialTypes = array('Member Dues', 'Event Fee', 'Donation'); + $status = array('Completed', 'Partially paid', 'Pending'); + $source = array('test source text', 'check source text', 'source text'); + $this->_individualId = $this->individualCreate(); + + for ($i = 0; $i < 3; $i++) { + $contributionParams = array( + 'contact_id' => $this->_individualId, + 'total_amount' => 100, + 'source' => $source[$i], + 'financial_type_id' => $financialTypes[$i], + 'contribution_status_id' => $status[$i], + ); + $contribution = $this->callAPISuccess('Contribution', 'create', $contributionParams); + $contributionIds[] = $contribution['id']; + } + + // Generate expected sorted array. + $expectedValues = array(); + foreach ($fields as $key => $fld) { + $sortedFields = array_combine($$key, $contributionIds); + ksort($sortedFields); + $expectedValues[$fld] = $sortedFields; + } + + // Assert contribIds are returned in a sorted order. + $form = new CRM_Contribute_Form_Task(); + $form->controller = new CRM_Core_Controller(); + foreach ($fields as $val) { + $form->set(CRM_Utils_Sort::SORT_ORDER, "`{$val}` asc"); + CRM_Contribute_Form_Task::preProcessCommon($form); + + $contribIds = array_filter(array_map('intval', $form->get('contributionIds'))); + $expectedValues = array_map('array_values', $expectedValues); + + $this->assertEquals(array_values($contribIds), $expectedValues[$val], "Failed asserting values for {$val}"); + } + } + +} -- 2.25.1