diff --git a/README.md b/README.md index a76c7db..9daf270 100644 --- a/README.md +++ b/README.md @@ -5,3 +5,24 @@ There is nothing stored on the server except the words. ## Database Database config option is set in the dbconfig.php file, example is in dbconfig_empty.php. +This software is developped with PostgreSQL, +I don't know if it is working with others DB management systems. + +## Libraries + +### php-i18n + +The internationalization is made possible by +[Philipp Schröer (php-i18n project)](https://github.com/Philipp15b/php-i18n). +For now it's only in french but the traduction should be easy. + +### Wordcloud2 + +The display of the words cloud is done by the Wordcloud2 javascript +code, made by +[Timothy Guan-tin Chien](http://timdream.org/wordcloud2.js/). + +### Soundex_fr + +The words comparison is made with PHP tools and the work of +Florent Bruneau on [the french translation of soundex](http://blog.mymind.fr/blog/2007/03/15/soundex-francais/). diff --git a/create.php b/create.php index f24f899..7b8f98f 100644 --- a/create.php +++ b/create.php @@ -24,12 +24,11 @@ if (empty($_POST)) { > - + createCloud($text, $size, $duration)) { $viewUrl = 'result.php?id=' . $cloud['code']; $viewName = 'https://' . $_SERVER['HTTP_HOST'] . '/' . $viewUrl; diff --git a/db.php b/db.php index 5e9fbbe..8868b4f 100644 --- a/db.php +++ b/db.php @@ -14,6 +14,7 @@ class DataBase const DEFAULT_SIZE = 3; const MAX_SIZE = 9; const CLOUD_CODE_LENGTH = 6; + const CLOUD_CODE_MAXTRY = 10; private $db; private $cloud; @@ -131,16 +132,40 @@ class DataBase $stmt->execute(); } } - public function getWordsList(string $id) + /** + * Get the list of the words inside the cloud + * + * If there is no $code parameter and the cloud isn't already loaded, + * return null. + * + * Return a list of words, orderer from the most used to the least, + * with the following fields: + * - word => the word + * - count => the number of occurences of the word + * - relative => the relative number of occurences, + * relative to the occurence max + * - percent => the percent of word in the cloud, + * relative to the total number of words + * @param string $code Code of the cloud + * @return array|null The words list + */ + public function getWordsList(string $code = null) { + if (isset($code)) { + $this->loadCloudByCode($code); + } + if (!isset($code) && !$this->isCloudSet()) { + return null; + } + $stmt = $this->db->prepare(" SELECT * FROM words JOIN clouds ON words.cloud_id = clouds.id_cloud - WHERE code = :id; + WHERE code = :code; "); - $stmt->bindValue(':id', $id); + $stmt->bindValue(':code', $this->cloud['code']); $stmt->execute(); $words = []; $values = []; @@ -157,7 +182,7 @@ class DataBase } foreach ($words as $key => $word) { $words[$key]['relative'] = $word['count'] / $max; - $words[$key]['percent'] = $word['count'] / $total * 100; + $words[$key]['percent'] = $word['count'] / $total * 100; } array_multisort($values, SORT_DESC, $words); @@ -193,34 +218,25 @@ class DataBase $duration = self::DEFAULT_DURATION; } - $cpt = 0; - $codeIsUsed = true; - while ($codeIsUsed && $cpt < 0) { + for ($i = 0; $i < self::CLOUD_CODE_MAXTRY; $i++) { $code = bin2hex(random_bytes(self::CLOUD_CODE_LENGTH)); - $stmt = $this->db->prepare(" - SELECT * - FROM clouds - WHERE code = :code; - "); - $stmt->bindValue(':code', $code); - $stmt->execute(); - if (!$data = $stmt->fetch()) { - $codeIsUsed = false; + $code = '2ae606bfb6d2'; + if (!$this->loadCloudByCode($code)) { + break; } - $cpt++; } - if ($codeIsUsed) { + if ($this->isCloudSet()) { return false; } - $duration = date('Y-m-d H:i:s', strtotime(self::OPTIONS_DURATION[$duration])); + $delete = date('Y-m-d H:i:s', strtotime(self::OPTIONS_DURATION[$duration])); $stmt = $this->db->prepare(" INSERT INTO clouds(code, text, size, delete_t) - VALUES (:code, :text, :size, :duration); + VALUES (:code, :text, :size, :delete); "); $stmt->bindValue(':code', $code, PDO::PARAM_STR); $stmt->bindValue(':text', $text, PDO::PARAM_STR); $stmt->bindValue(':size', $size, PDO::PARAM_INT); - $stmt->bindValue(':duration', $duration, PDO::PARAM_STR); + $stmt->bindValue(':delete', $delete, PDO::PARAM_STR); try { $stmt->execute(); } catch (PDOEXception $e) { @@ -230,7 +246,7 @@ class DataBase 'id' => $this->db->lastInsertId(), 'code' => $code, 'size' => $size, - 'delete_t' => $duration, + 'delete_t' => $delete, 'text' => $text, ); return $this->cloud; diff --git a/index.php b/index.php index ced4ef2..806b854 100644 --- a/index.php +++ b/index.php @@ -29,7 +29,7 @@ if (isset($_GET['id'])) { ?>
%s n'a pas été trouvé, veuillez vérifier [create] errorCode = "Erreur lors de la création du nuage, désolé du dérangement." +button = "Créer" [duration] day = "un jour"