diff --git a/admin/migration.php b/admin/migration.php index 196cc52..fc2ac66 100644 --- a/admin/migration.php +++ b/admin/migration.php @@ -24,6 +24,7 @@ use Framadate\Migration\AddColumn_uniqId_In_vote_For_0_9; use Framadate\Migration\AddColumn_hidden_In_poll_For_0_9; use Framadate\Migration\Generate_uniqId_for_old_votes; use Framadate\Migration\Migration; +use Framadate\Migration\RPadVotes_from_0_8; use Framadate\Utils; include_once __DIR__ . '/../app/inc/init.php'; @@ -38,6 +39,7 @@ $migrations = [ new AddColumn_uniqId_In_vote_For_0_9(), new AddColumn_hidden_In_poll_For_0_9(), new Generate_uniqId_for_old_votes(), + new RPadVotes_from_0_8() ]; // --------------------------------------- diff --git a/app/classes/Framadate/Migration/RPadVotes_from_0_8.php b/app/classes/Framadate/Migration/RPadVotes_from_0_8.php new file mode 100644 index 0000000..fe235a1 --- /dev/null +++ b/app/classes/Framadate/Migration/RPadVotes_from_0_8.php @@ -0,0 +1,69 @@ +query('SHOW TABLES'); + $tables = $stmt->fetchAll(\PDO::FETCH_COLUMN); + + // Check if tables of v0.9 are presents + $diff = array_diff([Utils::table('poll'), Utils::table('slot'), Utils::table('vote'), Utils::table('comment')], $tables); + return count($diff) === 0; + } + + function execute(\PDO $pdo) { + + $pdo->beginTransaction(); + $this->rpadVotes($pdo); + $pdo->commit(); + + return true; + } + + private function rpadVotes($pdo) { + $pdo->exec('UPDATE fd_vote fv +INNER JOIN ( + SELECT v.id, RPAD(v.choices, inn.slots_count, \'0\') new_choices + FROM fd_vote v + INNER JOIN + (SELECT s.poll_id, SUM(IFNULL(LENGTH(s.moments) - LENGTH(REPLACE(s.moments, \',\', \'\')) + 1, 1)) slots_count + FROM fd_slot s + GROUP BY s.poll_id + ORDER BY s.poll_id) inn ON inn.poll_id = v.poll_id + WHERE LENGTH(v.choices) != inn.slots_count + LIMIT 0,1 +) computed ON fv.id = computed.id +SET fv.choices = computed.new_choices'); + } +} \ No newline at end of file