class backup_migrate_destination_filesource in Backup and Migrate 6.3
Same name and namespace in other branches
- 8.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' => file_directory_path(),
'name' => t('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\nimagecache\ncss\njs\nctools\nimagefield_thumbs",
);
}
/**
* 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), realpath('.') . '/');
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 = 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)) {
$file = realpath($dir . '/' . $file);
$path = str_replace($base_dir, '', $file);
// If the path is not excluded.
if (!in_array($path, $exclude)) {
if (is_dir($file)) {
$subdir = $this
->get_files_to_backup($file, $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[] = $path;
}
$out = array_merge($out, $subdir);
}
else {
if (is_readable($file)) {
$out[] = $path;
}
else {
backup_migrate_backup_fail('The directory cannot be backed up because the file %file cannot be read by the web server.', array(
'%file' => str_replace($base_dir, '', $file),
), $settings);
closedir($handle);
return FALSE;
}
}
}
}
}
closedir($handle);
}
else {
backup_migrate_backup_fail('Could not open directory %dir', array(
'%dir' => $dir,
), $settings);
return FALSE;
}
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;
// Extend inlcude path with path to this module's includes directory.
$includes_directory = './' . drupal_get_path('module', 'backup_migrate_files') . '/includes';
$include_path_old = set_include_path($includes_directory . ';' . get_include_path());
// Check if PEAR.php is present in a non-fatal way and error gracefully if it isn't.
include_once 'PEAR.php';
if (!class_exists('PEAR')) {
_backup_migrate_message('PEAR is not installed correctly. See the README.txt file in the backup_migrate_files module directory for help.', array(), 'error');
$result = false;
}
// Check if Tar.php is present in a non-fatal way and error gracefully if it isn't.
if ($result) {
// Try to get version in this module's includes directory first, but prevent warning texts being output.
if (file_exists($includes_directory . '/Tar.php')) {
include_once $includes_directory . '/Tar.php';
}
if (!class_exists('Archive_Tar')) {
// Try to get via PEAR directory structure.
include_once 'Archive/Tar.php';
if (!class_exists('Archive_Tar')) {
_backup_migrate_message('Archive_Tar is not installed correctly. See the README.txt file in the backup_migrate_files module directory for help.', array(), 'error');
$result = false;
}
}
}
// Restore include path.
set_include_path($include_path_old);
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. | 4 | |
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. | ||
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:: |