]> git.mxchange.org Git - friendica.git/commitdiff
update for user-contact is added
authorMichael <heluecht@pirati.ca>
Fri, 10 Sep 2021 20:22:24 +0000 (20:22 +0000)
committerMichael <heluecht@pirati.ca>
Fri, 10 Sep 2021 20:22:24 +0000 (20:22 +0000)
src/Model/Contact.php
src/Model/Contact/User.php

index 8c84625931b195450cd5a98845022d2cca248ac4..25c40a1d397c85dd293abb5b8511e0e9112c4349 100644 (file)
@@ -221,7 +221,10 @@ class Contact
        public static function update(array $fields, array $condition, $old_fields = [])
        {
                $ret = DBA::update('contact', $fields, $condition, $old_fields);
-               // @todo Apply changes to the "user-contact" table on dedicated fields
+
+               // Apply changes to the "user-contact" table on dedicated fields
+               Contact\User::UpdateByContactUpdate($fields, $condition);
+
                return $ret;
        }
 
index 0283fae7209c90a03cf37009b69ccd3129bd1eb2..e46af5191f39dfeed5c31dda54334ef4af8ffdb0 100644 (file)
 
 namespace Friendica\Model\Contact;
 
+use Exception;
 use Friendica\Core\Logger;
 use Friendica\Core\System;
 use Friendica\Database\Database;
 use Friendica\Database\DBA;
+use Friendica\Database\DBStructure;
 use Friendica\Model\Contact;
 use Friendica\Model\ItemURI;
+use PDOException;
 
 /**
  * This class provides information about user related contacts based on the "user-contact" table.
@@ -71,6 +74,43 @@ class User
                return $ret;
        }
 
+       /**
+        * Apply changes from contact update data to user-contact table
+        *
+        * @param array $fields 
+        * @param array $condition 
+        * @return void 
+        * @throws PDOException 
+        * @throws Exception 
+        */
+       public static function UpdateByContactUpdate(array $fields, array $condition)
+       {
+               DBA::transaction();
+
+               unset($fields['uid']);
+               unset($fields['cid']);
+               unset($fields['uri-id']);
+
+               if (isset($fields['readonly'])) {
+                       $fields['ignored'] = $fields['readonly'];
+               }
+
+               $update_fields = DBStructure::getFieldsForTable('user-contact', $fields);
+               if (!empty($update_fields)) {
+                       $contacts = DBA::select('contact', ['uri-id', 'uid'], $condition);
+                       while ($row = DBA::fetch($contacts)) {
+                               if (empty($row['uri-id'])) {
+                                       continue;
+                               }
+                               $ret = DBA::update('user-contact', $update_fields, ['uri-id' => $row['uri-id'], 'uid' => $row['uid']]);
+                               Logger::info('Updated user contact', ['uid' => $row['uid'], 'uri-id' => $row['uri-id'], 'ret' => $ret]);
+                       }
+
+                       DBA::close($contacts);
+               }
+               DBA::commit();  
+       }
+
        /**
         * Block contact id for user id
         *