Simplify the cloud generation code
This commit is contained in:
parent
31d43467ce
commit
12045275d5
1 changed files with 37 additions and 22 deletions
59
db.php
59
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;
|
||||
|
|
Loading…
Reference in a new issue