forked from johngodley/redirection
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathredirection-cli.php
131 lines (114 loc) · 3.23 KB
/
redirection-cli.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<?php
/**
* Implements example command.
*/
class Redirection_Cli extends WP_CLI_Command {
private function get_group( $group_id ) {
if ( $group_id === 0 ) {
$groups = Red_Group::get_filtered( array() );
if ( count( $groups['items'] ) > 0 ) {
return $groups['items'][ 0 ]['id'];
}
} else {
$groups = Red_Group::get( $group_id );
if ( $groups ) {
return $group_id;
}
}
return false;
}
/**
* Import redirections from a JSON, CSV, or .htaccess file
*
* ## OPTIONS
*
* <file>
* : The name of the file to import.
*
* [--group=<groupid>]
* : The group ID to import into. Defaults to the first available group. JSON
* contains it's own group
*
* [--format=<importformat>]
* : The import format - csv, htaccess, or json. Defaults to json
*
* ## EXAMPLES
*
* wp redirection import .htaccess --format=htaccess
*/
public function import( $args, $extra ) {
$format = isset( $extra['format'] ) ? $extra['format'] : 'json';
$group = $this->get_group( isset( $extra['group'] ) ? intval( $extra['group'], 10 ) : 0 );
if ( ! $group ) {
WP_CLI::error( 'Invalid group' );
return;
}
$importer = Red_FileIO::create( $format );
if ( ! $importer ) {
WP_CLI::error( 'Invalid import format - csv, json, or htaccess supported' );
return;
}
if ( $format === 'csv' ) {
$file = fopen( $args[ 0 ], 'r' );
if ( $file ) {
$count = $importer->load( $group, $args[ 0 ], '' );
WP_CLI::success( 'Imported ' . $count . ' as '.$format );
} else {
WP_CLI::error( 'Invalid import file' );
}
} else {
$data = @file_get_contents( $args[ 0 ] );
if ( $data ) {
$count = $importer->load( $group, $args[ 0 ], $data );
WP_CLI::success( 'Imported ' . $count . ' as '.$format );
}
}
}
/**
* Export redirections to a CSV, JSON, .htaccess, or rewrite.rules file
*
* ## OPTIONS
*
* <module>
* : The module to export - wordpress, apache, nginx, or all
*
* <filename>
* : The file to export to, or - for stdout
*
* [--format=<exportformat>]
* : The export format. One of json, csv, apache, or nginx. Defaults to json
*
* ## EXAMPLES
*
* wp redirection export wordpress --format=apache
*/
public function export( $args, $extra ) {
$format = isset( $extra['format'] ) ? $extra['format'] : 'json';
$exporter = Red_FileIO::create( $format );
if ( ! $exporter ) {
WP_CLI::error( 'Invalid export format - json, csv, htaccess, or nginx supported' );
return;
}
$file = fopen( $args[ 1 ] === '-' ? 'php://stdout' : $args[ 1 ], 'w' );
if ( $file ) {
$export = Red_FileIO::export( $args[ 0 ], $format );
if ( $export === false ) {
WP_CLI::error( 'Invalid module - must be wordpress, apache, nginx, or all' );
return;
}
fwrite( $file, $export['data'] );
fclose( $file );
WP_CLI::success( 'Exported ' . $export['total'] .' to '.$format );
} else {
WP_CLI::error( 'Invalid output file' );
}
}
}
if ( defined( 'WP_CLI' ) && WP_CLI ) {
WP_CLI::add_command( 'redirection import', array( 'Redirection_Cli', 'import' ) );
WP_CLI::add_command( 'redirection export', array( 'Redirection_Cli', 'export' ) );
add_action( Red_Flusher::DELETE_HOOK, function() {
$flusher = new Red_Flusher();
$flusher->flush();
} );
}