From 1111b86e2aabdfddeed97fc8c2576f445db6ccd7 Mon Sep 17 00:00:00 2001 From: Olivier PEREZ <olivier@olivierperez.fr> Date: Wed, 31 Dec 2014 15:19:15 +0100 Subject: [PATCH] Define a prefix for database table names. --- app/classes/Framadate/FramaDB.php | 42 +++++++++--------- .../Migration/From_0_8_to_0_9_Migration.php | 24 ++++++---- .../Framadate/Services/PollService.php | 4 +- app/classes/Framadate/Utils.php | 44 ++----------------- app/inc/constants.php.template | 3 ++ migration.php | 11 ++--- 6 files changed, 52 insertions(+), 76 deletions(-) diff --git a/app/classes/Framadate/FramaDB.php b/app/classes/Framadate/FramaDB.php index b93ea095..54e186d6 100644 --- a/app/classes/Framadate/FramaDB.php +++ b/app/classes/Framadate/FramaDB.php @@ -78,7 +78,7 @@ class FramaDB { } function findPollById($poll_id) { - $prepared = $this->prepare('SELECT * FROM poll WHERE id = ?'); + $prepared = $this->prepare('SELECT * FROM ' . Utils::table('poll') . ' WHERE id = ?'); $prepared->execute([$poll_id]); $poll = $prepared->fetch(); @@ -88,40 +88,40 @@ class FramaDB { } function updatePoll($poll) { - $prepared = $this->prepare('UPDATE poll SET title=?, admin_mail=?, comment=?, active=?, editable=? WHERE id = ?'); + $prepared = $this->prepare('UPDATE ' . Utils::table('poll') . ' SET title=?, admin_mail=?, comment=?, active=?, editable=? WHERE id = ?'); return $prepared->execute([$poll->title, $poll->admin_mail, $poll->comment, $poll->active, $poll->editable, $poll->id]); } function allCommentsByPollId($poll_id) { - $prepared = $this->prepare('SELECT * FROM comment WHERE poll_id = ? ORDER BY id'); + $prepared = $this->prepare('SELECT * FROM ' . Utils::table('comment') . ' WHERE poll_id = ? ORDER BY id'); $prepared->execute(array($poll_id)); return $prepared->fetchAll(); } function allUserVotesByPollId($poll_id) { - $prepared = $this->prepare('SELECT * FROM vote WHERE poll_id = ? ORDER BY id'); + $prepared = $this->prepare('SELECT * FROM ' . Utils::table('vote') . ' WHERE poll_id = ? ORDER BY id'); $prepared->execute(array($poll_id)); return $prepared->fetchAll(); } function allSlotsByPollId($poll_id) { - $prepared = $this->prepare('SELECT * FROM slot WHERE poll_id = ? ORDER BY title'); + $prepared = $this->prepare('SELECT * FROM ' . Utils::table('slot') . ' WHERE poll_id = ? ORDER BY title'); $prepared->execute(array($poll_id)); return $prepared->fetchAll(); } function insertDefaultVote($poll_id, $insert_position) { - $prepared = $this->prepare('UPDATE vote SET choices = CONCAT(SUBSTRING(choices, 1, ?), "0", SUBSTRING(choices, ?)) WHERE poll_id = ?'); + $prepared = $this->prepare('UPDATE ' . Utils::table('vote') . ' SET choices = CONCAT(SUBSTRING(choices, 1, ?), "0", SUBSTRING(choices, ?)) WHERE poll_id = ?'); return $prepared->execute([$insert_position, $insert_position + 1, $poll_id]); } function insertVote($poll_id, $name, $choices) { - $prepared = $this->prepare('INSERT INTO vote (poll_id, name, choices) VALUES (?,?,?)'); + $prepared = $this->prepare('INSERT INTO ' . Utils::table('vote') . ' (poll_id, name, choices) VALUES (?,?,?)'); $prepared->execute([$poll_id, $name, $choices]); $newVote = new \stdClass(); @@ -134,7 +134,7 @@ class FramaDB { } function deleteVote($poll_id, $vote_id) { - $prepared = $this->prepare('DELETE FROM vote WHERE poll_id = ? AND id = ?'); + $prepared = $this->prepare('DELETE FROM ' . Utils::table('vote') . ' WHERE poll_id = ? AND id = ?'); return $prepared->execute([$poll_id, $vote_id]); } @@ -146,7 +146,7 @@ class FramaDB { * @return bool|null true if action succeeded. */ function deleteVotesByPollId($poll_id) { - $prepared = $this->prepare('DELETE FROM vote WHERE poll_id = ?'); + $prepared = $this->prepare('DELETE FROM ' . Utils::table('vote') . ' WHERE poll_id = ?'); return $prepared->execute([$poll_id]); } @@ -159,7 +159,7 @@ class FramaDB { * @return bool|null true if action succeeded. */ function deleteVotesByIndex($poll_id, $index) { - $prepared = $this->prepare('UPDATE vote SET choices = CONCAT(SUBSTR(choices, 1, ?), SUBSTR(choices, ?)) WHERE poll_id = ?'); + $prepared = $this->prepare('UPDATE ' . Utils::table('vote') . ' SET choices = CONCAT(SUBSTR(choices, 1, ?), SUBSTR(choices, ?)) WHERE poll_id = ?'); return $prepared->execute([$index, $index + 2, $poll_id]); } @@ -172,7 +172,7 @@ class FramaDB { * @return mixed Object The slot found, or null */ function findSlotByPollIdAndDatetime($poll_id, $datetime) { - $prepared = $this->prepare('SELECT * FROM slot WHERE poll_id = ? AND SUBSTRING_INDEX(title, \'@\', 1) = ?'); + $prepared = $this->prepare('SELECT * FROM ' . Utils::table('slot') . ' WHERE poll_id = ? AND SUBSTRING_INDEX(title, \'@\', 1) = ?'); $prepared->execute([$poll_id, $datetime]); $slot = $prepared->fetch(); @@ -190,7 +190,7 @@ class FramaDB { * @return bool true if action succeeded */ function insertSlot($poll_id, $title, $moments) { - $prepared = $this->prepare('INSERT INTO slot (poll_id, title, moments) VALUES (?,?,?)'); + $prepared = $this->prepare('INSERT INTO ' . Utils::table('slot') . ' (poll_id, title, moments) VALUES (?,?,?)'); return $prepared->execute([$poll_id, $title, $moments]); } @@ -204,7 +204,7 @@ class FramaDB { * @return bool|null true if action succeeded. */ function updateSlot($poll_id, $datetime, $newMoments) { - $prepared = $this->prepare('UPDATE slot SET moments = ? WHERE poll_id = ? AND title = ?'); + $prepared = $this->prepare('UPDATE ' . Utils::table('slot') . ' SET moments = ? WHERE poll_id = ? AND title = ?'); return $prepared->execute([$newMoments, $poll_id, $datetime]); } @@ -216,12 +216,12 @@ class FramaDB { * @param $datetime mixed The datetime of the slot */ function deleteSlot($poll_id, $datetime) { - $prepared = $this->prepare('DELETE FROM slot WHERE poll_id = ? AND title = ?'); + $prepared = $this->prepare('DELETE FROM ' . Utils::table('slot') . ' WHERE poll_id = ? AND title = ?'); $prepared->execute([$poll_id, $datetime]); } function deleteSlotsByPollId($poll_id) { - $prepared = $this->prepare('DELETE FROM slot WHERE poll_id = ?'); + $prepared = $this->prepare('DELETE FROM ' . Utils::table('slot') . ' WHERE poll_id = ?'); return $prepared->execute([$poll_id]); } @@ -233,31 +233,31 @@ class FramaDB { * @return bool|null true if action succeeded. */ function deleteCommentsByPollId($poll_id) { - $prepared = $this->prepare('DELETE FROM comment WHERE poll_id = ?'); + $prepared = $this->prepare('DELETE FROM ' . Utils::table('comment') . ' WHERE poll_id = ?'); return $prepared->execute([$poll_id]); } function updateVote($poll_id, $vote_id, $choices) { - $prepared = $this->prepare('UPDATE vote SET choices = ? WHERE poll_id = ? AND id = ?'); + $prepared = $this->prepare('UPDATE ' . Utils::table('vote') . ' SET choices = ? WHERE poll_id = ? AND id = ?'); return $prepared->execute([$choices, $poll_id, $vote_id]); } function insertComment($poll_id, $name, $comment) { - $prepared = $this->prepare('INSERT INTO comment (poll_id, name, comment) VALUES (?,?,?)'); + $prepared = $this->prepare('INSERT INTO ' . Utils::table('comment') . ' (poll_id, name, comment) VALUES (?,?,?)'); return $prepared->execute([$poll_id, $name, $comment]); } function deleteComment($poll_id, $comment_id) { - $prepared = $this->prepare('DELETE FROM comment WHERE poll_id = ? AND id = ?'); + $prepared = $this->prepare('DELETE FROM ' . Utils::table('comment') . ' WHERE poll_id = ? AND id = ?'); return $prepared->execute([$poll_id, $comment_id]); } function deletePollById($poll_id) { - $prepared = $this->prepare('DELETE FROM poll WHERE id = ?'); + $prepared = $this->prepare('DELETE FROM ' . Utils::table('poll') . ' WHERE id = ?'); return $prepared->execute([$poll_id]); } @@ -268,7 +268,7 @@ class FramaDB { * @return array Array of old polls */ public function findOldPolls() { - $prepared = $this->prepare('SELECT * FROM poll WHERE end_date < NOW() LIMIT 20'); + $prepared = $this->prepare('SELECT * FROM ' . Utils::table('poll') . ' WHERE end_date < NOW() LIMIT 20'); $prepared->execute([]); return $prepared->fetchAll(); diff --git a/app/classes/Framadate/Migration/From_0_8_to_0_9_Migration.php b/app/classes/Framadate/Migration/From_0_8_to_0_9_Migration.php index fb80f7e3..33f11858 100644 --- a/app/classes/Framadate/Migration/From_0_8_to_0_9_Migration.php +++ b/app/classes/Framadate/Migration/From_0_8_to_0_9_Migration.php @@ -1,6 +1,8 @@ <?php namespace Framadate\Migration; +use Framadate\Utils; + /** * This class executes the aciton in database to migrate data from version 0.8 to 0.9. * @@ -11,6 +13,12 @@ class From_0_8_to_0_9_Migration implements Migration { function __construct() { } + /** + * This methode is called only one time in the migration page. + * + * @param \PDO $pdo The connection to database + * @return bool true is the execution succeeded + */ function execute(\PDO $pdo) { $this->createPollTable($pdo); $this->migrateFromSondageToPoll($pdo); @@ -31,7 +39,7 @@ class From_0_8_to_0_9_Migration implements Migration { private function createPollTable(\PDO $pdo) { $pdo->exec(' -CREATE TABLE IF NOT EXISTS `poll` ( +CREATE TABLE IF NOT EXISTS `' . Utils::table('poll') . '` ( `id` CHAR(16) NOT NULL, `admin_id` CHAR(24) NOT NULL, `title` TEXT NOT NULL, @@ -52,7 +60,7 @@ CREATE TABLE IF NOT EXISTS `poll` ( private function migrateFromSondageToPoll(\PDO $pdo) { $pdo->exec(' -INSERT INTO `poll` +INSERT INTO `' . Utils::table('poll') . '` (`id`, `admin_id`, `title`, `description`, `admin_name`, `admin_mail`, `creation_date`, `end_date`, `format`, `editable`, `receiveNewVotes`, `active`) SELECT `id_sondage`, @@ -76,7 +84,7 @@ INSERT INTO `poll` private function createSlotTable(\PDO $pdo) { $pdo->exec(' -CREATE TABLE IF NOT EXISTS `slot` ( +CREATE TABLE IF NOT EXISTS `' . Utils::table('slot') . '` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `poll_id` CHAR(16) NOT NULL, `title` TEXT, @@ -98,7 +106,7 @@ CREATE TABLE IF NOT EXISTS `slot` ( $slots = array_merge($slots, $newSlots); } - $prepared = $pdo->prepare('INSERT INTO slot (`poll_id`, `title`, `moments`) VALUE (?,?,?)'); + $prepared = $pdo->prepare('INSERT INTO ' . Utils::table('slot') . ' (`poll_id`, `title`, `moments`) VALUE (?,?,?)'); foreach ($slots as $slot) { $prepared->execute([$slot->poll_id, $slot->title, $slot->moments]); } @@ -106,7 +114,7 @@ CREATE TABLE IF NOT EXISTS `slot` ( private function createCommentTable(\PDO $pdo) { $pdo->exec(' -CREATE TABLE IF NOT EXISTS `comment` ( +CREATE TABLE IF NOT EXISTS `' . Utils::table('comment') . '` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `poll_id` CHAR(16) NOT NULL, `name` TEXT, @@ -120,7 +128,7 @@ CREATE TABLE IF NOT EXISTS `comment` ( private function migrateFromCommentsToComment(\PDO $pdo) { $pdo->exec(' -INSERT INTO `comment` +INSERT INTO `' . Utils::table('comment') . '` (`poll_id`, `name`, `comment`) SELECT `id_sondage`, @@ -131,7 +139,7 @@ INSERT INTO `comment` private function createVoteTable(\PDO $pdo) { $pdo->exec(' -CREATE TABLE IF NOT EXISTS `vote` ( +CREATE TABLE IF NOT EXISTS `' . Utils::table('vote') . '` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `poll_id` CHAR(16) NOT NULL, `name` VARCHAR(64) NOT NULL, @@ -145,7 +153,7 @@ CREATE TABLE IF NOT EXISTS `vote` ( private function migrateFromUserStudsToVote(\PDO $pdo) { $pdo->exec(' -INSERT INTO `vote` +INSERT INTO `' . Utils::table('vote') . '` (`poll_id`, `name`, `choices`) SELECT `id_sondage`, diff --git a/app/classes/Framadate/Services/PollService.php b/app/classes/Framadate/Services/PollService.php index 163a8e9b..0a218243 100644 --- a/app/classes/Framadate/Services/PollService.php +++ b/app/classes/Framadate/Services/PollService.php @@ -133,13 +133,13 @@ class PollService { $this->connect->beginTransaction(); // TODO Extract this to FramaDB (or repository layer) - $sql = 'INSERT INTO poll + $sql = 'INSERT INTO ' . Utils::table('poll') . ' (id, admin_id, title, description, admin_name, admin_mail, end_date, format, editable, receiveNewVotes) VALUES (?,?,?,?,?,?,FROM_UNIXTIME(?),?,?,?)'; $prepared = $this->connect->prepare($sql); $prepared->execute(array($poll_id, $admin_poll_id, $form->title, $form->description, $form->admin_name, $form->admin_mail, $form->end_date, $form->format, $form->editable, $form->receiveNewVotes)); - $prepared = $this->connect->prepare('INSERT INTO slot (poll_id, title, moments) VALUES (?, ?, ?)'); + $prepared = $this->connect->prepare('INSERT INTO ' . Utils::table('slot') . ' (poll_id, title, moments) VALUES (?, ?, ?)'); foreach ($form->getChoices() as $choice) { diff --git a/app/classes/Framadate/Utils.php b/app/classes/Framadate/Utils.php index 5efb9a09..190c830a 100644 --- a/app/classes/Framadate/Utils.php +++ b/app/classes/Framadate/Utils.php @@ -123,46 +123,6 @@ class Utils return $url; } - /** - * Completly delete data about the given poll - * TODO Move this function to FramaDB - */ - public static function removeSondage($poll_id) { - global $connect; - - $prepared = $connect->prepare('DELETE FROM sujet_studs WHERE id_sondage = ?'); - $prepared->execute(array($poll_id)); - - $prepared = $connect->prepare('DELETE FROM user_studs WHERE id_sondage = ?'); - $prepared->execute(array($poll_id)); - - $prepared = $connect->prepare('DELETE FROM comments WHERE id_sondage = ?'); - $prepared->execute(array($poll_id)); - - $prepared = $connect->prepare('DELETE FROM sondage WHERE poll_id = ?'); - $prepared->execute(array($poll_id)); - - } - - /** - * Clean old poll (end_date < now). - * TODO Move this function to PurgePollService - */ - public static function cleaningOldPolls($log_txt) { - global $connect; - - $resultSet = $connect->query('SELECT poll_id, format, admin_name FROM sondage WHERE end_date < NOW() LIMIT 20'); - $toClean = $resultSet->fetchAll(\PDO::FETCH_CLASS); - - $connect->beginTransaction(); - foreach ($toClean as $row) { - if (self::removeSondage($row->poll_id)) { - error_log(date('H:i:s d/m/Y:') . ' EXPIRATION: '. $row->poll_id."\t".$row->format."\t".$row->admin_name."\n", 3, $log_txt); - } - } - $connect->commit(); - } - /** * This method pretty prints an object to the page framed by pre tags. * @param mixed $object The object to print. @@ -172,4 +132,8 @@ class Utils print_r($object); echo '</pre>'; } + + public static function table($tableName) { + return TABLENAME_PREFIX . $tableName; + } } diff --git a/app/inc/constants.php.template b/app/inc/constants.php.template index 61781a6c..bf9fc0cf 100644 --- a/app/inc/constants.php.template +++ b/app/inc/constants.php.template @@ -44,6 +44,9 @@ const DB_CONNECTION_STRING = 'mysql:host=<database host>;dbname=<database name>; // Name of the table that store migration script already executed const MIGRATION_TABLE = 'framadate_migration'; +// Table name prefix +const TABLENAME_PREFIX = 'fd_'; + // Default Language using POSIX variant of BC P47 standard (choose in $ALLOWED_LANGUAGES) const LANGUE = 'fr_FR'; diff --git a/migration.php b/migration.php index de4e51d1..6349c085 100644 --- a/migration.php +++ b/migration.php @@ -18,10 +18,11 @@ $migrations = [ // Check if MIGRATION_TABLE already exists $tables = $connect->allTables(); $pdo = $connect->getPDO(); +$prefixedMigrationTable = Utils::table(MIGRATION_TABLE); -if (!in_array(MIGRATION_TABLE, $tables)) { +if (!in_array($prefixedMigrationTable, $tables)) { $pdo->exec(' -CREATE TABLE IF NOT EXISTS `' . MIGRATION_TABLE . '` ( +CREATE TABLE IF NOT EXISTS `' . $prefixedMigrationTable . '` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `name` TEXT NOT NULL, `execute_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, @@ -30,11 +31,11 @@ CREATE TABLE IF NOT EXISTS `' . MIGRATION_TABLE . '` ( ENGINE = MyISAM DEFAULT CHARSET = utf8;'); - output('Table ' . MIGRATION_TABLE . ' created.'); + output('Table ' . $prefixedMigrationTable . ' created.'); } -$selectStmt = $pdo->prepare('SELECT id FROM ' . MIGRATION_TABLE . ' WHERE name=?'); -$insertStmt = $pdo->prepare('INSERT INTO ' . MIGRATION_TABLE . ' (name) VALUES (?)'); +$selectStmt = $pdo->prepare('SELECT id FROM ' . $prefixedMigrationTable . ' WHERE name=?'); +$insertStmt = $pdo->prepare('INSERT INTO ' . $prefixedMigrationTable . ' (name) VALUES (?)'); $countSucceeded = 0; $countFailed = 0; $countSkipped = 0; -- GitLab