First version of the WordsCloud site
This commit is contained in:
commit
8a6973fcb6
13 changed files with 1656 additions and 0 deletions
169
db.php
Normal file
169
db.php
Normal file
|
@ -0,0 +1,169 @@
|
|||
<?php
|
||||
class DataBase
|
||||
{
|
||||
private $db;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->init();
|
||||
}
|
||||
|
||||
public function init()
|
||||
{
|
||||
try {
|
||||
$this->db = new PDO('sqlite:test.db');
|
||||
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||
} catch (PDOException $e) {
|
||||
echo $e->getMessage();
|
||||
return null;
|
||||
}
|
||||
$stmt = $this->db->prepare('PRAGMA foreign_keys = 1;');
|
||||
$stmt->execute();
|
||||
}
|
||||
|
||||
public function isInit()
|
||||
{
|
||||
return isset($this->db);
|
||||
}
|
||||
|
||||
public function buildTables()
|
||||
{
|
||||
$stmt = $this->db->prepare('CREATE TABLE IF NOT EXISTS clouds('
|
||||
. 'id_cloud INTEGER PRIMARY KEY, '
|
||||
. 'code TEXT NOT NULL UNIQUE, '
|
||||
. 'create_t TIMESTAMP DEFAULT CURRENT_TIMESTAMP);'
|
||||
);
|
||||
$stmt->execute();
|
||||
$stmt = $this->db->prepare('CREATE TABLE IF NOT EXISTS words('
|
||||
. 'id_word INTEGER PRIMARY KEY, '
|
||||
. 'word TEXT NOT NULL, '
|
||||
. 'count INT DEFAULT 1, '
|
||||
. 'cloud_id INT NOT NULL, '
|
||||
. 'FOREIGN KEY (cloud_id) '
|
||||
. 'REFERENCES clouds(id_cloud) ON UPDATE CASCADE '
|
||||
. 'ON DELETE CASCADE);'
|
||||
);
|
||||
$stmt->execute();
|
||||
}
|
||||
|
||||
public function addWord(string $cloud, string $word)
|
||||
{
|
||||
if (empty($word)) {
|
||||
return false;
|
||||
}
|
||||
$stmt = $this->db->prepare('SELECT * FROM clouds WHERE code = :id;');
|
||||
$stmt->bindValue(':id', $cloud, PDO::PARAM_STR);
|
||||
$stmt->execute();
|
||||
$cloudId = null;
|
||||
if ($data = $stmt->fetch()) {
|
||||
$cloudId = $data['id_cloud'];
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
$stmt = $this->db->prepare('SELECT * FROM words '
|
||||
. 'WHERE cloud_id = :cid AND word = :w;'
|
||||
);
|
||||
$stmt->bindValue(':cid', $cloudId, PDO::PARAM_INT);
|
||||
$stmt->bindValue(':w', $word, PDO::PARAM_STR);
|
||||
$stmt->execute();
|
||||
if ($data = $stmt->fetch()) {
|
||||
$wordId = $data['id_word'];
|
||||
$stmt = $this->db->prepare(
|
||||
'UPDATE words SET count = count + 1 WHERE id_word = :id;'
|
||||
);
|
||||
$stmt->bindValue(':id', $wordId, PDO::PARAM_INT);
|
||||
$stmt->execute();
|
||||
} else {
|
||||
$stmt = $this->db->prepare(
|
||||
'INSERT INTO words(word, cloud_id) VALUES(:w, :cid);'
|
||||
);
|
||||
$stmt->bindValue(':w', $word, PDO::PARAM_STR);
|
||||
$stmt->bindValue(':cid', $cloudId, PDO::PARAM_INT);
|
||||
$stmt->execute();
|
||||
}
|
||||
}
|
||||
public function getWords(string $id)
|
||||
{
|
||||
$stmt = $this->db->prepare('SELECT * FROM words '
|
||||
. 'JOIN clouds ON words.cloud_id = clouds.id_cloud '
|
||||
. 'WHERE code = :id;'
|
||||
);
|
||||
$stmt->bindValue(':id', $id);
|
||||
$stmt->execute();
|
||||
$words = [];
|
||||
$values = [];
|
||||
while ($data = $stmt->fetch()) {
|
||||
$words[] = array($data['word'], $data['count']);
|
||||
$values[] = $data['count'];
|
||||
$total += $data['count'];
|
||||
}
|
||||
|
||||
array_multisort($values, SORT_DESC, $words);
|
||||
return $words;
|
||||
}
|
||||
|
||||
public function getWordsPercentage(string $id)
|
||||
{
|
||||
$words = $this->getWords($id);
|
||||
//echo 'test';
|
||||
//var_dump($words);
|
||||
$total = 0;
|
||||
foreach ($words as $word) {
|
||||
$total += $word[1];
|
||||
}
|
||||
foreach ($words as $key => $word) {
|
||||
$words[$key] = array($word[0], $word[1] / $total);
|
||||
}
|
||||
|
||||
return $words;
|
||||
}
|
||||
|
||||
public function getWordsMax(string $id)
|
||||
{
|
||||
$words = $this->getWords($id);
|
||||
//echo 'test';
|
||||
//var_dump($words);
|
||||
$max = 0;
|
||||
foreach ($words as $word) {
|
||||
$max = max($max, $word[1]);
|
||||
}
|
||||
foreach ($words as $key => $word) {
|
||||
$words[$key] = array($word[0], $word[1] / $max);
|
||||
}
|
||||
|
||||
return $words;
|
||||
}
|
||||
|
||||
public function createCloud(string $ref)
|
||||
{
|
||||
$stmt = $this->db->prepare('INSERT INTO clouds(code) VALUES(:code);');
|
||||
$stmt->bindValue(':code', $ref);
|
||||
try {
|
||||
$stmt->execute();
|
||||
} catch (PDOEXception $e) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public function cleanCloud()
|
||||
{
|
||||
$stmt = $this->db->prepare('DELETE FROM clouds '
|
||||
. "WHERE create_t < (SELECT datetime('now', '-1 week'));"
|
||||
);
|
||||
$stmt->execute();
|
||||
return true;
|
||||
}
|
||||
|
||||
public function isCloud(string $id)
|
||||
{
|
||||
$stmt = $this->db->prepare('SELECT * FROM clouds WHERE code = :id;');
|
||||
$stmt->bindValue(':id', $id, PDO::PARAM_STR);
|
||||
$stmt->execute();
|
||||
if ($stmt->fetch()) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue