/[drupal]/contributions/dumper.module
ViewVC logotype

Contents of /contributions/dumper.module

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (show annotations) (download) (as text)
Tue Sep 15 19:46:54 2009 UTC (2 months, 1 week ago) by franz
Branch: MAIN
File MIME type: text/x-php
Initial commit.
1 <?php
2 /** @author Franz Glauber Vanderlinde */
3
4 function dumper_perm() {
5 return array('dump sql data');
6 }
7
8 function dumper_admin() {
9 $form = array();
10
11 $db_spec = _dumper_sql_get_db_spec();
12
13 $form[]= array ( '#value' => '<div>'.t('Currently using '.$db_spec['driver']).'</div>', );
14
15 switch($db_spec['driver']){
16 case 'mysql':
17 $extra = t('\nAlready using: "mysqldump --single-transaction --opt -Q"');
18 break;
19 case 'pgsql':
20 $extra = t('\nAlready using: "pg_dump --clean"');
21 break;
22 default:
23 $extra = '';
24 }
25
26 $form['dumper_extra_options'] = array(
27 '#type' => 'textfield',
28 '#title' => t('Extra options'),
29 '#default_value' => variable_get('dumper_extra_options', ''),
30 '#description' => t("Extra options to append to the command.") . $extra,
31 );
32
33 return system_settings_form($form);
34 }
35
36 function dumper_form(){
37
38 $form = array();
39
40 $form['buttons']['submit'] = array (
41 '#type' => 'submit',
42 '#value' => t('Get Dump'),
43 );
44
45 $form['#submit'][] = 'dumper_form_submit';
46
47 return $form;
48 }
49
50 function dumper_form_submit($form, &$form_state) {
51
52 $db_spec = _dumper_sql_get_db_spec();
53
54 switch($db_spec['driver']){
55 case 'mysql':
56 $exec = 'mysqldump ';
57 $extra = '--single-transaction --opt -Q ';
58 $cred = ' -h' . $db_spec['host'] .
59 (empty($db_spec['port']) ? '' : ' -P' . $db_spec['port']) .
60 ' -u' . $db_spec['username'] .
61 (empty($db_spec['password']) ? '' : ' -p' . $db_spec['password']) . ' ' . $db_spec['database'];
62 break;
63 case 'pgsql':
64 $exec = 'pg_dump --clean ';
65 $cred = $db_spec['database'] . ' ' .
66 (empty($db_spec['host']) || ($db_spec['host'] == "localhost") ? '' : '-h ' . $db_spec['host']) . ' ' .
67 (empty($db_spec['port']) ? '' : '-p' . $db_spec['port']) . ' ';
68 break;
69 default:
70 exit;
71 }
72
73 $extra .= variable_get('dumper_extra_options','');
74
75 $filename = '/tmp/'.session_name().'.sql.gz';
76
77 $exec .= $extra .' '. $cred . '|gzip >'.$filename;
78
79 $result = system($exec);
80
81 if(file_exists($filename)){
82 file_transfer($filename, array ( 'Content-type: application/x-gzip', 'Content-Disposition: attachment; filename="dump.sql.gz"', 'Content-Type: application/force-download', ));
83 }
84 else{
85 drupal_set_message(t('Unable do dump Database (check your extra options)'),'error');
86 drupal_goto('/admin/settings/dumper');
87 }
88 }
89
90 function _dumper_sql_get_db_spec() {
91
92 $url = $GLOBALS['db_url'];
93 //$url = is_array($url) ? $url[$database] : $url;
94 $url = parse_url($url);
95 // Fill in defaults to prevent notices.
96 $url += array(
97 'driver' => NULL,
98 'user' => NULL,
99 'pass' => NULL,
100 'port' => NULL,
101 'database' => NULL,
102 );
103 $url = (object)$url;
104 return array(
105 'driver' => $url->scheme == 'mysqli' ? 'mysql' : $url->scheme,
106 'username' => urldecode($url->user),
107 'password' => urldecode($url->pass),
108 'port' => urldecode($url->port),
109 'host' => urldecode($url->host),
110 'database' => substr(urldecode($url->path), 1), // skip leading '/' character≈
111 );
112
113 }
114
115 function dumper_menu() {
116
117 $items = array();
118
119 $items['admin/settings/dumper'] = array(
120 'title' => 'Dumper settings',
121 'description' => 'Configure database dumper.',
122 'page callback' => 'drupal_get_form',
123 'page arguments' => array('dumper_admin'),
124 'access arguments' => array('dump sql data'),
125 'type' => MENU_NORMAL_ITEM,
126 );
127
128 $items['admin/build/dumper'] = array(
129 'title' => 'Dump DB',
130 'description' => 'Download database dump.',
131 'page callback' => 'drupal_get_form',
132 'page arguments' => array('dumper_form'),
133 'access arguments' => array('dump sql data'),
134 'type' => MENU_NORMAL_ITEM,
135 );
136
137 return $items;
138 }
139
140 ?>

  ViewVC Help
Powered by ViewVC 1.1.2