X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCore%2FACL.php;h=aa5e2221b782493a4b782fe11dd0bea75596eeb9;hb=afa6e0ee3cc86f254c121f0812e8adba7cc209ab;hp=347e8278f9eca5d3d1b2ab762e756fb382a9660c;hpb=dec87d89c049f6f93af8d70ffb093f3d88d892af;p=friendica.git diff --git a/src/Core/ACL.php b/src/Core/ACL.php index 347e8278f9..aa5e2221b7 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')); + $contacts = self::getValidMessageRecipientsForUser(DI::userSession()->getLocalUserId()); + + $tpl = Renderer::getMarkupTemplate('acl/message_recipient.tpl'); + $o = Renderer::replaceMacros($tpl, [ + '$contacts' => $contacts, + '$contacts_json' => json_encode($contacts), + '$selected' => $selected, + ]); + + Hook::callAll(DI::args()->getModuleName() . '_post_recipient', $o); + + return $o; + } + + public static function getValidMessageRecipientsForUser(int $uid): array + { $condition = [ - 'uid' => local_user(), - 'self' => false, + 'uid' => $uid, + 'self' => false, 'blocked' => false, 'pending' => false, 'archive' => false, 'deleted' => false, - 'rel' => [Contact::FOLLOWER, Contact::SHARING, Contact::FRIEND], + 'rel' => [Contact::FOLLOWER, Contact::SHARING, Contact::FRIEND], 'network' => Protocol::SUPPORT_PRIVATE, ]; - $contacts = Contact::selectToArray( - ['id', 'name', 'addr', 'micro'], + return Contact::selectToArray( + ['id', 'name', 'addr', 'micro', 'url', 'nick'], DBA::mergeConditions($condition, ["`notify` != ''"]) ); - - $arr = ['contact' => $contacts, 'entry' => $o]; - - Hook::callAll(DI::module()->getName() . '_pre_recipient', $arr); - - $tpl = Renderer::getMarkupTemplate('acl/message_recipient.tpl'); - $o = Renderer::replaceMacros($tpl, [ - '$contacts' => $contacts, - '$selected' => $selected, - ]); - - Hook::callAll(DI::module()->getName() . '_post_recipient', $o); - - return $o; } /** @@ -293,7 +295,7 @@ class ACL !empty($mailacct['pubmail']) ] ]; - + } } Hook::callAll('jot_networks', $jotnets_fields); @@ -319,16 +321,16 @@ class ACL '$public_title' => DI::l10n()->t('Public'), '$public_desc' => DI::l10n()->t('This content will be shown to all your followers and can be seen in the community pages and by anyone with its link.'), '$custom_title' => DI::l10n()->t('Limited/Private'), - '$custom_desc' => DI::l10n()->t('This content will be shown only to the people in the first box, to the exception of the people mentioned in the second box. It won\'t appear anywhere public.'), + '$custom_desc' => DI::l10n()->t('This content will be shown only to the people in the first box, to the exception of the people mentioned in the second box. It won\'t appear anywhere public.') . DI::l10n()->t('Start typing the name of a contact or a group to show a filtered list. You can also mention the special groups "Followers" and "Mutuals".'), '$allow_label' => DI::l10n()->t('Show to:'), '$deny_label' => DI::l10n()->t('Except to:'), '$emailcc' => DI::l10n()->t('CC: email addresses'), '$emtitle' => DI::l10n()->t('Example: bob@example.com, mary@example.com'), '$jotnets_summary' => DI::l10n()->t('Connectors'), '$visibility' => $visibility, - '$acl_contacts' => $acl_contacts, - '$acl_groups' => $acl_groups, - '$acl_list' => $acl_list, + '$acl_contacts' => json_encode($acl_contacts), + '$acl_groups' => json_encode($acl_groups), + '$acl_list' => json_encode($acl_list), '$contact_allow' => implode(',', $default_permissions['allow_cid']), '$group_allow' => implode(',', $default_permissions['allow_gid']), '$contact_deny' => implode(',', $default_permissions['deny_cid']), @@ -341,4 +343,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; + } }