Fix Activity ACL clause generation
authorcolemanw <coleman@civicrm.org>
Sat, 7 Oct 2023 17:30:12 +0000 (13:30 -0400)
committercolemanw <coleman@civicrm.org>
Sat, 7 Oct 2023 19:08:00 +0000 (15:08 -0400)
Regression was caused by  918e583a146876fb42932a1d959796fd710b7b74 updating DAO::getSelectWhereClause
but not CRM_Contact_BAO_Query::generatePermissionClause. Turns out the code was being duplicated and
the latter could just call the former.

CRM/Contact/BAO/Query.php

index 57039fdb896352f803bed6617867e0d983fd852d..0969bc8bfca313314565bca6ab39a742d4d6ce80 100644 (file)
@@ -5077,27 +5077,12 @@ civicrm_relationship.start_date > {$today}
         }
       }
 
+      // Add ACL permission clause generated by the BAO. This is the same clause used by API::get.
+      // TODO: Why only activities?
       if (isset($this->_tables['civicrm_activity'])) {
-        $bao = new CRM_Activity_BAO_Activity();
-        $clauses = $subclauses = [];
-        foreach ($bao->addSelectWhereClause() as $field => $vals) {
-          if ($vals && $field !== 'id') {
-            foreach ($vals as $val) {
-              $clauses[] = $bao->tableName() . ".$field " . $val;
-            }
-          }
-          elseif ($vals) {
-            $subclauses[] = "$field " . implode(" AND $field ", (array) $vals);
-          }
-        }
-        if ($subclauses) {
-          $clauses[] = $bao->tableName() . '.`id` IN (SELECT `id` FROM `' . $bao->tableName() . '` WHERE ' . implode(' AND ', $subclauses) . ')';
-        }
-        if (!empty($clauses) && $this->_permissionWhereClause) {
-          $this->_permissionWhereClause .= ' AND (' . implode(' AND ', $clauses) . ')';
-        }
-        elseif (!empty($clauses)) {
-          $this->_permissionWhereClause .= '(' . implode(' AND ', $clauses) . ')';
+        $clauses = array_filter(CRM_Activity_BAO_Activity::getSelectWhereClause());
+        if ($clauses) {
+          $this->_permissionWhereClause .= ($this->_permissionWhereClause ? ' AND ' : '') . '(' . implode(' AND ', $clauses) . ')';
         }
       }
     }