function brugernavn_ledigt_test() { echo "Tester brugernavn_ledigt: "; backend_dbquery("DELETE FROM brugere WHERE brugernavn='nykoptg'"); backend_dbquery("DELETE FROM brugere WHERE brugernavn='nyktte'"); backend_dbquery("DELETE FROM vaerelser WHERE vaerelse = 'L88'"); if (backend_brugernavn_ledigt('nykledig') != true) { fejl(__LINE__); } backend_dbquery("INSERT INTO vaerelser SET vaerelse = 'L88', " . "vaerelse_type='vaerelse'"); backend_dbquery("INSERT INTO brugere SET vaerelse = 'L88', brugernavn='nykoptg', " . "navn='test'"); if (backend_brugernavn_ledigt('nykoptg') != false) { fejl(__LINE__); } backend_dbquery("DELETE FROM brugere WHERE brugernavn='nykoptg'"); backend_dbquery("DELETE FROM vaerelser WHERE vaerelse = 'L88'"); echo "ok\n"; }
/** * Genrerer et ledigt brugernavn af initialer af fulde navn med prefiks "nyk". * * @param string $fulde_navn Brugerens fulde navn * @return Et genereret brugernavn */ function backend_generer_brugernavn($fulde_navn) { $fulde_navn = str_replace('æ', 'a', $fulde_navn); $fulde_navn = str_replace('Æ', 'a', $fulde_navn); $fulde_navn = str_replace('ø', 'o', $fulde_navn); $fulde_navn = str_replace('Ø', 'o', $fulde_navn); $fulde_navn = str_replace('å', 'å', $fulde_navn); $fulde_navn = str_replace('Å', 'å', $fulde_navn); $fulde_navn = str_replace('ö', 'o', $fulde_navn); $fulde_navn = str_replace('Ö', 'o', $fulde_navn); $fulde_navn = preg_replace('/([^\\w ])/', '', $fulde_navn); // opdel fornavn, mellemnavn og efternavne $q = explode(' ', strtolower($fulde_navn)); // brugernavn kandidater $k = array(); if (count($q) == 1) { // kun fornavn var givet $k[] = substr($q[0], 0, 3); // kandidat: første tre bogstaver if (strlen($q[0]) < 6) { $k[] = $q[0]; } // kandidat: hele navn $k[] = substr($q[0], 0, 4); // kandidat: første fire bogstaver $k[] = substr($q[0], 0, 5); // kandidat: første fem bostaver } elseif (count($q) == 2) { // fornavn og efternavn // kandidat: første bogstave af fornavn samt to første fra efternavn $k[] = substr($q[0], 0, 1) . substr($q[1], 0, 2); // kandidat: første to bogstaver af fornavn samt første fra efternavn $k[] = substr($q[0], 0, 2) . substr($q[1], 0, 1); $k[] = substr($q[0], 0, 2) . substr($q[1], 0, 2); // ... $k[] = substr($q[0], 0, 1) . substr($q[1], 0, 3); $k[] = substr($q[0], 0, 3) . substr($q[1], 0, 1); } elseif (count($q) >= 3) { $k[] = substr($q[0], 0, 1) . substr($q[1], 0, 1) . substr($q[count($q) - 1], 0, 1); if (count($q) == 4) { $k[] = substr($q[0], 0, 1) . substr($q[1], 0, 1) . substr($q[2], 0, 1) . substr($q[3], 0, 1); } $k[] = substr($q[0], 0, 2) . substr($q[count($q) - 1], 0, 1); $k[] = substr($q[0], 0, 1) . substr($q[count($q) - 1], 0, 2); } else { $k[] = '1'; } // filtrer latterlige navne $k = array_values(array_diff($k, array('root', 'gud', 'lort', 'pik', 'pikr', 'dad', 'hak', 'hec', 'h**o', 'hom', 'kilo', 'adm', 'pis'))); // sæt nyk foran alle kandidater for ($i = 0; $i < count($k); $i++) { $k[$i] = 'nyk' . $k[$i]; } // vælg et ledigt brugernavn blandt kandidater $brugernavn = null; for ($i = 0; $brugernavn == null && $i < count($k); $i++) { if (backend_brugernavn_ledigt($k[$i])) { $brugernavn = $k[$i]; } } // hvis intet var fundet, prøv da at sæt tal bagpå for ($i = 1; $brugernavn == null; $i++) { if (backend_brugernavn_ledigt($k[0] . $i)) { $brugernavn = $k[0] . $i; } } return $brugernavn; }