static function import($task) { $start = microtime(true); g1_import::init(); $stats = $task->get('stats'); $done = $task->get('done'); $total = $task->get('total'); $completed = $task->get('completed'); $mode = $task->get('mode'); $queue = $task->get('queue'); if (!isset($mode)) { $stats = g1_import::g1_stats(); $stats['items'] = $stats['photos'] + $stats['movies']; unset($stats['photos']); unset($stats['movies']); $stats['fix'] = 1; $task->set('stats', $stats); $task->set('total', $total = array_sum(array_values($stats))); $completed = 0; $mode = 0; $done = array(); foreach (array_keys($stats) as $key) { $done[$key] = 0; } $task->set('done', $done); } $modes = array('users', 'albums', 'items', 'comments', 'highlights', 'fix', 'done'); while (!$task->done && microtime(true) - $start < 1.5) { if ($done[$modes[$mode]] >= $stats[$modes[$mode]]) { // Nothing left to do for this mode. Advance. $mode++; $task->set('last_id', 0); $queue = array(); // Start the loop from the beginning again. This way if we get to a mode that requires no // actions (eg, if the G1 comments module isn't installed) we won't try to do any comments // queries.. in the next iteration we'll just skip over that mode. if ($modes[$mode] != 'done') { continue; } } switch ($modes[$mode]) { case 'users': $done['users'] = $stats['users'] - 1; $task->status = t('Ignoring users (%count of %total)', array('count' => $done['users'], 'total' => $stats['users'])); break; case 'albums': if (empty($queue)) { if (count(g1_import::$tree) == 0) { g1_import::g1_stats(); } $task->set('queue', $queue = array('' => g1_import::$tree)); } $log_message = g1_import::import_album($queue); if ($log_message) { $task->log($log_message); } $task->status = t('Importing albums (%count of %total)', array('count' => $done['albums'] + 1, 'total' => $stats['albums'])); break; case 'items': if (empty($queue)) { if (count(g1_import::$queued_items) == 0) { g1_import::g1_stats(); } $queuelen = 100; $thisstart = $task->get('last_id', 0); $nextstart = $thisstart + $queuelen; $task->set('last_id', $nextstart); $task->set('queue', $queue = array_splice(g1_import::$queued_items, $thisstart, $queuelen)); } $log_message = g1_import::import_item($queue); if ($log_message) { $task->log($log_message); } $task->status = t('Importing photos (%count of %total)', array('count' => $done['items'] + 1, 'total' => $stats['items'])); break; case 'comments': if (empty($queue)) { if (count(g1_import::$queued_comments) == 0) { g1_import::g1_stats(); } $queuelen = 100; $thisstart = $task->get('last_id', 0); $nextstart = $thisstart + $queuelen; $task->set('last_id', $nextstart); $task->set('queue', $queue = array_splice(g1_import::$queued_comments, $thisstart, $queuelen)); } $log_message = g1_import::import_comment($queue); if ($log_message) { $task->log($log_message); } $task->status = t('Importing comments (%count of %total)', array('count' => $done['comments'] + 1, 'total' => $stats['comments'])); break; case 'highlights': if (empty($queue)) { if (count(g1_import::$queued_highlights) == 0) { g1_import::g1_stats(); } $queuelen = 100; $thisstart = $task->get('last_id', 0); $nextstart = $thisstart + $queuelen; $task->set('last_id', $nextstart); $task->set('queue', $queue = array_splice(g1_import::$queued_highlights, $thisstart, $queuelen)); } $log_message = g1_import::set_album_highlight($queue); if ($log_message) { $task->log($log_message); } $task->status = t('Album highlights (%count of %total)', array('count' => $done['highlights'] + 1, 'total' => $stats['highlights'])); break; case 'fix': if (empty($queue)) { if (count(g1_import::$albums_flat) == 0) { g1_import::g1_stats(); } $task->set('queue', $queue = 'dummy'); } $log_message = g1_import::hotfix_all(); if ($log_message) { $task->log($log_message); } $task->status = t('Final Hotfixing (%count of %total)', array('count' => $done['fix'] + 1, 'total' => $stats['fix'])); break; case 'done': $task->status = t('Import complete'); $task->done = true; $task->state = 'success'; break; } if (!$task->done) { $done[$modes[$mode]]++; $completed++; } } $task->percent_complete = 100 * ($completed / $total); $task->set('completed', $completed); $task->set('mode', $mode); $task->set('queue', $queue); $task->set('done', $done); }