Merge remote-tracking branch 'upstream/2020.09-rc' into api-count
This commit is contained in:
@@ -669,10 +669,18 @@ class DBA
|
||||
*/
|
||||
public static function mergeConditions(array ...$conditions)
|
||||
{
|
||||
if (count($conditions) == 1) {
|
||||
return current($conditions);
|
||||
}
|
||||
|
||||
$conditionStrings = [];
|
||||
$result = [];
|
||||
|
||||
foreach ($conditions as $key => $condition) {
|
||||
if (!$condition) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$condition = self::collapseCondition($condition);
|
||||
|
||||
$conditionStrings[] = array_shift($condition);
|
||||
|
||||
@@ -320,13 +320,18 @@ class APContact
|
||||
|
||||
$apcontact['updated'] = DateTimeFormat::utcNow();
|
||||
|
||||
DBA::update('apcontact', $apcontact, ['url' => $url], true);
|
||||
|
||||
// We delete the old entry when the URL is changed
|
||||
if (($url != $apcontact['url']) && DBA::exists('apcontact', ['url' => $url]) && DBA::exists('apcontact', ['url' => $apcontact['url']])) {
|
||||
if ($url != $apcontact['url']) {
|
||||
Logger::info('Delete changed profile url', ['old' => $url, 'new' => $apcontact['url']]);
|
||||
DBA::delete('apcontact', ['url' => $url]);
|
||||
}
|
||||
|
||||
if (DBA::exists('apcontact', ['url' => $apcontact['url']])) {
|
||||
DBA::update('apcontact', $apcontact, ['url' => $apcontact['url']]);
|
||||
} else {
|
||||
DBA::replace('apcontact', $apcontact);
|
||||
}
|
||||
|
||||
Logger::info('Updated profile', ['url' => $url]);
|
||||
|
||||
return $apcontact;
|
||||
|
||||
@@ -201,19 +201,7 @@ class Item
|
||||
return [];
|
||||
}
|
||||
|
||||
if (empty($condition) || !is_array($condition)) {
|
||||
$condition = ['iid' => $pinned];
|
||||
} else {
|
||||
reset($condition);
|
||||
$first_key = key($condition);
|
||||
if (!is_int($first_key)) {
|
||||
$condition['iid'] = $pinned;
|
||||
} else {
|
||||
$values_string = substr(str_repeat("?, ", count($pinned)), 0, -2);
|
||||
$condition[0] = '(' . $condition[0] . ") AND `iid` IN (" . $values_string . ")";
|
||||
$condition = array_merge($condition, $pinned);
|
||||
}
|
||||
}
|
||||
$condition = DBA::mergeConditions(['iid' => $pinned], $condition);
|
||||
|
||||
return self::selectThreadForUser($uid, $selected, $condition, $params);
|
||||
}
|
||||
|
||||
@@ -51,8 +51,8 @@ class UserItem
|
||||
*/
|
||||
public static function setNotification(int $iid)
|
||||
{
|
||||
$fields = ['id', 'uri-id', 'uid', 'body', 'parent', 'gravity', 'tag',
|
||||
'contact-id', 'thr-parent', 'parent-uri', 'author-id', 'verb'];
|
||||
$fields = ['id', 'uri-id', 'parent-uri-id', 'uid', 'body', 'parent', 'gravity', 'tag',
|
||||
'private', 'contact-id', 'thr-parent', 'parent-uri', 'author-id', 'verb'];
|
||||
$item = Item::selectFirst($fields, ['id' => $iid, 'origin' => false]);
|
||||
if (!DBA::isResult($item)) {
|
||||
return;
|
||||
@@ -63,14 +63,26 @@ class UserItem
|
||||
return;
|
||||
}
|
||||
|
||||
// fetch all users in the thread
|
||||
if ($item['uid'] == 0) {
|
||||
$uids = [];
|
||||
} else {
|
||||
// Always include the item user
|
||||
$uids = [$item['uid']];
|
||||
}
|
||||
|
||||
// Add every user who participated so far in this thread
|
||||
// This can only happen with participations on global items. (means: uid = 0)
|
||||
$users = DBA::p("SELECT DISTINCT(`contact`.`uid`) FROM `item`
|
||||
INNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id` AND `contact`.`uid` != 0
|
||||
WHERE `parent` IN (SELECT `parent` FROM `item` WHERE `id`=?)", $iid);
|
||||
while ($user = DBA::fetch($users)) {
|
||||
self::setNotificationForUser($item, $user['uid']);
|
||||
$uids[] = $user['uid'];
|
||||
}
|
||||
DBA::close($users);
|
||||
|
||||
foreach (array_unique($uids) as $uid) {
|
||||
self::setNotificationForUser($item, $uid);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -44,7 +44,7 @@ class Contact extends BaseAdmin
|
||||
$contact_id = Model\Contact::getIdForURL($contact_url);
|
||||
if ($contact_id) {
|
||||
Model\Contact::block($contact_id, $block_reason);
|
||||
notice(DI::l10n()->t('The contact has been blocked from the node'));
|
||||
info(DI::l10n()->t('The contact has been blocked from the node'));
|
||||
} else {
|
||||
notice(DI::l10n()->t('Could not find any contact entry for this URL (%s)', $contact_url));
|
||||
}
|
||||
@@ -54,7 +54,7 @@ class Contact extends BaseAdmin
|
||||
foreach ($contacts as $uid) {
|
||||
Model\Contact::unblock($uid);
|
||||
}
|
||||
notice(DI::l10n()->tt('%s contact unblocked', '%s contacts unblocked', count($contacts)));
|
||||
info(DI::l10n()->tt('%s contact unblocked', '%s contacts unblocked', count($contacts)));
|
||||
}
|
||||
|
||||
DI::baseUrl()->redirect('admin/blocklist/contact');
|
||||
|
||||
@@ -58,14 +58,14 @@ class Users extends BaseAdmin
|
||||
foreach ($users as $uid) {
|
||||
User::block($uid);
|
||||
}
|
||||
notice(DI::l10n()->tt('%s user blocked', '%s users blocked', count($users)));
|
||||
info(DI::l10n()->tt('%s user blocked', '%s users blocked', count($users)));
|
||||
}
|
||||
|
||||
if (!empty($_POST['page_users_unblock'])) {
|
||||
foreach ($users as $uid) {
|
||||
User::block($uid, false);
|
||||
}
|
||||
notice(DI::l10n()->tt('%s user unblocked', '%s users unblocked', count($users)));
|
||||
info(DI::l10n()->tt('%s user unblocked', '%s users unblocked', count($users)));
|
||||
}
|
||||
|
||||
if (!empty($_POST['page_users_delete'])) {
|
||||
@@ -77,21 +77,21 @@ class Users extends BaseAdmin
|
||||
}
|
||||
}
|
||||
|
||||
notice(DI::l10n()->tt('%s user deleted', '%s users deleted', count($users)));
|
||||
info(DI::l10n()->tt('%s user deleted', '%s users deleted', count($users)));
|
||||
}
|
||||
|
||||
if (!empty($_POST['page_users_approve'])) {
|
||||
foreach ($pending as $hash) {
|
||||
User::allow($hash);
|
||||
}
|
||||
notice(DI::l10n()->tt('%s user approved', '%s users approved', count($pending)));
|
||||
info(DI::l10n()->tt('%s user approved', '%s users approved', count($pending)));
|
||||
}
|
||||
|
||||
if (!empty($_POST['page_users_deny'])) {
|
||||
foreach ($pending as $hash) {
|
||||
User::deny($hash);
|
||||
}
|
||||
notice(DI::l10n()->tt('%s registration revoked', '%s registrations revoked', count($pending)));
|
||||
info(DI::l10n()->tt('%s registration revoked', '%s registrations revoked', count($pending)));
|
||||
}
|
||||
|
||||
DI::baseUrl()->redirect('admin/users');
|
||||
|
||||
@@ -131,7 +131,7 @@ class Group extends BaseModule
|
||||
throw new \Exception(DI::l10n()->t('Bad request.'), 400);
|
||||
}
|
||||
|
||||
notice($message);
|
||||
info($message);
|
||||
System::jsonExit(['status' => 'OK', 'message' => $message]);
|
||||
} catch (\Exception $e) {
|
||||
notice($e->getMessage());
|
||||
|
||||
@@ -119,7 +119,7 @@ class Invite extends BaseModule
|
||||
}
|
||||
|
||||
}
|
||||
notice(DI::l10n()->tt('%d message sent.', '%d messages sent.', $total));
|
||||
info(DI::l10n()->tt('%d message sent.', '%d messages sent.', $total));
|
||||
}
|
||||
|
||||
public static function content(array $parameters = [])
|
||||
|
||||
@@ -232,7 +232,18 @@ class Status extends BaseProfile
|
||||
$items = DBA::toArray($items_stmt);
|
||||
|
||||
if ($pager->getStart() == 0 && !empty($a->profile['uid'])) {
|
||||
$pinned_items = Item::selectPinned($a->profile['uid'], ['uri', 'pinned']);
|
||||
$condition = ['private' => [Item::PUBLIC, Item::UNLISTED]];
|
||||
if (remote_user()) {
|
||||
$permissionSets = DI::permissionSet()->selectByContactId(remote_user(), $a->profile['uid']);
|
||||
if (!empty($permissionSets)) {
|
||||
$condition = ['psid' => array_merge($permissionSets->column('id'),
|
||||
[DI::permissionSet()->getIdFromACL($a->profile['uid'], '', '', '', '')])];
|
||||
}
|
||||
} elseif ($a->profile['uid'] == local_user()) {
|
||||
$condition = [];
|
||||
}
|
||||
|
||||
$pinned_items = Item::selectPinned($a->profile['uid'], ['uri', 'pinned'], $condition);
|
||||
$pinned = Item::inArray($pinned_items);
|
||||
$items = array_merge($items, $pinned);
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ class Recovery extends BaseModule
|
||||
if (RecoveryCode::existsForUser(local_user(), $recovery_code)) {
|
||||
RecoveryCode::markUsedForUser(local_user(), $recovery_code);
|
||||
Session::set('2fa', true);
|
||||
notice(DI::l10n()->t('Remaining recovery codes: %d', RecoveryCode::countValidForUser(local_user())));
|
||||
info(DI::l10n()->t('Remaining recovery codes: %d', RecoveryCode::countValidForUser(local_user())));
|
||||
|
||||
DI::auth()->setForUser($a, $a->user, true, true);
|
||||
} else {
|
||||
|
||||
@@ -187,7 +187,7 @@ class Crop extends BaseSettings
|
||||
Worker::add(PRIORITY_LOW, 'Directory', Session::get('my_url'));
|
||||
}
|
||||
|
||||
notice(DI::l10n()->t('Profile picture successfully updated.'));
|
||||
info(DI::l10n()->t('Profile picture successfully updated.'));
|
||||
|
||||
DI::baseUrl()->redirect('profile/' . DI::app()->user['nickname']);
|
||||
}
|
||||
|
||||
@@ -74,13 +74,13 @@ class AppSpecific extends BaseSettings
|
||||
DI::baseUrl()->redirect('settings/2fa/app_specific?t=' . self::getFormSecurityToken('settings_2fa_password'));
|
||||
} else {
|
||||
self::$appSpecificPassword = AppSpecificPassword::generateForUser(local_user(), $_POST['description'] ?? '');
|
||||
notice(DI::l10n()->t('New app-specific password generated.'));
|
||||
info(DI::l10n()->t('New app-specific password generated.'));
|
||||
}
|
||||
|
||||
break;
|
||||
case 'revoke_all' :
|
||||
AppSpecificPassword::deleteAllForUser(local_user());
|
||||
notice(DI::l10n()->t('App-specific passwords successfully revoked.'));
|
||||
info(DI::l10n()->t('App-specific passwords successfully revoked.'));
|
||||
DI::baseUrl()->redirect('settings/2fa/app_specific?t=' . self::getFormSecurityToken('settings_2fa_password'));
|
||||
break;
|
||||
}
|
||||
@@ -90,7 +90,7 @@ class AppSpecific extends BaseSettings
|
||||
self::checkFormSecurityTokenRedirectOnError('settings/2fa/app_specific', 'settings_2fa_app_specific');
|
||||
|
||||
if (AppSpecificPassword::deleteForUser(local_user(), $_POST['revoke_id'])) {
|
||||
notice(DI::l10n()->t('App-specific password successfully revoked.'));
|
||||
info(DI::l10n()->t('App-specific password successfully revoked.'));
|
||||
}
|
||||
|
||||
DI::baseUrl()->redirect('settings/2fa/app_specific?t=' . self::getFormSecurityToken('settings_2fa_password'));
|
||||
|
||||
@@ -64,7 +64,7 @@ class Index extends BaseSettings
|
||||
DI::pConfig()->delete(local_user(), '2fa', 'verified');
|
||||
Session::remove('2fa');
|
||||
|
||||
notice(DI::l10n()->t('Two-factor authentication successfully disabled.'));
|
||||
info(DI::l10n()->t('Two-factor authentication successfully disabled.'));
|
||||
DI::baseUrl()->redirect('settings/2fa');
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -63,7 +63,7 @@ class Recovery extends BaseSettings
|
||||
|
||||
if ($_POST['action'] == 'regenerate') {
|
||||
RecoveryCode::regenerateForUser(local_user());
|
||||
notice(DI::l10n()->t('New recovery codes successfully generated.'));
|
||||
info(DI::l10n()->t('New recovery codes successfully generated.'));
|
||||
DI::baseUrl()->redirect('settings/2fa/recovery?t=' . self::getFormSecurityToken('settings_2fa_password'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ class Verify extends BaseSettings
|
||||
DI::pConfig()->set(local_user(), '2fa', 'verified', true);
|
||||
Session::set('2fa', true);
|
||||
|
||||
notice(DI::l10n()->t('Two-factor authentication successfully activated.'));
|
||||
info(DI::l10n()->t('Two-factor authentication successfully activated.'));
|
||||
|
||||
DI::baseUrl()->redirect('settings/2fa');
|
||||
} else {
|
||||
@@ -132,7 +132,7 @@ class Verify extends BaseSettings
|
||||
'$help_label' => DI::l10n()->t('Help'),
|
||||
'$message' => DI::l10n()->t('<p>Please scan this QR Code with your authenticator app and submit the provided code.</p>'),
|
||||
'$qrcode_image' => $qrcode_image,
|
||||
'$qrcode_url_message' => DI::l10n()->t('<p>Or you can open the following URL in your mobile devicde:</p><p><a href="%s">%s</a></p>', $otpauthUrl, $shortOtpauthUrl),
|
||||
'$qrcode_url_message' => DI::l10n()->t('<p>Or you can open the following URL in your mobile device:</p><p><a href="%s">%s</a></p>', $otpauthUrl, $shortOtpauthUrl),
|
||||
'$manual_message' => $manual_message,
|
||||
'$company' => $company,
|
||||
'$holder' => $holder,
|
||||
|
||||
@@ -93,15 +93,17 @@ class Probe
|
||||
"following", "followers", "inbox", "outbox", "sharedinbox",
|
||||
"priority", "network", "pubkey", "manually-approve", "baseurl", "gsid"];
|
||||
|
||||
$numeric_fields = ["gsid", "hide", "account-type", "manually-approve"];
|
||||
|
||||
$newdata = [];
|
||||
foreach ($fields as $field) {
|
||||
if (isset($data[$field])) {
|
||||
if (in_array($field, ["gsid", "hide", "account-type", "manually-approve"])) {
|
||||
if (in_array($field, $numeric_fields)) {
|
||||
$newdata[$field] = (int)$data[$field];
|
||||
} else {
|
||||
$newdata[$field] = $data[$field];
|
||||
}
|
||||
} elseif ($field != "gsid") {
|
||||
} elseif (!in_array($field, $numeric_fields)) {
|
||||
$newdata[$field] = "";
|
||||
} else {
|
||||
$newdata[$field] = null;
|
||||
|
||||
Reference in New Issue
Block a user