From 12045275d5e48d9e9fcd357c11a30601ed2ca3ea Mon Sep 17 00:00:00 2001 From: Gregory Trolliet Date: Thu, 26 Nov 2020 17:03:27 +0100 Subject: [PATCH] Simplify the cloud generation code --- db.php | 59 ++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 22 deletions(-) diff --git a/db.php b/db.php index 5e9fbbe..6063d7d 100644 --- a/db.php +++ b/db.php @@ -131,16 +131,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 +181,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 +217,25 @@ class DataBase $duration = self::DEFAULT_DURATION; } - $cpt = 0; - $codeIsUsed = true; - while ($codeIsUsed && $cpt < 0) { + for ($i = 0; $i < 10; $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; + if (!$this->loadCloudByCode($code)) { + echo 'LOAD CLOUD'; + 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 +245,7 @@ class DataBase 'id' => $this->db->lastInsertId(), 'code' => $code, 'size' => $size, - 'delete_t' => $duration, + 'delete_t' => $delete, 'text' => $text, ); return $this->cloud;