<?php
/*******************************************************************************
 * Copyright (c) 2006-2007 Eclipse Foundation
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Bjorn Freeman-Benson - initial API and implementation
 *    Ward Cunningham - initial API and implementation
 *    Karl Mathias - initial API and implementation
 *******************************************************************************/

//require_once( $GLOBALS['CLASSES_DIRECTORY'] . "functions.php" );
//require_once( $GLOBALS['CLASSES_DIRECTORY'] . "context.class.php" );



class CheckAndModifyDatabaseSchema {
	public function check_and_modify( $context ) {
	  	$rtrn = true;
	    $dir = $context->get("components_directory");
	    foreach( dirs($dir) as $component ) {
			print $dir . "$component/check-database-schema.php\n";
	
			if( file_exists( $dir . "$component/check-database-schema.php" ) ) {
				echo "Checking db schema for table '$component'\n";
				mysqli_select_db($dbh, $component);
				// the included code uses the context to check (and perhaps modify) the database(s) schemas
				include_once( $dir . "$component/check-database-schema.php" );
				$checkername = $component . "_SchemaChecker";
				$obj = new $checkername ;
				if( !$obj->check_and_modify( $context ) ) {
					echo "***Trouble during checking database schema for table: '$component' ****\n";
					$rtrn = false;
				}
			}
		}
		return $rtrn;
	}
}

?>