1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/movim_ynh.git synced 2024-09-03 19:46:19 +02:00
movim_ynh/sources/app/helpers/StringHelper.php

319 lines
7.8 KiB
PHP
Raw Normal View History

<?php
use HeyUpdate\Emoji\Emoji;
use HeyUpdate\Emoji\EmojiIndex;
/**
* @desc A singleton wrapper for the Emoji library
*/
class MovimEmoji
{
protected static $instance = null;
private $_emoji;
private $_theme;
protected function __construct()
{
$cd = new \Modl\ConfigDAO();
$config = $cd->get();
$this->_theme = $config->theme;
$this->_emoji = new Emoji(new EmojiIndex(), $this->getPath());
}
public function replace($string, $large = false)
{
$this->_emoji->setAssetUrlFormat($this->getPath($large));
$string = $this->_emoji->replaceEmojiWithImages($string);
$this->_emoji->setAssetUrlFormat($this->getPath());
return $string;
}
private function getPath($large = false)
{
$path = BASE_URI . 'themes/' . $this->_theme . '/img/emojis/';
if($large) $path .= 'large/';
return $path.'%s.png';
}
public static function getInstance()
{
if (!isset(static::$instance)) {
static::$instance = new MovimEmoji;
}
return static::$instance;
}
}
/**
* @desc Prepare the string (add the a to the links and show the smileys)
*
* @param string $string
* @param boolean display large emojis
* @param check the links and convert them to pictures (heavy)
* @return string
*/
function prepareString($string, $large = false, $preview = false) {
// Add missing links
$string = preg_replace_callback(
"/([\w\"'>]+\:\/\/[\w-?&;#+%:~=\.\/\@]+[\w\/])/", function ($match) use($preview) {
if(!in_array(substr($match[0], 0, 1), array('>', '"', '\''))) {
$content = $match[0];
if($preview) {
try {
$embed = Embed\Embed::create($match[0]);
if($embed->type == 'photo'
&& $embed->images[0]['width'] <= 1024
&& $embed->images[0]['height'] <= 1024) {
$content = '<img src="'.$match[0].'"/>';
} elseif($embed->type == 'link') {
$content .= ' - '. $embed->title . ' - ' . $embed->providerName;
}
} catch(Exception $e) {
error_log($e->getMessage());
}
}
return stripslashes('<a href=\"'.$match[0].'\" target=\"_blank\">'.$content.'</a>');
} else {
return $match[0];
}
}, $string
);
// We remove all the style attributes
$string = preg_replace_callback(
'/(<[^>]+) style=".*?"/i', function($match) {
return $match[1];
}, $string
);
// Twitter hashtags
$string = preg_replace_callback(
"/ #[a-zA-Z0-9_-]{3,}/", function ($match) {
return
' <a class="twitter hastag" href="http://twitter.com/search?q='.
urlencode(trim($match[0])).
'&src=hash" target="_blank">'.
trim($match[0]).
'</a>';
}, ' ' . $string
);
$string = preg_replace_callback(
"/ @[a-zA-Z0-9_-]{3,}/", function ($match) {
return
' <a class="twitter at" href="http://twitter.com/'.
trim($match[0]).
'" target="_blank">'.
trim($match[0]).
'</a>';
}, ' ' . $string
);
//remove all scripts
$string = preg_replace_callback(
'#<[/]?script[^>]*>#is', function ($match) {
return '';
}, ' ' . $string
);
//remove all iframe
$string = preg_replace_callback(
'#<[/]?iframe[^>]*>#is', function ($match) {
return '';
}, ' ' . $string
);
//remove all iframe
$string = preg_replace_callback(
'#<[/]?ss[^>]*>#is', function ($match) {
return '';
}, ' ' . $string
);
// We add some smileys...
$emoji = MovimEmoji::getInstance();
$string = $emoji->replace($string, $large);
return trim($string);
}
/**
* Fix self-closing tags
*/
function fixSelfClosing($string) {
return preg_replace_callback('/<([^\s<]+)\/>/',
function($match) {
return '<'.$match[1].'></'.$match[1].'>';
}
, $string);
}
/**
* Remove the content, body and html tags
*/
function cleanHTMLTags($string) {
return str_replace(
array(
'<content type="html">',
'<html xmlns="http://jabber.org/protocol/xhtml-im">',
'<body xmlns="http://www.w3.org/1999/xhtml">',
'</body>',
'</html>',
'</content>'),
'',
$string);
}
/**
* Return an array of informations from a XMPP uri
*/
function explodeURI($uri) {
$arr = parse_url(urldecode($uri));
$result = array();
if(isset($arr['query'])) {
$query = explode(';', $arr['query']);
foreach($query as $elt) {
if($elt != '') {
list($key, $val) = explode('=', $elt);
$result[$key] = $val;
}
}
$arr = array_merge($arr, $result);
}
return $arr;
}
/*
* Echap the JID
*/
function echapJid($jid)
{
return str_replace(' ', '\40', $jid);
}
/*
* Echap the anti-slashs for Javascript
*/
function echapJS($string)
{
return str_replace("\\", "\\\\", $string);
}
/*
* Clean the resource of a jid
*/
function cleanJid($jid)
{
$explode = explode('/', $jid);
return reset($explode);
}
/*
* Explode JID
*/
function explodeJid($jid)
{
list($jid, $resource) = explode('/', $jid);
list($username, $server) = explode('@', $jid);
return array(
'username' => $username,
'server' => $server,
'resource' => $resource
);
}
/**
* Return a URIfied string
* @param string
* @return string
*/
function stringToUri($url) {
$url = utf8_decode($url);
$url = strtolower(strtr($url, utf8_decode('ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ()[]\'"~$&%*@ç!?;,:/\^¨€{}<>|+- .'), 'aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn -- c --- e --_'));
$url = str_replace(' ', '', $url);
$url = str_replace('---', '-', $url);
$url = str_replace('--', '-', $url);
$url = trim($url,'-');
return $url;
}
/**
* Return a human readable filesize
* @param string size in bytes
* @return string
*/
function sizeToCleanSize($size)
{
$units = array( 'B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
$power = $size > 0 ? floor(log($size, 1024)) : 0;
return number_format($size / pow(1024, $power), 2, '.', ',') . ' ' . $units[$power];
}
/**
* Return a colored string in the console
* @param string
* @param color
* @return string
*/
function colorize($string, $color) {
$colors = array(
'black' => 30,
'red' => 31,
'green' => 32,
'yellow' => 33,
'blue' => 34,
'purple' => 35,
'turquoise' => 36,
'white' => 37
);
return "\033[".$colors[$color]."m".$string."\033[0m";
}
/**
* Return a color generated from the string
* @param string
* @return string
*/
function stringToColor($string) {
$colors = array(
0 => 'red',
1 => 'purple',
2 => 'indigo',
3 => 'blue',
4 => 'green',
5 => 'orange',
6 => 'yellow',
7 => 'brown');
$s = substr(base_convert(sha1($string), 15, 10), 0, 10);
if($colors[$s%8]) {
return $colors[$s%8];
} else {
return 'orange';
}
}
/**
* Return the first letter of a string
* @param string
* @return string
*/
function firstLetterCapitalize($string) {
return ucfirst(strtolower(mb_substr($string, 0, 2)));
}