]> git.mxchange.org Git - friendica.git/blobdiff - src/Module/Contact/Advanced.php
Happy New Year 2023!
[friendica.git] / src / Module / Contact / Advanced.php
index be1e874a57939c98af964e20e703970a01914017..bcf48da1ff2ef0742b9c9602d9e8e076a948a816 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @copyright Copyright (C) 2020, Friendica
+ * @copyright Copyright (C) 2010-2023, the Friendica project
  *
  * @license GNU AGPL version 3 or any later version
  *
 
 namespace Friendica\Module\Contact;
 
+use Friendica\App;
+use Friendica\App\Page;
 use Friendica\BaseModule;
+use Friendica\Content\Widget;
+use Friendica\Core\L10n;
 use Friendica\Core\Protocol;
 use Friendica\Core\Renderer;
-use Friendica\Core\Session;
+use Friendica\Database\Database;
 use Friendica\DI;
 use Friendica\Model;
 use Friendica\Module\Contact;
+use Friendica\Module\Response;
 use Friendica\Network\HTTPException\BadRequestException;
 use Friendica\Network\HTTPException\ForbiddenException;
+use Friendica\Util\Profiler;
 use Friendica\Util\Strings;
+use Psr\Log\LoggerInterface;
 
 /**
  * GUI for advanced contact details manipulation
  */
 class Advanced extends BaseModule
 {
-       public static function init(array $parameters = [])
+       /** @var Database */
+       protected $dba;
+       /** @var Page */
+       protected $page;
+
+       public function __construct(L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, App\Page $page, LoggerInterface $logger, Profiler $profiler, Response $response, Database $dba, array $server, array $parameters = [])
        {
-               if (!Session::isAuthenticated()) {
-                       throw new ForbiddenException(DI::l10n()->t('Permission denied.'));
+               parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters);
+
+               $this->dba  = $dba;
+               $this->page = $page;
+
+               if (!DI::userSession()->isAuthenticated()) {
+                       throw new ForbiddenException($this->t('Permission denied.'));
                }
        }
 
-       public static function post(array $parameters = [])
+       protected function post(array $request = [])
        {
-               $cid = $parameters['id'];
+               $cid = $this->parameters['id'];
 
-               $contact = Model\Contact::selectFirst([], ['id' => $cid, 'uid' => local_user()]);
+               $contact = Model\Contact::selectFirst([], ['id' => $cid, 'uid' => DI::userSession()->getLocalUserId()]);
                if (empty($contact)) {
-                       throw new BadRequestException(DI::l10n()->t('Contact not found.'));
+                       throw new BadRequestException($this->t('Contact not found.'));
                }
 
                $name        = ($_POST['name'] ?? '') ?: $contact['name'];
                $nick        = $_POST['nick'] ?? '';
                $url         = $_POST['url'] ?? '';
-               $alias       = $_POST['alias'] ?? '';
-               $request     = $_POST['request'] ?? '';
-               $confirm     = $_POST['confirm'] ?? '';
-               $notify      = $_POST['notify'] ?? '';
                $poll        = $_POST['poll'] ?? '';
-               $attag       = $_POST['attag'] ?? '';
                $photo       = $_POST['photo'] ?? '';
-               $remote_self = $_POST['remote_self'] ?? false;
                $nurl        = Strings::normaliseLink($url);
 
-               $r = DI::dba()->update(
+               $r = $this->dba->update(
                        'contact',
                        [
                                'name'        => $name,
                                'nick'        => $nick,
                                'url'         => $url,
                                'nurl'        => $nurl,
-                               'alias'       => $alias,
-                               'request'     => $request,
-                               'confirm'     => $confirm,
-                               'notify'      => $notify,
                                'poll'        => $poll,
-                               'attag'       => $attag,
-                               'remote_self' => $remote_self,
                        ],
-                       ['id' => $contact['id'], 'uid' => local_user()]
+                       ['id' => $contact['id'], 'uid' => DI::userSession()->getLocalUserId()]
                );
 
                if ($photo) {
-                       DI::logger()->notice('Updating photo.', ['photo' => $photo]);
+                       $this->logger->notice('Updating photo.', ['photo' => $photo]);
 
                        Model\Contact::updateAvatar($contact['id'], $photo, true);
                }
 
                if (!$r) {
-                       notice(DI::l10n()->t('Contact update failed.'));
+                       DI::sysmsg()->addNotice($this->t('Contact update failed.'));
                }
-
-               return;
        }
 
-       public static function content(array $parameters = [])
+       protected function content(array $request = []): string
        {
-               $cid = $parameters['id'];
+               $cid = $this->parameters['id'];
 
-               $contact = Model\Contact::selectFirst([], ['id' => $cid, 'uid' => local_user()]);
+               $contact = Model\Contact::selectFirst([], ['id' => $cid, 'uid' => DI::userSession()->getLocalUserId()]);
                if (empty($contact)) {
-                       throw new BadRequestException(DI::l10n()->t('Contact not found.'));
+                       throw new BadRequestException($this->t('Contact not found.'));
                }
 
-               Model\Profile::load(DI::app(), "", Model\Contact::getByURL($contact["url"], false));
-
-               $warning = DI::l10n()->t('<strong>WARNING: This is highly advanced</strong> and if you enter incorrect information your communications with this contact may stop working.');
-               $info    = DI::l10n()->t('Please use your browser \'Back\' button <strong>now</strong> if you are uncertain what to do on this page.');
+               $this->page['aside'] = Widget\VCard::getHTML($contact);
 
                $returnaddr = "contact/$cid";
 
-               // Disable remote self for everything except feeds.
-               // There is an issue when you repeat an item from maybe twitter and you got comments from friendica and twitter
-               // Problem is, you couldn't reply to both networks.
-               $allow_remote_self = in_array($contact['network'], [Protocol::FEED, Protocol::DFRN, Protocol::DIASPORA, Protocol::TWITTER])
-                                    && DI::config()->get('system', 'allow_users_remote_self');
-
-               if ($contact['network'] == Protocol::FEED) {
-                       $remote_self_options = ['0' => DI::l10n()->t('No mirroring'), '1' => DI::l10n()->t('Mirror as forwarded posting'), '2' => DI::l10n()->t('Mirror as my own posting')];
+               // This data is fetched automatically for most networks.
+               // Editing does only makes sense for mail and feed contacts.
+               if (!in_array($contact['network'], [Protocol::FEED, Protocol::MAIL])) {
+                       $readonly = 'readonly';
                } else {
-                       $remote_self_options = ['0' => DI::l10n()->t('No mirroring'), '2' => DI::l10n()->t('Mirror as my own posting')];
+                       $readonly = '';
                }
 
-               $tab_str = Contact::getTabsHTML(DI::app(), $contact, 6);
+               $tab_str = Contact::getTabsHTML($contact, Contact::TAB_ADVANCED);
 
                $tpl = Renderer::getMarkupTemplate('contact/advanced.tpl');
                return Renderer::replaceMacros($tpl, [
                        '$tab_str'           => $tab_str,
-                       '$warning'           => $warning,
-                       '$info'              => $info,
                        '$returnaddr'        => $returnaddr,
-                       '$return'            => DI::l10n()->t('Return to contact editor'),
-                       '$update_profile'    => in_array($contact['network'], Protocol::FEDERATED),
-                       '$udprofilenow'      => DI::l10n()->t('Refetch contact data'),
+                       '$return'            => $this->t('Return to contact editor'),
                        '$contact_id'        => $contact['id'],
-                       '$lbl_submit'        => DI::l10n()->t('Submit'),
-                       '$label_remote_self' => DI::l10n()->t('Remote Self'),
-                       '$allow_remote_self' => $allow_remote_self,
-                       '$remote_self'       => ['remote_self',
-                               DI::l10n()->t('Mirror postings from this contact'),
-                               $contact['remote_self'],
-                               DI::l10n()->t('Mark this contact as remote_self, this will cause friendica to repost new entries from this contact.'),
-                               $remote_self_options
-                       ],
+                       '$lbl_submit'        => $this->t('Submit'),
 
-                       '$name'    => ['name', DI::l10n()->t('Name'), $contact['name']],
-                       '$nick'    => ['nick', DI::l10n()->t('Account Nickname'), $contact['nick']],
-                       '$attag'   => ['attag', DI::l10n()->t('@Tagname - overrides Name/Nickname'), $contact['attag']],
-                       '$url'     => ['url', DI::l10n()->t('Account URL'), $contact['url']],
-                       '$alias'   => ['alias', DI::l10n()->t('Account URL Alias'), $contact['alias']],
-                       '$request' => ['request', DI::l10n()->t('Friend Request URL'), $contact['request']],
-                       'confirm'  => ['confirm', DI::l10n()->t('Friend Confirm URL'), $contact['confirm']],
-                       'notify'   => ['notify', DI::l10n()->t('Notification Endpoint URL'), $contact['notify']],
-                       'poll'     => ['poll', DI::l10n()->t('Poll/Feed URL'), $contact['poll']],
-                       'photo'    => ['photo', DI::l10n()->t('New photo from this URL'), ''],
+                       '$name'    => ['name', $this->t('Name'), $contact['name'], '', '', $readonly],
+                       '$nick'    => ['nick', $this->t('Account Nickname'), $contact['nick'], '', '', 'readonly'],
+                       '$url'     => ['url', $this->t('Account URL'), $contact['url'], '', '', 'readonly'],
+                       'poll'     => ['poll', $this->t('Poll/Feed URL'), $contact['poll'], '', '', ($contact['network'] == Protocol::FEED) ? '' : 'readonly'],
+                       'photo'    => ['photo', $this->t('New photo from this URL'), '', '', '', $readonly],
                ]);
        }
 }