From 59ccc8cd01f6f2d2641634b0da6f5b3cac648156 Mon Sep 17 00:00:00 2001 From: Edsel Date: Fri, 20 Mar 2015 16:38:06 +0530 Subject: [PATCH] CIVI-28 Added check for lineitems edit and delete --- CRM/Contribute/Form/Contribution.php | 8 +------- CRM/Contribute/Form/ContributionView.php | 7 +++++++ CRM/Financial/BAO/FinancialType.php | 16 ++++++++++++++++ .../CRM/Contribute/Form/ContributionView.tpl | 8 ++++---- 4 files changed, 28 insertions(+), 11 deletions(-) diff --git a/CRM/Contribute/Form/Contribution.php b/CRM/Contribute/Form/Contribution.php index 1c8c13c2e4..e489f103cb 100644 --- a/CRM/Contribute/Form/Contribution.php +++ b/CRM/Contribute/Form/Contribution.php @@ -461,13 +461,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP // FIXME: This probably needs to be done in preprocess if ($this->_action & CRM_Core_Action::UPDATE && CRM_Utils_Array::value('financial_type_id', $this->_values)) { $financialTypeID = CRM_Contribute_PseudoConstant::financialType($this->_values['financial_type_id']); - $lineItems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($this->_id); - foreach ($lineItems as $items) { - if (!CRM_Core_Permission::check('edit contributions of type ' . CRM_Contribute_PseudoConstant::financialType($items['financial_type_id']))) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); - break; - } - } + CRM_Financial_BAO_FinancialType::checkPermissionedLineItems($this->_id, 'edit'); if (!CRM_Core_Permission::check('edit contributions of type ' . $financialTypeID)) { CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); } diff --git a/CRM/Contribute/Form/ContributionView.php b/CRM/Contribute/Form/ContributionView.php index 784c475f29..3101f4aab8 100644 --- a/CRM/Contribute/Form/ContributionView.php +++ b/CRM/Contribute/Form/ContributionView.php @@ -49,6 +49,13 @@ class CRM_Contribute_Form_ContributionView extends CRM_Core_Form { CRM_Contribute_BAO_Contribution::getValues($params, $values, $ids); if ($this->_action & CRM_Core_Action::VIEW) { $financialTypeID = CRM_Contribute_PseudoConstant::financialType($values['financial_type_id']); + CRM_Financial_BAO_FinancialType::checkPermissionedLineItems($id, 'view'); + if (CRM_Financial_BAO_FinancialType::checkPermissionedLineItems($id, 'edit', FALSE)) { + $this->assign('canEdit', TRUE); + } + if (CRM_Financial_BAO_FinancialType::checkPermissionedLineItems($id, 'delete', FALSE)) { + $this->assign('canDelete', TRUE); + } if (!CRM_Core_Permission::check('view contributions of type ' . $financialTypeID)) { CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); } diff --git a/CRM/Financial/BAO/FinancialType.php b/CRM/Financial/BAO/FinancialType.php index b650679187..569cdc46d0 100644 --- a/CRM/Financial/BAO/FinancialType.php +++ b/CRM/Financial/BAO/FinancialType.php @@ -225,4 +225,20 @@ class CRM_Financial_BAO_FinancialType extends CRM_Financial_DAO_FinancialType { } $whereClauses[] = ' financial_type_id IN (' . implode(',' , $ids) .')'; } + + public static function checkPermissionedLineItems($id, $op, $force = TRUE) { + $lineItems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($id); + foreach ($lineItems as $items) { + if (!CRM_Core_Permission::check($op . ' contributions of type ' . CRM_Contribute_PseudoConstant::financialType($items['financial_type_id']))) { + if ($force) { + CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + break; + } + return FALSE; + } + else { + return TRUE; + } + } + } } diff --git a/templates/CRM/Contribute/Form/ContributionView.tpl b/templates/CRM/Contribute/Form/ContributionView.tpl index 66f2b38fbe..f8012fb89c 100644 --- a/templates/CRM/Contribute/Form/ContributionView.tpl +++ b/templates/CRM/Contribute/Form/ContributionView.tpl @@ -26,7 +26,7 @@