summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/admin_export/settings.php1
-rw-r--r--apps/bookmarks/lib/migrate.php9
-rw-r--r--apps/user_migrate/admin.php27
-rw-r--r--lib/migrate.php65
-rw-r--r--lib/migrate/provider.php3
5 files changed, 59 insertions, 46 deletions
diff --git a/apps/admin_export/settings.php b/apps/admin_export/settings.php
index e7de74f7588..1c98bb552f1 100644
--- a/apps/admin_export/settings.php
+++ b/apps/admin_export/settings.php
@@ -144,7 +144,6 @@ function unlinkRecursive($dir, $deleteRootToo)
return;
}
-
function copy_r( $path, $dest )
{
diff --git a/apps/bookmarks/lib/migrate.php b/apps/bookmarks/lib/migrate.php
index 46b68ad5baa..ffc5e9f8387 100644
--- a/apps/bookmarks/lib/migrate.php
+++ b/apps/bookmarks/lib/migrate.php
@@ -32,18 +32,17 @@ class OC_Migrate_Provider_Bookmarks extends OC_Migrate_Provider{
}
// Import function for bookmarks
- function import( $info ){
-
- switch( $info->appversion ){
+ function import( $app, $info ){
+ switch( $app->version ){
default:
// All versions of the app have had the same db structure, so all can use the same import function
$query = OC_Migrate::prepare( "SELECT * FROM bookmarks WHERE user_id LIKE ?" );
- $results = $query->execute( array( $info->olduid ) );
+ $results = $query->execute( array( $info['olduid'] ) );
$idmap = array();
while( $row = $data->fetchRow() ){
// Import each bookmark, saving its id into the map
$query = OC_DB::prepare( "INSERT INTO *PREFIX*bookmarks(url, title, user_id, public, added, lastmodified) VALUES (?, ?, ?, ?, ?, ?)" );
- $query->execute( array( $row['url'], $row['title'], $info->newuid, $row['public'], $row['added'], $row['lastmodified'] ) );
+ $query->execute( array( $row['url'], $row['title'], $info['newuid'], $row['public'], $row['added'], $row['lastmodified'] ) );
// Map the id
$idmap[$row['id']] = OC_DB::insertid();
}
diff --git a/apps/user_migrate/admin.php b/apps/user_migrate/admin.php
index da2e53d2a15..6f3565788eb 100644
--- a/apps/user_migrate/admin.php
+++ b/apps/user_migrate/admin.php
@@ -62,14 +62,15 @@ if (isset($_POST['user_import'])) {
// Get the user
if( count($files) != 1 ){
OC_Log::write('migration', 'Invalid import file', OC_Log::ERROR);
- die('invalid import');
+ die('invalid import, no user included');
}
- $user = reset($files);
+ $olduser = reset($files);
// Check for dbexport.xml and export info and data dir
- $files = scandir( $importdir . '/' . $user );
- $required = array( 'migration.db', 'exportinfo.json', 'files');
+ $files = scandir( $importdir . '/' . $olduser );
+
+ $required = array( 'migration.db', 'export_info.json', 'files');
foreach($required as $require){
if( !in_array( $require, $files) ){
OC_Log::write('migration', 'Invlaid import file', OC_Log::ERROR);
@@ -77,31 +78,37 @@ if (isset($_POST['user_import'])) {
}
}
- $migrateinfo = $importdir . '/' . $user . '/exportinfo.json';
+ $migrateinfo = $importdir . '/' . $olduser . '/export_info.json';
$migrateinfo = json_decode( file_get_contents( $migrateinfo ) );
- $olduid = $migrateinfo->migrateinfo->uid;
// Check if uid is available
- if( OC_User::UserExists( $olduid ) ){
+ if( OC_User::UserExists( $olduser ) ){
OC_Log::write('migration','Username exists', OC_Log::ERROR);
die('user exists');
}
// Create the user
- if( !OC_Migrate::createUser( $olduid, $migrateinfo->migrateinfo->hash ) ){
+ if( !OC_Migrate::createUser( $olduser, $migrateinfo->hash ) ){
OC_Log::write('migration', 'Failed to create the new user', OC_Log::ERROR);
die('coundlt create new user');
}
$datadir = OC_Config::getValue( 'datadirectory' );
+ // Make the new users data dir
+ $path = $datadir . '/' . $olduser . '/files/';
+ if( !mkdir( $path, 0755, true ) ){
+ OC_Log::write('migration','Failed to create users data dir: '.$path, OC_Log::ERROR);
+ die('failed to create users data dir');
+ }
+
// Copy data
- if( !copy_r( $importdir . '/files', $datadir . '/' ) ){
+ if( !copy_r( $importdir . '/' . $olduser . '/files', $datadir . '/' . $olduser . '/files' ) ){
OC_Log::write('migration','Failed to copy user files to destination', OC_Log::ERROR);
die('failed to copy user files');
}
// Import user data
- if( !OC_Migrate::importUser( $importdir . '/migration.db', $migrateinfo ) ){
+ if( !OC_Migrate::importAppData( $importdir . '/' . $olduser . '/migration.db', $migrateinfo ) ){
OC_Log::write('migration','Failed to import user data', OC_Log::ERROR);
die('failed to import user data');
}
diff --git a/lib/migrate.php b/lib/migrate.php
index 44d28297d48..415c33e5bea 100644
--- a/lib/migrate.php
+++ b/lib/migrate.php
@@ -53,6 +53,21 @@ class OC_Migrate{
self::$providers[]=$provider;
}
+ /**
+ * @breif finds and loads the providers
+ */
+ static private function findProviders(){
+ // Find the providers
+ $apps = OC_App::getAllApps();
+
+ foreach($apps as $app){
+ $path = OC::$SERVERROOT . '/apps/' . $app . '/lib/migrate.php';
+ if( file_exists( $path ) ){
+ include( $path );
+ }
+ }
+ }
+
/**
* @breif creates a migration.db in the users data dir with their app data in
* @return bool whether operation was successfull
@@ -64,14 +79,7 @@ class OC_Migrate{
$return = array();
// Find the providers
- $apps = OC_App::getAllApps();
-
- foreach($apps as $app){
- $path = OC::$SERVERROOT . '/apps/' . $app . '/lib/migrate.php';
- if( file_exists( $path ) ){
- include( $path );
- }
- }
+ self::findProviders();
// Foreach provider
foreach( self::$providers as $provider ){
@@ -217,7 +225,8 @@ class OC_Migrate{
OC_Log::write( 'migration', 'Failed to get the users password hash', OC_log::ERROR);
return false;
}
- $info['hash'] = $hash;
+ $info['hash'] = $hash;
+ $info['exporteduser'] = self::$uid;
}
// Merge in other data
$info = array_merge( $info, $array );
@@ -393,17 +402,15 @@ class OC_Migrate{
* @param $uid optional uid to use
* @return bool if the import succedded
*/
- public static function importAppData( $db, $info, $uid=false ){
+ public static function importAppData( $db, $info, $uid=null ){
- if(!self::$uid){
- OC_Log::write('migration','Tried to import without passing a uid',OC_Log::FATAL);
- return false;
- }
+ self::$uid = !is_null( $uid ) ? $uid : $info->exporteduser;
// Check if the db exists
if( file_exists( $db ) ){
// Connect to the db
if(!self::connectDB( $db )){
+ OC_Log::write('migration','Failed to connect to migration.db',OC_Log::ERROR);
return false;
}
} else {
@@ -411,25 +418,25 @@ class OC_Migrate{
return false;
}
- if( !is_array( $info ) ){
- OC_Log::write('migration','$migrateinfo is not an array', OC_Log::FATAL);
- return false;
- }
-
- // Set the user id
- self::$uid = $info->migrateinfo->uid;
-
- $apps = $info->app;
-
+ // Find providers
+ self::findProviders();
+
+ // Generate importinfo array
+ $importinfo = array(
+ 'olduid' => $info->exporteduser,
+ 'newuid' => self::$uid
+ );
+
foreach( self::$providers as $provider){
// Is the app in the export?
- if( array_key_exists( $provider->id, $apps ) ){
+ $id = $provider->id;
+ if( isset( $info->apps->$id ) ){
// Did it succeed?
- if( $app[$provider->id] ){
+ if( $info->apps->$id->success ){
// Then do the import
- $provider->import( $info );
+ $provider->import( $info->apps->$id, $importinfo );
}
- }
+ }
}
return true;
@@ -691,7 +698,7 @@ class OC_Migrate{
// Create the user
$query = OC_DB::prepare( "INSERT INTO `*PREFIX*users` ( `uid`, `password` ) VALUES( ?, ? )" );
- $result = $query->execute( array( $uid, $data['hash']));
+ $result = $query->execute( array( $uid, $hash));
if( !$result ){
OC_Log::write('migration', 'Failed to create the new user "'.$uid."");
}
diff --git a/lib/migrate/provider.php b/lib/migrate/provider.php
index e2e01b3b5aa..7ac3cf97cad 100644
--- a/lib/migrate/provider.php
+++ b/lib/migrate/provider.php
@@ -20,8 +20,9 @@ abstract class OC_Migrate_Provider{
/**
* @breif imports data for the app
+ * @param $appinfo object with the data that the app exported
* @param $info array of info including exportinfo.json
* @return void
*/
- abstract function import( $info );
+ abstract function import( $appinfo, $info );
}