99 lines
3.9 KiB
PHP
99 lines
3.9 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Convertis une string en camelCase (seulement si la string contient des espaces)
|
|
* @param string $str
|
|
* @return string
|
|
*/
|
|
function camelCase($str, array $noStrip = []) {
|
|
$str = preg_replace('/[^a-z0-9' . implode("", $noStrip) . ']+/i', ' ', $str);
|
|
$str = trim($str);
|
|
$str = ucwords($str);
|
|
$str = str_replace(" ", "", $str);
|
|
$str = lcfirst($str);
|
|
return $str;
|
|
}
|
|
|
|
/**
|
|
* Génére une string d'une taille donnée
|
|
* @param number $length
|
|
* @return string
|
|
*/
|
|
function uniqueId($length = 8) {
|
|
return substr(md5(uniqid(mt_rand(), true)), 0, $length);
|
|
}
|
|
|
|
/**
|
|
* Vérifie si une valeur se trouve en bdd
|
|
* @param string $bdd
|
|
* @param string $valueToFind
|
|
* @param string $valueName
|
|
* @return array
|
|
*/
|
|
function alreadyExists($bdd, $valueToFind, $valueName, $typeURL = false) {
|
|
$array = array("isInDatabase" => false, $valueName => "");
|
|
$req = $bdd->prepare('SELECT * FROM short_links WHERE ' . $valueName . ' = ?');
|
|
$req->execute(array($valueToFind));
|
|
while ($result = $req->fetch()) {
|
|
$array['isInDatabase'] = true;
|
|
if($typeURL) {
|
|
$array["shortcut"] = $result["shortcut"];
|
|
}
|
|
}
|
|
return $array;
|
|
}
|
|
|
|
$array = array("url" => "", "option"=> "", "message" => "");
|
|
|
|
if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
|
|
|
// Si le formulaire est envoyé
|
|
if(isset($_POST['url']) && isset($_POST['option'])) {
|
|
$array["url"] = $_POST["url"];
|
|
$array["option"] = $_POST["option"];
|
|
|
|
// Si ce n'est pas un lien valide
|
|
if(!filter_var($array["url"], FILTER_VALIDATE_URL)) {
|
|
$array["message"] = "Veuillez entré une URL valide.";
|
|
} else {
|
|
// Connexion à la base de donnée
|
|
require_once('./config_database/connectDB.php');
|
|
|
|
// URL déjà en base de donnée ?
|
|
$urlInDatabase = alreadyExists($bdd, $array["url"], "url", true);
|
|
if($urlInDatabase['isInDatabase']) {
|
|
$shortcutURL = $linkPath . '?q=' . $urlInDatabase['shortcut'];
|
|
$array['message'] = 'Adresse déjà raccourcie : <a target="_blank" href="' . $shortcutURL . '">' . $shortcutURL . '</a>';
|
|
} else {
|
|
if($array['option'] == "userShortcut" && isset($_POST['userShortcut']) && !empty($_POST['userShortcut'])) {
|
|
// Shortcut choisis par l'utilisateur
|
|
$shortcut = camelCase($_POST['userShortcut']);
|
|
} else {
|
|
// Shortcut unique aléatoire
|
|
do {
|
|
$shortcut = uniqueId();
|
|
} while(alreadyExists($bdd, $shortcut, "shortcut")['isInDatabase']);
|
|
}
|
|
$shortcutURL = $linkPath . '?q=' . $shortcut;
|
|
if(alreadyExists($bdd, $shortcut, "shortcut")['isInDatabase']) {
|
|
$array['message'] = 'Le shortcut "' . $shortcut . '" est déjà pris, veuillez en choisir un autre.';
|
|
} else {
|
|
// Envoi de l'URL et du shortcut dans la base de donnée
|
|
$req = $bdd->prepare('INSERT INTO short_links(url, shortcut) VALUES (?, ?)');
|
|
$req->execute(array($array['url'], $shortcut));
|
|
$array['message'] = 'URL raccourcie : <a target="_blank" href="' . $shortcutURL . '">'. $shortcutURL .'</a>';
|
|
|
|
// URL et Shortcut en Cookie
|
|
if(isset($_COOKIE['shortcuts']) && !empty($_COOKIE['shortcuts'])) {
|
|
$data = json_decode($_COOKIE['shortcuts'], true);
|
|
} else {
|
|
$data = array();
|
|
}
|
|
array_push($data, array("url" => $array['url'], "shortcut" => $shortcutURL));
|
|
setcookie('shortcuts', json_encode($data), time()+3600*24*365, '/');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
echo json_encode($array);
|
|
} |