diff --git a/mod/message.php b/mod/message.php index f04bdaecd7..6326bb9ea5 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 504e5d847d..4df15dc536 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; } diff --git a/view/templates/acl/message_recipient.tpl b/view/templates/acl/message_recipient.tpl new file mode 100644 index 0000000000..07c22f449e --- /dev/null +++ b/view/templates/acl/message_recipient.tpl @@ -0,0 +1,54 @@ + + diff --git a/view/templates/message-head.tpl b/view/templates/message-head.tpl index fe71bc425b..e69de29bb2 100644 --- a/view/templates/message-head.tpl +++ b/view/templates/message-head.tpl @@ -1,8 +0,0 @@ - - diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css index 3c8a18c88e..85669be9ff 100644 --- a/view/theme/duepuntozero/style.css +++ b/view/theme/duepuntozero/style.css @@ -3228,9 +3228,6 @@ div.jGrowl div.info { width:100px; } -#recip { - -} .autocomplete-w1 { background: #ffffff no-repeat bottom right; position:absolute; top:0px; left:0px; margin:6px 0 0 6px; /* IE6 fix: */ _background:none; _margin:1px 0 0 0; } .autocomplete { color:#000; border:1px solid #999; background:#FFF; cursor:default; text-align:left; max-height:350px; overflow:auto; margin:-6px 6px 6px -6px; /* IE6 specific: */ _height:350px; _margin:0; _overflow-x:hidden; } .autocomplete .selected { background:#F0F0F0; } diff --git a/view/theme/duepuntozero/templates/prv_message.tpl b/view/theme/duepuntozero/templates/prv_message.tpl deleted file mode 100644 index 3f658ef811..0000000000 --- a/view/theme/duepuntozero/templates/prv_message.tpl +++ /dev/null @@ -1,40 +0,0 @@ - - -

{{$header}}

- -
-
- -{{$parent nofilter}} - -
{{$to}}
- -{{if $showinputs}} - - -{{else}} -{{$select nofilter}} -{{/if}} - -
{{$subject}}
- - -
{{$yourmessage}}
- - - -
- -
-
-
- -
- -
-
-
-
-
diff --git a/view/theme/frio/templates/prv_message.tpl b/view/theme/frio/templates/prv_message.tpl index 68db2568a2..f936741c02 100644 --- a/view/theme/frio/templates/prv_message.tpl +++ b/view/theme/frio/templates/prv_message.tpl @@ -2,21 +2,12 @@
- {{* Disable the header. We will see if we will need it -

{{$header}}

- *}} - {{$parent nofilter}} {{* The To: form-group which contains the message recipient *}}
-
- {{if $showinputs}} - - - {{else}} +
{{$select nofilter}} - {{/if}}
{{* The subject input field *}} diff --git a/view/theme/quattro/templates/prv_message.tpl b/view/theme/quattro/templates/prv_message.tpl deleted file mode 100644 index c956fbf726..0000000000 --- a/view/theme/quattro/templates/prv_message.tpl +++ /dev/null @@ -1,37 +0,0 @@ -

{{$header}}

- -
- - -{{$parent nofilter}} - -
{{$to}}
-{{if $showinputs}} - - -{{else}} -{{$select nofilter}} -{{/if}} - -
{{$subject}}
- - -
{{$yourmessage}}
- - - -
- -
-
-
- -
- -
-
-
- -