X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCore%2FACL.php;h=b604218774e3304cc0dc3ea0d4e8baba0e8b3ebf;hb=42775d53b2c5177cae2e0e1dacb0a32f92e4a83b;hp=9abd259acd0550f60c59f924aafed59f24ed5115;hpb=8821d33f73785884cfce83e7b23d3ef19cc1bc11;p=friendica.git diff --git a/src/Core/ACL.php b/src/Core/ACL.php index 9abd259acd..b604218774 100644 --- a/src/Core/ACL.php +++ b/src/Core/ACL.php @@ -6,134 +6,19 @@ namespace Friendica\Core; -use Friendica\BaseObject; -use Friendica\Content\Feature; -use Friendica\Core\Protocol; -use Friendica\Core\Renderer; +use Friendica\App\Page; use Friendica\Database\DBA; +use Friendica\DI; use Friendica\Model\Contact; -use Friendica\Model\GContact; -use Friendica\Util\Network; +use Friendica\Model\Group; /** * Handle ACL management and display * * @author Hypolite Petovan */ -class ACL extends BaseObject +class ACL { - /** - * Returns a select input tag with all the contact of the local user - * - * @param string $selname Name attribute of the select input tag - * @param string $selclass Class attribute of the select input tag - * @param array $options Available options: - * - size: length of the select box - * - mutual_friends: Only used for the hook - * - single: Only used for the hook - * - exclude: Only used for the hook - * @param array $preselected Contact ID that should be already selected - * @return string - */ - public static function getSuggestContactSelectHTML($selname, $selclass, array $options = [], array $preselected = []) - { - $a = self::getApp(); - - $networks = null; - - $size = defaults($options, 'size', 4); - $mutual = !empty($options['mutual_friends']); - $single = !empty($options['single']) && empty($options['multiple']); - $exclude = defaults($options, 'exclude', false); - - switch (defaults($options, 'networks', Protocol::PHANTOM)) { - case 'DFRN_ONLY': - $networks = [Protocol::DFRN]; - break; - - case 'PRIVATE': - $networks = [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::MAIL, Protocol::DIASPORA]; - break; - - case 'TWO_WAY': - if (!empty($a->user['prvnets'])) { - $networks = [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::MAIL, Protocol::DIASPORA]; - } else { - $networks = [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::MAIL, Protocol::DIASPORA, Protocol::OSTATUS]; - } - break; - - default: /// @TODO Maybe log this call? - break; - } - - $x = ['options' => $options, 'size' => $size, 'single' => $single, 'mutual' => $mutual, 'exclude' => $exclude, 'networks' => $networks]; - - Addon::callHooks('contact_select_options', $x); - - $o = ''; - - $sql_extra = ''; - - if (!empty($x['mutual'])) { - $sql_extra .= sprintf(" AND `rel` = %d ", intval(Contact::FRIEND)); - } - - if (!empty($x['exclude'])) { - $sql_extra .= sprintf(" AND `id` != %d ", intval($x['exclude'])); - } - - if (!empty($x['networks'])) { - /// @TODO rewrite to foreach() - array_walk($x['networks'], function (&$value) { - $value = "'" . DBA::escape($value) . "'"; - }); - $str_nets = implode(',', $x['networks']); - $sql_extra .= " AND `network` IN ( $str_nets ) "; - } - - $tabindex = (!empty($options['tabindex']) ? 'tabindex="' . $options["tabindex"] . '"' : ''); - - if (!empty($x['single'])) { - $o .= "\r\n"; - } - - $stmt = DBA::p("SELECT `id`, `name`, `url`, `network` FROM `contact` - WHERE `uid` = ? AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - $sql_extra - ORDER BY `name` ASC ", intval(local_user()) - ); - - $contacts = DBA::toArray($stmt); - - $arr = ['contact' => $contacts, 'entry' => $o]; - - // e.g. 'network_pre_contact_deny', 'profile_pre_contact_allow' - Addon::callHooks($a->module . '_pre_' . $selname, $arr); - - if (DBA::isResult($contacts)) { - foreach ($contacts as $contact) { - if (in_array($contact['id'], $preselected)) { - $selected = ' selected="selected" '; - } else { - $selected = ''; - } - - $trimmed = mb_substr($contact['name'], 0, 20); - - $o .= "\r\n"; - } - } - - $o .= '' . PHP_EOL; - - Addon::callHooks($a->module . '_post_' . $selname, $o); - - return $o; - } - /** * Returns a select input tag with all the contact of the local user * @@ -143,10 +28,11 @@ class ACL extends BaseObject * @param int $size Length of the select box * @param int $tabindex Select input tag tabindex attribute * @return string + * @throws \Exception */ public static function getMessageContactSelectHTML($selname, $selclass, array $preselected = [], $size = 4, $tabindex = null) { - $a = self::getApp(); + $a = DI::app(); $o = ''; @@ -166,7 +52,7 @@ class ACL extends BaseObject $o .= " ' . L10n::t("Post to Email") . ''; + $jotnets_fields[] = [ + 'type' => 'checkbox', + 'field' => [ + 'pubmail_enable', + DI::l10n()->t('Post to Email'), + $pubmail_enabled + ] + ]; } - Addon::callHooks('jot_networks', $jotnets); - } else { - $jotnets .= L10n::t('Connectors disabled, since "%s" is enabled.', - L10n::t('Hide your profile details from unknown viewers?')); + Hook::callAll('jot_networks', $jotnets_fields); } } - $tpl = Renderer::getMarkupTemplate('acl_selector.tpl'); - $o = Renderer::replaceMacros($tpl, [ - '$showall' => L10n::t('Visible to everybody'), - '$show' => L10n::t('show'), - '$hide' => L10n::t('don\'t show'), - '$allowcid' => json_encode(defaults($default_permissions, 'allow_cid', '')), - '$allowgid' => json_encode(defaults($default_permissions, 'allow_gid', '')), - '$denycid' => json_encode(defaults($default_permissions, 'deny_cid', '')), - '$denygid' => json_encode(defaults($default_permissions, 'deny_gid', '')), - '$networks' => $show_jotnets, - '$emailcc' => L10n::t('CC: email addresses'), - '$emtitle' => L10n::t('Example: bob@example.com, mary@example.com'), - '$jotnets' => $jotnets, - '$aclModalTitle' => L10n::t('Permissions'), - '$aclModalDismiss' => L10n::t('Close'), - '$features' => [ - 'aclautomention' => Feature::isEnabled($user['uid'], 'aclautomention') ? 'true' : 'false' - ], - ]); + $acl_contacts = self::getContactListByUserId($user['uid'], $condition); - return $o; - } + $acl_groups = self::getGroupListByUserId($user['uid']); - /** - * Searching for global contacts for autocompletion - * - * @brief Searching for global contacts for autocompletion - * @param string $search Name or part of a name or nick - * @param string $mode Search mode (e.g. "community") - * @return array with the search results - */ - public static function contactAutocomplete($search, $mode) - { - if (Config::get('system', 'block_public') && !local_user() && !remote_user()) { - return []; - } - - // don't search if search term has less than 2 characters - if (!$search || mb_strlen($search) < 2) { - return []; - } + $acl_list = array_merge($acl_groups, $acl_contacts); - if (substr($search, 0, 1) === '@') { - $search = substr($search, 1); - } - - // check if searching in the local global contact table is enabled - if (Config::get('system', 'poco_local_search')) { - $return = GContact::searchByName($search, $mode); - } else { - $p = defaults($_GET, 'page', 1) != 1 ? '&p=' . defaults($_GET, 'page', 1) : ''; + $input_names = [ + 'visibility' => $form_prefix ? $form_prefix . '[visibility]' : 'visibility', + 'group_allow' => $form_prefix ? $form_prefix . '[group_allow]' : 'group_allow', + 'contact_allow' => $form_prefix ? $form_prefix . '[contact_allow]' : 'contact_allow', + 'group_deny' => $form_prefix ? $form_prefix . '[group_deny]' : 'group_deny', + 'contact_deny' => $form_prefix ? $form_prefix . '[contact_deny]' : 'contact_deny', + 'emailcc' => $form_prefix ? $form_prefix . '[emailcc]' : 'emailcc', + ]; - $curlResult = Network::curl(get_server() . '/lsearch?f=' . $p . '&search=' . urlencode($search)); - if ($curlResult->isSuccess()) { - $lsearch = json_decode($curlResult->getBody(), true); - if (!empty($lsearch['results'])) { - $return = $lsearch['results']; - } - } - } + $tpl = Renderer::getMarkupTemplate('acl_selector.tpl'); + $o = Renderer::replaceMacros($tpl, [ + '$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.'), + '$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'), + '$jotnets_disabled_label' => DI::l10n()->t('Connectors disabled, since "%s" is enabled.', DI::l10n()->t('Hide your profile details from unknown viewers?')), + '$visibility' => $visibility, + '$acl_contacts' => $acl_contacts, + '$acl_groups' => $acl_groups, + '$acl_list' => $acl_list, + '$contact_allow' => implode(',', $default_permissions['allow_cid']), + '$group_allow' => implode(',', $default_permissions['allow_gid']), + '$contact_deny' => implode(',', $default_permissions['deny_cid']), + '$group_deny' => implode(',', $default_permissions['deny_gid']), + '$for_federation' => $for_federation, + '$jotnets_fields' => $jotnets_fields, + '$user_hidewall' => $default_permissions['hidewall'], + '$input_names' => $input_names, + '$input_group_id' => $input_group_id, + ]); - return defaults($return, []); + return $o; } }