From 7e49aa9306340ff901d8df7ba8633898fb01b2e1 Mon Sep 17 00:00:00 2001
From: Seamus Lee <seamuslee001@gmail.com>
Date: Sat, 10 Jul 2021 08:35:45 +1000
Subject: [PATCH] [REF] Update Product Create to use hooks and also switch the
 manage product/premium page to use APIv4 Product Entity

Update to use suggestion from Coleman

Set Product permissions to be the same as contribution entity
---
 CRM/Contribute/BAO/Product.php         | 4 +++-
 CRM/Contribute/Form/ManagePremiums.php | 9 +++++----
 CRM/Core/Permission.php                | 1 +
 3 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/CRM/Contribute/BAO/Product.php b/CRM/Contribute/BAO/Product.php
index 5d0a6ff42dd..f39e4e124fc 100644
--- a/CRM/Contribute/BAO/Product.php
+++ b/CRM/Contribute/BAO/Product.php
@@ -79,6 +79,7 @@ class CRM_Contribute_BAO_Product extends CRM_Contribute_DAO_Product {
    */
   public static function create($params) {
     $id = $params['id'] ?? NULL;
+    $op = !empty($id) ? 'edit' : 'create';
     if (empty($id)) {
       $defaultParams = [
         'id' => $id,
@@ -90,7 +91,7 @@ class CRM_Contribute_BAO_Product extends CRM_Contribute_DAO_Product {
       ];
       $params = array_merge($defaultParams, $params);
     }
-
+    CRM_Utils_Hook::pre($op, 'Product', $id, $params);
     // Modify the submitted values for 'image' and 'thumbnail' so that we use
     // local URLs for these images when possible.
     if (isset($params['image'])) {
@@ -104,6 +105,7 @@ class CRM_Contribute_BAO_Product extends CRM_Contribute_DAO_Product {
     $premium = new CRM_Contribute_DAO_Product();
     $premium->copyValues($params);
     $premium->save();
+    CRM_Utils_Hook::post($op, 'Product', $id, $premium);
     return $premium;
   }
 
diff --git a/CRM/Contribute/Form/ManagePremiums.php b/CRM/Contribute/Form/ManagePremiums.php
index 45904ea49f2..9939eddc4dd 100644
--- a/CRM/Contribute/Form/ManagePremiums.php
+++ b/CRM/Contribute/Form/ManagePremiums.php
@@ -15,6 +15,8 @@
  * @copyright CiviCRM LLC https://civicrm.org/licensing
  */
 
+use Civi\Api4\Product;
+
 /**
  * This class generates form components for Premiums.
  */
@@ -35,8 +37,7 @@ class CRM_Contribute_Form_ManagePremiums extends CRM_Contribute_Form {
   public function setDefaultValues() {
     $defaults = parent::setDefaultValues();
     if ($this->_id) {
-      $params = ['id' => $this->_id];
-      CRM_Contribute_BAO_Product::retrieve($params, $tempDefaults);
+      $tempDefaults = Product::get()->addWhere('id', '=', $this->_id)->execute()->first();
       if (isset($tempDefaults['image']) && isset($tempDefaults['thumbnail'])) {
         $defaults['imageUrl'] = $tempDefaults['image'];
         $defaults['thumbnailUrl'] = $tempDefaults['thumbnail'];
@@ -291,10 +292,10 @@ class CRM_Contribute_Form_ManagePremiums extends CRM_Contribute_Form {
     $this->_processImages($params);
 
     // Save the premium product to database
-    $premium = CRM_Contribute_BAO_Product::create($params);
+    $premium = Product::save()->addRecord($params)->execute()->first();
 
     CRM_Core_Session::setStatus(
-      ts("The Premium '%1' has been saved.", [1 => $premium->name]),
+      ts("The Premium '%1' has been saved.", [1 => $premium['name']]),
       ts('Saved'), 'success');
   }
 
diff --git a/CRM/Core/Permission.php b/CRM/Core/Permission.php
index 6e167ea48ae..5166b65466a 100644
--- a/CRM/Core/Permission.php
+++ b/CRM/Core/Permission.php
@@ -1135,6 +1135,7 @@ class CRM_Core_Permission {
       ],
     ];
     $permissions['line_item'] = $permissions['contribution'];
+    $permissions['product'] = $permissions['contribution'];
 
     $permissions['financial_item'] = $permissions['contribution'];
 
-- 
GitLab