PHP Classes

File: vendor/jackbooted/db/Migrations.php

Recommend this page to a friend!
  Classes of Brett Dutton   JackBooted PHP Framework   vendor/jackbooted/db/Migrations.php   Download  
File: vendor/jackbooted/db/Migrations.php
Role: Class source
Content type: text/plain
Description: Class source
Class: JackBooted PHP Framework
Web application framework using simplified MVC
Author: By
Last change:
Date: 8 years ago
Size: 2,773 bytes
 

Contents

Class file image Download
<?php
namespace Jackbooted\DB;

use \
Jackbooted\Config\Cfg;
use \
Jackbooted\Util\Log4PHP;
use \
Jackbooted\DB\DB;

/**
 * @copyright Confidential and copyright (c) 2016 Jackbooted Software. All rights reserved.
 *
 * Written by Brett Dutton of Jackbooted Software
 * brett at brettdutton dot com
 *
 * This software is written and distributed under the GNU General Public
 * License which means that its source code is freely-distributed and
 * available to the general public.
 */
class Migrations extends \Jackbooted\Html\WebPage {

    public static function
init () {
       
self::$log = Log4PHP::logFactory ( __CLASS__ );
    }

    public static function
migrate () {
       
$maxRun = 0;
       
$runItems = [];
        foreach (
DBTable::factory( DB::DEF, 'SELECT * FROM tblMigration' ) as $row ) {
            if ( (int)
$row['fldRun'] > $maxRun ) {
               
$maxRun = (int)$row['fldRun'];
            }

            if ( ! isset(
$runItems[$row['fldClass']] ) ) {
               
$runItems[$row['fldClass']] = [];
            }

           
$runItems[$row['fldClass']][] = $row['fldMethod'];
        }

       
$maxRun += 1;
       
$html = '';

       
// Go through all the migration classes
       
foreach ( Cfg::get( 'migration', [] ) as $migrationClass ) {
           
$clazz = new \ReflectionClass( $migrationClass );

           
// If new class then just add empty list
           
if ( ! isset( $runItems[$migrationClass] ) ) {
               
$runItems[$migrationClass] = [];
            }

           
// get a list of methods to run
           
$methodList = [];
            foreach (
$clazz->getMethods() as $method ) {
                if (
in_array( $method->name, $runItems[$migrationClass] ) ) continue;
                if (
strpos( $method->name, 'migrate' ) !== 0 ) continue;

               
// Add the name to the list
               
$methodList[] = $method->name;
            }

           
// Sort so that it will be date ordered
           
sort( $methodList );

            foreach (
$methodList as $method ) {
                if ( (
$result = call_user_func([ $migrationClass, $method ] ) ) === false ) {
                   
$html .= "There is a problem running {$migrationClass}::{$method}<br/>\n";
                }
                else {
                   
$html .= $result;
                   
DB::exec( DB::DEF,
                             
'INSERT INTO tblMigration (fldMigrationID,fldRun,fldClass,fldMethod) VALUES (?,?,?,?)',
                              [
DBMaintenance::dbNextNumber( DB::DEF, 'tblMigration' ),
                               
$maxRun,
                               
$migrationClass,
                               
$method ] );
                }
            }
        }
        return
$html;
    }
}