Centzralized functionality to update and publish profile changes

This commit is contained in:
Michael 2021-06-15 11:12:44 +00:00
parent c9ec2e21b3
commit 0ab24510ef
8 changed files with 125 additions and 69 deletions

View file

@ -29,8 +29,10 @@ use Friendica\Core\Hook;
use Friendica\Core\Logger;
use Friendica\Core\Protocol;
use Friendica\Core\Renderer;
use Friendica\Core\Search;
use Friendica\Core\Session;
use Friendica\Core\System;
use Friendica\Core\Worker;
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Protocol\Activity;
@ -84,6 +86,69 @@ class Profile
return DBA::selectToArray('profile', $fields, ['uid' => $uid]);
}
/**
* Update a profile entry and distribute the changes if needed
*
* @param array $fields
* @param integer $uid
* @return boolean
*/
public static function update(array $fields, int $uid): bool
{
$old_owner = User::getOwnerDataById($uid);
if (empty($old_owner)) {
return false;
}
if (!DBA::update('profile', $fields, ['uid' => $uid])) {
return false;
}
$update = Contact::updateSelfFromUserID($uid);
$owner = User::getOwnerDataById($uid);
if (empty($owner)) {
return false;
}
if ($old_owner['name'] != $owner['name']) {
User::update(['username' => $owner['name']], $uid);
}
$profile_fields = ['postal-code', 'dob', 'prv_keywords', 'homepage'];
foreach ($profile_fields as $field) {
if ($old_owner[$field] != $owner[$field]) {
$update = true;
}
}
if ($update) {
self::publishUpdate($uid);
}
return true;
}
/**
* Publish a changed profile
* @param int $uid
*/
public static function publishUpdate(int $uid)
{
$owner = User::getOwnerDataById($uid);
if (empty($owner)) {
return;
}
if ($owner['net-publish']) {
// Update global directory in background
if (Search::getGlobalDirectory()) {
Worker::add(PRIORITY_LOW, 'Directory', $owner['url']);
}
}
Worker::add(PRIORITY_LOW, 'ProfileUpdate', $uid);
}
/**
* Returns a formatted location string from the given profile array
*