\|](.*?)\])|(\[#(\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+)([\|](\w+))?\])", $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 = intval(substr($imgAndId[1], 1)); $currentSize = '/'.$size; if (isset($imgAndId[2]) && $imgAndId[2] == 'src') { $currentSize = ''; } $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, $short = FALSE) { $pr = '((https{0,1}:\/\/[\da-z\.-]+\.[a-z]{2,6})([\/\w\?=&#%+,-]|(\.[^\s]))*\/?)'; if ($short) { $rep = '$1'; } else { $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(Helper::replaceLinks($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; } }