aboutsummaryrefslogtreecommitdiffstats
path: root/include/text.php
diff options
context:
space:
mode:
Diffstat (limited to 'include/text.php')
-rw-r--r--include/text.php100
1 files changed, 63 insertions, 37 deletions
diff --git a/include/text.php b/include/text.php
index 98093ca53..9ac6efdc2 100644
--- a/include/text.php
+++ b/include/text.php
@@ -1272,24 +1272,38 @@ function sslify($s) {
function get_emojis() {
$emojis = [
// Reactions (emojitwo emojis)
- 'astonished_face' => ['shortname' => ':astonished_face:', 'filepath' => 'images/emoji/astonished_face.png'],
- 'bottle_with_popping_cork' => ['shortname' => ':bottle_with_popping_cork:', 'filepath' => 'images/emoji/bottle_with_popping_cork.png'],
- 'clapping_hands' => ['shortname' => ':clapping_hands:', 'filepath' => 'images/emoji/clapping_hands.png'],
- 'disappointed_face' => ['shortname' => ':disappointed_face:', 'filepath' => 'images/emoji/disappointed_face.png'],
- 'grinning_face' => ['shortname' => ':grinning_face:', 'filepath' => 'images/emoji/grinning_face.png'],
- 'kiss_mark' => ['shortname' => ':kiss_mark:', 'filepath' => 'images/emoji/kiss_mark.png'],
- 'red_heart' => ['shortname' => ':red_heart:', 'filepath' => 'images/emoji/red_heart.png'],
- 'sleeping_face' => ['shortname' => ':sleeping_face:', 'filepath' => 'images/emoji/sleeping_face.png'],
- 'slightly_smiling_face' => ['shortname' => ':slightly_smiling_face:', 'filepath' => 'images/emoji/slightly_smiling_face.png'],
- 'smiling_face_with_halo' => ['shortname' => ':smiling_face_with_halo:', 'filepath' => 'images/emoji/smiling_face_with_halo.png'],
- 'smiling_face_with_horns' => ['shortname' => ':smiling_face_with_horns:', 'filepath' => 'images/emoji/smiling_face_with_horns.png'],
- 'winking_face_with_tongue' => ['shortname' => ':winking_face_with_tongue:', 'filepath' => 'images/emoji/winking_face_with_tongue.png'],
-
- 'facepalm' => ['shortname' => ':facepalm:', 'filepath' => 'images/emoticons/smiley-facepalm.gif']
+ 'astonished_face' => ['shortname' => ':astonished_face:', 'filepath' => 'images/emoji/emojitwo/astonished_face.png'],
+ 'bottle_with_popping_cork' => ['shortname' => ':bottle_with_popping_cork:', 'filepath' => 'images/emoji/emojitwo/bottle_with_popping_cork.png'],
+ 'clapping_hands' => ['shortname' => ':clapping_hands:', 'filepath' => 'images/emoji/emojitwo/clapping_hands.png'],
+ 'disappointed_face' => ['shortname' => ':disappointed_face:', 'filepath' => 'images/emoji/emojitwo/disappointed_face.png'],
+ 'grinning_face' => ['shortname' => ':grinning_face:', 'filepath' => 'images/emoji/emojitwo/grinning_face.png'],
+ 'kiss_mark' => ['shortname' => ':kiss_mark:', 'filepath' => 'images/emoji/emojitwo/kiss_mark.png'],
+ 'red_heart' => ['shortname' => ':red_heart:', 'filepath' => 'images/emoji/emojitwo/red_heart.png'],
+ 'sleeping_face' => ['shortname' => ':sleeping_face:', 'filepath' => 'images/emoji/emojitwo/sleeping_face.png'],
+ 'slightly_smiling_face' => ['shortname' => ':slightly_smiling_face:', 'filepath' => 'images/emoji/emojitwo/slightly_smiling_face.png'],
+ 'smiling_face_with_halo' => ['shortname' => ':smiling_face_with_halo:', 'filepath' => 'images/emoji/emojitwo/smiling_face_with_halo.png'],
+ 'smiling_face_with_horns' => ['shortname' => ':smiling_face_with_horns:', 'filepath' => 'images/emoji/emojitwo/smiling_face_with_horns.png'],
+ 'winking_face_with_tongue' => ['shortname' => ':winking_face_with_tongue:', 'filepath' => 'images/emoji/emojitwo/winking_face_with_tongue.png'],
+
+ // Hubzilla custom
+ 'facepalm' => ['shortname' => ':facepalm:', 'filepath' => 'images/emoji/hubzilla/smiley-facepalm.gif'],
+ 'hubzilla' => ['shortname' => ':hubzilla:', 'filepath' => 'images/emoji/hubzilla/hubzilla.png']
];
+ // Provided by addon
call_hooks('get_emojis', $emojis);
+ // Custom site emojis
+ $custom_json_path = 'images/emoji/custom/custom_emojis.json';
+ if (file_exists($custom_json_path)) {
+ $custom_json = file_get_contents($custom_json_path);
+ $custom_arr = json_decode($custom_json, true);
+
+ if ($custom_arr) {
+ $emojis = array_merge($emojis, $custom_arr);
+ }
+ }
+
return $emojis;
}
@@ -1406,14 +1420,12 @@ function list_smilies($default_only = false) {
* @param boolean $sample (optional) default false
* @return string
*/
-function smilies($s, $sample = false) {
-
+function smilies($s, $sample = false, $terms = []) {
if(intval(Config::Get('system', 'no_smilies'))
|| (local_channel() && intval(get_pconfig(local_channel(), 'system', 'no_smilies'))))
return $s;
-
- $s = preg_replace_callback('{<(pre|code)>.*?</\1>}ism', 'smile_shield', $s);
+ $s = preg_replace_callback('/<(pre|code)\b[^>]*>.*?<\/(pre|code)>/ism', 'smile_shield', $s);
$s = preg_replace_callback('/<[a-z]+ .*?>/ism', 'smile_shield', $s);
if (preg_match_all('/(\:(\w|\+|\-)+\:)(?=|[\!\.\?]|$)/', $s, $match)) {
@@ -1421,13 +1433,23 @@ function smilies($s, $sample = false) {
$emojis = get_emojis();
foreach ($match[0] as $mtch) {
$name = trim($mtch, ':');
+ $emoji = $emojis[$name] ?? [];
+
+ if (!$emoji && !empty($terms)) {
+ foreach($terms as $term) {
+ // some platforms provide the term without :
+ $term['term'] = ':' . trim($term['term'], ':') . ':';
+ if (intval($term['ttype']) === TERM_EMOJI && $term['term'] === $mtch) {
+ $emoji['filepath'] = $term['imgurl'];
+ $emoji['shortname'] = $term['term'];
+ }
+ }
+ }
- if (!isset($emojis[$name])) {
+ if (!$emoji || empty($emoji['filepath'])) {
continue;
}
- $emoji = $emojis[$name];
-
$class = 'emoji';
if (is_solo_string($mtch, $s)) {
$class .= ' single-emoji';
@@ -1588,7 +1610,7 @@ function theme_attachments(&$item) {
$url = z_root() . '/magic?owa=1&bdest=' . bin2hex($r['href']);
}
- if (isset($label) && isset($url) && isset($icon) && isset($title)) {
+ if (isset($label, $url, $icon, $title)) {
array_unshift($attaches, ['label' => $label, 'url' => $url, 'icon' => $icon, 'title' => $title]);
}
}
@@ -1793,7 +1815,7 @@ function prepare_body(&$item,$attach = false,$opts = false) {
$s .= prepare_text('[summary]' . $item['summary'] . '[/summary]' . $item['body'],$item['mimetype'],$opts);
}
else {
- $s .= prepare_text($item['body'],$item['mimetype'], $opts);
+ $s .= prepare_text($item['body'],$item['mimetype'], $opts, $item['term'] ?? []);
}
}
@@ -2002,7 +2024,7 @@ function format_poll($item,$s,$opts) {
$message .= t('Poll has ended');
}
else {
- $message .= sprintf(t('Poll ends in %s'), '<span class="autotime" title="' . $t . '"></span>');
+ $message .= sprintf(t('Poll ends %s'), '<span class="autotime" title="' . $t . '"></span>');
}
}
@@ -2039,8 +2061,7 @@ function format_poll($item,$s,$opts) {
* @return string
* The parsed $text as prepared HTML.
*/
-function prepare_text($text, $content_type = 'text/bbcode', $opts = false) {
-
+function prepare_text($text, $content_type = 'text/bbcode', $opts = false, $terms = []) {
switch($content_type) {
case 'text/plain':
$s = escape_tags($text);
@@ -2086,7 +2107,7 @@ function prepare_text($text, $content_type = 'text/bbcode', $opts = false) {
$s = bbcode($text, ((is_array($opts)) ? $opts : [] ));
}
else {
- $s = smilies(bbcode($text, ((is_array($opts)) ? $opts : [] )));
+ $s = smilies(bbcode($text, ((is_array($opts)) ? $opts : [] )), terms: $terms);
}
}
@@ -2166,7 +2187,7 @@ function get_plink($item,$conversation_mode = true) {
if(array_key_exists('author',$item) && $item['author']['xchan_network'] !== 'zot6')
$zidify = false;
- if(x($item,$key)) {
+ if(!empty($item[$key])) {
return array(
'href' => (($zidify) ? zid($item[$key]) : $item[$key]),
'title' => t('Link to Source'),
@@ -2359,17 +2380,19 @@ function item_post_type($item) {
$post_type = t('event');
break;
default:
- $post_type = t('post');
+ $post_type = t('conversation');
if($item['mid'] != $item['parent_mid'])
- $post_type = t('comment');
+ $post_type = t('message');
break;
}
- if(strlen($item['verb']) && (! activity_match($item['verb'],ACTIVITY_POST)))
+ if(strlen($item['verb']) && (!activity_match($item['verb'], ['Create', ACTIVITY_POST]))) {
$post_type = t('activity');
+ }
- if($item['obj_type'] === 'Question')
+ if($item['obj_type'] === 'Question') {
$post_type = t('poll');
+ }
return $post_type;
}
@@ -2630,7 +2653,7 @@ function xchan_query(&$items, $abook = true, $effective_uid = 0) {
$arr[] = "'" . dbesc($item['owner_xchan']) . "'";
if($item['author_xchan'] && (! in_array("'" . dbesc($item['author_xchan']) . "'",$arr)))
$arr[] = "'" . dbesc($item['author_xchan']) . "'";
- if($item['source_xchan'] && (! in_array("'" . dbesc($item['source_xchan']) . "'",$arr)))
+ if(!empty($item['source_xchan']) && (! in_array("'" . dbesc($item['source_xchan']) . "'",$arr)))
$arr[] = "'" . dbesc($item['source_xchan']) . "'";
}
}
@@ -2655,7 +2678,9 @@ function xchan_query(&$items, $abook = true, $effective_uid = 0) {
for($x = 0; $x < count($items); $x ++) {
$items[$x]['owner'] = find_xchan_in_array($items[$x]['owner_xchan'],$chans);
$items[$x]['author'] = find_xchan_in_array($items[$x]['author_xchan'],$chans);
- $items[$x]['source'] = find_xchan_in_array($items[$x]['source_xchan'],$chans);
+ if (!empty($items[$x]['source_xchan'])) {
+ $items[$x]['source'] = find_xchan_in_array($items[$x]['source_xchan'],$chans);
+ }
}
}
}
@@ -3206,10 +3231,11 @@ function getIconFromType($type) {
//Common file
'application/octet-stream' => 'bi-file-earmark',
//Text
- 'text/plain' => 'bi-earmark-text',
+ 'text/plain' => 'bi-file-earmark-text',
'text/markdown' => 'bi-filetype-md',
'text/bbcode' => 'bi-file-earmark-text',
'text/html' => 'bi-filetype-html',
+ 'text/uri-list' => 'bi-box-arrow-up-right',
'application/msword' => 'bi-file-earmark-word',
'application/pdf' => 'bi-file-earmark-pdf',
'application/vnd.oasis.opendocument.text' => 'bifile--earmark-text',
@@ -3841,7 +3867,7 @@ function featured_sort($a,$b) {
function unpunify($s) {
- if (function_exists('idn_to_utf8') && isset($s)) {
+ if (function_exists('idn_to_utf8') && !empty($s)) {
return idn_to_utf8($s);
}
return $s;
@@ -3849,7 +3875,7 @@ function unpunify($s) {
function punify($s) {
- if (function_exists('idn_to_ascii') && isset($s)) {
+ if (function_exists('idn_to_ascii') && !empty($s)) {
return idn_to_ascii($s);
}
return $s;