Add migration script to generate vote's uniqid for legacy votes

This commit is contained in:
Olivier PEREZ 2015-06-24 22:37:46 +02:00
parent a6788d81c2
commit a6d8342e77
2 changed files with 85 additions and 0 deletions

View File

@ -22,6 +22,7 @@ use Framadate\Migration\From_0_8_to_0_9_Migration;
use Framadate\Migration\AddColumn_receiveNewComments_For_0_9;
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\Utils;
@ -36,6 +37,7 @@ $migrations = [
new AddColumn_receiveNewComments_For_0_9(),
new AddColumn_uniqId_In_vote_For_0_9(),
new AddColumn_hidden_In_poll_For_0_9(),
new Generate_uniqId_for_old_votes(),
];
// ---------------------------------------

View File

@ -0,0 +1,83 @@
<?php
/**
* This software is governed by the CeCILL-B license. If a copy of this license
* is not distributed with this file, you can obtain one at
* http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt
*
* Authors of STUdS (initial project): Guilhem BORGHESI (borghesi@unistra.fr) and Raphaël DROZ
* Authors of Framadate/OpenSondate: Framasoft (https://github.com/framasoft)
*
* =============================
*
* Ce logiciel est régi par la licence CeCILL-B. Si une copie de cette licence
* ne se trouve pas avec ce fichier vous pouvez l'obtenir sur
* http://www.cecill.info/licences/Licence_CeCILL-B_V1-fr.txt
*
* Auteurs de STUdS (projet initial) : Guilhem BORGHESI (borghesi@unistra.fr) et Raphaël DROZ
* Auteurs de Framadate/OpenSondage : Framasoft (https://github.com/framasoft)
*/
namespace Framadate\Migration;
use Framadate\Security\Token;
use Framadate\Utils;
/**
* This migration generate uniqId for all legacy votes.
*
* @package Framadate\Migration
* @version 0.9
*/
class Generate_uniqId_for_old_votes implements Migration {
function __construct() {
}
function description() {
return 'Generate "uniqId" in "vote" table for all legacy votes';
}
function preCondition(\PDO $pdo) {
$stmt = $pdo->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;
}
/**
* 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) {
$pdo->beginTransaction();
$this->generateUniqIdsForEmptyOnes($pdo);
$pdo->commit();
return true;
}
private function generateUniqIdsForEmptyOnes($pdo) {
$select = $pdo->query('
SELECT `id`
FROM `' . Utils::table('vote') . '`
WHERE `uniqid` = \'\'');
$update = $pdo->prepare('
UPDATE `' . Utils::table('vote') . '`
SET `uniqid` = :uniqid
WHERE `id` = :id');
while ($row = $select->fetch(\PDO::FETCH_OBJ)) {
$token = Token::getToken(16);
$update->execute([
'uniqid' => $token,
'id' => $row->id
]);
}
}
}