|
|
|
|
@ -30,6 +30,7 @@ class OC_Migrate{ |
|
|
|
|
static private $providers=array(); |
|
|
|
|
static private $schema=false; |
|
|
|
|
static private $uid=false; |
|
|
|
|
static private $database=false; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* register a new migration provider |
|
|
|
|
@ -108,40 +109,75 @@ class OC_Migrate{ |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @breif imports a new user |
|
|
|
|
* @param $db string path to migration.db |
|
|
|
|
* @param $migrateinfo string path to the migration info json file |
|
|
|
|
* @param $uid optional uid to use |
|
|
|
|
* @return bool if the import succedded |
|
|
|
|
*/ |
|
|
|
|
public static function import( $uid=false ){ |
|
|
|
|
|
|
|
|
|
self::$uid = $uid; |
|
|
|
|
|
|
|
|
|
public static function import( $db, $migrateinfo, $uid=false ){ |
|
|
|
|
|
|
|
|
|
if(!self::$uid){ |
|
|
|
|
OC_Log::write('migration','Tried to import without passing a uid',OC_Log::FATAL); |
|
|
|
|
return false; |
|
|
|
|
exit(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Connect to the db |
|
|
|
|
if(!self::connectDB()){ |
|
|
|
|
return false; |
|
|
|
|
// Check if the db exists |
|
|
|
|
if( file_exists( $db ) ){ |
|
|
|
|
// Connect to the db |
|
|
|
|
if(!self::connectDB( $db )){ |
|
|
|
|
return false; |
|
|
|
|
exit(); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
OC_Log::write('migration','Migration.db not found at: '.$db, OC_Log::FATAL ); |
|
|
|
|
return false; |
|
|
|
|
exit(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Load the json info |
|
|
|
|
if( file_exists( $migrateinfo ) ){ |
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
OC_Log::write( 'migration', 'Migration information file not found at: '.$migrateinfo, OC_Log::FATAL ); |
|
|
|
|
return false; |
|
|
|
|
exit(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Process migration info |
|
|
|
|
$info = file_get_contents( $migrateinfo ); |
|
|
|
|
$info = json_decode( $info ); |
|
|
|
|
|
|
|
|
|
// Set the user id |
|
|
|
|
self::$uid = !$uid : $info['migrateinfo']['uid'] ? $uid; |
|
|
|
|
|
|
|
|
|
// Create the user |
|
|
|
|
if(!self::createUser($uid, $hash)){ |
|
|
|
|
return false; |
|
|
|
|
exit(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$apps = $info['apps']; |
|
|
|
|
|
|
|
|
|
foreach( self::$providers as $provider){ |
|
|
|
|
// Is the app in the export? |
|
|
|
|
if( array_key_exists( $provider->id, $apps ) ){ |
|
|
|
|
// Did it succeed? |
|
|
|
|
if( $app[$provider->id] ){ |
|
|
|
|
// Then do the import |
|
|
|
|
$provider->import(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Now get the list of apps to import from migration.db |
|
|
|
|
// Then check for migrate.php for these apps |
|
|
|
|
// If present, run the import function for them. |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// @breif connects to migration.db, or creates if not found |
|
|
|
|
// @param $db optional path to migration.db, defaults to user data dir |
|
|
|
|
// @return bool whether the operation was successful |
|
|
|
|
private static function connectDB(){ |
|
|
|
|
private static function connectDB( $db=null ){ |
|
|
|
|
OC_Log::write('migration','connecting to migration.db for user: '.self::$uid,OC_Log::INFO); |
|
|
|
|
// Fail if no user is set |
|
|
|
|
if(!self::$uid){ |
|
|
|
|
@ -152,6 +188,8 @@ class OC_Migrate{ |
|
|
|
|
if(!self::$MDB2){ |
|
|
|
|
require_once('MDB2.php'); |
|
|
|
|
|
|
|
|
|
self::$database = !is_null( $db ) ? $db : $datadir.'/'.self::$uid.'/migration.db'; |
|
|
|
|
|
|
|
|
|
$datadir = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" ); |
|
|
|
|
|
|
|
|
|
// Prepare options array |
|
|
|
|
@ -164,7 +202,7 @@ class OC_Migrate{ |
|
|
|
|
); |
|
|
|
|
$dsn = array( |
|
|
|
|
'phptype' => 'sqlite3', |
|
|
|
|
'database' => $datadir.'/'.self::$uid.'/migration.db', |
|
|
|
|
'database' => self::$database, |
|
|
|
|
'mode' => '0644' |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
@ -392,7 +430,9 @@ class OC_Migrate{ |
|
|
|
|
// Create the user |
|
|
|
|
$query = OC_DB::prepare( "INSERT INTO `*PREFIX*users` ( `uid`, `password` ) VALUES( ?, ? )" ); |
|
|
|
|
$result = $query->execute( array( $uid, $data['hash'])); |
|
|
|
|
|
|
|
|
|
if( !$result ){ |
|
|
|
|
OC_Log::write('migration', 'Failed to create the new user "'.$uid.""); |
|
|
|
|
} |
|
|
|
|
return $result ? true : false; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|