function update_authorize_batch_copy_project in Drupal 7
Same name and namespace in other branches
- 8 core/modules/update/update.authorize.inc \update_authorize_batch_copy_project()
- 9 core/modules/update/update.authorize.inc \update_authorize_batch_copy_project()
Implements callback_batch_operation().
Copies project to its proper place when authorized to do so.
Parameters
string $project: The canonical short name of the project being installed.
string $updater_name: The name of the Updater class to use for installing this project.
string $local_url: The URL to the locally installed temp directory where the project has already been downloaded and extracted into.
FileTransfer $filetransfer: The FileTransfer object to use for performing this operation.
array $context: Reference to an array used for Batch API storage.
2 string references to 'update_authorize_batch_copy_project'
- update_authorize_run_install in modules/
update/ update.authorize.inc - Installs a new project when invoked by authorize.php.
- update_authorize_run_update in modules/
update/ update.authorize.inc - Updates existing projects when invoked by authorize.php.
File
- modules/
update/ update.authorize.inc, line 116 - Callbacks and related functions invoked by authorize.php to update projects.
Code
function update_authorize_batch_copy_project($project, $updater_name, $local_url, $filetransfer, &$context) {
// Initialize some variables in the Batch API $context array.
if (!isset($context['results']['log'])) {
$context['results']['log'] = array();
}
if (!isset($context['results']['log'][$project])) {
$context['results']['log'][$project] = array();
}
if (!isset($context['results']['tasks'])) {
$context['results']['tasks'] = array();
}
// The batch API uses a session, and since all the arguments are serialized
// and unserialized between requests, although the FileTransfer object itself
// will be reconstructed, the connection pointer itself will be lost. However,
// the FileTransfer object will still have the connection variable, even
// though the connection itself is now gone. So, although it's ugly, we have
// to unset the connection variable at this point so that the FileTransfer
// object will re-initiate the actual connection.
unset($filetransfer->connection);
if (!empty($context['results']['log'][$project]['#abort'])) {
$context['finished'] = 1;
return;
}
$updater = new $updater_name($local_url);
try {
if ($updater
->isInstalled()) {
// This is an update.
$tasks = $updater
->update($filetransfer);
}
else {
$tasks = $updater
->install($filetransfer);
}
} catch (UpdaterException $e) {
_update_batch_create_message($context['results']['log'][$project], t('Error installing / updating'), FALSE);
_update_batch_create_message($context['results']['log'][$project], $e
->getMessage(), FALSE);
$context['results']['log'][$project]['#abort'] = TRUE;
return;
}
_update_batch_create_message($context['results']['log'][$project], t('Installed %project_name successfully', array(
'%project_name' => $project,
)));
if (!empty($tasks)) {
$context['results']['tasks'] += $tasks;
}
// This particular operation is now complete, even though the batch might
// have other operations to perform.
$context['finished'] = 1;
}