151 lines
4.5 KiB
PHP
151 lines
4.5 KiB
PHP
<?php
|
|
|
|
/**
|
|
* PasswordPhraseGenerator
|
|
*/
|
|
class PasswordPhraseGenerator
|
|
{
|
|
/**
|
|
* Initializing object
|
|
*/
|
|
function __construct()
|
|
{
|
|
$this->sub = json_decode(file_get_contents('data/navneord.json'));
|
|
$this->ver = json_decode(file_get_contents('data/verber.json'));
|
|
$this->adj = json_decode(file_get_contents('data/adj.json'));
|
|
$this->ord = [
|
|
"sub" => json_decode(file_get_contents('data/navneord.json')),
|
|
"ver" => json_decode(file_get_contents('data/verber.json')),
|
|
"adj" => json_decode(file_get_contents('data/adj.json')),
|
|
"pro" => ["jeg", "han", "hun", "den", "det", "de", "I", "vi", "du", "De"],
|
|
"tid" => ["før", "efter", "imens", "inden"],
|
|
"for" => ["over", "under", "ved siden af", "bag", "foran", "overfor"],
|
|
];
|
|
$this->tal = rand(2, 79);
|
|
$this->model = rand(0, 1);
|
|
$this->end = array(".", "!", "?", "!?", "...", " :-)", " ;-)");
|
|
$this->tegn = $this->end[array_rand($this->end)];
|
|
}
|
|
|
|
|
|
/**
|
|
* Random sub element
|
|
*
|
|
* @param array $arr
|
|
* @return array
|
|
*/
|
|
private function _rando($arr)
|
|
{
|
|
return $arr[array_rand($arr)];
|
|
}
|
|
|
|
/**
|
|
* Select random word from class
|
|
*
|
|
* @param string $cla
|
|
* @param int $conj
|
|
* @return string $word
|
|
*/
|
|
private function _word($cla, $conj = null)
|
|
{
|
|
$word = $this->ord[$cla][array_rand($this->ord[$cla])]; //rand(0,count($ord[$cla]));
|
|
if ($conj == null) {
|
|
return $word;
|
|
} else {
|
|
return $word[$conj];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Main model generator
|
|
*
|
|
* @param integer $conj
|
|
* @return string $phrase
|
|
*/
|
|
function lego($conj = 0)
|
|
{
|
|
// 0 = ubestemt ental, eks. "en grim tyr" el. "et dumt æg".
|
|
// 1 = bestemt ental, eks. "den grimme tyr" el. "det dumme æg"
|
|
// 2 = ubestemt flertal, eks. "ægte tedåser"
|
|
// 3 = bestemt flertal, eks. "de rådne æbler"
|
|
$main = $this->_word("sub");
|
|
$desc = $this->_word("adj");
|
|
if ($main[4] == "t") {
|
|
$neutrum = true;
|
|
} else {
|
|
$neutrum = false;
|
|
}
|
|
|
|
switch ($conj) {
|
|
case 0:
|
|
if ($neutrum) {
|
|
$phrase = "et " . $this->_word("adj")[1] . " " . $main[0];
|
|
} else {
|
|
$phrase = "en " . $this->_word("adj")[0] . " " . $main[0];
|
|
}
|
|
break;
|
|
case 1:
|
|
if ($neutrum) {
|
|
$phrase = "det " . $this->_word("adj")[2] . " " . $main[0];
|
|
} else {
|
|
$phrase = "den " . $this->_word("adj")[2] . " " . $main[0];
|
|
}
|
|
break;
|
|
case 2:
|
|
$phrase = $this->_word("adj")[2] . " " . $main[2];
|
|
break;
|
|
case 3:
|
|
$phrase = "de " . $this->_word("adj")[2] . " " . $main[2];
|
|
break;
|
|
}
|
|
return $phrase;
|
|
}
|
|
|
|
/**
|
|
* Generate phrase
|
|
*
|
|
* @return string $phrase
|
|
*/
|
|
public function generate()
|
|
{
|
|
switch ($this->model) {
|
|
case 0:
|
|
if ($this->tal > 1) {
|
|
$b = $this->lego(2);
|
|
} else {
|
|
$b = $this->lego(rand(0, 1));
|
|
}
|
|
$c = $this->_word("ver", rand(1, 4));
|
|
$d = $this->_word("sub", $this->_rando([1, 3]));
|
|
if (rand(0, 1) > 0) {
|
|
$which = rand(1, 3);
|
|
switch ($which) {
|
|
case 1:
|
|
$b = mb_strtoupper($b);
|
|
break;
|
|
case 2:
|
|
$c = mb_strtoupper($c);
|
|
break;
|
|
case 1:
|
|
$d = mb_strtoupper($d);
|
|
break;
|
|
}
|
|
}
|
|
$result = "{$this->tal} $b $c $d{$this->tegn}";
|
|
break;
|
|
case 1:
|
|
$a = $this->lego($this->_rando([0, 1, 3]));
|
|
$b = $this->_word("ver", rand(1, 4));
|
|
if ($this->tal > 1) {
|
|
$c = $this->_word("sub", 2);
|
|
} else {
|
|
$c = $this->_word("sub", $this->_rando([1, 3]));
|
|
}
|
|
$result = "$a $b {$this->tal} $c{$this->tegn}";
|
|
break;
|
|
}
|
|
|
|
return ucwords($result);
|
|
}
|
|
}
|