$nav['home'] = [$homelink, $this->l10n->t('Home'), '', $this->l10n->t('Home Page')];
}
- if (intval($this->config->get('config', 'register_policy')) === \Friendica\Module\Register::OPEN && !$this->session->isAuthenticated()) {
+ if (\Friendica\Module\Register::getPolicy() === \Friendica\Module\Register::OPEN && !$this->session->isAuthenticated()) {
$nav['register'] = ['register', $this->l10n->t('Register'), '', $this->l10n->t('Create an account')];
}
'broughtby' => '',
'broughtbyurl' => '',
'timezone' => DI::config()->get('system', 'default_timezone'),
- 'closed' => (DI::config()->get('config', 'register_policy') == Register::CLOSED),
+ 'closed' => Register::getPolicy() === Register::CLOSED,
'inviteonly' => (bool)DI::config()->get('system', 'invitation_only'),
'private' => (bool)DI::config()->get('system', 'block_public'),
'textlimit' => (string) DI::config()->get('config', 'api_import_size', DI::config()->get('config', 'max_import_size')),
private function buildRegistrationsInfo(): InstanceEntity\Registrations
{
- $register_policy = intval($this->config->get('config', 'register_policy'));
- $enabled = ($register_policy != Register::CLOSED);
- $approval_required = ($register_policy == Register::APPROVE);
+ $register_policy = Register::getPolicy();
+ $enabled = $register_policy !== Register::CLOSED;
+ $approval_required = $register_policy === Register::APPROVE;
return new InstanceEntity\Registrations($enabled, $approval_required);
}
if (!DI::userSession()->getLocalUserId()) {
$output = '<h2>' . DI::l10n()->t('Login') . '</h2>';
- $output .= Login::form(DI::args()->getQueryString(), intval($config->get('config', 'register_policy')) === Register::CLOSED ? false : true);
+ $output .= Login::form(DI::args()->getQueryString(), Register::getPolicy() !== Register::CLOSED);
return $output;
}
use Friendica\Core\L10n;
use Friendica\Core\Renderer;
use Friendica\Core\Session\Capability\IHandleUserSessions;
-use Friendica\Core\System;
use Friendica\Database\PostUpdate;
use Friendica\Model\User;
use Friendica\Network\HTTPException;
Register::OPEN => 'REGISTER_OPEN'
];
- $register_policy_int = $this->config->get('config', 'register_policy');
+ $register_policy_int = Register::getPolicy();
if ($register_policy_int !== Register::CLOSED && $this->config->get('config', 'invitation_only')) {
$register_policy = 'REGISTER_INVITATION';
} else {
}
}
- $login = Login::form(DI::args()->getQueryString(), $config->get('config', 'register_policy') === Register::CLOSED ? 0 : 1);
+ $login = Login::form(DI::args()->getQueryString(), Register::getPolicy() !== Register::CLOSED);
$content = '';
Hook::callAll('home_content', $content);
$dirLocation = Search::getGlobalDirectory();
if (strlen($dirLocation)) {
- if ($config->get('config', 'register_policy') === Register::CLOSED) {
+ if (Register::getPolicy() === Register::CLOSED) {
$linkTxt = DI::l10n()->t('Visit %s for a list of public sites that you can join. Friendica members on other sites can all connect with each other, as well as with members of many other social networks.', $dirLocation . '/servers');
} else {
$linkTxt = DI::l10n()->t('To accept this invitation, please visit and register at %s or any other public Friendica website.', DI::baseUrl() . '/register')
. "\r\n" . "\r\n" . DI::l10n()->t('Friendica sites all inter-connect to create a huge privacy-enhanced social web that is owned and controlled by its members. They can also connect with many traditional social networks. See %s for a list of alternate Friendica sites you can join.', $dirLocation . '/servers');
}
} else { // there is no global directory URL defined
- if ($config->get('config', 'register_policy') === Register::CLOSED) {
+ if (Register::getPolicy() === Register::CLOSED) {
return DI::l10n()->t('Our apologies. This system is not currently configured to connect with other public sites or invite members.');
} else {
$linkTxt = DI::l10n()->t('To accept this invitation, please visit and register at %s.', DI::baseUrl() . '/register'
use Friendica\App;
use Friendica\BaseModule;
use Friendica\Capabilities\ICanCreateResponses;
-use Friendica\Core\Addon;
use Friendica\Core\Config\Capability\IManageConfigValues;
use Friendica\Core\L10n;
use Friendica\Model\Nodeinfo;
],
'services' => Nodeinfo::getServices(),
'usage' => Nodeinfo::getUsage(),
- 'openRegistrations' => intval($this->config->get('config', 'register_policy')) !== Register::CLOSED,
+ 'openRegistrations' => Register::getPolicy() !== Register::CLOSED,
'metadata' => [
'nodeName' => $this->config->get('config', 'sitename'),
],
use Friendica\App;
use Friendica\BaseModule;
use Friendica\Capabilities\ICanCreateResponses;
-use Friendica\Core\Addon;
use Friendica\Core\Config\Capability\IManageConfigValues;
use Friendica\Core\L10n;
use Friendica\Model\Nodeinfo;
'protocols' => ['dfrn', 'activitypub'],
'services' => Nodeinfo::getServices(),
'usage' => Nodeinfo::getUsage(),
- 'openRegistrations' => intval($this->config->get('config', 'register_policy')) !== Register::CLOSED,
+ 'openRegistrations' => Register::getPolicy() !== Register::CLOSED,
'metadata' => [
'nodeName' => $this->config->get('config', 'sitename'),
],
use Friendica\App;
use Friendica\BaseModule;
use Friendica\Capabilities\ICanCreateResponses;
-use Friendica\Core\Addon;
use Friendica\Core\Config\Capability\IManageConfigValues;
use Friendica\Core\L10n;
use Friendica\Model\Nodeinfo;
'organization' => Nodeinfo::getOrganization($this->config),
'protocols' => ['dfrn', 'activitypub'],
'services' => Nodeinfo::getServices(),
- 'openRegistrations' => intval($this->config->get('config', 'register_policy')) !== Register::CLOSED,
+ 'openRegistrations' => Register::getPolicy() !== Register::CLOSED,
'usage' => Nodeinfo::getUsage(true),
];
use Friendica\Core\L10n;
use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues;
use Friendica\Core\Session\Capability\IHandleUserSessions;
-use Friendica\Core\System;
use Friendica\Database\Database;
use Friendica\Database\DBA;
use Friendica\Model\Circle;
$myurl = $this->session->getMyUrl();
$mail_count = $this->database->count('mail', ["`uid` = ? AND NOT `seen` AND `from-url` != ?", $this->session->getLocalUserId(), $myurl]);
- if (intval($this->config->get('config', 'register_policy')) === Register::APPROVE && $this->session->isSiteAdmin()) {
+ if (Register::getPolicy() === Register::APPROVE && $this->session->isSiteAdmin()) {
$registrations = \Friendica\Model\Register::getPending();
$register_count = count($registrations);
}
use Friendica\DI;
use Friendica\Model;
use Friendica\Model\User;
+use Friendica\Util\DateTimeFormat;
use Friendica\Util\Profiler;
use Friendica\Util\Proxy;
use Psr\Log\LoggerInterface;
}
}
- if (!DI::userSession()->getLocalUserId() && (intval(DI::config()->get('config', 'register_policy')) === self::CLOSED)) {
+ if (!DI::userSession()->getLocalUserId() && self::getPolicy() === self::CLOSED) {
DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return '';
}
$o = Renderer::replaceMacros($tpl, [
'$invitations' => DI::config()->get('system', 'invitation_only'),
- '$permonly' => intval(DI::config()->get('config', 'register_policy')) === self::APPROVE,
+ '$permonly' => self::getPolicy() === self::APPROVE,
'$permonlybox' => ['permonlybox', DI::l10n()->t('Note for the admin'), '', DI::l10n()->t('Leave a message for the admin, why you want to join this node'), DI::l10n()->t('Required')],
'$invite_desc' => DI::l10n()->t('Membership on this site is by invitation only.'),
'$invite_label' => DI::l10n()->t('Your invitation code: '),
}
}
- switch (DI::config()->get('config', 'register_policy')) {
+ switch (self::getPolicy()) {
case self::OPEN:
$blocked = 0;
$verified = 1;
$base_url = (string)DI::baseUrl();
- if ($netpublish && intval(DI::config()->get('config', 'register_policy')) !== self::APPROVE) {
+ if ($netpublish && self::getPolicy() !== self::APPROVE) {
$url = $base_url . '/profile/' . $user['nickname'];
Worker::add(Worker::PRIORITY_LOW, 'Directory', $url);
}
$num_invites = DI::config()->get('system', 'number_invites');
$invite_id = (!empty($_POST['invite_id']) ? trim($_POST['invite_id']) : '');
- if (intval(DI::config()->get('config', 'register_policy')) === self::OPEN) {
+ if (self::getPolicy() === self::OPEN) {
if ($using_invites && $invite_id) {
Model\Register::deleteByHash($invite_id);
DI::pConfig()->set($user['uid'], 'system', 'invites_remaining', $num_invites);
}
DI::baseUrl()->redirect();
}
- } elseif (intval(DI::config()->get('config', 'register_policy')) === self::APPROVE) {
+ } elseif (self::getPolicy() === self::APPROVE) {
if (!User::getAdminEmailList()) {
$this->logger->critical('Registration policy is set to APPROVE but no admin email address has been set in config.admin_email');
DI::sysmsg()->addNotice(DI::l10n()->t('Your registration can not be processed.'));
]);
}
}
+ public static function getPolicy(): int
+ {
+ $days = DI::config()->get('system', 'admin_inactivity_limit');
+ if ($days == 0) {
+ return intval(DI::config()->get('config', 'register_policy'));
+ }
+
+ $inactive_since = DateTimeFormat::utc('now - ' . $days . ' day');
+ foreach (User::getAdminList(['login_date']) as $admin) {
+ if (strtotime($admin['login_date']) > strtotime($inactive_since)) {
+ return intval(DI::config()->get('config', 'register_policy'));
+ }
+ }
+ return self::CLOSED;
+ }
}
$this->baseUrl->redirect($return_path);
}
- return self::form($return_path, intval($this->config->get('config', 'register_policy')) !== \Friendica\Module\Register::CLOSED);
+ return self::form($return_path, \Friendica\Module\Register::getPolicy() !== \Friendica\Module\Register::CLOSED);
}
protected function post(array $request = [])
}
$reg = false;
- if ($register && intval(DI::config()->get('config', 'register_policy')) !== Register::CLOSED) {
+ if ($register && Register::getPolicy() !== Register::CLOSED) {
$reg = [
'title' => DI::l10n()->t('Create a New Account'),
'desc' => DI::l10n()->t('Register'),
$open_id_obj->identity = $authId;
$session->set('openid_server', $open_id_obj->discover($open_id_obj->identity));
- if (intval(DI::config()->get('config', 'register_policy')) === \Friendica\Module\Register::CLOSED) {
+ if (\Friendica\Module\Register::getPolicy() === \Friendica\Module\Register::CLOSED) {
DI::sysmsg()->addNotice($l10n->t('Account not found. Please login to your existing account to add the OpenID to it.'));
} else {
DI::sysmsg()->addNotice($l10n->t('Account not found. Please register a new account or login to your existing account to add the OpenID to it.'));
use Friendica\Core\Config\Capability\IManageConfigValues;
use Friendica\Core\KeyValueStorage\Capability\IManageKeyValuePairs;
use Friendica\Core\L10n;
-use Friendica\Core\System;
use Friendica\Network\HTTPException\NotFoundException;
use Friendica\Util\Profiler;
use Psr\Log\LoggerInterface;
protected function rawContent(array $request = [])
{
$registration_open =
- intval($this->config->get('config', 'register_policy')) !== Register::CLOSED
+ Register::getPolicy() !== Register::CLOSED
&& !$this->config->get('config', 'invitation_only');
/// @todo mark the "service" addons and load them dynamically here
protected function post(array $request = [])
{
- if ($this->config->get('config', 'register_policy') != \Friendica\Module\Register::OPEN && !$this->app->isSiteAdmin()) {
+ if (\Friendica\Module\Register::getPolicy() !== \Friendica\Module\Register::OPEN && !$this->app->isSiteAdmin()) {
throw new HttpException\ForbiddenException($this->t('Permission denied.'));
}
protected function content(array $request = []): string
{
- if (($this->config->get('config', 'register_policy') != \Friendica\Module\Register::OPEN) && !$this->app->isSiteAdmin()) {
+ if ((\Friendica\Module\Register::getPolicy() !== \Friendica\Module\Register::OPEN) && !$this->app->isSiteAdmin()) {
$this->systemMessages->addNotice($this->t('User imports on closed servers can only be done by an administrator.'));
}
public function __construct(IManageConfigValues $config, BaseURL $baseUrl, Database $database, Configuration $configuration, ?Account $contact_account, array $rules)
{
- $register_policy = intval($config->get('config', 'register_policy'));
+ $register_policy = Register::getPolicy();
$this->uri = $baseUrl->getHost();
$this->title = $config->get('config', 'sitename');
$this->thumbnail = $baseUrl . (new Header($config))->getMastodonBannerPath();
$this->languages = [$config->get('system', 'language')];
$this->max_toot_chars = (int)$config->get('config', 'api_import_size', $config->get('config', 'max_import_size'));
- $this->registrations = ($register_policy != Register::CLOSED);
- $this->approval_required = ($register_policy == Register::APPROVE);
+ $this->registrations = ($register_policy !== Register::CLOSED);
+ $this->approval_required = ($register_policy === Register::APPROVE);
$this->invites_enabled = false;
$this->configuration = $configuration;
$this->contact_account = $contact_account ?? [];
// Checks for missing entries in "post", "post-thread" or "post-thread-user" and creates them
'add_missing_posts' => false,
+ // admin_inactivity_limit (Integer)
+ // Days of inactivity after which an admin is considered inactive. "0" means that there will be no check for inactivity.
+ 'admin_inactivity_limit' => 30,
+
// allowed_link_protocols (Array)
// Allowed protocols in links URLs, add at your own risk. http(s) is always allowed.
'allowed_link_protocols' => ['ftp://', 'ftps://', 'mailto:', 'cid:', 'gopher://'],