Publisher does not support the Fluid field type. Please do not contact asking when support will be available.

If you purchased an add-on from expressionengine.com, be sure to visit boldminded.com/claim to add the license to your account here on boldminded.com.

Ticket: Exception when sending for approval in function getMemberData

Status Resolved
Add-on / Version Publisher Lite 2.10.2
Severity
EE Version 4.3.6

David Clough

Oct 29, 2018

There it a bug I have notices when trying to submit a draft for approval. When retrieving member data with your utility function an exception is thrown where you attempt to look at a member_data table that has been restructured in recent EE releases. Here is a diff which uses inbuilt EE ORM functions to more reliably achieve the same task.

--- a/system/user/addons/publisher/Service/Member.php
+++ b/system/user/addons/publisher/Service/Member.php
@@ -205,55 +205,22 @@ class Member
      */
     public function getMemberData($memberId)
     {
-        $memberData = array();
-        $cacheKey = 'member_custom_fields';
-        $db = ee('db');
-
-        // Get all CUSTOM member fields
-        if (!$this->requestCache->get($cacheKey))
-        {
-            $prefix = $db->dbprefix;
-            $result = $db->query("SELECT m_field_id AS field_id, m_field_name AS field_name, m_field_label AS field_label FROM {$prefix}member_fields");
-
-            $this->requestCache->set('member_custom_fields', $result);
-        }
-
-        /** @var \CI_DB_result $fields */
-        $fields = $this->requestCache->get($cacheKey);
-        $field_ids = array();
-
-        foreach($fields->result_array() as $row) {
-            // Create our select of which fields to get
-            $field_ids[] = 'md.m_field_id_'. $row['field_id'] .' AS "'. $row['field_name'].'"';
-        }
-
         // Normal case, but not if used in Channel:Form/Zoo Visitor registration
         // and user requires admin verification, they don't have a member_id,
         // so look up the user via email.
         if (is_numeric($memberId)) {
-            $where = array('m.member_id' => $memberId);
+            $member = ee('Model')->get('Member')->filter('member_id', $memberId)->first();
         }
         // If a non-integer value is sent, assume its an email address
         else {
-            $where = array('m.email' => $memberId);
-        }
-
-        /** @var \CI_DB_result $qry */
-        $qry = $db->select(implode(',', $field_ids) .', m.*')
-            ->from('members m')
-            ->join('member_data md', 'md.member_id = m.member_id')
-            ->where($where)
-            ->get();
-
-        if ($qry->num_rows() === 0) {
-            return false;
+            $member = ee('Model')->get('Member')->filter('email', $memberId)->first();
         }
 
-        foreach($qry->row() as $key => $value) {
-            $value = is_array($value) ? implode(', ', $value) : $value;
-            $memberData[$key] = $value;
+        if(empty($member))
+        {
+          return false;
         }
 
-        return (object) $memberData;
+        return $member;
     }
 }
#1

BoldMinded (Brian)

Thanks for spotting this, and bigger thanks for sending the diff. I’ll take a look at getting this included in the next release.

#2

BoldMinded (Brian)

Added this change to the next release. Thanks!

Login to reply