Skip to content

Commit

Permalink
Merge pull request #5 from 1naveengiri/Fix-multi-uninstall
Browse files Browse the repository at this point in the history
Fix multi lang uninstall
  • Loading branch information
danielbachhuber committed May 1, 2017
2 parents 99165fe + 7aac324 commit 09298a9
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 31 deletions.
9 changes: 9 additions & 0 deletions features/core-language.feature
Expand Up @@ -145,6 +145,15 @@ Feature: Manage translation files for a WordPress install
Success: Language uninstalled.
"""

When I run `wp core language uninstall en_CA en_NZ`
Then the wp-content/languages/admin-en_CA.po file should not exist
And the wp-content/languages/en_CA.po file should not exist
And STDOUT should be:
"""
Success: Language uninstalled.
Success: Language uninstalled.
"""

When I try `wp core language uninstall en_GB`
Then STDERR should be:
"""
Expand Down
66 changes: 35 additions & 31 deletions src/WP_CLI/CommandWithTranslation.php
Expand Up @@ -399,7 +399,7 @@ protected function get_all_languages() {
/**
* Uninstall a given language.
*
* <language>
* <language>...
* : Language code to uninstall.
*
* ## EXAMPLES
Expand All @@ -412,45 +412,49 @@ protected function get_all_languages() {
public function uninstall( $args, $assoc_args ) {
global $wp_filesystem;

list( $language_code ) = $args;
$language_codes = $args;

$available = $this->get_installed_languages();

if ( ! in_array( $language_code, $available ) ) {
\WP_CLI::error( "Language not installed." );
}
foreach ($language_codes as $language_code) {

$dir = 'core' === $this->obj_type ? '' : "/$this->obj_type";
$files = scandir( WP_LANG_DIR . $dir );
if ( ! $files ) {
\WP_CLI::error( "No files found in language directory." );
}
if ( ! in_array( $language_code, $available ) ) {
\WP_CLI::error( "Language not installed." );
}

$current_locale = get_locale();
if ( $language_code === $current_locale ) {
\WP_CLI::warning( "The '{$language_code}' language is active." );
exit;
}
$dir = 'core' === $this->obj_type ? '' : "/$this->obj_type";
$files = scandir( WP_LANG_DIR . $dir );
if ( ! $files ) {
\WP_CLI::error( "No files found in language directory." );
}

// As of WP 4.0, no API for deleting a language pack
WP_Filesystem();
$deleted = false;
foreach ( $files as $file ) {
if ( '.' === $file[0] || is_dir( $file ) ) {
continue;
$current_locale = get_locale();
if ( $language_code === $current_locale ) {
\WP_CLI::warning( "The '{$language_code}' language is active." );
exit;
}

// As of WP 4.0, no API for deleting a language pack
WP_Filesystem();
$deleted = false;
foreach ( $files as $file ) {
if ( '.' === $file[0] || is_dir( $file ) ) {
continue;
}
$extension_length = strlen( $language_code ) + 4;
$ending = substr( $file, -$extension_length );
if ( ! in_array( $file, array( $language_code . '.po', $language_code . '.mo' ) ) && ! in_array( $ending, array( '-' . $language_code . '.po', '-' . $language_code . '.mo' ) ) ) {
continue;
}
$deleted = $wp_filesystem->delete( WP_LANG_DIR . $dir . '/' . $file );
}
$extension_length = strlen( $language_code ) + 4;
$ending = substr( $file, -$extension_length );
if ( ! in_array( $file, array( $language_code . '.po', $language_code . '.mo' ) ) && ! in_array( $ending, array( '-' . $language_code . '.po', '-' . $language_code . '.mo' ) ) ) {
continue;

if ( $deleted ) {
\WP_CLI::success( "Language uninstalled." );
} else {
\WP_CLI::error( "Couldn't uninstall language." );
}
$deleted = $wp_filesystem->delete( WP_LANG_DIR . $dir . '/' . $file );
}

if ( $deleted ) {
\WP_CLI::success( "Language uninstalled." );
} else {
\WP_CLI::error( "Couldn't uninstall language." );
}

}
Expand Down

0 comments on commit 09298a9

Please sign in to comment.