New function : shortenLink
This commit is contained in:
		
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,2 +1,3 @@ | ||||
| htaccess | ||||
| php/keyVariable.php | ||||
| 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."); | ||||
| 				} | ||||
| 			} | ||||
| 		}); | ||||
| 	}); | ||||
| }); | ||||
| @@ -158,4 +158,26 @@ 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");?> | ||||
| @@ -14,16 +14,16 @@ | ||||
|     </p> | ||||
|  | ||||
|     <table class="table table-bordered mt-5"> | ||||
|                 <thead> | ||||
|                     <tr> | ||||
|                         <th class="text-center" scope="col">Source</th> | ||||
|                         <th class="text-center" scope="col">Citation/Proverbe</th> | ||||
|                     </tr> | ||||
|                 </thead> | ||||
|                 <tbody class="quote-list text-center"> | ||||
|         <thead> | ||||
|             <tr> | ||||
|                 <th class="text-center" scope="col">Source</th> | ||||
|                 <th class="text-center" scope="col">Citation/Proverbe</th> | ||||
|             </tr> | ||||
|         </thead> | ||||
|         <tbody class="quote-list text-center"> | ||||
|  | ||||
|                 </tbody> | ||||
|             </table> | ||||
|         </tbody> | ||||
|     </table> | ||||
|  | ||||
| <!-- 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