126 lines
3.9 KiB
PHP
126 lines
3.9 KiB
PHP
<?php
|
|
|
|
namespace App\Paper;
|
|
|
|
|
|
class HtmlToPos
|
|
{
|
|
|
|
|
|
private function handleNewLine($text)
|
|
{
|
|
return str_replace(['<br>', '<br/>', '<br />'], "\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;
|
|
}
|
|
|
|
|
|
/**
|
|
* łamie tekst w miejscu spacji do długości 32 znaki na linię
|
|
* @param $posText
|
|
* @return string
|
|
*/
|
|
public function textBreak($posText)
|
|
{
|
|
$posText = wordwrap($posText, 32);
|
|
return $posText;
|
|
}
|
|
|
|
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);
|
|
|
|
$posText = $this->textBreak($posText);
|
|
|
|
return $posText;
|
|
}
|
|
} |