diff --git a/include/conversation.php b/include/conversation.php index c668e53d9..aa807619e 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -28,6 +28,7 @@ use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Core\Renderer; use Friendica\Core\Session; +use Friendica\Core\Theme; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Contact; @@ -354,6 +355,13 @@ function conv_get_blocklist() */ function conversation(App $a, array $items, $mode, $update, $preview = false, $order = 'commented', $uid = 0) { + $page = DI::page(); + + $page->registerFooterScript(Theme::getPathForFile('asset/typeahead.js/dist/typeahead.bundle.js')); + $page->registerFooterScript(Theme::getPathForFile('js/friendica-tagsinput/friendica-tagsinput.js')); + $page->registerStylesheet(Theme::getPathForFile('js/friendica-tagsinput/friendica-tagsinput.css')); + $page->registerStylesheet(Theme::getPathForFile('js/friendica-tagsinput/friendica-tagsinput-typeahead.css')); + $ssl_state = (local_user() ? true : false); $profile_owner = 0; diff --git a/mod/message.php b/mod/message.php index f04bdaecd..6326bb9ea 100644 --- a/mod/message.php +++ b/mod/message.php @@ -74,7 +74,7 @@ function message_post(App $a) $replyto = !empty($_REQUEST['replyto']) ? Strings::escapeTags(trim($_REQUEST['replyto'])) : ''; $subject = !empty($_REQUEST['subject']) ? Strings::escapeTags(trim($_REQUEST['subject'])) : ''; $body = !empty($_REQUEST['body']) ? Strings::escapeHtml(trim($_REQUEST['body'])) : ''; - $recipient = !empty($_REQUEST['messageto']) ? intval($_REQUEST['messageto']) : 0; + $recipient = !empty($_REQUEST['recipient']) ? intval($_REQUEST['recipient']) : 0; $ret = Mail::send($recipient, $body, $subject, $replyto); $norecip = false; @@ -215,50 +215,14 @@ function message_content(App $a) '$linkurl' => DI::l10n()->t('Please enter a link URL:') ]); - $preselect = isset($a->argv[2]) ? [$a->argv[2]] : []; + $recipientId = $a->argv[2] ?? null; - $prename = $preurl = $preid = ''; - - if ($preselect) { - $r = q("SELECT `name`, `url`, `id` FROM `contact` WHERE `uid` = %d AND `id` = %d LIMIT 1", - intval(local_user()), - intval($a->argv[2]) - ); - if (!DBA::isResult($r)) { - $r = q("SELECT `name`, `url`, `id` FROM `contact` WHERE `uid` = %d AND `nurl` = '%s' LIMIT 1", - intval(local_user()), - DBA::escape(Strings::normaliseLink(base64_decode($a->argv[2]))) - ); - } - - if (!DBA::isResult($r)) { - $r = q("SELECT `name`, `url`, `id` FROM `contact` WHERE `uid` = %d AND `addr` = '%s' LIMIT 1", - intval(local_user()), - DBA::escape(base64_decode($a->argv[2])) - ); - } - - if (DBA::isResult($r)) { - $prename = $r[0]['name']; - $preid = $r[0]['id']; - $preselect = [$preid]; - } else { - $preselect = []; - } - } - - $prefill = $preselect ? $prename : ''; - - // the ugly select box - $select = ACL::getMessageContactSelectHTML('messageto', 'message-to-select', $preselect, 4, 10); + $select = ACL::getMessageContactSelectHTML($recipientId); $tpl = Renderer::getMarkupTemplate('prv_message.tpl'); $o .= Renderer::replaceMacros($tpl, [ '$header' => DI::l10n()->t('Send Private Message'), '$to' => DI::l10n()->t('To:'), - '$showinputs' => 'true', - '$prefill' => $prefill, - '$preid' => $preid, '$subject' => DI::l10n()->t('Subject:'), '$subjtxt' => $_REQUEST['subject'] ?? '', '$text' => $_REQUEST['body'] ?? '', @@ -413,7 +377,7 @@ function message_content(App $a) $seen = $message['seen']; } - $select = $message['name'] . ''; + $select = $message['name'] . ''; $parent = ''; $tpl = Renderer::getMarkupTemplate('mail_display.tpl'); @@ -429,7 +393,6 @@ function message_content(App $a) // reply '$header' => DI::l10n()->t('Send Reply'), '$to' => DI::l10n()->t('To:'), - '$showinputs' => '', '$subject' => DI::l10n()->t('Subject:'), '$subjtxt' => $message['title'], '$readonly' => ' readonly="readonly" style="background: #BBBBBB;" ', diff --git a/src/Core/ACL.php b/src/Core/ACL.php index f35889061..4df15dc53 100644 --- a/src/Core/ACL.php +++ b/src/Core/ACL.php @@ -33,75 +33,52 @@ use Friendica\Model\Group; class ACL { /** - * Returns a select input tag with all the contact of the local user + * Returns a select input tag for private message recipient * - * @param string $selname Name attribute of the select input tag - * @param string $selclass Class attribute of the select input tag - * @param array $preselected Contact IDs that should be already selected - * @param int $size Length of the select box - * @param int $tabindex Select input tag tabindex attribute + * @param int $selected Existing recipien contact ID * @return string * @throws \Exception */ - public static function getMessageContactSelectHTML($selname, $selclass, array $preselected = [], $size = 4, $tabindex = null) + public static function getMessageContactSelectHTML(int $selected = null) { - $a = DI::app(); - $o = ''; + $page = DI::page(); + + $page->registerFooterScript(Theme::getPathForFile('asset/typeahead.js/dist/typeahead.bundle.js')); + $page->registerFooterScript(Theme::getPathForFile('js/friendica-tagsinput/friendica-tagsinput.js')); + $page->registerStylesheet(Theme::getPathForFile('js/friendica-tagsinput/friendica-tagsinput.css')); + $page->registerStylesheet(Theme::getPathForFile('js/friendica-tagsinput/friendica-tagsinput-typeahead.css')); + // When used for private messages, we limit correspondence to mutual DFRN/Friendica friends and the selector // to one recipient. By default our selector allows multiple selects amongst all contacts. - $sql_extra = sprintf(" AND `rel` = %d ", intval(Contact::FRIEND)); - $sql_extra .= sprintf(" AND `network` IN ('%s' , '%s') ", Protocol::DFRN, Protocol::DIASPORA); + $condition = [ + 'uid' => local_user(), + 'self' => false, + 'blocked' => false, + 'pending' => false, + 'archive' => false, + 'deleted' => false, + 'rel' => [Contact::FOLLOWER, Contact::SHARING, Contact::FRIEND], + 'network' => Protocol::FEDERATED, + ]; - $tabindex_attr = !empty($tabindex) ? ' tabindex="' . intval($tabindex) . '"' : ''; - - $hidepreselected = ''; - if ($preselected) { - $sql_extra .= " AND `id` IN (" . implode(",", $preselected) . ")"; - $hidepreselected = ' style="display: none;"'; - } - - $o .= "' . PHP_EOL; - - if ($preselected) { - $o .= implode(', ', $receiverlist); - } - - Hook::callAll(DI::module()->getName() . '_post_' . $selname, $o); + Hook::callAll(DI::module()->getName() . '_post_recipient', $o); return $o; } @@ -303,7 +280,7 @@ class ACL 'emailcc' => $form_prefix ? $form_prefix . '[emailcc]' : 'emailcc', ]; - $tpl = Renderer::getMarkupTemplate('acl_selector.tpl'); + $tpl = Renderer::getMarkupTemplate('acl/full_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.'), diff --git a/src/Module/Contact.php b/src/Module/Contact.php index 4a5aeefe4..6e8778f17 100644 --- a/src/Module/Contact.php +++ b/src/Module/Contact.php @@ -32,6 +32,7 @@ use Friendica\Core\ACL; use Friendica\Core\Hook; use Friendica\Core\Protocol; use Friendica\Core\Renderer; +use Friendica\Core\Theme; use Friendica\Core\Worker; use Friendica\Database\DBA; use Friendica\DI; @@ -259,9 +260,12 @@ class Contact extends BaseModule $rel = Strings::escapeTags(trim($_GET['rel'] ?? '')); $group = Strings::escapeTags(trim($_GET['group'] ?? '')); - if (empty(DI::page()['aside'])) { - DI::page()['aside'] = ''; - } + $page = DI::page(); + + $page->registerFooterScript(Theme::getPathForFile('asset/typeahead.js/dist/typeahead.bundle.js')); + $page->registerFooterScript(Theme::getPathForFile('js/friendica-tagsinput/friendica-tagsinput.js')); + $page->registerStylesheet(Theme::getPathForFile('js/friendica-tagsinput/friendica-tagsinput.css')); + $page->registerStylesheet(Theme::getPathForFile('js/friendica-tagsinput/friendica-tagsinput-typeahead.css')); $contact = null; // @TODO: Replace with parameter from router diff --git a/view/templates/acl_selector.tpl b/view/templates/acl/full_selector.tpl similarity index 98% rename from view/templates/acl_selector.tpl rename to view/templates/acl/full_selector.tpl index f1943cf3f..ada05fbd4 100644 --- a/view/templates/acl_selector.tpl +++ b/view/templates/acl/full_selector.tpl @@ -155,7 +155,7 @@ acl.initialize(); let suggestionTemplate = function (item) { - return '
' + item.name + '
' + item.addr + '