mirror of
https://github.com/friendica/friendica
synced 2025-04-25 15:10:13 +00:00
Merge remote-tracking branch 'upstream/develop' into private
This commit is contained in:
commit
72c198990e
60 changed files with 985 additions and 637 deletions
|
@ -73,8 +73,8 @@ class Features extends BaseAdmin
|
|||
foreach (array_slice($fdata, 1) as $f) {
|
||||
$set = DI::config()->get('feature', $f[0], $f[3]);
|
||||
$arr[$fname][1][] = [
|
||||
['feature_' . $f[0], $f[1], $set, $f[2], [DI::l10n()->t('Off'), DI::l10n()->t('On')]],
|
||||
['featurelock_' . $f[0], DI::l10n()->t('Lock feature %s', $f[1]), (($f[4] !== false) ? "1" : ''), '', [DI::l10n()->t('Off'), DI::l10n()->t('On')]]
|
||||
['feature_' . $f[0], $f[1], $set, $f[2]],
|
||||
['featurelock_' . $f[0], DI::l10n()->t('Lock feature %s', $f[1]), $f[4], '']
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,7 +60,7 @@ class Tos extends BaseAdmin
|
|||
'$title' => DI::l10n()->t('Administration'),
|
||||
'$page' => DI::l10n()->t('Terms of Service'),
|
||||
'$displaytos' => ['displaytos', DI::l10n()->t('Display Terms of Service'), DI::config()->get('system', 'tosdisplay'), DI::l10n()->t('Enable the Terms of Service page. If this is enabled a link to the terms will be added to the registration form and the general information page.')],
|
||||
'$displayprivstatement' => ['displayprivstatement', DI::l10n()->t('Display Privacy Statement'), DI::config()->get('system', 'tosprivstatement'), DI::l10n()->t('Show some informations regarding the needed information to operate the node according e.g. to <a href="%s" target="_blank">EU-GDPR</a>.', 'https://en.wikipedia.org/wiki/General_Data_Protection_Regulation')],
|
||||
'$displayprivstatement' => ['displayprivstatement', DI::l10n()->t('Display Privacy Statement'), DI::config()->get('system', 'tosprivstatement'), DI::l10n()->t('Show some informations regarding the needed information to operate the node according e.g. to <a href="%s" target="_blank" rel="noopener noreferrer">EU-GDPR</a>.', 'https://en.wikipedia.org/wiki/General_Data_Protection_Regulation')],
|
||||
'$preview' => DI::l10n()->t('Privacy Statement Preview'),
|
||||
'$privtext' => $tos->privacy_complete,
|
||||
'$tostext' => ['tostext', DI::l10n()->t('The Terms of Service'), DI::config()->get('system', 'tostext'), DI::l10n()->t('Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] and below.')],
|
||||
|
|
|
@ -28,7 +28,6 @@ use Friendica\DI;
|
|||
use Friendica\Model\Register;
|
||||
use Friendica\Model\User;
|
||||
use Friendica\Module\BaseAdmin;
|
||||
use Friendica\Util\Strings;
|
||||
use Friendica\Util\Temporal;
|
||||
|
||||
class Users extends BaseAdmin
|
||||
|
@ -48,71 +47,24 @@ class Users extends BaseAdmin
|
|||
|
||||
if ($nu_name !== '' && $nu_email !== '' && $nu_nickname !== '') {
|
||||
try {
|
||||
$result = User::create([
|
||||
'username' => $nu_name,
|
||||
'email' => $nu_email,
|
||||
'nickname' => $nu_nickname,
|
||||
'verified' => 1,
|
||||
'language' => $nu_language
|
||||
]);
|
||||
User::createMinimal($nu_name, $nu_email, $nu_nickname, $nu_language);
|
||||
} catch (\Exception $ex) {
|
||||
notice($ex->getMessage());
|
||||
return;
|
||||
}
|
||||
|
||||
$user = $result['user'];
|
||||
$preamble = Strings::deindent(DI::l10n()->t('
|
||||
Dear %1$s,
|
||||
the administrator of %2$s has set up an account for you.'));
|
||||
$body = Strings::deindent(DI::l10n()->t('
|
||||
The login details are as follows:
|
||||
|
||||
Site Location: %1$s
|
||||
Login Name: %2$s
|
||||
Password: %3$s
|
||||
|
||||
You may change your password from your account "Settings" page after logging
|
||||
in.
|
||||
|
||||
Please take a few moments to review the other account settings on that page.
|
||||
|
||||
You may also wish to add some basic information to your default profile
|
||||
(on the "Profiles" page) so that other people can easily find you.
|
||||
|
||||
We recommend setting your full name, adding a profile photo,
|
||||
adding some profile "keywords" (very useful in making new friends) - and
|
||||
perhaps what country you live in; if you do not wish to be more specific
|
||||
than that.
|
||||
|
||||
We fully respect your right to privacy, and none of these items are necessary.
|
||||
If you are new and do not know anybody here, they may help
|
||||
you to make some new and interesting friends.
|
||||
|
||||
If you ever want to delete your account, you can do so at %1$s/removeme
|
||||
|
||||
Thank you and welcome to %4$s.'));
|
||||
|
||||
$preamble = sprintf($preamble, $user['username'], DI::config()->get('config', 'sitename'));
|
||||
$body = sprintf($body, DI::baseUrl()->get(), $user['nickname'], $result['password'], DI::config()->get('config', 'sitename'));
|
||||
|
||||
$email = DI::emailer()
|
||||
->newSystemMail()
|
||||
->withMessage(DI::l10n()->t('Registration details for %s', DI::config()->get('config', 'sitename')), $preamble, $body)
|
||||
->forUser($user)
|
||||
->withRecipient($user['email'])
|
||||
->build();
|
||||
return DI::emailer()->send($email);
|
||||
}
|
||||
|
||||
if (!empty($_POST['page_users_block'])) {
|
||||
// @TODO Move this to Model\User:block($users);
|
||||
DBA::update('user', ['blocked' => 1], ['uid' => $users]);
|
||||
foreach ($users as $uid) {
|
||||
User::block($uid);
|
||||
}
|
||||
notice(DI::l10n()->tt('%s user blocked', '%s users blocked', count($users)));
|
||||
}
|
||||
|
||||
if (!empty($_POST['page_users_unblock'])) {
|
||||
// @TODO Move this to Model\User:unblock($users);
|
||||
DBA::update('user', ['blocked' => 0], ['uid' => $users]);
|
||||
foreach ($users as $uid) {
|
||||
User::block($uid, false);
|
||||
}
|
||||
notice(DI::l10n()->tt('%s user unblocked', '%s users unblocked', count($users)));
|
||||
}
|
||||
|
||||
|
@ -129,17 +81,17 @@ class Users extends BaseAdmin
|
|||
}
|
||||
|
||||
if (!empty($_POST['page_users_approve'])) {
|
||||
require_once 'mod/regmod.php';
|
||||
foreach ($pending as $hash) {
|
||||
user_allow($hash);
|
||||
User::allow($hash);
|
||||
}
|
||||
notice(DI::l10n()->tt('%s user approved', '%s users approved', count($pending)));
|
||||
}
|
||||
|
||||
if (!empty($_POST['page_users_deny'])) {
|
||||
require_once 'mod/regmod.php';
|
||||
foreach ($pending as $hash) {
|
||||
user_deny($hash);
|
||||
User::deny($hash);
|
||||
}
|
||||
notice(DI::l10n()->tt('%s registration revoked', '%s registrations revoked', count($pending)));
|
||||
}
|
||||
|
||||
DI::baseUrl()->redirect('admin/users');
|
||||
|
@ -176,16 +128,24 @@ class Users extends BaseAdmin
|
|||
break;
|
||||
case 'block':
|
||||
parent::checkFormSecurityTokenRedirectOnError('/admin/users', 'admin_users', 't');
|
||||
// @TODO Move this to Model\User:block([$uid]);
|
||||
DBA::update('user', ['blocked' => 1], ['uid' => $uid]);
|
||||
User::block($uid);
|
||||
notice(DI::l10n()->t('User "%s" blocked', $user['username']));
|
||||
break;
|
||||
case 'unblock':
|
||||
parent::checkFormSecurityTokenRedirectOnError('/admin/users', 'admin_users', 't');
|
||||
// @TODO Move this to Model\User:unblock([$uid]);
|
||||
DBA::update('user', ['blocked' => 0], ['uid' => $uid]);
|
||||
User::block($uid, false);
|
||||
notice(DI::l10n()->t('User "%s" unblocked', $user['username']));
|
||||
break;
|
||||
case 'allow':
|
||||
parent::checkFormSecurityTokenRedirectOnError('/admin/users', 'admin_users', 't');
|
||||
User::allow(Register::getPendingForUser($uid)['hash'] ?? '');
|
||||
notice(DI::l10n()->t('Account approved.'));
|
||||
break;
|
||||
case 'deny':
|
||||
parent::checkFormSecurityTokenRedirectOnError('/admin/users', 'admin_users', 't');
|
||||
User::deny(Register::getPendingForUser($uid)['hash'] ?? '');
|
||||
notice(DI::l10n()->t('Registration revoked'));
|
||||
break;
|
||||
}
|
||||
|
||||
DI::baseUrl()->redirect('admin/users');
|
||||
|
@ -196,7 +156,6 @@ class Users extends BaseAdmin
|
|||
|
||||
$pager = new Pager(DI::l10n(), DI::args()->getQueryString(), 100);
|
||||
|
||||
// @TODO Move below block to Model\User::getUsers($start, $count, $order = 'contact.name', $order_direction = '+')
|
||||
$valid_orders = [
|
||||
'contact.name',
|
||||
'user.email',
|
||||
|
@ -219,16 +178,8 @@ class Users extends BaseAdmin
|
|||
$order = $new_order;
|
||||
}
|
||||
}
|
||||
$sql_order = '`' . str_replace('.', '`.`', $order) . '`';
|
||||
$sql_order_direction = ($order_direction === '+') ? 'ASC' : 'DESC';
|
||||
|
||||
$usersStmt = DBA::p("SELECT `user`.*, `contact`.`name`, `contact`.`url`, `contact`.`micro`, `user`.`account_expired`, `contact`.`last-item` AS `lastitem_date`
|
||||
FROM `user`
|
||||
INNER JOIN `contact` ON `contact`.`uid` = `user`.`uid` AND `contact`.`self`
|
||||
WHERE `user`.`verified`
|
||||
ORDER BY $sql_order $sql_order_direction LIMIT ?, ?", $pager->getStart(), $pager->getItemsPerPage()
|
||||
);
|
||||
$users = DBA::toArray($usersStmt);
|
||||
$users = User::getList($pager->getStart(), $pager->getItemsPerPage(), 'all', $order, $order_direction);
|
||||
|
||||
$adminlist = explode(',', str_replace(' ', '', DI::config()->get('config', 'admin_email')));
|
||||
$_setup_users = function ($e) use ($adminlist) {
|
||||
|
@ -283,7 +234,7 @@ class Users extends BaseAdmin
|
|||
}
|
||||
}
|
||||
|
||||
$th_users = array_map(null, [DI::l10n()->t('Name'), DI::l10n()->t('Email'), DI::l10n()->t('Register date'), DI::l10n()->t('Last login'), DI::l10n()->t('Last item'), DI::l10n()->t('Type')], $valid_orders);
|
||||
$th_users = array_map(null, [DI::l10n()->t('Name'), DI::l10n()->t('Email'), DI::l10n()->t('Register date'), DI::l10n()->t('Last login'), DI::l10n()->t('Last public item'), DI::l10n()->t('Type')], $valid_orders);
|
||||
|
||||
$t = Renderer::getMarkupTemplate('admin/users.tpl');
|
||||
$o = Renderer::replaceMacros($t, [
|
||||
|
@ -308,7 +259,7 @@ class Users extends BaseAdmin
|
|||
|
||||
'$h_users' => DI::l10n()->t('Users'),
|
||||
'$h_newuser' => DI::l10n()->t('New User'),
|
||||
'$th_deleted' => [DI::l10n()->t('Name'), DI::l10n()->t('Email'), DI::l10n()->t('Register date'), DI::l10n()->t('Last login'), DI::l10n()->t('Last item'), DI::l10n()->t('Permanent deletion')],
|
||||
'$th_deleted' => [DI::l10n()->t('Name'), DI::l10n()->t('Email'), DI::l10n()->t('Register date'), DI::l10n()->t('Last login'), DI::l10n()->t('Last public item'), DI::l10n()->t('Permanent deletion')],
|
||||
'$th_users' => $th_users,
|
||||
'$order_users' => $order,
|
||||
'$order_direction_users' => $order_direction,
|
||||
|
|
|
@ -24,6 +24,7 @@ namespace Friendica\Module\Notifications;
|
|||
use Friendica\BaseModule;
|
||||
use Friendica\Core\System;
|
||||
use Friendica\DI;
|
||||
use Friendica\Module\Security\Login;
|
||||
use Friendica\Network\HTTPException;
|
||||
|
||||
/**
|
||||
|
@ -31,15 +32,21 @@ use Friendica\Network\HTTPException;
|
|||
*/
|
||||
class Notification extends BaseModule
|
||||
{
|
||||
public static function init(array $parameters = [])
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* @throws HTTPException\InternalServerErrorException
|
||||
* @throws HTTPException\NotFoundException
|
||||
* @throws HTTPException\UnauthorizedException
|
||||
* @throws \ImagickException
|
||||
* @throws \Exception
|
||||
*/
|
||||
public static function post(array $parameters = [])
|
||||
{
|
||||
if (!local_user()) {
|
||||
throw new HTTPException\UnauthorizedException(DI::l10n()->t('Permission denied.'));
|
||||
}
|
||||
}
|
||||
|
||||
public static function post(array $parameters = [])
|
||||
{
|
||||
$request_id = $parameters['id'] ?? false;
|
||||
|
||||
if ($request_id) {
|
||||
|
@ -58,9 +65,17 @@ class Notification extends BaseModule
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* @throws HTTPException\UnauthorizedException
|
||||
*/
|
||||
public static function rawContent(array $parameters = [])
|
||||
{
|
||||
// @TODO: Replace with parameter from router
|
||||
if (!local_user()) {
|
||||
throw new HTTPException\UnauthorizedException(DI::l10n()->t('Permission denied.'));
|
||||
}
|
||||
|
||||
if (DI::args()->get(1) === 'mark' && DI::args()->get(2) === 'all') {
|
||||
try {
|
||||
$success = DI::notify()->setSeen();
|
||||
|
@ -74,31 +89,36 @@ class Notification extends BaseModule
|
|||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* Redirect to the notifications main page or to the url for the chosen notifications
|
||||
*
|
||||
* @return string|void
|
||||
* @throws HTTPException\NotFoundException In case the notification is either not existing or is not for this user
|
||||
* @throws HTTPException\InternalServerErrorException
|
||||
* @throws \Exception
|
||||
*/
|
||||
public static function content(array $parameters = [])
|
||||
{
|
||||
if (!local_user()) {
|
||||
notice(DI::l10n()->t('You must be logged in to show this page.'));
|
||||
return Login::form();
|
||||
}
|
||||
|
||||
$request_id = $parameters['id'] ?? false;
|
||||
|
||||
if ($request_id) {
|
||||
try {
|
||||
$notify = DI::notify()->getByID($request_id);
|
||||
DI::notify()->setSeen(true, $notify);
|
||||
$notify = DI::notify()->getByID($request_id, local_user());
|
||||
DI::notify()->setSeen(true, $notify);
|
||||
|
||||
if (!empty($notify->link)) {
|
||||
System::externalRedirect($notify->link);
|
||||
}
|
||||
|
||||
} catch (HTTPException\NotFoundException $e) {
|
||||
info(DI::l10n()->t('Invalid notification.'));
|
||||
if (!empty($notify->link)) {
|
||||
System::externalRedirect($notify->link);
|
||||
}
|
||||
|
||||
DI::baseUrl()->redirect();
|
||||
}
|
||||
|
||||
DI::baseUrl()->redirect('notifications/system');
|
||||
|
||||
throw new HTTPException\InternalServerErrorException('Invalid situation.');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -197,7 +197,7 @@ class Display extends BaseSettings
|
|||
'$itemspage_network' => ['itemspage_network' , DI::l10n()->t('Number of items to display per page:'), $itemspage_network, DI::l10n()->t('Maximum of 100 items')],
|
||||
'$itemspage_mobile_network' => ['itemspage_mobile_network', DI::l10n()->t('Number of items to display per page when viewed from mobile device:'), $itemspage_mobile_network, DI::l10n()->t('Maximum of 100 items')],
|
||||
'$ajaxint' => ['browser_update' , DI::l10n()->t('Update browser every xx seconds'), $browser_update, DI::l10n()->t('Minimum of 10 seconds. Enter -1 to disable it.')],
|
||||
'$no_auto_update' => ['no_auto_update' , DI::l10n()->t('Automatic updates only at the top of the network page'), $no_auto_update, DI::l10n()->t('When disabled, the network page is updated all the time, which could be confusing while reading.')],
|
||||
'$no_auto_update' => ['no_auto_update' , DI::l10n()->t('Automatic updates only at the top of the post stream pages'), $no_auto_update, DI::l10n()->t('Auto update may add new posts at the top of the post stream pages, which can affect the scroll position and perturb normal reading if it happens anywhere else the top of the page.')],
|
||||
'$nosmile' => ['nosmile' , DI::l10n()->t('Don\'t show emoticons'), $nosmile, DI::l10n()->t('Normally emoticons are replaced with matching symbols. This setting disables this behaviour.')],
|
||||
'$infinite_scroll' => ['infinite_scroll' , DI::l10n()->t('Infinite scroll'), $infinite_scroll, DI::l10n()->t('Automatic fetch new items when reaching the page end.')],
|
||||
'$no_smart_threading' => ['no_smart_threading' , DI::l10n()->t('Disable Smart Threading'), $no_smart_threading, DI::l10n()->t('Disable the automatic suppression of extraneous thread indentation.')],
|
||||
|
|
|
@ -37,7 +37,10 @@ class Community extends CommunityModule
|
|||
{
|
||||
self::parseRequest($parameters);
|
||||
|
||||
$o = conversation(DI::app(), self::getItems(), 'community', true, false, 'commented', local_user());
|
||||
$o = '';
|
||||
if (!empty($_GET['force']) || !DI::pConfig()->get(local_user(), 'system', 'no_auto_update')) {
|
||||
$o = conversation(DI::app(), self::getItems(), 'community', true, false, 'commented', local_user());
|
||||
}
|
||||
|
||||
System::htmlUpdateExit($o);
|
||||
}
|
||||
|
|
|
@ -42,8 +42,6 @@ class Profile extends BaseModule
|
|||
throw new ForbiddenException();
|
||||
}
|
||||
|
||||
$o = '';
|
||||
|
||||
$profile_uid = intval($_GET['p'] ?? 0);
|
||||
|
||||
// Ensure we've got a profile owner if updating.
|
||||
|
@ -57,6 +55,12 @@ class Profile extends BaseModule
|
|||
throw new ForbiddenException(DI::l10n()->t('Access to this profile has been restricted.'));
|
||||
}
|
||||
|
||||
$o = '';
|
||||
|
||||
if (empty($_GET['force']) && DI::pConfig()->get(local_user(), 'system', 'no_auto_update')) {
|
||||
System::htmlUpdateExit($o);
|
||||
}
|
||||
|
||||
// Get permissions SQL - if $remote_contact is true, our remote user has been pre-verified and we already have fetched his/her groups
|
||||
$sql_extra = Item::getPermissionsSQLByUserId($a->profile['uid']);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue