]> git.mxchange.org Git - friendica.git/commitdiff
Disallow posting to restricted groups
authorMichael <heluecht@pirati.ca>
Sat, 24 Aug 2024 14:07:59 +0000 (14:07 +0000)
committerMichael <heluecht@pirati.ca>
Sat, 24 Aug 2024 16:05:43 +0000 (16:05 +0000)
src/Model/Contact.php
src/Module/Contact/Conversations.php
src/Module/Search/Acl.php

index 1b4192327ff049350539127a774607bfca42f0c9..d5ec105fef556e420ba104f79118cf640e058371 100644 (file)
@@ -259,6 +259,17 @@ class Contact
                return DBA::update('contact', $fields, $condition, $old_fields);
        }
 
+       /**
+        * @param integer $id     Contact ID
+        * @param array   $fields Array of selected fields, empty for all
+        * @return array|boolean Contact record if it exists, false otherwise
+        * @throws \Exception
+        */
+       public static function getAccountById(int $id, array $fields = [])
+       {
+               return DBA::selectFirst('account-user-view', $fields, ['id' => $id]);
+       }
+
        /**
         * @param integer $id     Contact ID
         * @param array   $fields Array of selected fields, empty for all
@@ -2375,7 +2386,8 @@ class Contact
 
                        if ($default_avatar && Proxy::isLocalImage($avatar)) {
                                $fields = [
-                                       'avatar' => $avatar, 'avatar-date' => DateTimeFormat::utcNow(),
+                                       'avatar' => $avatar,
+                                       'avatar-date' => DateTimeFormat::utcNow(),
                                        'photo' => $avatar,
                                        'thumb' => self::getDefaultAvatar($contact, Proxy::SIZE_THUMB),
                                        'micro' => self::getDefaultAvatar($contact, Proxy::SIZE_MICRO)
index 251ad0de2b47d2eb21007a61d1822c0ecb32b07c..8192aabe17bc140bf80443eb4db7f186338e8aba 100644 (file)
@@ -86,7 +86,7 @@ class Conversations extends BaseModule
                        throw new NotFoundException($this->t('Contact not found.'));
                }
 
-               $contact = Model\Contact::getById($pcid);
+               $contact = Model\Contact::getAccountById($pcid);
                if (empty($contact)) {
                        throw new NotFoundException($this->t('Contact not found.'));
                }
@@ -111,13 +111,15 @@ class Conversations extends BaseModule
 
                Nav::setSelected('contact');
 
-               $options = [
-                       'lockstate' => ACL::getLockstateForUserId($this->userSession->getLocalUserId()) ? 'lock' : 'unlock',
-                       'acl' => ACL::getFullSelectorHTML($this->page, $this->userSession->getLocalUserId(), true, []),
-                       'bang' => '',
-                       'content' => ($contact['contact-type'] == ModelContact::TYPE_COMMUNITY ? '!' : '@') . ($contact['addr'] ?: $contact['url']),
-               ];
-               $o = $this->conversation->statusEditor($options);
+               if (!$contact['ap-posting-restricted']) {
+                       $options = [
+                               'lockstate' => ACL::getLockstateForUserId($this->userSession->getLocalUserId()) ? 'lock' : 'unlock',
+                               'acl' => ACL::getFullSelectorHTML($this->page, $this->userSession->getLocalUserId(), true, []),
+                               'bang' => '',
+                               'content' => ($contact['contact-type'] == ModelContact::TYPE_COMMUNITY ? '!' : '@') . ($contact['addr'] ?: $contact['url']),
+                       ];
+                       $o = $this->conversation->statusEditor($options);
+               }
 
                $o .= Contact::getTabsHTML($contact, Contact::TAB_CONVERSATIONS);
                $o .= Model\Contact::getThreadsFromId($contact['id'], $this->userSession->getLocalUserId(), 0, 0, $request['last_created'] ?? '');
index 4671006da294c0a30379f3566ddbfb91668215a7..daa0cb2db1d4871e42d4ae1b751540c470628818 100644 (file)
@@ -156,30 +156,30 @@ class Acl extends BaseModule
                switch ($type) {
                        case self::TYPE_MENTION_CONTACT_CIRCLE:
                                $condition = DBA::mergeConditions($condition,
-                                       ["NOT `self` AND NOT `blocked` AND `notify` != ? AND `network` != ?", '', Protocol::OSTATUS
+                                       ["NOT `self` AND NOT `blocked` AND `network` != ?", Protocol::OSTATUS
                                        ]);
                                break;
 
                        case self::TYPE_MENTION_CONTACT:
                                $condition = DBA::mergeConditions($condition,
-                                       ["NOT `self` AND NOT `blocked` AND `notify` != ?", ''
+                                       ["NOT `self` AND NOT `blocked`",
                                        ]);
                                break;
 
                        case self::TYPE_MENTION_GROUP:
                                $condition = DBA::mergeConditions($condition,
-                                       ["NOT `self` AND NOT `blocked` AND `notify` != ? AND `contact-type` = ?", '', Contact::TYPE_COMMUNITY
+                                       ["NOT `self` AND NOT `blocked` AND (NOT `ap-posting-restricted` OR `ap-posting-restricted` IS NULL) AND `contact-type` = ?", Contact::TYPE_COMMUNITY
                                        ]);
                                break;
 
                        case self::TYPE_PRIVATE_MESSAGE:
                                $condition = DBA::mergeConditions($condition,
-                                       ["NOT `self` AND NOT `blocked` AND `notify` != ? AND `network` IN (?, ?, ?)", '', Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA
+                                       ["NOT `self` AND NOT `blocked` AND `network` IN (?, ?, ?)", Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA
                                        ]);
                                break;
                }
 
-               $contact_count = $this->database->count('contact', $condition);
+               $contact_count = $this->database->count('account-user-view', $condition);
 
                $resultTotal = $circle_count + $contact_count;
 
@@ -220,7 +220,7 @@ class Acl extends BaseModule
 
                $contacts = [];
                if ($type != self::TYPE_MENTION_CIRCLE) {
-                       $contacts = Contact::selectToArray([], $condition, ['order' => ['name']]);
+                       $contacts = Contact::selectAccountToArray([], $condition, ['order' => ['name']]);
                }
 
                $groups = [];