class backup_migrate_destination in Backup and Migrate 7.3
Same name and namespace in other branches
- 8.2 includes/destinations.inc \backup_migrate_destination
- 8.3 includes/destinations.inc \backup_migrate_destination
- 6.3 includes/destinations.inc \backup_migrate_destination
- 6.2 includes/destinations.inc \backup_migrate_destination
- 7.2 includes/destinations.inc \backup_migrate_destination
A base class for creating destinations.
Hierarchy
- class \backup_migrate_item
- class \backup_migrate_location
- class \backup_migrate_destination
- class \backup_migrate_location
Expanded class hierarchy of backup_migrate_destination
2 string references to 'backup_migrate_destination'
- backup_migrate_crud_types in includes/
crud.inc - Return a list of CRUD types in the module.
- backup_migrate_destination::edit_form in includes/
destinations.inc - Get the edit form for the item.
File
- includes/
destinations.inc, line 785
View source
class backup_migrate_destination extends backup_migrate_location {
public $db_table = 'backup_migrate_destinations';
public $type_name = 'destination';
public $default_values = array(
'settings' => array(),
);
public $singular = 'destination';
public $plural = 'destinations';
public $title_plural = 'Destinations';
public $title_singular = 'Destination';
public $cache_files = FALSE;
public $fetch_time = NULL;
public $weight = 0;
public $destination_type = '';
public $supported_ops = array();
/**
* 24 hours, i.e. 24 * 60 * 60 seconds.
*
* @var int.
*/
public $cache_expire = 86400;
/**
* This function is not supposed to be called.
*
* It is just here to help the po extractor out.
*/
public function strings() {
// Help the pot extractor find these strings.
t('Destination');
t('Destinations');
t('destinations');
t('destination');
}
/**
* Save the given file to the destination.
*/
public function save_file($file, $settings) {
$this
->file_cache_clear();
// Save the file metadata if the destination supports it.
$this
->save_file_info($file, $settings);
return $this
->_save_file($file, $settings);
}
/**
* Save the given file to the destination.
*/
public function _save_file($file, $settings) {
// This must be overriden.
return $file;
}
/**
* Save the file metadata.
*
* @return object
* The file object after it has been saved.
*/
public function save_file_info($file, $settings) {
$info = $this
->create_info_file($file);
// Save the info file and the actual file.
return $this
->_save_file($info, $settings);
}
/**
* Load the file with the given destination specific ID.
*
* @return \backup_file
* A backup file.
*/
public function load_file($file_id) {
// This must be overriden.
return NULL;
}
/**
* Check if the file exists in the list of available files.
*
* Actual destination types may have more efficient ways of doing this.
*/
public function file_exists($file_id) {
$files = $this
->list_files();
return isset($files[$file_id]);
}
/**
* List all the available files in the given destination.
*
* Includes their destination specific id.
*/
public function list_files() {
$files = NULL;
if ($this->cache_files) {
$files = $this
->file_cache_get();
}
if ($files === NULL) {
require_once dirname(__FILE__) . '/files.inc';
$files = $this
->_list_files();
$files = $this
->load_files_info($files);
if ($this->cache_files) {
$this
->file_cache_set($files);
}
// Clean up any previous abandoned tmp files before going further.
_backup_migrate_temp_files_delete();
}
$out = array();
if (is_array($files)) {
foreach ($files as $id => $file) {
if ($file
->is_recognized_type()) {
$out[$id] = $file;
$out[$id]->destination =& $this;
}
}
}
return $out;
}
/**
* Count all the available files in the given destination.
*/
public function count_files() {
return count($this
->list_files());
}
/**
* List all the available files in the given destination.
*
* Includes their destination specific id.
*/
public function _list_files() {
return array();
}
/**
* Load up the file's metadata from the accompanying .info file if applicable.
*/
public function load_files_info($files) {
foreach ($files as $key => $file) {
// See if there is an info file with the same name as the backup.
if (isset($files[$key . '.info'])) {
$info_file = $this
->load_file($files[$key . '.info']
->file_id());
$info = drupal_parse_info_file($info_file
->filepath());
// Allow the stored metadata to override the detected metadata.
unset($info['filename']);
$file->file_info = $info + $file->file_info;
// Remove the metadata file from the list.
unset($files[$key . '.info']);
}
// Add destination specific info.
$file
->info_set('destination_id', $this
->get('id'));
$file
->info_set('remote', $this
->get('remote'));
}
return $files;
}
/**
* Create an ini file and write the meta data.
*/
public function create_info_file($file) {
$info = $this
->_file_info_file($file);
$data = _backup_migrate_array_to_ini($file->file_info);
$info
->put_contents($data);
return $info;
}
/**
* Create the info file object.
*/
public function _file_info_file($file) {
$info = new backup_file(array(
'filename' => $this
->_file_info_filename($file
->file_id()),
));
return $info;
}
/**
* Determine the file name of the info file for a file.
*/
public function _file_info_filename($file_id) {
return $file_id . '.info';
}
/**
* Cache the file list.
*/
public function file_cache_set($files) {
cache_set('backup_migrate_file_list:' . $this
->get_id(), $files, 'cache', time() + $this->cache_expire);
}
/**
* Retrieve the file list.
*/
public function file_cache_get() {
require_once dirname(__FILE__) . '/files.inc';
$cache = cache_get('backup_migrate_file_list:' . $this
->get_id());
if (!empty($cache->data) && $cache->created > time() - $this->cache_expire) {
$this->fetch_time = $cache->created;
return $cache->data;
}
$this->fetch_time = 0;
return NULL;
}
/**
* Retrieve the file list.
*/
public function file_cache_clear() {
if ($this->cache_files) {
$this
->file_cache_set(NULL);
}
}
/**
* Delete the file with the given destination specific id.
*/
public function delete_file($file_id) {
$this
->file_cache_clear();
$this
->_delete_file($file_id);
$this
->_delete_file($this
->_file_info_filename($file_id));
}
/**
* Delete the file with the given destination specific id.
*/
public function _delete_file($file_id) {
// This must be overriden.
}
/**
* Get the edit form for the item.
*/
public function edit_form() {
if (get_class($this) !== 'backup_migrate_destination') {
$form = parent::edit_form();
$form['subtype'] = array(
"#type" => "value",
"#default_value" => $this
->get('subtype'),
);
}
else {
$types = backup_migrate_get_destination_subtypes();
$items = array(
'remote' => array(
'title' => t('Offsite Destinations'),
'description' => t('For the highest level of protection, set up an offsite backup destination in a location separate from your website.'),
'items' => array(),
),
'local' => array(
'title' => t('Local Destinations'),
'description' => t('Local backups are quick and convenient but do not provide the additional safety of offsite backups.'),
'items' => array(),
),
'other' => array(
'title' => t('Other Destinations'),
'description' => t('These destinations have not been classified because they were created for Backup and Migrate version 2. They may not work correctly with this version.'),
'items' => array(),
),
);
// If no (valid) node type has been provided, display a node type
// overview.
$path = $this
->get_settings_path();
foreach ($types as $key => $type) {
if (@$type['can_create']) {
$type_url_str = str_replace('_', '-', $key);
$out = '<dt>' . l($type['type_name'], $path . "/add/{$type_url_str}", array(
'attributes' => array(
'title' => t('Add a new @s destination.', array(
'@s' => $type['type_name'],
)),
),
)) . '</dt>';
$out .= '<dd>' . filter_xss_admin($type['description']) . '</dd>';
if (!empty($type['local'])) {
$items['local']['items'][] = $out;
}
if (!empty($type['remote'])) {
$items['remote']['items'][] = $out;
}
if (empty($type['local']) && empty($type['remote'])) {
$items['other']['items'][] = $out;
}
}
}
if (count($items['local']['items']) || count($items['remote']['items']) || count($items['other']['items'])) {
$output = '<p>' . t('Choose the type of destination you would like to create:') . '</p>';
foreach ($items as $group) {
if (count($group['items'])) {
$group['body'] = '<dl>' . implode('', $group['items']) . '</dl>';
$output .= theme('backup_migrate_group', $group);
}
}
}
else {
$output = t('No destination types available.');
}
$form['select_type'] = array(
'#type' => 'markup',
'#markup' => $output,
);
}
return $form;
}
/**
* Get a message to send to the user when confirming the deletion of the item.
*/
public function delete_confirm_message() {
return t('Are you sure you want to delete the destination %name? Backup files already saved to this destination will not be deleted.', array(
'%name' => $this
->get_name(),
));
}
/**
* Get a boolean representing if the destination is remote or local.
*/
public function get_remote() {
return $this
->op('remote backup');
}
/**
* Get the action links for a destination.
*/
public function get_action_links() {
$out = parent::get_action_links();
$item_id = $this
->get_id();
// Don't display the download/delete/restore ops if they are not available
// for this destination.
if ($this
->op('list files') && user_access("access backup files")) {
$out = array(
'list files' => l(t("list files"), $this
->get_settings_path() . '/list/files/' . $item_id),
) + $out;
}
if (!$this
->op('configure') || !user_access('administer backup and migrate')) {
unset($out['edit']);
}
return $out;
}
/**
* Get the action links for a file on a given destination.
*/
public function get_file_links($file_id) {
$out = array();
// Don't display the download/delete/restore ops if they are not available
// for this destination.
$can_read = $this
->can_read_file($file_id);
$can_delete = $this
->can_delete_file($file_id);
$path = $this
->get_settings_path();
$destination_id = $this
->get_id();
if ($can_read && user_access("access backup files")) {
$out[] = l(t("download"), $path . '/downloadfile/' . $destination_id . '/' . $file_id);
}
if ($can_read && user_access("restore from backup")) {
$out[] = l(t("restore"), $path . '/list/restorefile/' . $destination_id . '/' . $file_id);
}
if ($can_delete && user_access("delete backup files")) {
$out[] = l(t("delete"), $path . '/list/deletefile/' . $destination_id . '/' . $file_id);
}
return $out;
}
/**
* Determine if we can read the given file.
*/
public function can_read_file($file_id) {
return $this
->op('restore');
}
/**
* Determine if we can read the given file.
*/
public function can_delete_file($file_id) {
return $this
->op('delete');
}
/**
* Get the form for the settings for this destination type.
*/
public function settings_default() {
return array();
}
/**
* Get the form for the settings for this destination.
*/
public function settings_form($form) {
return $form;
}
/**
* Validate the form for the settings for this destination.
*/
public function settings_form_validate($form_values) {
}
/**
* Submit the settings form. Any values returned will be saved.
*/
public function settings_form_submit($form_values) {
return $form_values;
}
/**
* Check that a destination is valid.
*/
public function confirm_destination() {
return TRUE;
}
/**
* Add the menu items specific to the destination type.
*/
public function get_menu_items() {
$items = parent::get_menu_items();
$path = $this
->get_settings_path();
$items[$path . '/list/files'] = array(
'title' => 'Destination Files',
'page callback' => 'backup_migrate_menu_callback',
'page arguments' => array(
'destinations',
'backup_migrate_ui_destination_display_files',
TRUE,
),
'access arguments' => array(
'access backup files',
),
'type' => MENU_LOCAL_TASK,
);
$items[$path . '/list/deletefile'] = array(
'title' => 'Delete File',
'description' => 'Delete a backup file',
'page callback' => 'backup_migrate_menu_callback',
'page arguments' => array(
'destinations',
'backup_migrate_ui_destination_delete_file',
TRUE,
),
'access arguments' => array(
'delete backup files',
),
'type' => MENU_LOCAL_TASK,
);
$items[$path . '/list/restorefile'] = array(
'title' => 'Restore from backup',
'description' => 'Restore database from a backup file on the server',
'page callback' => 'backup_migrate_menu_callback',
'page arguments' => array(
'destinations',
'backup_migrate_ui_destination_restore_file',
TRUE,
),
'access arguments' => array(
'restore from backup',
),
'type' => MENU_LOCAL_TASK,
);
$items[$path . '/downloadfile'] = array(
'title' => 'Download File',
'description' => 'Download a backup file',
'page callback' => 'backup_migrate_menu_callback',
'page arguments' => array(
'destinations',
'backup_migrate_ui_destination_download_file',
TRUE,
),
'access arguments' => array(
'access backup files',
),
'type' => MENU_CALLBACK,
);
return $items;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
backup_migrate_destination:: |
public | property | 24 hours, i.e. 24 * 60 * 60 seconds. | |
backup_migrate_destination:: |
public | property | 1 | |
backup_migrate_destination:: |
public | property |
Overrides backup_migrate_location:: |
|
backup_migrate_destination:: |
public | property |
Overrides backup_migrate_location:: |
|
backup_migrate_destination:: |
public | property | ||
backup_migrate_destination:: |
public | property | ||
backup_migrate_destination:: |
public | property |
Overrides backup_migrate_location:: |
|
backup_migrate_destination:: |
public | property |
Overrides backup_migrate_location:: |
|
backup_migrate_destination:: |
public | property |
Overrides backup_migrate_location:: |
7 |
backup_migrate_destination:: |
public | property |
Overrides backup_migrate_location:: |
|
backup_migrate_destination:: |
public | property |
Overrides backup_migrate_location:: |
|
backup_migrate_destination:: |
public | property |
Overrides backup_migrate_location:: |
|
backup_migrate_destination:: |
public | property | 1 | |
backup_migrate_destination:: |
public | function | Determine if we can read the given file. | |
backup_migrate_destination:: |
public | function |
Determine if we can read the given file. Overrides backup_migrate_location:: |
1 |
backup_migrate_destination:: |
public | function | Check that a destination is valid. | 1 |
backup_migrate_destination:: |
public | function | Count all the available files in the given destination. | |
backup_migrate_destination:: |
public | function | Create an ini file and write the meta data. | |
backup_migrate_destination:: |
public | function |
Get a message to send to the user when confirming the deletion of the item. Overrides backup_migrate_location:: |
|
backup_migrate_destination:: |
public | function | Delete the file with the given destination specific id. | |
backup_migrate_destination:: |
public | function |
Get the edit form for the item. Overrides backup_migrate_location:: |
3 |
backup_migrate_destination:: |
public | function | Retrieve the file list. | |
backup_migrate_destination:: |
public | function | Retrieve the file list. | |
backup_migrate_destination:: |
public | function | Cache the file list. | |
backup_migrate_destination:: |
public | function | Check if the file exists in the list of available files. | |
backup_migrate_destination:: |
public | function |
Get the action links for a destination. Overrides backup_migrate_location:: |
|
backup_migrate_destination:: |
public | function | Get the action links for a file on a given destination. | |
backup_migrate_destination:: |
public | function |
Add the menu items specific to the destination type. Overrides backup_migrate_item:: |
|
backup_migrate_destination:: |
public | function | Get a boolean representing if the destination is remote or local. | |
backup_migrate_destination:: |
public | function | List all the available files in the given destination. | |
backup_migrate_destination:: |
public | function | Load the file with the given destination specific ID. | 4 |
backup_migrate_destination:: |
public | function | Load up the file's metadata from the accompanying .info file if applicable. | |
backup_migrate_destination:: |
public | function | Save the given file to the destination. | 3 |
backup_migrate_destination:: |
public | function | Save the file metadata. | |
backup_migrate_destination:: |
public | function |
Get the form for the settings for this destination type. Overrides backup_migrate_location:: |
|
backup_migrate_destination:: |
public | function |
Get the form for the settings for this destination. Overrides backup_migrate_location:: |
|
backup_migrate_destination:: |
public | function |
Submit the settings form. Any values returned will be saved. Overrides backup_migrate_location:: |
|
backup_migrate_destination:: |
public | function |
Validate the form for the settings for this destination. Overrides backup_migrate_location:: |
1 |
backup_migrate_destination:: |
public | function |
This function is not supposed to be called. Overrides backup_migrate_location:: |
|
backup_migrate_destination:: |
public | function | Delete the file with the given destination specific id. | 3 |
backup_migrate_destination:: |
public | function | Create the info file object. | |
backup_migrate_destination:: |
public | function | Determine the file name of the info file for a file. | |
backup_migrate_destination:: |
public | function | List all the available files in the given destination. | 3 |
backup_migrate_destination:: |
public | function | Save the given file to the destination. | 3 |
backup_migrate_item:: |
public | property | ||
backup_migrate_item:: |
public | property | ||
backup_migrate_item:: |
public | property | ||
backup_migrate_item:: |
public | function | Get all of the given items. | |
backup_migrate_item:: |
public | function | Decode a loaded db row (unserialize necessary fields). | |
backup_migrate_item:: |
public | function | Delete the item from the database. | |
backup_migrate_item:: |
public | function | Submit the edit form for the item. | 5 |
backup_migrate_item:: |
public | function | Validate the edit form for the item. | 4 |
backup_migrate_item:: |
public | function | Return as an exported array of values. | |
backup_migrate_item:: |
public | function | Load an existing item from an array. | |
backup_migrate_item:: |
public | function | Return a random (very very likely unique) string id for a new item. | |
backup_migrate_item:: |
public | function | Get the member with the given key. | |
backup_migrate_item:: |
public | function | Get the rendered action links for a destination. | |
backup_migrate_item:: |
public | function | Get the default values for standard parameters. | 2 |
backup_migrate_item:: |
public | function | Get the primary id for this item (if any is set). | |
backup_migrate_item:: |
public | function | Get a table of all items of this type. | 1 |
backup_migrate_item:: |
public | function | Get header for a lost of this type. | |
backup_migrate_item:: |
public | function | Get the machine name field name from the schema. | |
backup_migrate_item:: |
public | function | Get the primary key field title from the schema. | |
backup_migrate_item:: |
public | function | Get the schema for the item type. | |
backup_migrate_item:: |
public | function | Return the fields which must be serialized before saving to the db. | |
backup_migrate_item:: |
public | function | Get the columns needed to list the type. | 1 |
backup_migrate_item:: |
public | function | A particular item. | |
backup_migrate_item:: |
public | function | A particular item. | |
backup_migrate_item:: |
public | function | Load an existing item from an database (serialized) array. | |
backup_migrate_item:: |
public | function | The message to send to the user when confirming the deletion of the item. | |
backup_migrate_item:: |
public | function | Save the item to the database. | |
backup_migrate_item:: |
public | function | Set the primary id for this item (if any is set). | |
backup_migrate_item:: |
public | function | Get the columns needed to list the type. | |
backup_migrate_item:: |
public | function | Return as an array of values. | 1 |
backup_migrate_item:: |
public | function | Make sure this item has a unique id. | |
backup_migrate_item:: |
public | function | Merge parameters with the given defaults. | |
backup_migrate_item:: |
public | function | Set the basic info pulled from the db or generated programatically. | 5 |
backup_migrate_location:: |
public | property | ||
backup_migrate_location:: |
public | function | Get the form for the settings for this filter. | 3 |
backup_migrate_location:: |
public | function | Get the form for the settings for this filter. | 3 |
backup_migrate_location:: |
public | function | Submit the settings form. Any values returned will be saved. | |
backup_migrate_location:: |
public | function | Get the form for the settings for this filter. | |
backup_migrate_location:: |
public | function |
Create a new location of the correct type. Overrides backup_migrate_item:: |
|
backup_migrate_location:: |
public | function | Retrieve a list of filetypes supported by this source/destination. | 3 |
backup_migrate_location:: |
public | function | 3 | |
backup_migrate_location:: |
public | function |
Get the columns needed to list the type. Overrides backup_migrate_item:: |
|
backup_migrate_location:: |
public | 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:: |
public | function | 3 | |
backup_migrate_location:: |
public | function |
Get the name of the item. Overrides backup_migrate_item:: |
|
backup_migrate_location:: |
public | function | Get the type name of this location for display to the user. | |
backup_migrate_location:: |
public | function | Glue a URLs component parts back into a URL. | |
backup_migrate_location:: |
public | function | Get the available location types. | 1 |
backup_migrate_location:: |
public | function | Does this location support the given operation. | |
backup_migrate_location:: |
public | function | ||
backup_migrate_location:: |
public | function | Remove the given op from the support list. | |
backup_migrate_location:: |
public | function | Get the form for the settings for this filter. | |
backup_migrate_location:: |
public | function | Get the form for the settings for this filter. | |
backup_migrate_location:: |
public | function | Submit the settings form. Any values returned will be saved. | |
backup_migrate_location:: |
public | function | Get the form for the settings for this filter. | |
backup_migrate_location:: |
public | function | ||
backup_migrate_location:: |
public | function | 3 | |
backup_migrate_location:: |
public | function | ||
backup_migrate_location:: |
public | function | Break a URL into it's component parts. | |
backup_migrate_location:: |
public | function | Get a url from the parts. |