', '
', '
'], "\n", $text); } /** * usuwa linijki które na początku mają ! albo # * @param $posText * @return string */ private function hideLines($posText): string { return preg_replace('/^\s*[!#].*?$[\r\n]?/m', '', $posText); } private function pickRandomElement($posText) { /** * poniższy kod wybieraz tekstu fragmenty w podwójnych nawiasach kwadratowych, rozdziela je po przecinkach * następnie losuje element i podmienia go w miejsce oryginalnego fragmentu */ $re = "#\[\[(.*?)\]\]#s"; preg_match_all($re, $posText, $found, PREG_SET_ORDER, 0); foreach ($found as $elements) { $data = explode(',', $elements[1]); $data = array_filter($data, function ($el) { return strlen(trim($el)); }); $data = array_values($data); $pos = strpos($posText, $elements[0]); $posText = substr_replace($posText, $data[mt_rand(0, count($data) - 1)], $pos, strlen($elements[0])); } return $posText; } private function randomNumber($posText) { /** * przeszukiwanie tekstu pod katem zawartości [ liczba, liczba2 ] i zamienianiu tego na randomową liczbę z przedziału * liczba - liczba2 * obojętnie czy ujemną czy nie */ $re = '/\[\s*(-?\d+)\s*\,\s*(-?\d+)\s*\]/'; preg_match_all($re, $posText, $matches, PREG_SET_ORDER, 0); foreach ($matches as $match) { $pos = strpos($posText, $match[0]); $posText = substr_replace($posText, mt_rand($match[1], $match[2]), $pos, strlen($match[0])); } return $posText; } public function vocabularyWord($posText) { if (strstr($posText, '[vocabulary_word]') || strpos($posText, '[vocabulary_short]') || strpos($posText, '[vocabulary_long]')) { $voc = new Vocabulary(); $randomWord = $voc->getRandomWord(); $word = $voc->getWord($randomWord); $posText = str_replace('[vocabulary_word]', $word->word, $posText); $posText = str_replace('[vocabulary_short]', $word->short, $posText); $posText = str_replace('[vocabulary_long]', $word->long, $posText); } return $posText; } public function traficar($posText) { $data = $posText; if (strstr($posText, '[traficar]')) { $data = []; $traficar = new Traficar(); $nearest = $traficar->nearestCar(); $data['text'] = "Najbliższy traficar:\n" . 'Model: ' . $nearest['car']['model'] . "\n" . 'Numer boczny: ' . $nearest['car']['orderNumber'] . "\n" . 'Rejestracja: ' . $nearest['car']['regNumber'] . "\n" . 'Lokalizacja: ' . $nearest['car']['location'] . "\n" . 'Odległość: ' . $nearest['distance'] . "km\n"; // $data['image'] = $nearest['imageName']; // $data['image'] = 'https://staticmapmaker.com/img/cartodb_placeholder.png'; } return $data; } public function convert($html = '') { $posText = $this->handleNewLine($html); $posText = $this->hideLines($posText); $posText = $this->pickRandomElement($posText); $posText = $this->randomNumber($posText); $posText = $this->vocabularyWord($posText); $posText = $this->traficar($posText); // print_r($posText); // die(); return $posText; } }