From eeafb59c31823a3eaf7e12a7bb61869819063cf0 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 19:45:04 -0500 Subject: [PATCH 01/17] Add new class/functions - Create class Core\Acl - Add Contact::pruneUnavailable - Add mod_content --- mod/acl.php | 305 ++++++++++++++++++++++++++++++++- src/Core/Acl.php | 384 ++++++++++++++++++++++++++++++++++++++++++ src/Model/Contact.php | 23 +++ 3 files changed, 708 insertions(+), 4 deletions(-) create mode 100644 src/Core/Acl.php diff --git a/mod/acl.php b/mod/acl.php index e04a3fbc7e..e325e4668d 100644 --- a/mod/acl.php +++ b/mod/acl.php @@ -1,12 +1,309 @@ = `failure_update` + AND `notify` != '' $sql_extra2", + intval(local_user()) + ); + $contact_count = (int) $r[0]['c']; + } elseif ($type == 'f') { + // autocomplete for editor mentions of forums + $r = q("SELECT COUNT(*) AS c FROM `contact` + WHERE `uid` = %d AND NOT `self` + AND NOT `blocked` AND NOT `pending` AND NOT `archive` + AND (`forum` OR `prv`) + AND `success_update` >= `failure_update` + AND `notify` != '' $sql_extra2", + intval(local_user()) + ); + $contact_count = (int) $r[0]['c']; + } elseif ($type == 'm') { + // autocomplete for Private Messages + $r = q("SELECT COUNT(*) AS c FROM `contact` + WHERE `uid` = %d AND NOT `self` + AND NOT `blocked` AND NOT `pending` AND NOT `archive` + AND `success_update` >= `failure_update` + AND `network` IN ('%s', '%s') $sql_extra2", + intval(local_user()), + dbesc(NETWORK_DFRN), + dbesc(NETWORK_DIASPORA) + ); + $contact_count = (int) $r[0]['c']; + } elseif ($type == 'a') { + // autocomplete for Contacts + $r = q("SELECT COUNT(*) AS c FROM `contact` + WHERE `uid` = %d AND NOT `self` + AND NOT `pending` $sql_extra2", + intval(local_user()) + ); + $contact_count = (int) $r[0]['c']; + } else { + $contact_count = 0; + } + + $tot = $group_count + $contact_count; + + $groups = []; + $contacts = []; + + if ($type == '' || $type == 'g') { + /// @todo We should cache this query. + // This can be done when we can delete cache entries via wildcard + $r = q("SELECT `group`.`id`, `group`.`name`, GROUP_CONCAT(DISTINCT `group_member`.`contact-id` SEPARATOR ',') AS uids + FROM `group` + INNER JOIN `group_member` ON `group_member`.`gid`=`group`.`id` + WHERE NOT `group`.`deleted` AND `group`.`uid` = %d + $sql_extra + GROUP BY `group`.`name`, `group`.`id` + ORDER BY `group`.`name` + LIMIT %d,%d", + intval(local_user()), + intval($start), + intval($count) + ); + + foreach ($r as $g) { + $groups[] = [ + 'type' => 'g', + 'photo' => 'images/twopeople.png', + 'name' => htmlentities($g['name']), + 'id' => intval($g['id']), + 'uids' => array_map('intval', explode(',', $g['uids'])), + 'link' => '', + 'forum' => '0' + ]; + } + if ((count($groups) > 0) && ($search == '')) { + $groups[] = ['separator' => true]; + } + } + + if ($type == '') { + $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv`, (`prv` OR `forum`) AS `frm` FROM `contact` + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s', '%s')) + $sql_extra2 + ORDER BY `name` ASC ", + intval(local_user()), + dbesc(NETWORK_OSTATUS), + dbesc(NETWORK_STATUSNET) + ); + } elseif ($type == 'c') { + $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s')) + $sql_extra2 + ORDER BY `name` ASC ", + intval(local_user()), + dbesc(NETWORK_STATUSNET) + ); + } elseif ($type == 'f') { + $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s')) + AND (`forum` OR `prv`) + $sql_extra2 + ORDER BY `name` ASC ", + intval(local_user()), + dbesc(NETWORK_STATUSNET) + ); + } elseif ($type == 'm') { + $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr` FROM `contact` + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` + AND `success_update` >= `failure_update` AND `network` IN ('%s', '%s') + $sql_extra2 + ORDER BY `name` ASC ", + intval(local_user()), + dbesc(NETWORK_DFRN), + dbesc(NETWORK_DIASPORA) + ); + } elseif ($type == 'a') { + $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` + WHERE `uid` = %d AND `pending` = 0 AND `success_update` >= `failure_update` + $sql_extra2 + ORDER BY `name` ASC ", + intval(local_user()) + ); + } elseif ($type == 'x') { + // autocomplete for global contact search (e.g. navbar search) + $r = navbar_complete($a); + $contacts = []; + foreach ($r as $g) { + $contacts[] = [ + 'photo' => proxy_url($g['photo'], false, PROXY_SIZE_MICRO), + 'name' => $g['name'], + 'nick' => (x($g['addr']) ? $g['addr'] : $g['url']), + 'network' => $g['network'], + 'link' => $g['url'], + 'forum' => (x($g['community']) ? 1 : 0), + ]; + } + $o = [ + 'start' => $start, + 'count' => $count, + 'items' => $contacts, + ]; + echo json_encode($o); + killme(); + } else { + $r = []; + } + + if (DBM::is_result($r)) { + $forums = []; + foreach ($r as $g) { + $entry = [ + 'type' => 'c', + 'photo' => proxy_url($g['micro'], false, PROXY_SIZE_MICRO), + 'name' => htmlentities($g['name']), + 'id' => intval($g['id']), + 'network' => $g['network'], + 'link' => $g['url'], + 'nick' => htmlentities(($g['attag']) ? $g['attag'] : $g['nick']), + 'addr' => htmlentities(($g['addr']) ? $g['addr'] : $g['url']), + 'forum' => ((x($g, 'forum') || x($g, 'prv')) ? 1 : 0), + ]; + if ($entry['forum']) { + $forums[] = $entry; + } else { + $contacts[] = $entry; + } + } + if (count($forums) > 0) { + if ($search == '') { + $forums[] = ['separator' => true]; + } + $contacts = array_merge($forums, $contacts); + } + } + + $items = array_merge($groups, $contacts); + + if ($conv_id) { + /* + * if $conv_id is set, get unknown contacts in thread + * but first get known contacts url to filter them out + */ + $known_contacts = array_map(function ($i) { + return dbesc($i['link']); + }, $contacts); + + $unknown_contacts = []; + $r = q("SELECT `author-link` + FROM `item` WHERE `parent` = %d + AND (`author-name` LIKE '%%%s%%' OR `author-link` LIKE '%%%s%%') + AND `author-link` NOT IN ('%s') + GROUP BY `author-link`, `author-avatar`, `author-name` + ORDER BY `author-name` ASC + ", + intval($conv_id), + dbesc($search), + dbesc($search), + implode("', '", $known_contacts) + ); + if (DBM::is_result($r)) { + foreach ($r as $row) { + $contact = Contact::getDetailsByURL($row['author-link']); + + if (count($contact) > 0) { + $unknown_contacts[] = [ + 'type' => 'c', + 'photo' => proxy_url($contact['micro'], false, PROXY_SIZE_MICRO), + 'name' => htmlentities($contact['name']), + 'id' => intval($contact['cid']), + 'network' => $contact['network'], + 'link' => $contact['url'], + 'nick' => htmlentities($contact['nick'] ?: $contact['addr']), + 'addr' => htmlentities(($contact['addr']) ? $contact['addr'] : $contact['url']), + 'forum' => $contact['forum'] + ]; + } + } + } + + $items = array_merge($items, $unknown_contacts); + $tot += count($unknown_contacts); + } + + $results = [ + 'tot' => $tot, + 'start' => $start, + 'count' => $count, + 'groups' => $groups, + 'contacts' => $contacts, + 'items' => $items, + 'type' => $type, + 'search' => $search, + ]; + + Addon::callHooks('acl_lookup_end', $results); + + $o = [ + 'tot' => $results['tot'], + 'start' => $results['start'], + 'count' => $results['count'], + 'items' => $results['items'], + ]; + + echo json_encode($o); + + killme(); } - - diff --git a/src/Core/Acl.php b/src/Core/Acl.php new file mode 100644 index 0000000000..67e2633a2e --- /dev/null +++ b/src/Core/Acl.php @@ -0,0 +1,384 @@ + + */ +class Acl extends BaseObject +{ + /** + * 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 = [NETWORK_DFRN]; + break; + case 'PRIVATE': + if (!empty($a->user['prvnets'])) { + $networks = [NETWORK_DFRN, NETWORK_MAIL, NETWORK_DIASPORA]; + } else { + $networks = [NETWORK_DFRN, NETWORK_FACEBOOK, NETWORK_MAIL, NETWORK_DIASPORA]; + } + break; + case 'TWO_WAY': + if (!empty($a->user['prvnets'])) { + $networks = [NETWORK_DFRN, NETWORK_MAIL, NETWORK_DIASPORA]; + } else { + $networks = [NETWORK_DFRN, NETWORK_FACEBOOK, NETWORK_MAIL, NETWORK_DIASPORA, NETWORK_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_IS_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 = "'" . dbesc($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` = %d 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::inArray($stmt); + + $arr = ['contact' => $contacts, 'entry' => $o]; + + // e.g. 'network_pre_contact_deny', 'profile_pre_contact_allow' + Addon::callHooks($a->module . '_pre_' . $selname, $arr); + + if (DBM::is_result($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 + * + * @param string $selname Name attribute of the select input tag + * @param string $selclass Class attribute of the select input tag + * @param array $preselected Contact ID that should be already selected + * @param int $size Length of the select box + * @param bool $privmail + * @param bool $celeb + * @param bool $privatenet + * @param int $tabindex Select input tag tabindex attribute + * @return string + */ + public static function getMessageContactSelectHTML( + $selname, $selclass, array $preselected = [], $size = 4, $privmail = false, $celeb = false, $privatenet = false, + $tabindex = null) + { + $a = self::getApp(); + + $o = ''; + + // 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. + + $sql_extra = ''; + + if ($privmail || $celeb) { + $sql_extra .= sprintf(" AND `rel` = %d ", intval(CONTACT_IS_FRIEND)); + } + + if ($privmail) { + $sql_extra .= sprintf(" AND `network` IN ('%s' , '%s') ", NETWORK_DFRN, NETWORK_DIASPORA); + } elseif ($privatenet) { + $sql_extra .= sprintf(" AND `network` IN ('%s' , '%s', '%s', '%s') ", NETWORK_DFRN, NETWORK_MAIL, NETWORK_FACEBOOK, + NETWORK_DIASPORA); + } + + $tabindex_attr = !empty($tabindex) ? ' tabindex="' . intval($tabindex) . '"' : ''; + + if ($privmail && $preselected) { + $sql_extra .= " AND `id` IN (" . implode(",", $preselected) . ")"; + $hidepreselected = ' style="display: none;"'; + } else { + $hidepreselected = ''; + } + + if ($privmail) { + $o .= "\r\n"; + } + + $stmt = dba::p("SELECT `id`, `name`, `url`, `network` FROM `contact` + WHERE `uid` = %d 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::inArray($stmt); + + $arr = ['contact' => $contacts, 'entry' => $o]; + + // e.g. 'network_pre_contact_deny', 'profile_pre_contact_allow' + + Addon::callHooks($a->module . '_pre_' . $selname, $arr); + + $receiverlist = []; + + if (DBM::is_result($contacts)) { + foreach ($contacts as $contact) { + if (in_array($contact['id'], $preselected)) { + $selected = ' selected="selected"'; + } else { + $selected = ''; + } + + if ($privmail) { + $trimmed = Protocol::formatMention($contact['url'], $contact['name']); + } else { + $trimmed = mb_substr($contact['name'], 0, 20); + } + + $receiverlist[] = $trimmed; + + $o .= "\r\n"; + } + } + + $o .= '' . PHP_EOL; + + if ($privmail && $preselected) { + $o .= implode(', ', $receiverlist); + } + + Addon::callHooks($a->module . '_post_' . $selname, $o); + + return $o; + } + + /** + * Return the default permission of the provided user array + * + * @param array $user + * @return array Hash of contact id lists + */ + public static function getDefaultUserPermissions(array $user = null) + { + $matches = []; + + $acl_regex = '/<([0-9]+)>/i'; + + preg_match_all($acl_regex, defaults($user, 'allow_cid', ''), $matches); + $allow_cid = $matches[1]; + preg_match_all($acl_regex, defaults($user, 'allow_gid', ''), $matches); + $allow_gid = $matches[1]; + preg_match_all($acl_regex, defaults($user, 'deny_cid', ''), $matches); + $deny_cid = $matches[1]; + preg_match_all($acl_regex, defaults($user, 'deny_gid', ''), $matches); + $deny_gid = $matches[1]; + + Contact::pruneUnavailable($allow_cid); + + return [ + 'allow_cid' => $allow_cid, + 'allow_gid' => $allow_gid, + 'deny_cid' => $deny_cid, + 'deny_gid' => $deny_gid, + ]; + } + + /** + * Return the full jot ACL selector HTML + * + * @param array $user + * @param bool $show_jotnets + * @return string + */ + public static function getFullSelectorHTML(array $user = null, $show_jotnets = false) + { + $perms = self::getDefaultUserPermissions($user); + + $jotnets = ''; + if ($show_jotnets) { + $imap_disabled = !function_exists('imap_open') || Config::get('system', 'imap_disabled'); + + $mail_enabled = false; + $pubmail_enabled = false; + + if (!$imap_disabled) { + $mailacct = dba::selectFirst('mailacct', ['pubmail'], ['`uid` = ? AND `server` != ""', local_user()]); + if (DBM::is_result($mailacct)) { + $mail_enabled = true; + $pubmail_enabled = !empty($mailacct['pubmail']); + } + } + + if (empty($user['hidewall'])) { + if ($mail_enabled) { + $selected = $pubmail_enabled ? ' checked="checked"' : ''; + $jotnets .= '
' . L10n::t("Post to Email") . '
'; + } + + Addon::callHooks('jot_networks', $jotnets); + } else { + $jotnets .= L10n::t('Connectors disabled, since "%s" is enabled.', + L10n::t('Hide your profile details from unknown viewers?')); + } + } + + $tpl = get_markup_template('acl_selector.tpl'); + $o = replace_macros($tpl, [ + '$showall' => L10n::t('Visible to everybody'), + '$show' => L10n::t('show'), + '$hide' => L10n::t('don\'t show'), + '$allowcid' => json_encode($perms['allow_cid']), + '$allowgid' => json_encode($perms['allow_gid']), + '$denycid' => json_encode($perms['deny_cid']), + '$denygid' => json_encode($perms['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' + ], + ]); + + return $o; + } + + /** + * 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 []; + } + + 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 { + $a = self::getApp(); + $p = $a->pager['page'] != 1 ? '&p=' . $a->pager['page'] : ''; + + $response = Network::curl(get_server() . '/lsearch?f=' . $p . '&search=' . urlencode($search)); + if ($response['success']) { + $lsearch = json_decode($response['body'], true); + if (!empty($lsearch['results'])) { + $return = $lsearch['results']; + } + } + } + + return defaults($return, []); + } +} diff --git a/src/Model/Contact.php b/src/Model/Contact.php index fc27b0c410..85e71075a9 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -1517,4 +1517,27 @@ class Contact extends BaseObject } } } + + /** + * Remove the unavailable contact ids from the provided list + * + * @param array $contact_ids Contact id list + */ + public static function pruneUnavailable(array &$contact_ids) + { + if (empty($contact_ids)) { + return; + } + + $str = dbesc(implode(',', $contact_ids)); + + $stmt = dba::p("SELECT `id` FROM `contact` WHERE `id` IN ( " . $str . ") AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0"); + + $return = []; + while($contact = dba::fetch($stmt)) { + $return[] = $contact['id']; + } + + $contact_ids = $return; + } } From e2de86de4654c7948a9bfeba564d08106f52383d Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 19:45:32 -0500 Subject: [PATCH 02/17] Update references in acl_selectors to new functions --- include/acl_selectors.php | 724 +------------------------------------- 1 file changed, 8 insertions(+), 716 deletions(-) diff --git a/include/acl_selectors.php b/include/acl_selectors.php index e69ac36f68..37819fb567 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -4,744 +4,36 @@ */ use Friendica\App; -use Friendica\Content\Feature; -use Friendica\Content\Widget; -use Friendica\Core\Addon; -use Friendica\Core\Config; -use Friendica\Core\L10n; -use Friendica\Core\Protocol; -use Friendica\Database\DBM; +use Friendica\Core\Acl; use Friendica\Model\Contact; -use Friendica\Model\GContact; -use Friendica\Util\Network; require_once "mod/proxy.php"; -/** - * @package acl_selectors - */ -function group_select($selname,$selclass,$preselected = false,$size = 4) { - - $a = get_app(); - - $o = ''; - - $o .= "\r\n"; - - Addon::callHooks($a->module . '_post_' . $selname, $o); - - - return $o; -} - -/// @TODO find proper type-hints function contact_selector($selname, $selclass, $options, $preselected = false) { - $a = get_app(); - - $mutual = false; - $networks = null; - $single = false; - $exclude = false; - $size = 4; - - if (is_array($options)) { - if (x($options, 'size')) - $size = $options['size']; - - if (x($options, 'mutual_friends')) { - $mutual = true; - } - if (x($options, 'single')) { - $single = true; - } - if (x($options, 'multiple')) { - $single = false; - } - if (x($options, 'exclude')) { - $exclude = $options['exclude']; - } - - if (x($options, 'networks')) { - switch ($options['networks']) { - case 'DFRN_ONLY': - $networks = [NETWORK_DFRN]; - break; - case 'PRIVATE': - if (is_array($a->user) && $a->user['prvnets']) { - $networks = [NETWORK_DFRN, NETWORK_MAIL, NETWORK_DIASPORA]; - } else { - $networks = [NETWORK_DFRN, NETWORK_FACEBOOK, NETWORK_MAIL, NETWORK_DIASPORA]; - } - break; - case 'TWO_WAY': - if (is_array($a->user) && $a->user['prvnets']) { - $networks = [NETWORK_DFRN, NETWORK_MAIL, NETWORK_DIASPORA]; - } else { - $networks = [NETWORK_DFRN, NETWORK_FACEBOOK, NETWORK_MAIL, NETWORK_DIASPORA, NETWORK_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 (x($x, 'mutual')) { - $sql_extra .= sprintf(" AND `rel` = %d ", intval(CONTACT_IS_FRIEND)); - } - - if (x($x, 'exclude')) { - $sql_extra .= sprintf(" AND `id` != %d ", intval($x['exclude'])); - } - - if (is_array($x['networks']) && count($x['networks'])) { - /// @TODO rewrite to foreach() - for ($y = 0; $y < count($x['networks']) ; $y ++) { - $x['networks'][$y] = "'" . dbesc($x['networks'][$y]) . "'"; - } - $str_nets = implode(',', $x['networks']); - $sql_extra .= " AND `network` IN ( $str_nets ) "; - } - - $tabindex = (x($options, 'tabindex') ? "tabindex=\"" . $options["tabindex"] . "\"" : ""); - - if ($x['single']) { - $o .= "\r\n"; - } - - $r = q("SELECT `id`, `name`, `url`, `network` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - $sql_extra - ORDER BY `name` ASC ", - intval(local_user()) - ); - - - $arr = ['contact' => $r, 'entry' => $o]; - - // e.g. 'network_pre_contact_deny', 'profile_pre_contact_allow' - - Addon::callHooks($a->module . '_pre_' . $selname, $arr); - - if (DBM::is_result($r)) { - foreach ($r as $rr) { - if ((is_array($preselected)) && in_array($rr['id'], $preselected)) { - $selected = " selected=\"selected\" "; - } else { - $selected = ''; - } - - $trimmed = mb_substr($rr['name'],0,20); - - $o .= "\r\n"; - } - - } - - $o .= "\r\n"; - - Addon::callHooks($a->module . '_post_' . $selname, $o); - - return $o; + return Acl::getSuggestContactSelectHTML($selname, $selclass, $options, defaults($preselected, [])); } - - function contact_select($selname, $selclass, $preselected = false, $size = 4, $privmail = false, $celeb = false, $privatenet = false, $tabindex = null) { - $a = get_app(); - - $o = ''; - - // 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. - - $sql_extra = ''; - - if ($privmail || $celeb) { - $sql_extra .= sprintf(" AND `rel` = %d ", intval(CONTACT_IS_FRIEND)); - } - - if ($privmail) { - $sql_extra .= sprintf(" AND `network` IN ('%s' , '%s') ", - NETWORK_DFRN, NETWORK_DIASPORA); - } elseif ($privatenet) { - $sql_extra .= sprintf(" AND `network` IN ('%s' , '%s', '%s', '%s') ", - NETWORK_DFRN, NETWORK_MAIL, NETWORK_FACEBOOK, NETWORK_DIASPORA); - } - - $tabindex = ($tabindex > 0 ? "tabindex=\"$tabindex\"" : ""); - - if ($privmail && $preselected) { - $sql_extra .= " AND `id` IN (".implode(",", $preselected).")"; - $hidepreselected = ' style="display: none;"'; - } else { - $hidepreselected = ""; - } - - if ($privmail) { - $o .= "\r\n"; - } - - $r = q("SELECT `id`, `name`, `url`, `network` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - $sql_extra - ORDER BY `name` ASC ", - intval(local_user()) - ); - - - $arr = ['contact' => $r, 'entry' => $o]; - - // e.g. 'network_pre_contact_deny', 'profile_pre_contact_allow' - - Addon::callHooks($a->module . '_pre_' . $selname, $arr); - - $receiverlist = []; - - if (DBM::is_result($r)) { - foreach ($r as $rr) { - if ((is_array($preselected)) && in_array($rr['id'], $preselected)) { - $selected = " selected=\"selected\" "; - } else { - $selected = ''; - } - - if ($privmail) { - $trimmed = Protocol::formatMention($rr['url'], $rr['name']); - } else { - $trimmed = mb_substr($rr['name'],0,20); - } - - $receiverlist[] = $trimmed; - - $o .= "\r\n"; - } - - } - - $o .= "\r\n"; - - if ($privmail && $preselected) { - $o .= implode(", ", $receiverlist); - } - - Addon::callHooks($a->module . '_post_' . $selname, $o); - - return $o; -} - - -function fixacl(&$item) { - $item = intval(str_replace(['<', '>'], ['', ''], $item)); + return Acl::getMessageContactSelectHTML($selname, $selclass, defaults($preselected, []), $size, $privmail, $celeb, $privatenet, $tabindex); } function prune_deadguys($arr) { - - if (! $arr) { - return $arr; - } - - $str = dbesc(implode(',', $arr)); - - $r = q("SELECT `id` FROM `contact` WHERE `id` IN ( " . $str . ") AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0 "); - - if (DBM::is_result($r)) { - $ret = []; - foreach ($r as $rr) { - $ret[] = intval($rr['id']); - } - return $ret; - } - - return []; + Contact::pruneUnavailable($arr); + return $arr; } - function get_acl_permissions($user = null) { - $allow_cid = $allow_gid = $deny_cid = $deny_gid = false; - - if (is_array($user)) { - $allow_cid = ((strlen($user['allow_cid'])) - ? explode('><', $user['allow_cid']) : [] ); - $allow_gid = ((strlen($user['allow_gid'])) - ? explode('><', $user['allow_gid']) : [] ); - $deny_cid = ((strlen($user['deny_cid'])) - ? explode('><', $user['deny_cid']) : [] ); - $deny_gid = ((strlen($user['deny_gid'])) - ? explode('><', $user['deny_gid']) : [] ); - array_walk($allow_cid,'fixacl'); - array_walk($allow_gid,'fixacl'); - array_walk($deny_cid,'fixacl'); - array_walk($deny_gid,'fixacl'); - } - - $allow_cid = prune_deadguys($allow_cid); - - return [ - 'allow_cid' => $allow_cid, - 'allow_gid' => $allow_gid, - 'deny_cid' => $deny_cid, - 'deny_gid' => $deny_gid, - ]; + return Acl::getDefaultUserPermissions($user); } - function populate_acl($user = null, $show_jotnets = false) { - - $perms = get_acl_permissions($user); - - $jotnets = ''; - if ($show_jotnets) { - $mail_disabled = ((function_exists('imap_open') && (! Config::get('system','imap_disabled'))) ? 0 : 1); - - $mail_enabled = false; - $pubmail_enabled = false; - - if (! $mail_disabled) { - $r = q("SELECT `pubmail` FROM `mailacct` WHERE `uid` = %d AND `server` != '' LIMIT 1", - intval(local_user()) - ); - if (DBM::is_result($r)) { - $mail_enabled = true; - if (intval($r[0]['pubmail'])) { - $pubmail_enabled = true; - } - } - } - - if (!$user['hidewall']) { - if ($mail_enabled) { - $selected = (($pubmail_enabled) ? ' checked="checked" ' : ''); - $jotnets .= '
' . L10n::t("Post to Email") . '
'; - } - - Addon::callHooks('jot_networks', $jotnets); - } else { - $jotnets .= L10n::t('Connectors disabled, since "%s" is enabled.', L10n::t('Hide your profile details from unknown viewers?')); - } - } - - $tpl = get_markup_template("acl_selector.tpl"); - $o = replace_macros($tpl, [ - '$showall'=> L10n::t("Visible to everybody"), - '$show' => L10n::t("show"), - '$hide' => L10n::t("don't show"), - '$allowcid' => json_encode($perms['allow_cid']), - '$allowgid' => json_encode($perms['allow_gid']), - '$denycid' => json_encode($perms['deny_cid']), - '$denygid' => json_encode($perms['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") - ], - ]); - - - return $o; - + return Acl::getFullSelectorHTML($user, $show_jotnets); } -function acl_lookup(App $a, $out_type = 'json') -{ - if (!local_user()) { - return ''; - } - - $start = defaults($_REQUEST, 'start' , 0); - $count = defaults($_REQUEST, 'count' , 100); - $search = defaults($_REQUEST, 'search' , ''); - $type = defaults($_REQUEST, 'type' , ''); - $conv_id = defaults($_REQUEST, 'conversation', null); - - // For use with jquery.textcomplete for private mail completion - if (x($_REQUEST, 'query')) { - if (! $type) { - $type = 'm'; - } - $search = $_REQUEST['query']; - } - - logger("Searching for ".$search." - type ".$type, LOGGER_DEBUG); - - if ($search != '') { - $sql_extra = "AND `name` LIKE '%%".dbesc($search)."%%'"; - $sql_extra2 = "AND (`attag` LIKE '%%".dbesc($search)."%%' OR `name` LIKE '%%".dbesc($search)."%%' OR `nick` LIKE '%%".dbesc($search)."%%')"; - } else { - /// @TODO Avoid these needless else blocks by putting variable-initialization atop of if() - $sql_extra = $sql_extra2 = ""; - } - - // count groups and contacts - if ($type == '' || $type == 'g') { - $r = q("SELECT COUNT(*) AS g FROM `group` WHERE `deleted` = 0 AND `uid` = %d $sql_extra", - intval(local_user()) - ); - $group_count = (int)$r[0]['g']; - } else { - $group_count = 0; - } - - $sql_extra2 .= " ".Widget::unavailableNetworks(); - - if ($type == '' || $type == 'c') { - // autocomplete for editor mentions - $r = q("SELECT COUNT(*) AS c FROM `contact` - WHERE `uid` = %d AND NOT `self` - AND NOT `blocked` AND NOT `pending` AND NOT `archive` - AND `success_update` >= `failure_update` - AND `notify` != '' $sql_extra2" , - intval(local_user()) - ); - $contact_count = (int)$r[0]['c']; - } elseif ($type == 'f') { - // autocomplete for editor mentions of forums - $r = q("SELECT COUNT(*) AS c FROM `contact` - WHERE `uid` = %d AND NOT `self` - AND NOT `blocked` AND NOT `pending` AND NOT `archive` - AND (`forum` OR `prv`) - AND `success_update` >= `failure_update` - AND `notify` != '' $sql_extra2" , - intval(local_user()) - ); - $contact_count = (int)$r[0]['c']; - } elseif ($type == 'm') { - // autocomplete for Private Messages - $r = q("SELECT COUNT(*) AS c FROM `contact` - WHERE `uid` = %d AND NOT `self` - AND NOT `blocked` AND NOT `pending` AND NOT `archive` - AND `success_update` >= `failure_update` - AND `network` IN ('%s', '%s') $sql_extra2" , - intval(local_user()), - dbesc(NETWORK_DFRN), - dbesc(NETWORK_DIASPORA) - ); - $contact_count = (int)$r[0]['c']; - - } elseif ($type == 'a') { - // autocomplete for Contacts - $r = q("SELECT COUNT(*) AS c FROM `contact` - WHERE `uid` = %d AND NOT `self` - AND NOT `pending` $sql_extra2" , - intval(local_user()) - ); - $contact_count = (int)$r[0]['c']; - } else { - $contact_count = 0; - } - - $tot = $group_count + $contact_count; - - $groups = []; - $contacts = []; - - if ($type == '' || $type == 'g') { - /// @todo We should cache this query. - // This can be done when we can delete cache entries via wildcard - $r = q("SELECT `group`.`id`, `group`.`name`, GROUP_CONCAT(DISTINCT `group_member`.`contact-id` SEPARATOR ',') AS uids - FROM `group` - INNER JOIN `group_member` ON `group_member`.`gid`=`group`.`id` - WHERE NOT `group`.`deleted` AND `group`.`uid` = %d - $sql_extra - GROUP BY `group`.`name`, `group`.`id` - ORDER BY `group`.`name` - LIMIT %d,%d", - intval(local_user()), - intval($start), - intval($count) - ); - - foreach ($r as $g) { - $groups[] = [ - "type" => "g", - "photo" => "images/twopeople.png", - "name" => htmlentities($g['name']), - "id" => intval($g['id']), - "uids" => array_map("intval", explode(",",$g['uids'])), - "link" => '', - "forum" => '0' - ]; - } - if ((count($groups) > 0) && ($search == "")) { - $groups[] = ["separator" => true]; - } - } - - if ($type == '') { - $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv`, (`prv` OR `forum`) AS `frm` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s', '%s')) - $sql_extra2 - ORDER BY `name` ASC ", - intval(local_user()), - dbesc(NETWORK_OSTATUS), dbesc(NETWORK_STATUSNET) - ); - } elseif ($type == 'c') { - $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s')) - $sql_extra2 - ORDER BY `name` ASC ", - intval(local_user()), - dbesc(NETWORK_STATUSNET) - ); - } elseif ($type == 'f') { - $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s')) - AND (`forum` OR `prv`) - $sql_extra2 - ORDER BY `name` ASC ", - intval(local_user()), - dbesc(NETWORK_STATUSNET) - ); - } elseif ($type == 'm') { - $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` - AND `success_update` >= `failure_update` AND `network` IN ('%s', '%s') - $sql_extra2 - ORDER BY `name` ASC ", - intval(local_user()), - dbesc(NETWORK_DFRN), - dbesc(NETWORK_DIASPORA) - ); - } elseif ($type == 'a') { - $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` - WHERE `uid` = %d AND `pending` = 0 AND `success_update` >= `failure_update` - $sql_extra2 - ORDER BY `name` ASC ", - intval(local_user()) - ); - } elseif ($type == 'x') { - // autocomplete for global contact search (e.g. navbar search) - $r = navbar_complete($a); - $contacts = []; - if ($r) { - foreach ($r as $g) { - $contacts[] = [ - 'photo' => proxy_url($g['photo'], false, PROXY_SIZE_MICRO), - 'name' => $g['name'], - 'nick' => (x($g['addr']) ? $g['addr'] : $g['url']), - 'network' => $g['network'], - 'link' => $g['url'], - 'forum' => (x($g['community']) ? 1 : 0), - ]; - } - } - $o = [ - 'start' => $start, - 'count' => $count, - 'items' => $contacts, - ]; - echo json_encode($o); - killme(); - } else { - $r = []; - } - - if (DBM::is_result($r)) { - $forums = []; - foreach ($r as $g) { - $entry = [ - 'type' => 'c', - 'photo' => proxy_url($g['micro'], false, PROXY_SIZE_MICRO), - 'name' => htmlentities($g['name']), - 'id' => intval($g['id']), - 'network' => $g['network'], - 'link' => $g['url'], - 'nick' => htmlentities(($g['attag']) ? $g['attag'] : $g['nick']), - 'addr' => htmlentities(($g['addr']) ? $g['addr'] : $g['url']), - 'forum' => ((x($g, 'forum') || x($g, 'prv')) ? 1 : 0), - ]; - if ($entry['forum']) { - $forums[] = $entry; - } else { - $contacts[] = $entry; - } - } - if (count($forums) > 0) { - if ($search == "") { - $forums[] = ["separator" => true]; - } - $contacts = array_merge($forums, $contacts); - } - } - - $items = array_merge($groups, $contacts); - - if ($conv_id) { - /* - * if $conv_id is set, get unknown contacts in thread - * but first get known contacts url to filter them out - */ - $known_contacts = array_map( - function ($i) { - return dbesc($i['link']); - } - , $contacts); - - $unknown_contacts = []; - $r = q("SELECT `author-link` - FROM `item` WHERE `parent` = %d - AND (`author-name` LIKE '%%%s%%' OR `author-link` LIKE '%%%s%%') - AND `author-link` NOT IN ('%s') - GROUP BY `author-link`, `author-avatar`, `author-name` - ORDER BY `author-name` ASC - ", - intval($conv_id), - dbesc($search), - dbesc($search), - implode("', '", $known_contacts) - ); - if (DBM::is_result($r)) { - foreach ($r as $row) { - $contact = Contact::getDetailsByURL($row['author-link']); - - if (count($contact) > 0) { - $unknown_contacts[] = [ - 'type' => 'c', - 'photo' => proxy_url($contact['micro'], false, PROXY_SIZE_MICRO), - 'name' => htmlentities($contact['name']), - 'id' => intval($contact['cid']), - 'network' => $contact['network'], - 'link' => $contact['url'], - 'nick' => htmlentities($contact['nick'] ? : $contact['addr']), - 'addr' => htmlentities(($contact['addr']) ? $contact['addr'] : $contact['url']), - 'forum' => $contact['forum'] - ]; - } - } - } - - $items = array_merge($items, $unknown_contacts); - $tot += count($unknown_contacts); - } - - $results = [ - 'tot' => $tot, - 'start' => $start, - 'count' => $count, - 'groups' => $groups, - 'contacts' => $contacts, - 'items' => $items, - 'type' => $type, - 'search' => $search, - ]; - - Addon::callHooks('acl_lookup_end', $results); - - if ($out_type === 'html') { - $o = [ - 'tot' => $results['tot'], - 'start' => $results['start'], - 'count' => $results['count'], - 'groups' => $results['groups'], - 'contacts' => $results['contacts'], - ]; - return $o; - } - - $o = [ - 'tot' => $results['tot'], - 'start' => $results['start'], - 'count' => $results['count'], - 'items' => $results['items'], - ]; - - echo json_encode($o); - - killme(); -} -/** - * @brief Searching for global contacts for autocompletion - * - * @param App $a - * @return array with the search results - */ function navbar_complete(App $a) { - -// logger('navbar_complete'); - - if ((Config::get('system','block_public')) && (! local_user()) && (! remote_user())) { - return; - } - - // check if searching in the local global contact table is enabled - $localsearch = Config::get('system','poco_local_search'); - $search = notags(trim($_REQUEST['search'])); $mode = $_REQUEST['smode']; - // don't search if search term has less than 2 characters - if (! $search || mb_strlen($search) < 2) { - return []; - } - - if (substr($search,0,1) === '@') { - $search = substr($search,1); - } - - if ($localsearch) { - $x = GContact::searchByName($search, $mode); - return $x; - } - - if (! $localsearch) { - $p = (($a->pager['page'] != 1) ? '&p=' . $a->pager['page'] : ''); - - $x = Network::curl(get_server() . '/lsearch?f=' . $p . '&search=' . urlencode($search)); - if ($x['success']) { - $j = json_decode($x['body'],true); - if ($j && isset($j['results'])) { - return $j['results']; - } - } - } - - /// @TODO Not needed here? - return; + return Acl::contactAutocomplete($search, $mode); } From eef25a32593a58432029c71497ee77a24f04bf1e Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 19:47:10 -0500 Subject: [PATCH 03/17] Move contact_selector() --- include/acl_selectors.php | 5 ----- mod/fsuggest.php | 6 +++--- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/include/acl_selectors.php b/include/acl_selectors.php index 37819fb567..b4eed7dd4d 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -9,11 +9,6 @@ use Friendica\Model\Contact; require_once "mod/proxy.php"; -function contact_selector($selname, $selclass, $options, $preselected = false) -{ - return Acl::getSuggestContactSelectHTML($selname, $selclass, $options, defaults($preselected, [])); -} - function contact_select($selname, $selclass, $preselected = false, $size = 4, $privmail = false, $celeb = false, $privatenet = false, $tabindex = null) { return Acl::getMessageContactSelectHTML($selname, $selclass, defaults($preselected, []), $size, $privmail, $celeb, $privatenet, $tabindex); } diff --git a/mod/fsuggest.php b/mod/fsuggest.php index 86878a5295..b0abeb2202 100644 --- a/mod/fsuggest.php +++ b/mod/fsuggest.php @@ -4,6 +4,7 @@ */ use Friendica\App; +use Friendica\Core\Acl; use Friendica\Core\L10n; use Friendica\Core\Worker; use Friendica\Database\DBM; @@ -105,11 +106,10 @@ function fsuggest_content(App $a) $o .= '
'; - $o .= contact_selector( + $o .= Acl::getSuggestContactSelectHTML( 'suggest', 'suggest-select', - ['size' => 4, 'exclude' => $contact_id, 'networks' => 'DFRN_ONLY', 'single' => true], - false + ['size' => 4, 'exclude' => $contact_id, 'networks' => 'DFRN_ONLY', 'single' => true] ); From 113ea38d502e0ca90ec87b3cbaf4d8656f733022 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 19:56:53 -0500 Subject: [PATCH 04/17] Move contact_select to Acl - Simplify Acl::getMessageContactSelectHTML parameters --- include/acl_selectors.php | 4 ---- mod/message.php | 5 +++-- src/Core/Acl.php | 44 ++++++++------------------------------- 3 files changed, 12 insertions(+), 41 deletions(-) diff --git a/include/acl_selectors.php b/include/acl_selectors.php index b4eed7dd4d..b965c2ca64 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -9,10 +9,6 @@ use Friendica\Model\Contact; require_once "mod/proxy.php"; -function contact_select($selname, $selclass, $preselected = false, $size = 4, $privmail = false, $celeb = false, $privatenet = false, $tabindex = null) { - return Acl::getMessageContactSelectHTML($selname, $selclass, defaults($preselected, []), $size, $privmail, $celeb, $privatenet, $tabindex); -} - function prune_deadguys($arr) { Contact::pruneUnavailable($arr); return $arr; diff --git a/mod/message.php b/mod/message.php index 40f1dd08c0..d2980aaea1 100644 --- a/mod/message.php +++ b/mod/message.php @@ -7,6 +7,7 @@ use Friendica\App; use Friendica\Content\Nav; use Friendica\Content\Smilies; use Friendica\Content\Text\BBCode; +use Friendica\Core\Acl; use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Database\DBM; @@ -236,14 +237,14 @@ function message_content(App $a) $preid = $r[0]['id']; $preselect = [$preid]; } else { - $preselect = false; + $preselect = []; } } $prefill = $preselect ? $prename : ''; // the ugly select box - $select = contact_select('messageto', 'message-to-select', $preselect, 4, true, false, false, 10); + $select = Acl::getMessageContactSelectHTML('messageto', 'message-to-select', $preselect, 4, 10); $tpl = get_markup_template('prv_message.tpl'); $o .= replace_macros($tpl, [ diff --git a/src/Core/Acl.php b/src/Core/Acl.php index 67e2633a2e..1c72d23cbe 100644 --- a/src/Core/Acl.php +++ b/src/Core/Acl.php @@ -153,17 +153,12 @@ class Acl extends BaseObject * * @param string $selname Name attribute of the select input tag * @param string $selclass Class attribute of the select input tag - * @param array $preselected Contact ID that should be already selected + * @param array $preselected Contact IDs that should be already selected * @param int $size Length of the select box - * @param bool $privmail - * @param bool $celeb - * @param bool $privatenet * @param int $tabindex Select input tag tabindex attribute * @return string */ - public static function getMessageContactSelectHTML( - $selname, $selclass, array $preselected = [], $size = 4, $privmail = false, $celeb = false, $privatenet = false, - $tabindex = null) + public static function getMessageContactSelectHTML($selname, $selclass, array $preselected = [], $size = 4, $tabindex = null) { $a = self::getApp(); @@ -171,34 +166,18 @@ class Acl extends BaseObject // 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. - - $sql_extra = ''; - - if ($privmail || $celeb) { - $sql_extra .= sprintf(" AND `rel` = %d ", intval(CONTACT_IS_FRIEND)); - } - - if ($privmail) { - $sql_extra .= sprintf(" AND `network` IN ('%s' , '%s') ", NETWORK_DFRN, NETWORK_DIASPORA); - } elseif ($privatenet) { - $sql_extra .= sprintf(" AND `network` IN ('%s' , '%s', '%s', '%s') ", NETWORK_DFRN, NETWORK_MAIL, NETWORK_FACEBOOK, - NETWORK_DIASPORA); - } + $sql_extra = sprintf(" AND `rel` = %d ", intval(CONTACT_IS_FRIEND)); + $sql_extra .= sprintf(" AND `network` IN ('%s' , '%s') ", NETWORK_DFRN, NETWORK_DIASPORA); $tabindex_attr = !empty($tabindex) ? ' tabindex="' . intval($tabindex) . '"' : ''; - if ($privmail && $preselected) { + $hidepreselected = ''; + if ($preselected) { $sql_extra .= " AND `id` IN (" . implode(",", $preselected) . ")"; $hidepreselected = ' style="display: none;"'; - } else { - $hidepreselected = ''; } - if ($privmail) { - $o .= "\r\n"; - } + $o .= "' . PHP_EOL; - if ($privmail && $preselected) { + if ($preselected) { $o .= implode(', ', $receiverlist); } From ce9e0f3649d89c7acdc1290ffb3175ff84eab664 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 19:58:23 -0500 Subject: [PATCH 05/17] Move prune_deadguys to Contact --- include/acl_selectors.php | 5 ----- src/Model/Group.php | 4 ++-- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/include/acl_selectors.php b/include/acl_selectors.php index b965c2ca64..9eab2ffd7c 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -9,11 +9,6 @@ use Friendica\Model\Contact; require_once "mod/proxy.php"; -function prune_deadguys($arr) { - Contact::pruneUnavailable($arr); - return $arr; -} - function get_acl_permissions($user = null) { return Acl::getDefaultUserPermissions($user); } diff --git a/src/Model/Group.php b/src/Model/Group.php index 9e472a7ade..c1430642de 100644 --- a/src/Model/Group.php +++ b/src/Model/Group.php @@ -4,8 +4,8 @@ */ namespace Friendica\Model; -use Friendica\Core\L10n; use Friendica\BaseObject; +use Friendica\Core\L10n; use Friendica\Database\DBM; use dba; @@ -290,7 +290,7 @@ class Group extends BaseObject if ($check_dead && !$use_gcontact) { require_once 'include/acl_selectors.php'; - $return = prune_deadguys($return); + Contact::pruneUnavailable($return); } return $return; } From 2b35938e34da9327d32f0883eae525b85ccce88a Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 20:00:05 -0500 Subject: [PATCH 06/17] Move get_acl_permissions to Acl --- include/acl_selectors.php | 4 ---- mod/bookmarklet.php | 4 +++- mod/events.php | 3 ++- mod/network.php | 5 +++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/include/acl_selectors.php b/include/acl_selectors.php index 9eab2ffd7c..ef7eef108f 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -9,10 +9,6 @@ use Friendica\Model\Contact; require_once "mod/proxy.php"; -function get_acl_permissions($user = null) { - return Acl::getDefaultUserPermissions($user); -} - function populate_acl($user = null, $show_jotnets = false) { return Acl::getFullSelectorHTML($user, $show_jotnets); } diff --git a/mod/bookmarklet.php b/mod/bookmarklet.php index 7a6a3ee21c..45c3d31907 100644 --- a/mod/bookmarklet.php +++ b/mod/bookmarklet.php @@ -2,7 +2,9 @@ /** * @file mod/bookmarklet.php */ + use Friendica\App; +use Friendica\Core\Acl; use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Module\Login; @@ -35,7 +37,7 @@ function bookmarklet_content(App $a) 'default_location' => $a->user['default-location'], 'nickname' => $a->user['nickname'], 'lockstate' => ((is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid'])))) ? 'lock' : 'unlock'), - 'default_perms' => get_acl_permissions($a->user), + 'default_perms' => Acl::getDefaultUserPermissions($a->user), 'acl' => populate_acl($a->user, true), 'bang' => '', 'visitor' => 'block', diff --git a/mod/events.php b/mod/events.php index 695dbb290f..cf84dc7bad 100644 --- a/mod/events.php +++ b/mod/events.php @@ -6,6 +6,7 @@ use Friendica\App; use Friendica\Content\Nav; +use Friendica\Core\Acl; use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Core\Worker; @@ -480,7 +481,7 @@ function events_content(App $a) { require_once 'include/acl_selectors.php' ; - $perms = get_acl_permissions($orig_event); + $perms = Acl::getDefaultUserPermissions($orig_event); if ($mode === 'new' || $mode === 'copy') { $acl = (($cid) ? '' : populate_acl(((x($orig_event)) ? $orig_event : $a->user))); diff --git a/mod/network.php b/mod/network.php index c2cb8e03fc..9ab476004d 100644 --- a/mod/network.php +++ b/mod/network.php @@ -9,6 +9,7 @@ use Friendica\Content\Feature; use Friendica\Content\ForumManager; use Friendica\Content\Nav; use Friendica\Content\Widget; +use Friendica\Core\Acl; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -427,7 +428,7 @@ function networkFlatView(App $a, $update = 0) 'lockstate' => (((is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))) ? 'lock' : 'unlock'), - 'default_perms' => get_acl_permissions($a->user), + 'default_perms' => Acl::getDefaultUserPermissions($a->user), 'acl' => populate_acl($a->user, true), 'bang' => '', 'visitor' => 'block', @@ -576,7 +577,7 @@ function networkThreadedView(App $a, $update, $parent) 'lockstate' => ((($gid) || ($cid) || ($nets) || (is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))) ? 'lock' : 'unlock'), - 'default_perms' => get_acl_permissions($a->user), + 'default_perms' => Acl::getDefaultUserPermissions($a->user), 'acl' => populate_acl((($gid || $cid || $nets) ? $def_acl : $a->user), true), 'bang' => (($gid || $cid || $nets) ? '!' : ''), 'visitor' => 'block', From 824262b8248701b9f0bd33168e73108eb457c464 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 20:03:03 -0500 Subject: [PATCH 07/17] Move populate_acl to Acl --- include/acl_selectors.php | 4 ---- mod/bookmarklet.php | 2 +- mod/community.php | 4 +++- mod/display.php | 3 ++- mod/events.php | 2 +- mod/network.php | 4 ++-- mod/photos.php | 5 +++-- mod/profile.php | 3 ++- mod/settings.php | 3 ++- 9 files changed, 16 insertions(+), 14 deletions(-) diff --git a/include/acl_selectors.php b/include/acl_selectors.php index ef7eef108f..2c9770f9bd 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -9,10 +9,6 @@ use Friendica\Model\Contact; require_once "mod/proxy.php"; -function populate_acl($user = null, $show_jotnets = false) { - return Acl::getFullSelectorHTML($user, $show_jotnets); -} - function navbar_complete(App $a) { $search = notags(trim($_REQUEST['search'])); $mode = $_REQUEST['smode']; diff --git a/mod/bookmarklet.php b/mod/bookmarklet.php index 45c3d31907..5d8d02c477 100644 --- a/mod/bookmarklet.php +++ b/mod/bookmarklet.php @@ -38,7 +38,7 @@ function bookmarklet_content(App $a) 'nickname' => $a->user['nickname'], 'lockstate' => ((is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid'])))) ? 'lock' : 'unlock'), 'default_perms' => Acl::getDefaultUserPermissions($a->user), - 'acl' => populate_acl($a->user, true), + 'acl' => Acl::getFullSelectorHTML($a->user, true), 'bang' => '', 'visitor' => 'block', 'profile_uid' => local_user(), diff --git a/mod/community.php b/mod/community.php index 88fc6168bb..5f0bd34a13 100644 --- a/mod/community.php +++ b/mod/community.php @@ -2,8 +2,10 @@ /** * @file mod/community.php */ + use Friendica\App; use Friendica\Content\Nav; +use Friendica\Core\Acl; use Friendica\Core\Config; use Friendica\Core\L10n; use Friendica\Core\PConfig; @@ -104,7 +106,7 @@ function community_content(App $a, $update = 0) 'default_location' => $a->user['default-location'], 'nickname' => $a->user['nickname'], 'lockstate' => (is_array($a->user) && (strlen($a->user['allow_cid']) || strlen($a->user['allow_gid']) || strlen($a->user['deny_cid']) || strlen($a->user['deny_gid'])) ? 'lock' : 'unlock'), - 'acl' => populate_acl($a->user, true), + 'acl' => Acl::getFullSelectorHTML($a->user, true), 'bang' => '', 'visitor' => 'block', 'profile_uid' => local_user(), diff --git a/mod/display.php b/mod/display.php index 42aad736cc..d543535aa7 100644 --- a/mod/display.php +++ b/mod/display.php @@ -5,6 +5,7 @@ use Friendica\App; use Friendica\Content\Text\BBCode; +use Friendica\Core\Acl; use Friendica\Core\Config; use Friendica\Core\L10n; use Friendica\Core\Protocol; @@ -317,7 +318,7 @@ function display_content(App $a, $update = false, $update_uid = 0) { 'default_location' => $a->user['default-location'], 'nickname' => $a->user['nickname'], 'lockstate' => (is_array($a->user) && (strlen($a->user['allow_cid']) || strlen($a->user['allow_gid']) || strlen($a->user['deny_cid']) || strlen($a->user['deny_gid'])) ? 'lock' : 'unlock'), - 'acl' => populate_acl($a->user, true), + 'acl' => Acl::getFullSelectorHTML($a->user, true), 'bang' => '', 'visitor' => 'block', 'profile_uid' => local_user(), diff --git a/mod/events.php b/mod/events.php index cf84dc7bad..7a54056b5a 100644 --- a/mod/events.php +++ b/mod/events.php @@ -484,7 +484,7 @@ function events_content(App $a) { $perms = Acl::getDefaultUserPermissions($orig_event); if ($mode === 'new' || $mode === 'copy') { - $acl = (($cid) ? '' : populate_acl(((x($orig_event)) ? $orig_event : $a->user))); + $acl = (($cid) ? '' : Acl::getFullSelectorHTML(((x($orig_event)) ? $orig_event : $a->user))); } // If we copy an old event, we need to remove the ID and URI diff --git a/mod/network.php b/mod/network.php index 9ab476004d..f7cc167642 100644 --- a/mod/network.php +++ b/mod/network.php @@ -429,7 +429,7 @@ function networkFlatView(App $a, $update = 0) ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))) ? 'lock' : 'unlock'), 'default_perms' => Acl::getDefaultUserPermissions($a->user), - 'acl' => populate_acl($a->user, true), + 'acl' => Acl::getFullSelectorHTML($a->user, true), 'bang' => '', 'visitor' => 'block', 'profile_uid' => local_user(), @@ -578,7 +578,7 @@ function networkThreadedView(App $a, $update, $parent) ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))) ? 'lock' : 'unlock'), 'default_perms' => Acl::getDefaultUserPermissions($a->user), - 'acl' => populate_acl((($gid || $cid || $nets) ? $def_acl : $a->user), true), + 'acl' => Acl::getFullSelectorHTML((($gid || $cid || $nets) ? $def_acl : $a->user), true), 'bang' => (($gid || $cid || $nets) ? '!' : ''), 'visitor' => 'block', 'profile_uid' => local_user(), diff --git a/mod/photos.php b/mod/photos.php index 3cd8b75286..fd8f1c84c7 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -7,6 +7,7 @@ use Friendica\App; use Friendica\Content\Feature; use Friendica\Content\Nav; use Friendica\Content\Text\BBCode; +use Friendica\Core\Acl; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -1084,7 +1085,7 @@ function photos_content(App $a) $tpl = get_markup_template('photos_upload.tpl'); - $aclselect_e = ($visitor ? '' : populate_acl($a->user)); + $aclselect_e = ($visitor ? '' : Acl::getFullSelectorHTML($a->user)); $o .= replace_macros($tpl,[ '$pagename' => L10n::t('Upload Photos'), @@ -1425,7 +1426,7 @@ function photos_content(App $a) $album_e = $ph[0]['album']; $caption_e = $ph[0]['desc']; - $aclselect_e = populate_acl($ph[0]); + $aclselect_e = Acl::getFullSelectorHTML($ph[0]); $edit = replace_macros($edit_tpl, [ '$id' => $ph[0]['id'], diff --git a/mod/profile.php b/mod/profile.php index 5e5988994c..6e8de35277 100644 --- a/mod/profile.php +++ b/mod/profile.php @@ -6,6 +6,7 @@ use Friendica\App; use Friendica\Content\Nav; use Friendica\Content\Widget; +use Friendica\Core\Acl; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -213,7 +214,7 @@ function profile_content(App $a, $update = 0) || strlen($a->user['deny_cid']) || strlen($a->user['deny_gid']) ) ? 'lock' : 'unlock', - 'acl' => $is_owner ? populate_acl($a->user, true) : '', + 'acl' => $is_owner ? Acl::getFullSelectorHTML($a->user, true) : '', 'bang' => '', 'visitor' => $is_owner || $commvisitor ? 'block' : 'none', 'profile_uid' => $a->profile['profile_uid'], diff --git a/mod/settings.php b/mod/settings.php index 6fcbe4d116..6646f1559c 100644 --- a/mod/settings.php +++ b/mod/settings.php @@ -6,6 +6,7 @@ use Friendica\App; use Friendica\Content\Feature; use Friendica\Content\Nav; +use Friendica\Core\Acl; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -1224,7 +1225,7 @@ function settings_content(App $a) '$permissions' => L10n::t('Default Post Permissions'), '$permdesc' => L10n::t("\x28click to open/close\x29"), '$visibility' => $profile['net-publish'], - '$aclselect' => populate_acl($a->user), + '$aclselect' => Acl::getFullSelectorHTML($a->user), '$suggestme' => $suggestme, '$blockwall'=> $blockwall, // array('blockwall', L10n::t('Allow friends to post to your profile page:'), !$blockwall, ''), '$blocktags'=> $blocktags, // array('blocktags', L10n::t('Allow friends to tag your posts:'), !$blocktags, ''), From 207eac4a1694e41a0f80a867d2af4bfdecbc0fb0 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 20:04:30 -0500 Subject: [PATCH 08/17] Move navbar_complete to Acl --- include/acl_selectors.php | 6 ------ mod/acl.php | 7 ++++++- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/include/acl_selectors.php b/include/acl_selectors.php index 2c9770f9bd..e6d1a8a92e 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -9,9 +9,3 @@ use Friendica\Model\Contact; require_once "mod/proxy.php"; -function navbar_complete(App $a) { - $search = notags(trim($_REQUEST['search'])); - $mode = $_REQUEST['smode']; - - return Acl::contactAutocomplete($search, $mode); -} diff --git a/mod/acl.php b/mod/acl.php index e325e4668d..a178a69221 100644 --- a/mod/acl.php +++ b/mod/acl.php @@ -4,6 +4,7 @@ use Friendica\App; use Friendica\Content\Widget; +use Friendica\Core\Acl; use Friendica\Core\Addon; use Friendica\Database\DBM; use Friendica\Model\Contact; @@ -184,7 +185,11 @@ function acl_content(App $a) ); } elseif ($type == 'x') { // autocomplete for global contact search (e.g. navbar search) - $r = navbar_complete($a); + $search = notags(trim($_REQUEST['search'])); + $mode = $_REQUEST['smode']; + + $r = Acl::contactAutocomplete($search, $mode); + $contacts = []; foreach ($r as $g) { $contacts[] = [ From 09c717d7519ef871a6f3ce0a73f7e24466bd50f0 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 20:08:33 -0500 Subject: [PATCH 09/17] Remove references to include/acl_selectors --- include/conversation.php | 2 -- mod/acl.php | 1 - mod/display.php | 1 - mod/editpost.php | 2 -- mod/events.php | 2 -- mod/fsuggest.php | 2 -- mod/group.php | 1 - mod/message.php | 1 - mod/network.php | 1 - mod/notes.php | 1 - mod/photos.php | 1 - mod/profile.php | 1 - mod/settings.php | 2 -- mod/videos.php | 1 - src/Model/Group.php | 1 - 15 files changed, 20 deletions(-) diff --git a/include/conversation.php b/include/conversation.php index c7a2379d53..ba7b7315b0 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -21,8 +21,6 @@ use Friendica\Util\DateTimeFormat; use Friendica\Util\Temporal; use Friendica\Util\XML; -require_once "include/acl_selectors.php"; - function item_extract_images($body) { $saved_image = []; diff --git a/mod/acl.php b/mod/acl.php index a178a69221..a3cc335b1d 100644 --- a/mod/acl.php +++ b/mod/acl.php @@ -9,7 +9,6 @@ use Friendica\Core\Addon; use Friendica\Database\DBM; use Friendica\Model\Contact; -require_once 'include/acl_selectors.php'; require_once 'include/dba.php'; require_once 'mod/proxy.php'; diff --git a/mod/display.php b/mod/display.php index d543535aa7..59e8aa277e 100644 --- a/mod/display.php +++ b/mod/display.php @@ -205,7 +205,6 @@ function display_content(App $a, $update = false, $update_uid = 0) { require_once 'include/security.php'; require_once 'include/conversation.php'; - require_once 'include/acl_selectors.php'; $o = ''; diff --git a/mod/editpost.php b/mod/editpost.php index 3081b67293..aa2c296845 100644 --- a/mod/editpost.php +++ b/mod/editpost.php @@ -10,8 +10,6 @@ use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Database\DBM; -require_once 'include/acl_selectors.php'; - function editpost_content(App $a) { $o = ''; diff --git a/mod/events.php b/mod/events.php index 7a54056b5a..3cc2ae2b4b 100644 --- a/mod/events.php +++ b/mod/events.php @@ -479,8 +479,6 @@ function events_content(App $a) { $fhour = ((x($orig_event)) ? DateTimeFormat::convert($fdt, $tz, 'UTC', 'H') : '00'); $fminute = ((x($orig_event)) ? DateTimeFormat::convert($fdt, $tz, 'UTC', 'i') : '00'); - require_once 'include/acl_selectors.php' ; - $perms = Acl::getDefaultUserPermissions($orig_event); if ($mode === 'new' || $mode === 'copy') { diff --git a/mod/fsuggest.php b/mod/fsuggest.php index b0abeb2202..55f9c3231a 100644 --- a/mod/fsuggest.php +++ b/mod/fsuggest.php @@ -76,8 +76,6 @@ function fsuggest_post(App $a) function fsuggest_content(App $a) { - require_once 'include/acl_selectors.php'; - if (! local_user()) { notice(L10n::t('Permission denied.') . EOL); return; diff --git a/mod/group.php b/mod/group.php index 0473e2af9f..870025074c 100644 --- a/mod/group.php +++ b/mod/group.php @@ -146,7 +146,6 @@ function group_content(App $a) { } if (($a->argc > 1) && (intval($a->argv[1]))) { - require_once 'include/acl_selectors.php'; require_once 'mod/contacts.php'; $r = q("SELECT * FROM `group` WHERE `id` = %d AND `uid` = %d AND `deleted` = 0 LIMIT 1", diff --git a/mod/message.php b/mod/message.php index d2980aaea1..e7d8a2080e 100644 --- a/mod/message.php +++ b/mod/message.php @@ -16,7 +16,6 @@ use Friendica\Model\Mail; use Friendica\Util\DateTimeFormat; use Friendica\Util\Temporal; -require_once 'include/acl_selectors.php'; require_once 'include/conversation.php'; function message_init(App $a) diff --git a/mod/network.php b/mod/network.php index f7cc167642..9e1a05a112 100644 --- a/mod/network.php +++ b/mod/network.php @@ -25,7 +25,6 @@ use Friendica\Util\DateTimeFormat; require_once 'include/conversation.php'; require_once 'include/items.php'; -require_once 'include/acl_selectors.php'; function network_init(App $a) { diff --git a/mod/notes.php b/mod/notes.php index 3b46df07da..aa239fb0e0 100644 --- a/mod/notes.php +++ b/mod/notes.php @@ -33,7 +33,6 @@ function notes_content(App $a, $update = false) require_once 'include/security.php'; require_once 'include/conversation.php'; - require_once 'include/acl_selectors.php'; $groups = []; diff --git a/mod/photos.php b/mod/photos.php index fd8f1c84c7..a34a28fc1a 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -27,7 +27,6 @@ use Friendica\Util\Map; use Friendica\Util\Temporal; require_once 'include/items.php'; -require_once 'include/acl_selectors.php'; require_once 'include/security.php'; function photos_init(App $a) { diff --git a/mod/profile.php b/mod/profile.php index 6e8de35277..830fc04c7f 100644 --- a/mod/profile.php +++ b/mod/profile.php @@ -119,7 +119,6 @@ function profile_content(App $a, $update = 0) require_once 'include/security.php'; require_once 'include/conversation.php'; - require_once 'include/acl_selectors.php'; require_once 'include/items.php'; $groups = []; diff --git a/mod/settings.php b/mod/settings.php index 6646f1559c..1ac3f434bb 100644 --- a/mod/settings.php +++ b/mod/settings.php @@ -1000,8 +1000,6 @@ function settings_content(App $a) * ACCOUNT SETTINGS */ - require_once('include/acl_selectors.php'); - $profile = dba::selectFirst('profile', [], ['is-default' => true, 'uid' => local_user()]); if (!DBM::is_result($profile)) { notice(L10n::t('Unable to find your profile. Please contact your admin.') . EOL); diff --git a/mod/videos.php b/mod/videos.php index 75a4d031f3..f4b8c46b1b 100644 --- a/mod/videos.php +++ b/mod/videos.php @@ -19,7 +19,6 @@ use Friendica\Protocol\DFRN; use Friendica\Util\DateTimeFormat; require_once 'include/items.php'; -require_once 'include/acl_selectors.php'; require_once 'include/security.php'; function videos_init(App $a) { diff --git a/src/Model/Group.php b/src/Model/Group.php index c1430642de..f48dd50431 100644 --- a/src/Model/Group.php +++ b/src/Model/Group.php @@ -289,7 +289,6 @@ class Group extends BaseObject } if ($check_dead && !$use_gcontact) { - require_once 'include/acl_selectors.php'; Contact::pruneUnavailable($return); } return $return; From 2f463dfb17ac1ca554bd935c2a6529c577a1c21f Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 20:08:51 -0500 Subject: [PATCH 10/17] Remove include/acl_selectors --- include/acl_selectors.php | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 include/acl_selectors.php diff --git a/include/acl_selectors.php b/include/acl_selectors.php deleted file mode 100644 index e6d1a8a92e..0000000000 --- a/include/acl_selectors.php +++ /dev/null @@ -1,11 +0,0 @@ - Date: Sun, 25 Feb 2018 20:24:46 -0500 Subject: [PATCH 11/17] Prettify mod/acl - Replace obsolete x() and killme() calls - Simplify ternary operators with defaults() - Restore list alignment - Extract variable initialization from else conditions --- mod/acl.php | 102 +++++++++++++++++++++++++--------------------------- 1 file changed, 49 insertions(+), 53 deletions(-) diff --git a/mod/acl.php b/mod/acl.php index a3cc335b1d..23875b6831 100644 --- a/mod/acl.php +++ b/mod/acl.php @@ -18,14 +18,14 @@ function acl_content(App $a) return ''; } - $start = defaults($_REQUEST, 'start', 0); - $count = defaults($_REQUEST, 'count', 100); - $search = defaults($_REQUEST, 'search', ''); - $type = defaults($_REQUEST, 'type', ''); + $start = defaults($_REQUEST, 'start' , 0); + $count = defaults($_REQUEST, 'count' , 100); + $search = defaults($_REQUEST, 'search' , ''); + $type = defaults($_REQUEST, 'type' , ''); $conv_id = defaults($_REQUEST, 'conversation', null); // For use with jquery.textcomplete for private mail completion - if (x($_REQUEST, 'query')) { + if (!empty($_REQUEST['query'])) { if (!$type) { $type = 'm'; } @@ -43,17 +43,17 @@ function acl_content(App $a) } // count groups and contacts + $group_count = 0; if ($type == '' || $type == 'g') { $r = q("SELECT COUNT(*) AS g FROM `group` WHERE `deleted` = 0 AND `uid` = %d $sql_extra", intval(local_user()) ); $group_count = (int) $r[0]['g']; - } else { - $group_count = 0; } $sql_extra2 .= ' ' . Widget::unavailableNetworks(); + $contact_count = 0; if ($type == '' || $type == 'c') { // autocomplete for editor mentions $r = q("SELECT COUNT(*) AS c FROM `contact` @@ -95,8 +95,6 @@ function acl_content(App $a) intval(local_user()) ); $contact_count = (int) $r[0]['c']; - } else { - $contact_count = 0; } $tot = $group_count + $contact_count; @@ -122,12 +120,12 @@ function acl_content(App $a) foreach ($r as $g) { $groups[] = [ - 'type' => 'g', + 'type' => 'g', 'photo' => 'images/twopeople.png', - 'name' => htmlentities($g['name']), - 'id' => intval($g['id']), - 'uids' => array_map('intval', explode(',', $g['uids'])), - 'link' => '', + 'name' => htmlentities($g['name']), + 'id' => intval($g['id']), + 'uids' => array_map('intval', explode(',', $g['uids'])), + 'link' => '', 'forum' => '0' ]; } @@ -136,50 +134,51 @@ function acl_content(App $a) } } + $r = []; if ($type == '') { $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv`, (`prv` OR `forum`) AS `frm` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s', '%s')) - $sql_extra2 - ORDER BY `name` ASC ", + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s', '%s')) + $sql_extra2 + ORDER BY `name` ASC ", intval(local_user()), dbesc(NETWORK_OSTATUS), dbesc(NETWORK_STATUSNET) ); } elseif ($type == 'c') { $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s')) - $sql_extra2 - ORDER BY `name` ASC ", + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s')) + $sql_extra2 + ORDER BY `name` ASC ", intval(local_user()), dbesc(NETWORK_STATUSNET) ); } elseif ($type == 'f') { $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s')) - AND (`forum` OR `prv`) - $sql_extra2 - ORDER BY `name` ASC ", + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s')) + AND (`forum` OR `prv`) + $sql_extra2 + ORDER BY `name` ASC ", intval(local_user()), dbesc(NETWORK_STATUSNET) ); } elseif ($type == 'm') { $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` - AND `success_update` >= `failure_update` AND `network` IN ('%s', '%s') - $sql_extra2 - ORDER BY `name` ASC ", + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` + AND `success_update` >= `failure_update` AND `network` IN ('%s', '%s') + $sql_extra2 + ORDER BY `name` ASC ", intval(local_user()), dbesc(NETWORK_DFRN), dbesc(NETWORK_DIASPORA) ); } elseif ($type == 'a') { $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` - WHERE `uid` = %d AND `pending` = 0 AND `success_update` >= `failure_update` - $sql_extra2 - ORDER BY `name` ASC ", + WHERE `uid` = %d AND `pending` = 0 AND `success_update` >= `failure_update` + $sql_extra2 + ORDER BY `name` ASC ", intval(local_user()) ); } elseif ($type == 'x') { @@ -194,10 +193,10 @@ function acl_content(App $a) $contacts[] = [ 'photo' => proxy_url($g['photo'], false, PROXY_SIZE_MICRO), 'name' => $g['name'], - 'nick' => (x($g['addr']) ? $g['addr'] : $g['url']), + 'nick' => defaults($g, 'addr', $g['url']), 'network' => $g['network'], 'link' => $g['url'], - 'forum' => (x($g['community']) ? 1 : 0), + 'forum' => !empty($g['community']) ? 1 : 0, ]; } $o = [ @@ -206,9 +205,7 @@ function acl_content(App $a) 'items' => $contacts, ]; echo json_encode($o); - killme(); - } else { - $r = []; + exit; } if (DBM::is_result($r)) { @@ -221,9 +218,9 @@ function acl_content(App $a) 'id' => intval($g['id']), 'network' => $g['network'], 'link' => $g['url'], - 'nick' => htmlentities(($g['attag']) ? $g['attag'] : $g['nick']), - 'addr' => htmlentities(($g['addr']) ? $g['addr'] : $g['url']), - 'forum' => ((x($g, 'forum') || x($g, 'prv')) ? 1 : 0), + 'nick' => htmlentities(defaults($g, 'attag', $g['nick'])), + 'addr' => htmlentities(defaults($g, 'addr', $g['url'])), + 'forum' => !empty($g['forum']) || !empty($g['prv']) ? 1 : 0, ]; if ($entry['forum']) { $forums[] = $entry; @@ -269,15 +266,15 @@ function acl_content(App $a) if (count($contact) > 0) { $unknown_contacts[] = [ - 'type' => 'c', - 'photo' => proxy_url($contact['micro'], false, PROXY_SIZE_MICRO), - 'name' => htmlentities($contact['name']), - 'id' => intval($contact['cid']), + 'type' => 'c', + 'photo' => proxy_url($contact['micro'], false, PROXY_SIZE_MICRO), + 'name' => htmlentities($contact['name']), + 'id' => intval($contact['cid']), 'network' => $contact['network'], - 'link' => $contact['url'], - 'nick' => htmlentities($contact['nick'] ?: $contact['addr']), - 'addr' => htmlentities(($contact['addr']) ? $contact['addr'] : $contact['url']), - 'forum' => $contact['forum'] + 'link' => $contact['url'], + 'nick' => htmlentities(defaults($contact, 'nick', $contact['addr'])), + 'addr' => htmlentities(defaults($contact, 'addr', $contact['url'])), + 'forum' => $contact['forum'] ]; } } @@ -301,13 +298,12 @@ function acl_content(App $a) Addon::callHooks('acl_lookup_end', $results); $o = [ - 'tot' => $results['tot'], + 'tot' => $results['tot'], 'start' => $results['start'], 'count' => $results['count'], 'items' => $results['items'], ]; echo json_encode($o); - - killme(); + exit; } From dca0fa3f1d48ad8c63c8b7210ea7cb550baddb6d Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 28 Feb 2018 20:08:59 -0500 Subject: [PATCH 12/17] Fix wrong variable type in mod/message --- mod/message.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod/message.php b/mod/message.php index e7d8a2080e..27ba765d02 100644 --- a/mod/message.php +++ b/mod/message.php @@ -207,7 +207,7 @@ function message_content(App $a) '$linkurl' => L10n::t('Please enter a link URL:') ]); - $preselect = isset($a->argv[2]) ? [$a->argv[2]] : false; + $preselect = isset($a->argv[2]) ? [$a->argv[2]] : []; $prename = $preurl = $preid = ''; From 35d09fdad1af0ff64ab1f1e3cab8c1befeef711f Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 28 Feb 2018 20:09:19 -0500 Subject: [PATCH 13/17] Fix query mistake in Acl::getSuggestContactSelectHTML --- src/Core/Acl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Core/Acl.php b/src/Core/Acl.php index 1c72d23cbe..1bc150aca5 100644 --- a/src/Core/Acl.php +++ b/src/Core/Acl.php @@ -115,7 +115,7 @@ class Acl extends BaseObject } $stmt = dba::p("SELECT `id`, `name`, `url`, `network` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + 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()) ); From a7db21c8fd8d1584bbc77566c830e26d9ea3519b Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Fri, 2 Mar 2018 18:41:24 -0500 Subject: [PATCH 14/17] Rename Core\Acl to Core\ACL --- mod/acl.php | 4 ++-- mod/bookmarklet.php | 6 +++--- mod/community.php | 4 ++-- mod/display.php | 4 ++-- mod/events.php | 6 +++--- mod/fsuggest.php | 4 ++-- mod/message.php | 4 ++-- mod/network.php | 10 +++++----- mod/photos.php | 6 +++--- mod/profile.php | 4 ++-- mod/settings.php | 4 ++-- 11 files changed, 28 insertions(+), 28 deletions(-) diff --git a/mod/acl.php b/mod/acl.php index 23875b6831..11d9e5683a 100644 --- a/mod/acl.php +++ b/mod/acl.php @@ -4,7 +4,7 @@ use Friendica\App; use Friendica\Content\Widget; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\Addon; use Friendica\Database\DBM; use Friendica\Model\Contact; @@ -186,7 +186,7 @@ function acl_content(App $a) $search = notags(trim($_REQUEST['search'])); $mode = $_REQUEST['smode']; - $r = Acl::contactAutocomplete($search, $mode); + $r = ACL::contactAutocomplete($search, $mode); $contacts = []; foreach ($r as $g) { diff --git a/mod/bookmarklet.php b/mod/bookmarklet.php index 5d8d02c477..9ae3e28f08 100644 --- a/mod/bookmarklet.php +++ b/mod/bookmarklet.php @@ -4,7 +4,7 @@ */ use Friendica\App; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Module\Login; @@ -37,8 +37,8 @@ function bookmarklet_content(App $a) 'default_location' => $a->user['default-location'], 'nickname' => $a->user['nickname'], 'lockstate' => ((is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid'])))) ? 'lock' : 'unlock'), - 'default_perms' => Acl::getDefaultUserPermissions($a->user), - 'acl' => Acl::getFullSelectorHTML($a->user, true), + 'default_perms' => ACL::getDefaultUserPermissions($a->user), + 'acl' => ACL::getFullSelectorHTML($a->user, true), 'bang' => '', 'visitor' => 'block', 'profile_uid' => local_user(), diff --git a/mod/community.php b/mod/community.php index 5f0bd34a13..40ebdbb6e0 100644 --- a/mod/community.php +++ b/mod/community.php @@ -5,7 +5,7 @@ use Friendica\App; use Friendica\Content\Nav; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\Config; use Friendica\Core\L10n; use Friendica\Core\PConfig; @@ -106,7 +106,7 @@ function community_content(App $a, $update = 0) 'default_location' => $a->user['default-location'], 'nickname' => $a->user['nickname'], 'lockstate' => (is_array($a->user) && (strlen($a->user['allow_cid']) || strlen($a->user['allow_gid']) || strlen($a->user['deny_cid']) || strlen($a->user['deny_gid'])) ? 'lock' : 'unlock'), - 'acl' => Acl::getFullSelectorHTML($a->user, true), + 'acl' => ACL::getFullSelectorHTML($a->user, true), 'bang' => '', 'visitor' => 'block', 'profile_uid' => local_user(), diff --git a/mod/display.php b/mod/display.php index 59e8aa277e..ab27b283b7 100644 --- a/mod/display.php +++ b/mod/display.php @@ -5,7 +5,7 @@ use Friendica\App; use Friendica\Content\Text\BBCode; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\Config; use Friendica\Core\L10n; use Friendica\Core\Protocol; @@ -317,7 +317,7 @@ function display_content(App $a, $update = false, $update_uid = 0) { 'default_location' => $a->user['default-location'], 'nickname' => $a->user['nickname'], 'lockstate' => (is_array($a->user) && (strlen($a->user['allow_cid']) || strlen($a->user['allow_gid']) || strlen($a->user['deny_cid']) || strlen($a->user['deny_gid'])) ? 'lock' : 'unlock'), - 'acl' => Acl::getFullSelectorHTML($a->user, true), + 'acl' => ACL::getFullSelectorHTML($a->user, true), 'bang' => '', 'visitor' => 'block', 'profile_uid' => local_user(), diff --git a/mod/events.php b/mod/events.php index 3cc2ae2b4b..8dab59b038 100644 --- a/mod/events.php +++ b/mod/events.php @@ -6,7 +6,7 @@ use Friendica\App; use Friendica\Content\Nav; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Core\Worker; @@ -479,10 +479,10 @@ function events_content(App $a) { $fhour = ((x($orig_event)) ? DateTimeFormat::convert($fdt, $tz, 'UTC', 'H') : '00'); $fminute = ((x($orig_event)) ? DateTimeFormat::convert($fdt, $tz, 'UTC', 'i') : '00'); - $perms = Acl::getDefaultUserPermissions($orig_event); + $perms = ACL::getDefaultUserPermissions($orig_event); if ($mode === 'new' || $mode === 'copy') { - $acl = (($cid) ? '' : Acl::getFullSelectorHTML(((x($orig_event)) ? $orig_event : $a->user))); + $acl = (($cid) ? '' : ACL::getFullSelectorHTML(((x($orig_event)) ? $orig_event : $a->user))); } // If we copy an old event, we need to remove the ID and URI diff --git a/mod/fsuggest.php b/mod/fsuggest.php index 55f9c3231a..4f432d840a 100644 --- a/mod/fsuggest.php +++ b/mod/fsuggest.php @@ -4,7 +4,7 @@ */ use Friendica\App; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\L10n; use Friendica\Core\Worker; use Friendica\Database\DBM; @@ -104,7 +104,7 @@ function fsuggest_content(App $a) $o .= ''; - $o .= Acl::getSuggestContactSelectHTML( + $o .= ACL::getSuggestContactSelectHTML( 'suggest', 'suggest-select', ['size' => 4, 'exclude' => $contact_id, 'networks' => 'DFRN_ONLY', 'single' => true] diff --git a/mod/message.php b/mod/message.php index 27ba765d02..e9bfc076bb 100644 --- a/mod/message.php +++ b/mod/message.php @@ -7,7 +7,7 @@ use Friendica\App; use Friendica\Content\Nav; use Friendica\Content\Smilies; use Friendica\Content\Text\BBCode; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Database\DBM; @@ -243,7 +243,7 @@ function message_content(App $a) $prefill = $preselect ? $prename : ''; // the ugly select box - $select = Acl::getMessageContactSelectHTML('messageto', 'message-to-select', $preselect, 4, 10); + $select = ACL::getMessageContactSelectHTML('messageto', 'message-to-select', $preselect, 4, 10); $tpl = get_markup_template('prv_message.tpl'); $o .= replace_macros($tpl, [ diff --git a/mod/network.php b/mod/network.php index 9e1a05a112..4ab773bd32 100644 --- a/mod/network.php +++ b/mod/network.php @@ -9,7 +9,7 @@ use Friendica\Content\Feature; use Friendica\Content\ForumManager; use Friendica\Content\Nav; use Friendica\Content\Widget; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -427,8 +427,8 @@ function networkFlatView(App $a, $update = 0) 'lockstate' => (((is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))) ? 'lock' : 'unlock'), - 'default_perms' => Acl::getDefaultUserPermissions($a->user), - 'acl' => Acl::getFullSelectorHTML($a->user, true), + 'default_perms' => ACL::getDefaultUserPermissions($a->user), + 'acl' => ACL::getFullSelectorHTML($a->user, true), 'bang' => '', 'visitor' => 'block', 'profile_uid' => local_user(), @@ -576,8 +576,8 @@ function networkThreadedView(App $a, $update, $parent) 'lockstate' => ((($gid) || ($cid) || ($nets) || (is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))) ? 'lock' : 'unlock'), - 'default_perms' => Acl::getDefaultUserPermissions($a->user), - 'acl' => Acl::getFullSelectorHTML((($gid || $cid || $nets) ? $def_acl : $a->user), true), + 'default_perms' => ACL::getDefaultUserPermissions($a->user), + 'acl' => ACL::getFullSelectorHTML((($gid || $cid || $nets) ? $def_acl : $a->user), true), 'bang' => (($gid || $cid || $nets) ? '!' : ''), 'visitor' => 'block', 'profile_uid' => local_user(), diff --git a/mod/photos.php b/mod/photos.php index a34a28fc1a..c8dad750d1 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -7,7 +7,7 @@ use Friendica\App; use Friendica\Content\Feature; use Friendica\Content\Nav; use Friendica\Content\Text\BBCode; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -1084,7 +1084,7 @@ function photos_content(App $a) $tpl = get_markup_template('photos_upload.tpl'); - $aclselect_e = ($visitor ? '' : Acl::getFullSelectorHTML($a->user)); + $aclselect_e = ($visitor ? '' : ACL::getFullSelectorHTML($a->user)); $o .= replace_macros($tpl,[ '$pagename' => L10n::t('Upload Photos'), @@ -1425,7 +1425,7 @@ function photos_content(App $a) $album_e = $ph[0]['album']; $caption_e = $ph[0]['desc']; - $aclselect_e = Acl::getFullSelectorHTML($ph[0]); + $aclselect_e = ACL::getFullSelectorHTML($ph[0]); $edit = replace_macros($edit_tpl, [ '$id' => $ph[0]['id'], diff --git a/mod/profile.php b/mod/profile.php index 830fc04c7f..ab11b4d5fe 100644 --- a/mod/profile.php +++ b/mod/profile.php @@ -6,7 +6,7 @@ use Friendica\App; use Friendica\Content\Nav; use Friendica\Content\Widget; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -213,7 +213,7 @@ function profile_content(App $a, $update = 0) || strlen($a->user['deny_cid']) || strlen($a->user['deny_gid']) ) ? 'lock' : 'unlock', - 'acl' => $is_owner ? Acl::getFullSelectorHTML($a->user, true) : '', + 'acl' => $is_owner ? ACL::getFullSelectorHTML($a->user, true) : '', 'bang' => '', 'visitor' => $is_owner || $commvisitor ? 'block' : 'none', 'profile_uid' => $a->profile['profile_uid'], diff --git a/mod/settings.php b/mod/settings.php index 1ac3f434bb..46c3d2ec96 100644 --- a/mod/settings.php +++ b/mod/settings.php @@ -6,7 +6,7 @@ use Friendica\App; use Friendica\Content\Feature; use Friendica\Content\Nav; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -1223,7 +1223,7 @@ function settings_content(App $a) '$permissions' => L10n::t('Default Post Permissions'), '$permdesc' => L10n::t("\x28click to open/close\x29"), '$visibility' => $profile['net-publish'], - '$aclselect' => Acl::getFullSelectorHTML($a->user), + '$aclselect' => ACL::getFullSelectorHTML($a->user), '$suggestme' => $suggestme, '$blockwall'=> $blockwall, // array('blockwall', L10n::t('Allow friends to post to your profile page:'), !$blockwall, ''), '$blocktags'=> $blocktags, // array('blocktags', L10n::t('Allow friends to tag your posts:'), !$blocktags, ''), From cd3ff100ab1e6935a4d3acc28e0acf5f0f3ff77e Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 3 Mar 2018 07:38:15 -0500 Subject: [PATCH 15/17] Rename Acl.php to ACL.php --- src/Core/Acl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Core/Acl.php b/src/Core/Acl.php index 1bc150aca5..ae05fd1360 100644 --- a/src/Core/Acl.php +++ b/src/Core/Acl.php @@ -33,7 +33,7 @@ use function replace_macros; * * @author Hypolite Petovan */ -class Acl extends BaseObject +class ACL extends BaseObject { /** * Returns a select input tag with all the contact of the local user From 1907a5dbe762dc287167cd3d33feafb12ad04c1b Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 3 Mar 2018 07:40:18 -0500 Subject: [PATCH 16/17] Rename Acl.php to ACL.php --- src/Core/{Acl.php => ACL.php} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/Core/{Acl.php => ACL.php} (100%) diff --git a/src/Core/Acl.php b/src/Core/ACL.php similarity index 100% rename from src/Core/Acl.php rename to src/Core/ACL.php From ab544e1e9f1ad56205c80facc220d6e7856d9a19 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 3 Mar 2018 07:41:49 -0500 Subject: [PATCH 17/17] Add missing dba::close() call in Contact::pruneUnavailable --- src/Model/Contact.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Model/Contact.php b/src/Model/Contact.php index 85e71075a9..b4d20586ad 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -1538,6 +1538,8 @@ class Contact extends BaseObject $return[] = $contact['id']; } + dba::close($stmt); + $contact_ids = $return; } }