New function : shortenLink
This commit is contained in:
parent
3e3f13d079
commit
d07f03724b
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
||||
htaccess
|
||||
php/keyVariable.php
|
||||
php/config_database
|
@ -24,6 +24,9 @@ Puis créer un nouveau fichier dans ```/php``` du nom de ```keyVariable.php```,
|
||||
$apiWeather = 'votre clé api pour openweathermap.org';
|
||||
```
|
||||
|
||||
Sachez tout de même que vous ne pourrez pas utiliser la fonction linkShortener car elle dépend de [short-links.divlo.fr/](https://short-links.divlo.fr/).
|
||||
Cependant, vous avez accès à la structure de la base de donnée dans ```/php/short_links.sql```.
|
||||
|
||||
Enjoy! =D
|
||||
|
||||
## Librairies
|
||||
|
@ -102,6 +102,14 @@ pre code {
|
||||
line-height: 2;
|
||||
}
|
||||
|
||||
.original-link-list {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
max-width: 200px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
/* FOOTER */
|
||||
footer
|
||||
{
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 15 KiB |
BIN
img/function-image/linkShortener.png
Normal file
BIN
img/function-image/linkShortener.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 94 KiB |
@ -88,6 +88,16 @@ switch ($currentpage) {
|
||||
$description = "Convertis du Markdown en HTML.";
|
||||
$image = 'https://function.divlo.fr/img/function-image/convertMarkdown.png';
|
||||
break;
|
||||
case '/views/function-views/linkShortener.php':
|
||||
$title = "Raccourcisseurs de liens";
|
||||
$description = "Une URL trop longue ? Raccourcissez-là !";
|
||||
$image = 'https://function.divlo.fr/img/function-image/linkShortener.png';
|
||||
break;
|
||||
case '/views/short_links-list.php':
|
||||
$title = 'Liste des liens récemment raccourcit';
|
||||
$description = "La liste de vos liens raccourcit les plus récents.";
|
||||
$image = 'https://function.divlo.fr/img/function-image/linkShortener.png';
|
||||
break;
|
||||
default:
|
||||
$title = 'Erreur 404';
|
||||
$description = "Cette page n'existe pas!";
|
||||
|
13
php/short_links.sql
Normal file
13
php/short_links.sql
Normal file
@ -0,0 +1,13 @@
|
||||
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||
SET AUTOCOMMIT = 0;
|
||||
START TRANSACTION;
|
||||
SET time_zone = "+00:00";
|
||||
|
||||
DROP TABLE IF EXISTS `short_links`;
|
||||
CREATE TABLE IF NOT EXISTS `short_links` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`url` text NOT NULL,
|
||||
`shortcut` text NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
COMMIT;
|
100
php/shortenLink.php
Normal file
100
php/shortenLink.php
Normal file
@ -0,0 +1,100 @@
|
||||
<?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);
|
||||
}
|
||||
?>
|
@ -95,16 +95,6 @@ $(function () {
|
||||
$('.resultsRandomQuote').html(getRandomQuote());
|
||||
}
|
||||
|
||||
/* Permet d'afficher la liste des citations/proverbes */
|
||||
if(chemin === "/views/quote-list.php") {
|
||||
window.onload = $('.totalLengthQuote').html('Total de ' + quotes.length + ' citations.');
|
||||
let resultat = "";
|
||||
for (index in quotes) {
|
||||
resultat = resultat + `<tr> <td class="quote-element-list important">${quotes[index]["source"]}</td> <td class="quote-element-list">${quotes[index]["quote"]}</td> </tr>`;
|
||||
}
|
||||
$(".quote-list").append(resultat);
|
||||
}
|
||||
|
||||
$("#submitConvertCurrency").click(() => {
|
||||
let value = $('#value').val();
|
||||
const currencyOfTheValue = $("#currencyOfTheValue option:selected").val();
|
||||
@ -212,4 +202,21 @@ $(function () {
|
||||
localStorage.setItem("texteMarkdown", textMarkdown);
|
||||
$('.results').html(convertedHTML);
|
||||
});
|
||||
|
||||
$('#formLinkShortener').submit((e) => {
|
||||
e.preventDefault();
|
||||
const postdata = $('#formLinkShortener').serialize();
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '../../php/shortenLink.php',
|
||||
data: postdata,
|
||||
success: (text) => {
|
||||
try {
|
||||
$(".results").html(JSON.parse(text).message);
|
||||
} catch (error) {
|
||||
$(".results").html("URL invalide.");
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
@ -159,3 +159,25 @@ function isValidDate(verifyDate, currentDate) {
|
||||
function createSessionCookie(name, value) {
|
||||
document.cookie = escape(name) + "=" + escape(value) + " ; path=/";
|
||||
}
|
||||
|
||||
/**
|
||||
* @function getCookieValue
|
||||
* @description Récupère la valeur d'un cookie.
|
||||
* @param {string} name Nom du cookie
|
||||
* @param {string} value Valeur du cookie
|
||||
*/
|
||||
function getCookieValue(cname) {
|
||||
const name = cname + "=";
|
||||
const decodedCookie = decodeURIComponent(document.cookie);
|
||||
const ca = decodedCookie.split(';');
|
||||
for(let i = 0; i < ca.length; i++) {
|
||||
let c = ca[i];
|
||||
while (c.charAt(0) == ' ') {
|
||||
c = c.substring(1);
|
||||
}
|
||||
if (c.indexOf(name) == 0) {
|
||||
return c.substring(name.length, c.length);
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
@ -34,6 +34,29 @@ $(function () {
|
||||
/* Permet d'afficher l'heure en temps réel sur le footer */
|
||||
realDateTime('realDateTime');
|
||||
|
||||
/* Permet d'afficher la liste des citations/proverbes */
|
||||
if(chemin === "/views/quote-list.php") {
|
||||
window.onload = $('.totalLengthQuote').html('Total de ' + quotes.length + ' citations.');
|
||||
let resultat = "";
|
||||
for (index in quotes) {
|
||||
resultat = resultat + `<tr> <td class="quote-element-list important">${quotes[index]["source"]}</td> <td class="quote-element-list">${quotes[index]["quote"]}</td> </tr>`;
|
||||
}
|
||||
$(".quote-list").append(resultat);
|
||||
}
|
||||
|
||||
/* Permet d'afficher la liste des liens récemment raccourcit */
|
||||
if(chemin === "/views/short_links-list.php") {
|
||||
try {
|
||||
const shortcuts = JSON.parse(getCookieValue("shortcuts"));
|
||||
window.onload = $('.totalLengthLinksList').html(`Total de ${shortcuts.length} lien(s) raccourcit récemment.`);
|
||||
let resultat = "";
|
||||
for (element of shortcuts) {
|
||||
resultat += `<tr> <td class="original-link-list"><a href="${element["url"]}" target="_blank">${element["url"]}</a></td> <td class="link-list"><a href="${element["shortcut"]}" target="_blank">${element["shortcut"]}</a></td> </tr>`;
|
||||
}
|
||||
$(".links-list").append(resultat);
|
||||
} catch(error) {}
|
||||
}
|
||||
|
||||
/* Window Scroll Top Button */
|
||||
const $btnScrollTop = $('.scroll-top-arrow');
|
||||
$btnScrollTop.on('click', function () {
|
||||
@ -41,6 +64,18 @@ $(function () {
|
||||
return false;
|
||||
});
|
||||
|
||||
// Affiche l'input selon le choix de l'utilisateur sur la page linkShortener
|
||||
if(chemin === '/views/function-views/linkShortener.php') {
|
||||
$('.hideUserShortcut').hide();
|
||||
$("#option").bind("keyup change", () => {
|
||||
if ($("#option").val() == "userShortcut") {
|
||||
$('.hideUserShortcut').show();
|
||||
} else {
|
||||
$('.hideUserShortcut').hide();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/* Date Picker */
|
||||
$.fn.datepicker.dates['fr'] = {
|
||||
days: ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"],
|
||||
|
@ -103,7 +103,7 @@
|
||||
<p class="function-list-description">Vérifie si un nombre fait partie des nombres d'Armstrong ou non.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6 col-md-6 pb-4">
|
||||
<div class="col-sm-12 col-md-6 pb-4">
|
||||
<div class="text-center pb-5">
|
||||
<h2 class="function-list-title"><a href="./function-views/heapAlgorithm.php">Heap's algorithm</a></h2>
|
||||
<a href="./function-views/heapAlgorithm.php"><img class="function-list-image" src="/img/function-image/heapAlgorithm.png" alt="Heap's algorithm"></a>
|
||||
@ -113,13 +113,19 @@
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-sm-12 pb-4">
|
||||
<div class="col-sm-12 col-md-6 pb-4">
|
||||
<div class="text-center pb-5">
|
||||
<h2 class="function-list-title"><a href="./function-views/convertMarkdown.php">Markdown</a></h2>
|
||||
<a href="./function-views/convertMarkdown.php"><img class="function-list-image" src="/img/function-image/convertMarkdown.png" alt="Markdown"></a>
|
||||
<p class="function-list-description">Convertis du Markdown en HTML.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6 pb-4">
|
||||
<div class="text-center pb-5">
|
||||
<h2 class="function-list-title"><a href="./function-views/linkShortener.php">Raccourcisseurs de liens</a></h2>
|
||||
<a href="./function-views/linkShortener.php"><img class="function-list-image" src="/img/function-image/linkShortener.png" alt="Raccourcisseurs de liens"></a>
|
||||
<p class="function-list-description">Une URL trop longue ? Raccourcissez-là !</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
@ -12,10 +12,10 @@
|
||||
<img class="function-image" src="/img/function-image/filterStudents.png" alt="Carte étudiant">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="nameEntered">Entrez les prénoms :</label>
|
||||
<label for="nameEntered">Entrer les prénoms :</label>
|
||||
<input name="nameEntered" type="text" id="nameEntered" placeholder="(e.g : 'Prénom1, Prénom2, Prénom3, ...')" class="form-control">
|
||||
<br>
|
||||
<label for="filteredLetter">Entrez la lettre à filtré :</label>
|
||||
<label for="filteredLetter">Entrer la lettre à filtré :</label>
|
||||
<input name="filteredLetter" type="text" id="filteredLetter" placeholder="(e.g : 'A')" class="form-control">
|
||||
<br>
|
||||
<div class="form-row text-center">
|
||||
|
40
views/function-views/linkShortener.php
Normal file
40
views/function-views/linkShortener.php
Normal file
@ -0,0 +1,40 @@
|
||||
<!-- Config -->
|
||||
<?php include("../../php/config.php");?>
|
||||
|
||||
<!-- Header -->
|
||||
<?php include("../../incl/header.php");?>
|
||||
|
||||
<!-- Page Content -->
|
||||
<div class="container">
|
||||
<h1><span class="important"><?php echo $title?></span> :</h1>
|
||||
<p class="pt-3 text-center">
|
||||
<?php echo $description?>
|
||||
<div class="text-center">
|
||||
<img class="function-image" src="/img/function-image/linkShortener.png" alt="Raccourcisseurs de liens">
|
||||
</div>
|
||||
<br>
|
||||
<div class="text-center">
|
||||
<a href="/views/short_links-list.php">La liste de vos liens raccourcit les plus récents.</a>
|
||||
</div>
|
||||
</p>
|
||||
|
||||
<form id="formLinkShortener" method="post">
|
||||
<div class="form-group">
|
||||
<label for="url">Entrez le lien :</label> <br>
|
||||
<input name="url" type="url" id="url" placeholder="(e.g : divlo.fr)" class="form-control"> <br class="hideUserShortcut">
|
||||
<label class="hideUserShortcut" for="userShortcut">Entrez le nom du raccourci :</label> <br class="hideUserShortcut">
|
||||
<input name="userShortcut" type="text" id="userShortcut" placeholder="(e.g : divlo)" class="form-control hideUserShortcut"> <br>
|
||||
<label for="option">Choisissez une option : </label> <br>
|
||||
<select class="form-control" id="option" name="option">
|
||||
<option value="randomShortcut">Raccourci aléatoire</option>
|
||||
<option value="userShortcut">Donner un nom au raccourci</option>
|
||||
</select>
|
||||
<br>
|
||||
<button type="submit" class="btn btn-dark text-center">Envoyer</button>
|
||||
<br>
|
||||
</div>
|
||||
<p class="results text-center"></p>
|
||||
</form>
|
||||
|
||||
<!-- Footer -->
|
||||
<?php include("../../incl/footer.php");?>
|
28
views/short_links-list.php
Normal file
28
views/short_links-list.php
Normal file
@ -0,0 +1,28 @@
|
||||
<!-- Config -->
|
||||
<?php include("../php/config.php");?>
|
||||
|
||||
<!-- Header -->
|
||||
<?php include("../incl/header.php");?>
|
||||
|
||||
<!-- Page Content -->
|
||||
<div class="container">
|
||||
<h1><span class="important"><?php echo $title?></span> :</h1>
|
||||
<p class="pt-3 text-center">
|
||||
<span class="totalLengthLinksList"></span><br>
|
||||
<a href="/views/function-views/linkShortener.php">Revenir au raccourcisseur de liens.</a>
|
||||
</p>
|
||||
|
||||
<table class="table table-bordered mt-5">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-center" scope="col">Liens originaux</th>
|
||||
<th class="text-center" scope="col">Liens raccourcit</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="links-list text-center">
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Footer -->
|
||||
<?php include("../incl/footer.php");?>
|
Reference in New Issue
Block a user