\|](.*?)\])|(\[#(\d+)\]))", $string, $links);
$links = isset($links[0]) ? $links[0] : FALSE;
if ($links) {
foreach ($links as $link) {
$idAndLink = mb_substr($link, 2, -1);
$delimiter = strpos($idAndLink, '|') === FALSE ? '>' : '|';
$idAndLink = explode($delimiter, $idAndLink);
$linkId = $idAndLink[0];
$linkName = isset($idAndLink[1]) ? $idAndLink[1] : '';
if ($linkId) {
$linkPoint = Point::model()->getByPK($linkId);
if ($linkPoint && $linkPoint->id) {
$linkTitle = str_replace('"', 'ʺ', $linkPoint->name);
switch ($replaceType) {
case 'html':
// Используется при отображении страницы точки или статьи
$linkName = $linkName ? $linkName : '';
$string = str_replace($link, '' . $linkName . '', $string);
break;
case 'editor':
// Используется при редактировании статьи
$linkName = $linkName ? $linkName : '';
$string = str_replace($link, '' . $linkName . '', $string);
break;
case 'js':
// Используется при показе описания описания точки НА КАРТЕ
$linkName = $linkName ? $linkName : '';
$string = str_replace($link, '' . $linkName . '', $string);
break;
default:
// Для OG и т.п. - без ссылок
$string = str_replace($link, $linkName, $string);
break;
}
}
}
}
}
return $string;
}
public static function replaceImgs($string, $replaceType = 'clear', $size = 'middle')
{
preg_match_all("(\[img[\|]#(\d+)\])", $string, $images);
$images = isset($images[0]) ? $images[0] : FALSE;
if ($images) {
foreach ($images as $img) {
$imgAndId = mb_substr($img, 2, -1);
$imgAndId = explode('#', $imgAndId);
$imgId = (int)$imgAndId[1];
$imgObj = ArticlePhotos::model()->getByPK($imgId);
if ($imgObj->name) {
switch ($replaceType) {
case 'html':
$imgObj->caption = $linkTitle = str_replace('"', 'ʺ', $imgObj->caption);
$imgTag = '

';
$string = str_replace($img, $imgTag, $string);
break;
default:
$imgTag = '';
$string = str_replace($img, $imgTag, $string);
break;
}
} else {
switch ($replaceType) {
case 'html':
$imgTag = '
';
$string = str_replace($img, $imgTag, $string);
break;
default:
$imgTag = '';
$string = str_replace($img, $imgTag, $string);
break;
}
}
}
}
return $string;
}
static function replaceUrls($string)
{
$pr = '((https{0,1}:\/\/[\da-z\.-]+\.[a-z]{2,6})([\/\w\?=%+,-]|(\.[^\s]))*\/?)';
$rep = '$0';
return preg_replace($pr, $rep, $string);
}
public static function getFirstImg($string)
{
preg_match_all("(\[img[\|]#(\d+)\])", $string, $images);
$images = isset($images[0]) ? $images[0] : FALSE;
$img = isset($images[0]) ? $images[0] : FALSE;
if ($img) {
$imgId = (int) mb_substr($img, 6, -1);
$imgObj = ArticlePhotos::model()->getByPK($imgId);
return $imgObj->name ? (int)$imgObj->id : 0;
}
return 0;
}
public static function buildOG($point)
{
$og = array();
$og['title'] = str_replace('"', 'ʺ', $point->name) . ' [wikipoints.ru]';
$point->description = str_replace('"', 'ʺ', $point->description);
$og['description'] = mb_substr($point->description, 0, 99, 'UTF-8') . '…';
$og['site_name'] = App::$defaultTitle;
$og['type'] = 'website';
$og['url'] = 'https://wikipoints.ru/?point=' . $point->id;
$og['image'] = $point->getImg('middle');
return $og;
}
public static function buildArticleOG($article)
{
$og = array();
$og['title'] = str_replace('"', 'ʺ', $article->title) . ' [wikipoints.ru]';
$article->text = Markdown::getClear(str_replace('"', 'ʺ', $article->text));
$og['description'] = mb_substr($article->text, 0, 99, 'UTF-8') . '…';
$og['site_name'] = App::$defaultTitle;
$og['type'] = 'website';
$og['url'] = 'https://wikipoints.ru/article/' . $article->id;
$og['image'] = $article->getImg('middle');
return $og;
}
/**
* Проверка на то, что это URL
* @param type $src
* @return type
*/
public static function isUrl($src)
{
// TODO: Переписать на что-то нормальное с регулярками
return substr(strtolower($src), 0, 4) == 'http';
}
public static function getRandomTravelingTags($count = 10)
{
$tags = array(
'поездка','вояж','паломничество','путь','странствие','экскурсия','авиапутешествие',
'круиз','дорога','турне','рейс','туризм','кругосветка','поход','плавание',
'экспедиция','авиатуризм','автотуризм','путешествие','мототуризм','авиамаршрут',
'трасса','поезд','гостиница','отель','мотель','пансионат','пансион','счастье',
'мир','впуть','памятник','природа','фотограф','попутчик','осмотр','полет',
'движение','панорама','кадр','фотоаппарат','география','открытие','паром',
'красота','достопримечательности','достопримечательность','корабль','старт',
'отпуск','вагон','рассвет','рюкзак','карта','автостоп','закат','причал','объектив',
'горизонт','планета','странник','фото','дневник','начало','мечта','атлас','свобода',
'автобан','снимок','радость','компас','плацкарт','глобус','приключение','исследование',
'указатель','земля','жизнь','палатка','заметки','лес','восторг','термос','навигация',
'обзор','направление','город','пилигрим','даль','улица','ржд','турист','эмоции','перелет',
'автомобиль','велосипед','купе','каникулы','точка','пин','место','люди','новое','фонарь',
'хиккинг','sightseeing','выходные','путешествия','weekend','travels','journey','tourism',
);
shuffle($tags);
$res = '';
for ($index = 0; $index < $count; $index++) {
$res .= '#'.$tags[$index].' ';
}
return $res;
}
}