Kanboard-Prod/app/Schema/Migration.php

64 lines
1.9 KiB
PHP

<?php
namespace Schema;
use PDO;
function migrate_default_swimlane(PDO $pdo)
{
$projects = get_all_projects($pdo);
foreach ($projects as $project) {
// Create new default swimlane
$rq = $pdo->prepare('INSERT INTO swimlanes (project_id, name, is_active, position) VALUES (?, ?, ?, ?)');
$rq->execute(array(
$project['id'],
$project['default_swimlane'],
(int) $project['show_default_swimlane'],
$project['show_default_swimlane'] == 1 ? 1 : 0,
));
$swimlaneId = get_last_insert_id($pdo);
// Reorder swimlanes if the default one was active
if ($project['show_default_swimlane']) {
$rq = $pdo->prepare("UPDATE swimlanes SET position=position+1 WHERE project_id=? AND is_active='1' AND id!=?");
$rq->execute(array(
$project['id'],
$swimlaneId,
));
}
// Move all tasks to new swimlane
$rq = $pdo->prepare("UPDATE tasks SET swimlane_id=? WHERE swimlane_id='0' AND project_id=?");
$rq->execute(array(
$swimlaneId,
$project['id'],
));
// Migrate automatic actions
$rq = $pdo->prepare("UPDATE action_has_params SET value=? WHERE id IN (SELECT action_has_params.id FROM action_has_params LEFT JOIN actions ON actions.id=action_has_params.action_id WHERE project_id=? AND name='swimlane_id' AND value='0')");
$rq->execute(array($swimlaneId, $project['id']));
}
}
function get_all_projects(PDO $pdo)
{
$rq = $pdo->prepare('SELECT * FROM projects');
$rq->execute();
return $rq->fetchAll(PDO::FETCH_ASSOC);
}
function get_last_insert_id(PDO $pdo)
{
if (DB_DRIVER === 'postgres') {
$rq = $pdo->prepare('SELECT LASTVAL()');
$rq->execute();
return $rq->fetchColumn();
}
return $pdo->lastInsertId();
}