. * */ namespace Friendica\Module\Admin\Blocklist\Server; use Friendica\Content\ContactSelector; use Friendica\Core\Renderer; use Friendica\Core\Worker; use Friendica\DI; use Friendica\Model\Contact; use Friendica\Model\GServer; use Friendica\Module\BaseAdmin; use GuzzleHttp\Psr7\Uri; class Add extends BaseAdmin { public static function post() { self::checkAdminAccess(); if (empty($_POST['page_blocklist_add'])) { return; } self::checkFormSecurityTokenRedirectOnError('/admin/blocklist/server/add', 'admin_blocklist_add'); // Add new item to blocklist $domain = trim($_POST['pattern']); $blocklist = DI::config()->get('system', 'blocklist'); $blocklist[] = [ 'domain' => $domain, 'reason' => trim($_POST['reason']), ]; DI::config()->set('system', 'blocklist', $blocklist); info(DI::l10n()->t('Server domain pattern added to the blocklist.')); if (!empty($_POST['purge'])) { $gservers = GServer::listByDomainPattern($domain); foreach (Contact::selectToArray(['id'], ['gsid' => array_column($gservers, 'id')]) as $contact) { Worker::add(PRIORITY_LOW, 'Contact\RemoveContent', $contact['id']); } info(DI::l10n()->tt('%s server scheduled to be purged.', '%s servers scheduled to be purged.', count($gservers))); } DI::baseUrl()->redirect('admin/blocklist/server'); } public static function content() { parent::content(); $gservers = []; if ($pattern = trim($_REQUEST['pattern'] ?? '')) { $gservers = GServer::listByDomainPattern($pattern); } array_walk($gservers, function (array &$gserver) { $gserver['domain'] = (new Uri($gserver['url']))->getHost(); $gserver['network_icon'] = ContactSelector::networkToIcon($gserver['network']); $gserver['network_name'] = ContactSelector::networkToName($gserver['network']); }); $t = Renderer::getMarkupTemplate('admin/blocklist/server/add.tpl'); return Renderer::replaceMacros($t, [ '$l10n' => [ 'return_list' => DI::l10n()->t('← Return to the list'), 'title' => DI::l10n()->t('Administration'), 'page' => DI::l10n()->t('Block A New Server Domain Pattern'), 'syntax' => DI::l10n()->t('
The server domain pattern syntax is case-insensitive shell wildcard, comprising the following special characters:
*
: Any number of characters?
: Any single character