class backup_migrate_destination_filesource in Backup and Migrate 8.3
Same name and namespace in other branches
- 6.3 includes/sources.filesource.inc \backup_migrate_destination_filesource
- 7.3 includes/sources.filesource.inc \backup_migrate_destination_filesource
A destination type for saving locally to the server.
Hierarchy
- class \backup_migrate_item
- class \backup_migrate_location
Expanded class hierarchy of backup_migrate_destination_filesource
1 string reference to 'backup_migrate_destination_filesource'
- backup_migrate_backup_migrate_source_subtypes in includes/
sources.inc - Implementation of hook_backup_migrate_source_subtypes().
File
- includes/
sources.filesource.inc, line 15 - A destination type for saving locally to the server.
View source
class backup_migrate_destination_filesource extends backup_migrate_source {
var $supported_ops = array(
'restore',
'configure',
'delete',
'source',
);
function type_name() {
return t("Files Directory");
}
/**
* Declare the current files directory as a backup source..
*/
function sources() {
$out = array();
$out['files'] = backup_migrate_create_destination('filesource', array(
'machine_name' => 'files',
'location' => 'public://',
'name' => t('Public Files Directory'),
'show_in_list' => FALSE,
));
if (variable_get('file_private_path', FALSE)) {
$out['files_private'] = backup_migrate_create_destination('filesource', array(
'machine_name' => 'files',
'location' => 'private://',
'name' => t('Private Files Directory'),
'show_in_list' => FALSE,
));
}
return $out;
}
/**
* Get the form for the settings for the files destination.
*/
function edit_form() {
$form = parent::edit_form();
$form['location'] = array(
"#type" => "textfield",
"#title" => t("Directory path"),
"#default_value" => $this
->get_location(),
"#required" => TRUE,
"#description" => t('Enter the path to the directory to save the backups to. Use a relative path to pick a path relative to your Drupal root directory. The web server must be able to write to this path.'),
);
return $form;
}
/**
* Return a list of backup filetypes.
*/
function file_types() {
return array(
"tar" => array(
"extension" => "tar",
"filemime" => "application/x-tar",
"backup" => TRUE,
"restore" => TRUE,
),
);
}
/**
* Get the form for the settings for this destination.
*
* Return the default directories whose data can be ignored. These directories contain
* info which can be easily reproducted. Also exclude the backup and migrate folder
* to prevent exponential bloat.
*/
function backup_settings_default() {
return array(
'exclude_filepaths' => "backup_migrate\nstyles\ncss\njs\nctools\nless",
);
}
/**
* Get the form for the backup settings for this destination.
*/
function backup_settings_form($settings) {
$form['exclude_filepaths'] = array(
"#type" => "textarea",
"#multiple" => TRUE,
"#title" => t("Exclude the following files or directories"),
"#default_value" => $settings['exclude_filepaths'],
"#description" => t("A list of files or directories to be excluded from backups. Add one path per line relative to the directory being backed up."),
);
return $form;
}
/**
* Backup from this source.
*/
function backup_to_file($file, $settings) {
if ($out = $this
->_backup_to_file_cli($file, $settings)) {
return $out;
}
else {
return $this
->_backup_to_file_php($file, $settings);
}
}
/**
* Backup from this source.
*/
function _backup_to_file_php($file, $settings) {
if ($this
->check_libs()) {
$excluded_paths = empty($settings->filters['exclude_filepaths']) ? '' : $settings->filters['exclude_filepaths'];
$files = $this
->get_files_to_backup($this
->get_realpath(), $settings, $this
->get_excluded_paths($excluded_paths), DRUPAL_ROOT . '/');
if ($files) {
$file
->push_type('tar');
$gz = new Archive_Tar($file
->filepath(), false);
$gz
->addModify($files, '', $this
->get_realpath());
return $file;
}
backup_migrate_backup_fail('No files available.', array(), $settings);
return FALSE;
}
return FALSE;
}
/**
* Backup from this source.
*/
function _backup_to_file_cli($file, $settings) {
if (!empty($settings->filters['use_cli']) && function_exists('backup_migrate_exec') && function_exists('escapeshellarg')) {
$excluded_paths = empty($settings->filters['exclude_filepaths']) ? '' : $settings->filters['exclude_filepaths'];
$exclude = array();
foreach ($this
->get_excluded_paths($excluded_paths) as $path) {
$exclude[] = '--exclude=' . escapeshellarg($path);
}
$exclude = implode(' ', $exclude);
// Create a symlink in a temp directory so we can rename the file in the archive.
$temp = backup_migrate_temp_directory();
$file
->push_type('tar');
backup_migrate_exec("tar --dereference -C %input -rf %output {$exclude} .", array(
'%output' => $file
->filepath(),
'%input' => $this
->get_realpath(),
'%temp' => $temp,
));
return $file;
}
return FALSE;
}
/**
* Restore to this source.
*/
function restore_from_file($file, &$settings) {
if ($out = $this
->_restore_from_file_cli($file, $settings)) {
return $out;
}
else {
return $this
->_restore_from_file_php($file, $settings);
}
}
/**
* Restore to this source.
*/
function _restore_from_file_php($file, &$settings) {
if ($this
->check_libs()) {
$from = $file
->pop_type();
$temp = backup_migrate_temp_directory();
$tar = new Archive_Tar($from
->filepath());
$tar
->extractModify($temp, $file->name);
// Older B&M Files format included a base 'files' directory.
if (file_exists($temp . '/files')) {
$temp = $temp . '/files';
}
if (file_exists($temp . '/' . $file->name . '/files')) {
$temp = $temp . '/files';
}
// Move the files from the temp directory.
_backup_migrate_move_files($temp, $this
->get_realpath());
return $file;
}
return FALSE;
}
/**
* Restore to this source.
*/
function _restore_from_file_cli($file, &$settings) {
if (!empty($settings->filters['use_cli']) && function_exists('backup_migrate_exec')) {
$temp = backup_migrate_temp_directory();
backup_migrate_exec("tar -C %temp -xf %input", array(
'%input' => $file
->filepath(),
'%temp' => $temp,
));
// Older B&M Files format included a base 'files' directory.
if (file_exists($temp . '/files')) {
$temp = $temp . '/files';
}
if (file_exists($temp . '/' . $file->name . '/files')) {
$temp = $temp . '/files';
}
// Move the files from the temp directory.
backup_migrate_exec("mv -rf %temp/* %output", array(
'%output' => $this
->get_realpath(),
'%temp' => $temp,
));
return $file;
}
return FALSE;
}
/**
* Get a list of files to backup from the given set if dirs. Exclude any that match the array $exclude.
*/
function get_files_to_backup($dir, $settings, $exclude = array(), $base_dir = '') {
$out = $errors = array();
if (!file_exists($dir)) {
backup_migrate_backup_fail('Directory %dir does not exist.', array(
'%dir' => $dir,
), $settings);
return FALSE;
}
if ($handle = @opendir($dir)) {
while (($file = readdir($handle)) !== FALSE) {
if ($file != '.' && $file != '..' && !in_array($file, $exclude)) {
$real = realpath($dir . '/' . $file);
$path = str_replace($base_dir, '', $real);
// If the path is not excluded.
if (!in_array($path, $exclude)) {
if (is_dir($real)) {
$subdir = $this
->get_files_to_backup($real, $settings, $exclude, $base_dir);
// If there was an error reading the subdirectory then abort the backup.
if ($subdir === FALSE) {
closedir($handle);
return FALSE;
}
// If the directory is empty, add an empty directory.
if (count($subdir) == 0) {
$out[] = $real;
}
$out = array_merge($out, $subdir);
}
else {
if (is_readable($real)) {
$out[] = $real;
}
else {
$errors[] = $dir . '/' . $file;
}
}
}
}
}
closedir($handle);
}
else {
backup_migrate_backup_fail('Could not open directory %dir', array(
'%dir' => $dir,
), $settings);
return FALSE;
}
// Alert the user to any errors there might have been.
if ($errors) {
if (count($errors < 5)) {
$filesmsg = t('The following files: !files', array(
'!files' => theme('item_list', array(
'items' => $errors,
)),
));
}
else {
$filesmsg = t('!count files', array(
'!count' => count($errors),
));
}
if (empty($settings->filters['ignore_errors'])) {
backup_migrate_backup_fail('The backup could not be completed because !files could not be read. If you want to skip unreadable files use the \'Ignore Errors\' setting under \'Advanced Options\' in \'Advanced Backup\' or in your schedule settings profile.', array(
'!files' => $filesmsg,
), 'error');
$out = FALSE;
}
else {
backup_migrate_backup_fail('!files could not be read and were skipped', array(
'!files' => $filesmsg,
), 'error');
}
}
return $out;
}
/**
* Break the excpluded paths string into a usable list of paths.
*/
function get_excluded_paths($paths) {
$out = explode("\n", $paths);
foreach ($out as $key => $val) {
$out[$key] = trim($val, "/ \t\r\n");
}
return $out;
}
/**
* Check that the required libraries are installed.
*/
function check_libs() {
$result = true;
// Drupal 7 has Archive_Tar built in so there should be no need to include anything here.
return $result;
}
/**
* Get the file location.
*/
function get_realpath() {
return drupal_realpath($this
->get_location());
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
backup_migrate_destination_filesource:: |
property |
Overrides backup_migrate_location:: |
1 | |
backup_migrate_destination_filesource:: |
function |
Get the form for the settings for this destination. Overrides backup_migrate_location:: |
1 | |
backup_migrate_destination_filesource:: |
function |
Get the form for the backup settings for this destination. Overrides backup_migrate_location:: |
||
backup_migrate_destination_filesource:: |
function | Backup from this source. | ||
backup_migrate_destination_filesource:: |
function | Check that the required libraries are installed. | ||
backup_migrate_destination_filesource:: |
function |
Get the form for the settings for the files destination. Overrides backup_migrate_location:: |
||
backup_migrate_destination_filesource:: |
function |
Return a list of backup filetypes. Overrides backup_migrate_location:: |
1 | |
backup_migrate_destination_filesource:: |
function | Break the excpluded paths string into a usable list of paths. | ||
backup_migrate_destination_filesource:: |
function | Get a list of files to backup from the given set if dirs. Exclude any that match the array $exclude. | ||
backup_migrate_destination_filesource:: |
function | Get the file location. | ||
backup_migrate_destination_filesource:: |
function | Restore to this source. | ||
backup_migrate_destination_filesource:: |
function | Declare the current files directory as a backup source.. | 1 | |
backup_migrate_destination_filesource:: |
function | 1 | ||
backup_migrate_destination_filesource:: |
function | Backup from this source. | 1 | |
backup_migrate_destination_filesource:: |
function | Backup from this source. | 1 | |
backup_migrate_destination_filesource:: |
function | Restore to this source. | 1 | |
backup_migrate_destination_filesource:: |
function | Restore to this source. | 1 | |
backup_migrate_item:: |
property | |||
backup_migrate_item:: |
property | |||
backup_migrate_item:: |
property | |||
backup_migrate_item:: |
function | Get all of the given items. | ||
backup_migrate_item:: |
function | Decode a loaded db row (unserialize necessary fields). | ||
backup_migrate_item:: |
function | Delete the item from the database. | ||
backup_migrate_item:: |
function | Submit the edit form for the item. | 6 | |
backup_migrate_item:: |
function | Validate the edit form for the item. | 5 | |
backup_migrate_item:: |
function | Return as an exported array of values. | ||
backup_migrate_item:: |
function | Load an existing item from an array. | ||
backup_migrate_item:: |
function | Return a random (very very likely unique) string id for a new item. | ||
backup_migrate_item:: |
function | Get the member with the given key. | ||
backup_migrate_item:: |
function | Get the rendered action links for a destination. | ||
backup_migrate_item:: |
function | Get the default values for standard parameters. | 2 | |
backup_migrate_item:: |
function | Get the primary id for this item (if any is set). | ||
backup_migrate_item:: |
function | Get a table of all items of this type. | 1 | |
backup_migrate_item:: |
function | Get header for a lost of this type. | ||
backup_migrate_item:: |
function | Get the machine name field name from the schema. | ||
backup_migrate_item:: |
function | Get the menu items for manipulating this type. | 2 | |
backup_migrate_item:: |
function | Get the primary key field title from the schema. | ||
backup_migrate_item:: |
function | Get the schema for the item type. | ||
backup_migrate_item:: |
function | Return the fields which must be serialized before saving to the db. | ||
backup_migrate_item:: |
function | Get the columns needed to list the type. | 1 | |
backup_migrate_item:: |
function | A particular item. | ||
backup_migrate_item:: |
function | A particular item. | ||
backup_migrate_item:: |
function | Load an existing item from an database (serialized) array. | ||
backup_migrate_item:: |
function | Get the message to send to the user when confirming the deletion of the item. | ||
backup_migrate_item:: |
function | Save the item to the database. | ||
backup_migrate_item:: |
function | Set the primary id for this item (if any is set). | ||
backup_migrate_item:: |
function | Get the columns needed to list the type. | ||
backup_migrate_item:: |
function | Return as an array of values. | 1 | |
backup_migrate_item:: |
function | Make sure this item has a unique id. Should only be called for new items or the item will collide with itself. | ||
backup_migrate_item:: |
function | Merge parameters with the given defaults. | ||
backup_migrate_item:: |
function | Constructor, set the basic info pulled from the db or generated programatically. | 4 | |
backup_migrate_location:: |
property |
Overrides backup_migrate_item:: |
1 | |
backup_migrate_location:: |
property | |||
backup_migrate_location:: |
function | Submit the settings form. Any values returned will be saved. | ||
backup_migrate_location:: |
function | Get the form for the settings for this filter. | ||
backup_migrate_location:: |
function | Determine if we can read the given file. | 1 | |
backup_migrate_location:: |
function |
Create a new location of the correct type. Overrides backup_migrate_item:: |
||
backup_migrate_location:: |
function |
Get the message to send to the user when confirming the deletion of the item. Overrides backup_migrate_item:: |
1 | |
backup_migrate_location:: |
function |
Get the action links for a location. Overrides backup_migrate_item:: |
1 | |
backup_migrate_location:: |
function | 4 | ||
backup_migrate_location:: |
function |
Get the columns needed to list the type. Overrides backup_migrate_item:: |
||
backup_migrate_location:: |
function |
Get a row of data to be used in a list of items of this type. Overrides backup_migrate_item:: |
1 | |
backup_migrate_location:: |
function | 3 | ||
backup_migrate_location:: |
function |
Get the name of the item. Overrides backup_migrate_item:: |
1 | |
backup_migrate_location:: |
function | Get the type name of this location for display to the user. | ||
backup_migrate_location:: |
function | Glue a URLs component parts back into a URL. | 1 | |
backup_migrate_location:: |
function | Does this location support the given operation. | ||
backup_migrate_location:: |
function | |||
backup_migrate_location:: |
function | Remove the given op from the support list. | ||
backup_migrate_location:: |
function | Get the form for the settings for this filter. | ||
backup_migrate_location:: |
function | Get the form for the settings for this filter. | ||
backup_migrate_location:: |
function | Submit the settings form. Any values returned will be saved. | ||
backup_migrate_location:: |
function | Get the form for the settings for this filter. | ||
backup_migrate_location:: |
function | |||
backup_migrate_location:: |
function | Get the form for the settings for this location type. | 1 | |
backup_migrate_location:: |
function | Get the form for the settings for this location. | 1 | |
backup_migrate_location:: |
function | Submit the settings form. Any values returned will be saved. | 1 | |
backup_migrate_location:: |
function | Validate the form for the settings for this location. | 1 | |
backup_migrate_location:: |
function | 3 | ||
backup_migrate_location:: |
function | |||
backup_migrate_location:: |
function | Break a URL into it's component parts. | 1 | |
backup_migrate_location:: |
function | Get a url from the parts. | 1 | |
backup_migrate_source:: |
property |
Overrides backup_migrate_location:: |
||
backup_migrate_source:: |
property |
Overrides backup_migrate_location:: |
||
backup_migrate_source:: |
property |
Overrides backup_migrate_location:: |
||
backup_migrate_source:: |
property |
Overrides backup_migrate_location:: |
||
backup_migrate_source:: |
property |
Overrides backup_migrate_location:: |
||
backup_migrate_source:: |
property |
Overrides backup_migrate_location:: |
||
backup_migrate_source:: |
function |
Get the available location types. Overrides backup_migrate_location:: |
||
backup_migrate_source:: |
function |
This function is not supposed to be called. It is just here to help the po extractor out. Overrides backup_migrate_location:: |