function bg_bibfers_search_result($context, $type, $lang, $prll = '') { global $bg_bibfers_option; global $bg_bibfers_chapter, $bg_bibfers_ch; global $bg_bibfers_url, $bg_bibfers_bookTitle, $bg_bibfers_shortTitle, $bg_bibfers_bookFile; $lang = include_books($lang); bg_bibfers_get_options(); $verses = ""; $bkr = ""; /******************************************************************************* Построение паттерна *******************************************************************************/ // echo "context=". $context. "<br>"; // Отладка $pattern = trim($context); // убираем пробелы по краям $pattern = preg_replace("/\\s+/ui", ' ', $pattern); // удаляем двойные пробелы $pattern = preg_replace("/\\\\/ui", '\\', $pattern); // переобразуем спецсимвол в обычный \ $pattern = preg_replace("/\\//ui", '\\/', $pattern); // переобразуем спецсимвол в обычный / $pattern = preg_replace("/\\^/ui", '\\^', $pattern); // переобразуем спецсимвол в обычный ^ $pattern = preg_replace("/\\?/ui", '\\?', $pattern); // переобразуем спецсимвол в обычный ? $pattern = preg_replace("/\\./ui", '\\.', $pattern); // переобразуем спецсимвол в обычный . $pattern = preg_replace("/\\+/ui", '\\+', $pattern); // переобразуем спецсимвол в обычный + $pattern = preg_replace("/\\{/ui", '\\{', $pattern); // переобразуем спецсимвол в обычный { $pattern = preg_replace("/\\}/ui", '\\}', $pattern); // переобразуем спецсимвол в обычный } $pattern = preg_replace("/\\(/ui", '\\(', $pattern); // переобразуем спецсимвол в обычный ( $pattern = preg_replace("/\\)/ui", '\\)', $pattern); // переобразуем спецсимвол в обычный ) $pattern = preg_replace("/\\[/ui", '\\[', $pattern); // переобразуем спецсимвол в обычный [ $pattern = preg_replace("/\\]/ui", '\\]', $pattern); // переобразуем спецсимвол в обычный ] $pattern = preg_replace("/\\\$/ui", '\\w', $pattern); // $ - строго 1 любая буква $pattern = preg_replace("/\\%/ui", '\\w?', $pattern); // % - 0 или 1 любая буква $pattern = preg_replace("/\\*/ui", '\\w*', $pattern); // * - 0 или несколько любых букв $pattern = preg_replace("/\\s/ui", '\\s*', $pattern); // пробельные символы в тексте Библии могут быть любыми $pattern = "/\\b" . $pattern . "\\b/ui"; // Только целое слово // echo "pattern=". $pattern. "<br>"; // Отладка /******************************************************************************* Организуем просмотр всех книг Библии *******************************************************************************/ foreach ($bg_bibfers_bookFile as $book => $book_file) { $book_file = 'bible/' . $book_file; // Имя файла книги /******************************************************************************* Чтение и преобразование файла книги *******************************************************************************/ // Получаем данные из файла $code = false; if ($bg_bibfers_option['fgc'] == 'on' && function_exists('file_get_contents')) { // Попытка1. Если данные не получены попробуем применить file_get_contents() $url = dirname(dirname(__FILE__)) . '/' . $book_file; // Локальный URL файла $code = file_get_contents($url); } if ($bg_bibfers_option['fopen'] == 'on' && !$code) { // Попытка 2. Если данные опять не получены попробуем применить fopen() $url = dirname(dirname(__FILE__)) . '/' . $book_file; // Локальный URL файла $ch = fopen($url, "r"); // Открываем файл для чтения if ($ch) { while (!feof($ch)) { $code .= fread($ch, 2097152); // загрузка текста (не более 2097152 байт) } fclose($ch); // Закрываем файл } } if ($bg_bibfers_option['curl'] == 'on' && function_exists('curl_init') && !$code) { // Попытка3. Если установлен cURL $url = plugins_url($book_file, dirname(__FILE__)); // URL файла $ch = curl_init($url); // создание нового ресурса cURL curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // возврат результата передачи в качестве строки из curl_exec() вместо прямого вывода в браузер $code = curl_exec($ch); // загрузка текста $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($httpCode != '200') { $code = false; } // Проверка на код http 200 curl_close($ch); // завершение сеанса и освобождение ресурсов } if (!$code) { return ""; } // Увы. Паранойя хостера достигла апогея. Файл не прочитан или ошибка // Преобразовать json в массив $json = json_decode($code, true); /******************************************************************************* Поиск вхождения в текст стиха Библии и формирование результатов поиска *******************************************************************************/ $cn_json = count($json); $chr = 0; for ($i = 0; $i < $cn_json; $i++) { if (!preg_match($pattern, $json[$i]['text'])) { continue; } // Если нет вхождений ищем в следующем стихе if ($bkr != $book) { if ($type == "book") { $verses = $verses . "<h3>" . bg_bibfers_getTitle($book) . "</h3>"; } else { if ($type == "t_verses") { $verses = $verses . "<strong>" . bg_bibfers_getTitle($book) . "</strong><br>"; } } $bkr = $book; } $ch = (int) $json[$i]['part']; $vr = (int) $json[$i]['stix']; $verses = $verses . bg_bibfers_printVerses($json, $book, $chr, $ch, $ch, $vr, $vr, $type, $lang, $prll); $chr = $ch; } } $verses = preg_replace($pattern, '<strong class="search-excerpt">\\0</strong>', $verses); if (!$verses) { $verses = '<p>«<strong class="search-excerpt">' . $context . '</strong>» — ' . __('sorry, but nothing matched your search terms. Please try again with some different keywords.', 'bg_bibfers') . '</p>'; } return $verses; }
function bg_bibfers_getQuotes($book, $chapter, $type, $lang, $prll = '') { global $bg_bibfers_option; global $bg_bibfers_chapter, $bg_bibfers_ch; global $bg_bibfers_url, $bg_bibfers_bookTitle, $bg_bibfers_shortTitle, $bg_bibfers_bookFile; $lang = include_books($lang); bg_bibfers_get_options(); /******************************************************************************* Преобразование обозначения книги из формата azbyka.ru в формат patriarhia.ru чтение и преобразование файла книги *******************************************************************************/ if (!$book) { return ""; } if (!$bg_bibfers_bookFile[$book]) { return ""; } $book_file = 'bible/' . $bg_bibfers_bookFile[$book]; // Имя файла книги // Получаем данные из файла $code = false; if ($bg_bibfers_option['fgc'] == 'on' && function_exists('file_get_contents')) { // Попытка1. Если данные не получены попробуем применить file_get_contents() $url = dirname(dirname(__FILE__)) . '/' . $book_file; // Локальный URL файла $code = file_get_contents($url); } if ($bg_bibfers_option['fopen'] == 'on' && !$code) { // Попытка 2. Если данные опять не получены попробуем применить fopen() $url = dirname(dirname(__FILE__)) . '/' . $book_file; // Локальный URL файла $ch = fopen($url, "r"); // Открываем файл для чтения if ($ch) { while (!feof($ch)) { $code .= fread($ch, 2097152); // загрузка текста (не более 2097152 байт) } fclose($ch); // Закрываем файл } } if ($bg_bibfers_option['curl'] == 'on' && function_exists('curl_init') && !$code) { // Попытка3. Если установлен cURL $url = plugins_url($book_file, dirname(__FILE__)); // URL файла $ch = curl_init($url); // создание нового ресурса cURL curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // возврат результата передачи в качестве строки из curl_exec() вместо прямого вывода в браузер $code = curl_exec($ch); // загрузка текста $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($httpCode != '200') { $code = false; } // Проверка на код http 200 curl_close($ch); // завершение сеанса и освобождение ресурсов } if (!$code) { return ""; } // Увы. Паранойя хостера достигла апогея. Файл не прочитан или ошибка // Преобразовать json в массив $json = json_decode($code, true); if ($type == "book") { $verses = "<h3>" . bg_bibfers_getTitle($book) . "</h3>"; } else { if ($type == "t_verses") { $verses = "<strong>" . bg_bibfers_getTitle($book) . "</strong><br>"; } else { $verses = ""; } } if ($type != "quote") { $verses = $verses . "<div>"; } /******************************************************************************* Разбор ссылки и формирование текста стихов Библии *******************************************************************************/ $jj = 0; $chr = 0; // Предыдущая глава while (preg_match("/\\d+/u", $chapter, $matches, PREG_OFFSET_CAPTURE)) { // Должно быть число - номер главы $jj++; // Защита от зацикливания (не более 10 циклов) if ($jj > 10) { return "***"; } $ch1 = (int) $matches[0][0]; $chapter = substr($chapter, (int) $matches[0][1]); if (preg_match("/\\:|\\,|\\-/u", $chapter, $matches, PREG_OFFSET_CAPTURE)) { // Допускается: двоеточие, запятая, тире или <конец строки> $sp = $matches[0][0]; $chapter = substr($chapter, (int) $matches[0][1]); } else { $sp = ""; } if (strcasecmp($sp, ":") == 0) { // Двоеточие - далее стихи $ii = 0; while (preg_match("/\\d+/u", $chapter, $matches, PREG_OFFSET_CAPTURE)) { // Должно быть число - номер стиха $ii++; // Защита от зацикливания (не более 10 циклов) if ($ii > 10) { return "***"; } $vr1 = (int) $matches[0][0]; $chapter = substr($chapter, (int) $matches[0][1]); if (preg_match("/\\:|\\,|\\-/u", $chapter, $matches, PREG_OFFSET_CAPTURE)) { // Допускается: двоеточие, запятая, тире или <конец строки> $sp = $matches[0][0]; $chapter = substr($chapter, (int) $matches[0][1]); } else { $sp = ""; } if (strcasecmp($sp, ":") == 0) { // Если двоеточие, то не номер стиха, а номер главы и далее стихи $ch1 = $vr1; } else { $ch2 = $ch1; if (strcasecmp($sp, "-") == 0) { preg_match("/\\d+/u", $chapter, $matches, PREG_OFFSET_CAPTURE); // Должно быть число - номер стиха $vr2 = (int) $matches[0][0]; $chapter = substr($chapter, (int) $matches[0][1]); if (preg_match("/\\:|\\,/u", $chapter, $matches, PREG_OFFSET_CAPTURE)) { // Допускается: двоеточие, запятая или <конец строки> $sp = $matches[0][0]; $chapter = substr($chapter, (int) $matches[0][1]); if (strcasecmp($sp, ":") == 0) { // Если двоеточие, то не номер стиха, а номер главы и далее стихи $ch2 = $vr2; preg_match("/\\d+/u", $chapter, $matches, PREG_OFFSET_CAPTURE); // Должно быть число - номер стиха $vr2 = (int) $matches[0][0]; if (preg_match("/\\,/u", $chapter, $matches, PREG_OFFSET_CAPTURE)) { // Допускается: запятая или <конец строки> $sp = $matches[0][0]; $chapter = substr($chapter, (int) $matches[0][1]); } else { $sp = ""; } } else { if (strcasecmp($sp, ",") == 0) { preg_match("/\\d+/u", $chapter, $matches, PREG_OFFSET_CAPTURE); // Должно быть число - номер стиха $sp = $matches[0][0]; $chapter = substr($chapter, (int) $matches[0][1]); } else { $sp = ""; } } } else { $sp = ""; } } else { $vr2 = $vr1; } $verses = $verses . bg_bibfers_printVerses($json, $book, $chr, $ch1, $ch2, $vr1, $vr2, $type, $lang, $prll); $chr = $ch1; if ($sp == "") { break; } } } } else { // Далее до двоеточия только главы if (strcasecmp($sp, "-") == 0) { preg_match("/\\d+/u", $chapter, $matches, PREG_OFFSET_CAPTURE); // Должно быть число - номер главы $ch2 = (int) $matches[0][0]; $chapter = substr($chapter, (int) $matches[0][1]); /* if (preg_match("/\\,/u", $chapter, $matches, PREG_OFFSET_CAPTURE)) { // Допускается: запятая или <конец строки> $sp = $matches[0][0]; $chapter = substr($chapter,(int)$matches[0][1]); } else $sp = ""; */ $vr1 = 0; $vr2 = 999; if (preg_match("/\\:|\\,/u", $chapter, $matches, PREG_OFFSET_CAPTURE)) { // Допускается: двоеточие, запятая или <конец строки> $sp = $matches[0][0]; $chapter = substr($chapter, (int) $matches[0][1]); if (strcasecmp($sp, ":") == 0) { // Если двоеточие, то не номер стиха, а номер главы и далее стихи preg_match("/\\d+/u", $chapter, $matches, PREG_OFFSET_CAPTURE); // Должно быть число - номер стиха $vr2 = (int) $matches[0][0]; if (preg_match("/\\,/u", $chapter, $matches, PREG_OFFSET_CAPTURE)) { // Допускается: запятая или <конец строки> $sp = $matches[0][0]; $chapter = substr($chapter, (int) $matches[0][1]); } else { $sp = ""; } } else { if (strcasecmp($sp, ",") == 0) { $sp = $matches[0][0]; $chapter = substr($chapter, (int) $matches[0][1]); } else { $sp = ""; } } } else { $sp = ""; } } else { $ch2 = $ch1; $vr1 = 0; $vr2 = 999; } $verses = $verses . bg_bibfers_printVerses($json, $book, $chr, $ch1, $ch2, $vr1, $vr2, $type, $lang, $prll); $chr = $ch2; } if ($sp == "") { break; } } if ($type != "quote") { $verses = $verses . "</div>"; } return $verses; }