Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closes #11: handle translations #12

Merged
merged 11 commits into from
Nov 28, 2024
1 change: 1 addition & 0 deletions phpcs.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

<!-- ** WHAT TO SCAN ** -->
<file>src</file>
<exclude-pattern>src/PostInstall.php</exclude-pattern>
<!-- ** HOW TO SCAN ** -->
<arg value="sp"/><!-- Show sniff and progress -->
<arg name="colors"/><!-- Show results with colors -->
Expand Down
11 changes: 11 additions & 0 deletions phpstan-stubs/ComposerScriptEvent.stub.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php

namespace Composer\Script;

/**
* Composer Event class stub.
*/
class Event {
public function getComposer() {}
public function getIO() {}
}
4 changes: 3 additions & 1 deletion phpstan.neon.dist
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
includes:
- phar://phpstan.phar/conf/bleedingEdge.neon
- phar://phpstan.phar/conf/bleedingEdge.neon
parameters:
level: 5
bootstrapFiles:
- %currentWorkingDirectory%/phpstan-stubs/ComposerScriptEvent.stub.php
paths:
- %currentWorkingDirectory%/src
8 changes: 4 additions & 4 deletions src/Model/PluginFamily.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ public function filter_plugins_by_activation( array $plugins, string $main_plugi
if ( is_plugin_active( $plugin_path ) && $main_plugin . '.php' !== $plugin_path ) {
// set cta data of active plugins.
$plugins[ $cat ]['plugins'][ $plugin ]['cta'] = [
'text' => 'Activated',
'text' => __( 'Activated', '%domain%' ),
'url' => '#',
];

Expand Down Expand Up @@ -106,7 +106,7 @@ public function filter_plugins_by_activation( array $plugins, string $main_plugi

// Set Installation link.
$plugins[ $cat ]['plugins'][ $plugin ]['cta'] = [
'text' => 'Install',
'text' => __( 'Install', '%domain%' ),
'url' => $install_activate_url,
];

Expand All @@ -115,7 +115,7 @@ public function filter_plugins_by_activation( array $plugins, string $main_plugi
$url = 'https://wp-rocket.me/?utm_source=' . $wpr_referrer . '-coupon&utm_medium=plugin&utm_campaign=' . $wpr_referrer;

$plugins[ $cat ]['plugins'][ $plugin ]['cta'] = [
'text' => 'Get it Now',
'text' => __( 'Get it Now', '%domain%' ),
'url' => $url,
];

Expand All @@ -124,7 +124,7 @@ public function filter_plugins_by_activation( array $plugins, string $main_plugi

// Set activation text.
if ( file_exists( WP_PLUGIN_DIR . '/' . $plugin_path ) ) {
$plugins[ $cat ]['plugins'][ $plugin ]['cta']['text'] = 'Activate';
$plugins[ $cat ]['plugins'][ $plugin ]['cta']['text'] = __( 'Activate', '%domain%' );

if ( 'wp-rocket/wp-rocket' === $plugin ) {
$plugins[ $cat ]['plugins'][ $plugin ]['cta']['url'] = $install_activate_url;
Expand Down
26 changes: 13 additions & 13 deletions src/Model/wp_media_plugins.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,61 +5,61 @@

return [
'optimize_performance' => [
'title' => 'Optimize Performance',
'title' => __( 'Optimize Performance', '%domain%' ),
'plugins' => [
'wp-rocket/wp-rocket' => [
'logo' => [
'file' => 'logo-wp-rocket.svg',
'width' => '50%',
],
'title' => 'Speed Up Your Website, Instantly',
'desc' => 'WP Rocket is the easiest way to make your WordPress website faster and boost your Google PageSpeed score. Get more traffic, better engagement, and higher conversions effortlessly.',
'title' => __( 'Speed Up Your Website, Instantly', '%domain%' ),
'desc' => __( 'WP Rocket is the easiest way to make your WordPress website faster and boost your Google PageSpeed score. Get more traffic, better engagement, and higher conversions effortlessly.', '%domain%' ),
'link' => '',
],
'imagify/imagify' => [
'logo' => [
'file' => 'logo-imagify.svg',
'width' => '50%',
],
'title' => 'Speed Up Your Website With Lighter Images',
'desc' => 'Imagify is the easiest WordPress image optimizer. It automatically compresses images, converts them to WebP and AVIF formats, and lets you resize and optimize with just one click!',
'title' => __( 'Speed Up Your Website With Lighter Images', '%domain%' ),
'desc' => __( 'Imagify is the easiest WordPress image optimizer. It automatically compresses images, converts them to WebP and AVIF formats, and lets you resize and optimize with just one click!', '%domain%' ),
'link' => 'https://imagify.io/',
],
],
],
'boost_traffic' => [
'title' => 'Boost Traffic',
'title' => __( 'Boost Traffic', '%domain%' ),
'plugins' => [
'seo-by-rank-math/rank-math' => [
'logo' => [
'file' => 'logo-rank-math.svg',
'width' => '60%',
],
'title' => 'The Swiss Army Knife of SEO Tools',
'desc' => 'Rank Math SEO is the Best WordPress SEO plugin with the features of many SEO and AI SEO tools in a single package to help multiply your SEO traffic.',
'title' => __( 'The Swiss Army Knife of SEO Tools', '%domain%' ),
'desc' => __( 'Rank Math SEO is the Best WordPress SEO plugin with the features of many SEO and AI SEO tools in a single package to help multiply your SEO traffic.', '%domain%' ),
'link' => 'https://rankmath.com/wordpress/plugin/seo-suite/',
],
],
],
'protect_secure' => [
'title' => 'Protect & Secure',
'title' => __( 'Protect & Secure', '%domain%' ),
'plugins' => [
'backwpup/backwpup' => [
'logo' => [
'file' => 'logo-backwpup.svg',
'width' => '60%',
],
'title' => 'The Easiest Way to Protect Your Website',
'desc' => 'BackWPup is the most comprehensive and user-friendly backup & restore plugin for WordPress. Easily schedule automatic backups, securely store and restore with just a few clicks!',
'title' => __( 'The Easiest Way to Protect Your Website', '%domain%' ),
'desc' => __( 'BackWPup is the most comprehensive and user-friendly backup & restore plugin for WordPress. Easily schedule automatic backups, securely store and restore with just a few clicks!', '%domain%' ),
'link' => 'https://backwpup.com/',
],
'uk-cookie-consent/uk-cookie-consent' => [
'logo' => [
'file' => 'logo-termly.svg',
'width' => '50%',
],
'title' => 'GDPR/CCPA Cookie Consent Banner',
'desc' => 'One of the easiest, most comprehensive, and popular cookie consent plugins available. Google Gold Certified Partner to quickly comply with data privacy laws from around the world.',
'title' => __( 'GDPR/CCPA Cookie Consent Banner', '%domain%' ),
'desc' => __( 'One of the easiest, most comprehensive, and popular cookie consent plugins available. Google Gold Certified Partner to quickly comply with data privacy laws from around the world.', '%domain%' ),
'link' => 'https://termly.io/resources/articles/wordpress-cookies-guide/',
],
],
Expand Down
93 changes: 93 additions & 0 deletions src/PostInstall.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
<?php
remyperona marked this conversation as resolved.
Show resolved Hide resolved

namespace WPMedia\PluginFamily;

use Composer\Script\Event;

class PostInstall {

/**
* Array of files to update.
*
* @var array
*/
private static $files = [
'PluginFamily',
'wp_media_plugins',
];

/**
* Updates domain text for package after composer update or install.
*
* @param Event $event Composer event.
* @return void
*/
public static function apply_text_domain( Event $event ) {

$output = $event->getIO();
$composer = $event->getComposer();
$extra = $composer->getPackage()->getExtra();

if ( ! isset( $extra['plugin_domain'] ) ) {
$output->writeError( self::colorize( 'Plugin domain is not set in the composer extra configuration.', 'red' ) );
return;
}

foreach ( self::$files as $file ) {
// Construct file path.
$path = __DIR__ . '/Model/' . $file . '.php';

if ( ! file_exists( $path ) ) {
$output->writeError( self::colorize( 'Could not find file: ' . $path . ', Does it exist?', 'red' ) );
return;
}

// Get file contents.
$content = file_get_contents( $path );

if ( false === $content ) {
$output->writeError( self::colorize( 'Failed to read the file: ' . $path, 'red' ) );
return;
}

// Update file content.
$updated_content = str_replace( '%domain%', $extra['plugin_domain'], $content );
$result = file_put_contents( $path, $updated_content );

if ( false === $result ) {
$output->writeError( self::colorize( 'Failed to write the updated content to the file: ' . $path, 'red' ) );
return;
}
}

// Output success feed.
$output->write( self::colorize( 'Text domain has been updated.', 'green' ) );

// Path to this script.
$script = __FILE__;

// Delete script after execution.
register_shutdown_function( function () use ( $script ) {
if ( file_exists( $script ) ) {
unlink( $script );
}
});
}

/**
* This function colorizes a given string with a specified color for console output.
*
* @param string $message String message to pass.
* @param string $color Color on the console.
* @return string
*/
private static function colorize( string $message, string $color ): string {
$colors = [
'red' => "\033[31m",
'green' => "\033[32m",
'reset' => "\033[0m",
];

return $colors[$color] . $message . $colors['reset'];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ public function tear_down() {
* @dataProvider configTestData
*/
public function testShouldReturnExpected( $config, $expected ) {
$this->stubTranslationFunctions();
$this->config = $config;

if ( 'both' === $config['order'] ) {
Expand Down
Loading