X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCore%2FACL.php;h=a4acf58bad4fb0fb54590ad47e63e268379af375;hb=384fe562a8dff1bbc584c17e78c4f79bf3d5b7e9;hp=5f69d78b683921cccca5c75a9d3a3340d1bd700e;hpb=fb7f7435c080e15bdafbbcbb5a3dfd94ef8dd952;p=friendica.git diff --git a/src/Core/ACL.php b/src/Core/ACL.php index 5f69d78b68..a4acf58bad 100644 --- a/src/Core/ACL.php +++ b/src/Core/ACL.php @@ -1,6 +1,6 @@ registerStylesheet(Theme::getPathForFile('js/friendica-tagsinput/friendica-tagsinput.css')); $page->registerStylesheet(Theme::getPathForFile('js/friendica-tagsinput/friendica-tagsinput-typeahead.css')); - // When used for private messages, we limit correspondence to mutual DFRN/Friendica friends and the selector - // to one recipient. By default our selector allows multiple selects amongst all contacts. $condition = [ 'uid' => local_user(), 'self' => false, @@ -60,7 +70,7 @@ class ACL 'archive' => false, 'deleted' => false, 'rel' => [Contact::FOLLOWER, Contact::SHARING, Contact::FRIEND], - 'network' => Protocol::FEDERATED, + 'network' => Protocol::SUPPORT_PRIVATE, ]; $contacts = Contact::selectToArray( @@ -70,7 +80,7 @@ class ACL $arr = ['contact' => $contacts, 'entry' => $o]; - Hook::callAll(DI::module()->getName() . '_pre_recipient', $arr); + Hook::callAll(DI::args()->getModuleName() . '_pre_recipient', $arr); $tpl = Renderer::getMarkupTemplate('acl/message_recipient.tpl'); $o = Renderer::replaceMacros($tpl, [ @@ -78,7 +88,7 @@ class ACL '$selected' => $selected, ]); - Hook::callAll(DI::module()->getName() . '_post_recipient', $o); + Hook::callAll(DI::args()->getModuleName() . '_post_recipient', $o); return $o; } @@ -144,6 +154,7 @@ class ACL 'archive' => false, 'deleted' => false, 'pending' => false, + 'network' => Protocol::FEDERATED, 'rel' => [Contact::FOLLOWER, Contact::FRIEND] ], $condition), $params @@ -156,7 +167,7 @@ class ACL $acl_forums = Contact::selectToArray($fields, ['uid' => $user_id, 'self' => false, 'blocked' => false, 'archive' => false, 'deleted' => false, - 'pending' => false, 'contact-type' => Contact::TYPE_COMMUNITY], $params + 'network' => Protocol::FEDERATED, 'pending' => false, 'contact-type' => Contact::TYPE_COMMUNITY], $params ); $acl_contacts = array_merge($acl_forums, $acl_contacts); @@ -209,7 +220,7 @@ class ACL * Return the full jot ACL selector HTML * * @param Page $page - * @param array $user User array + * @param int $uid User ID * @param bool $for_federation * @param array $default_permissions Static defaults permission array: * [ @@ -225,18 +236,20 @@ class ACL */ public static function getFullSelectorHTML( Page $page, - array $user = null, + int $uid = null, bool $for_federation = false, array $default_permissions = [], array $condition = [], $form_prefix = '' ) { - if (empty($user['uid'])) { + if (empty($uid)) { return ''; } static $input_group_id = 0; + $user = User::getById($uid); + $input_group_id++; $page->registerFooterScript(Theme::getPathForFile('asset/typeahead.js/dist/typeahead.bundle.js')); @@ -328,4 +341,62 @@ class ACL return $o; } + + /** + * Checks the validity of the given ACL string + * + * @param string $acl_string + * @param int $uid + * @return bool + * @throws Exception + */ + public static function isValidContact($acl_string, $uid) + { + if (empty($acl_string)) { + return true; + } + + // split into array of cids + preg_match_all('/<[A-Za-z0-9]+>/', $acl_string, $array); + + // check for each cid if the contact is valid for the given user + $cid_array = $array[0]; + foreach ($cid_array as $cid) { + $cid = str_replace(['<', '>'], ['', ''], $cid); + if (!DBA::exists('contact', ['id' => $cid, 'uid' => $uid])) { + return false; + } + } + + return true; + } + + /** + * Checks the validity of the given ACL string + * + * @param string $acl_string + * @param int $uid + * @return bool + * @throws Exception + */ + public static function isValidGroup($acl_string, $uid) + { + if (empty($acl_string)) { + return true; + } + + // split into array of cids + preg_match_all('/<[A-Za-z0-9]+>/', $acl_string, $array); + + // check for each cid if the contact is valid for the given user + $gid_array = $array[0]; + foreach ($gid_array as $gid) { + $gid = str_replace(['<', '>'], ['', ''], $gid); + if (!DBA::exists('group', ['id' => $gid, 'uid' => $uid, 'deleted' => false])) { + return false; + } + } + + return true; + } }