Plugin Directory

Changeset 3172037


Ignore:
Timestamp:
10/19/2024 04:13:20 PM (18 months ago)
Author:
janiko
Message:

Full rebuild

Location:
style-genre/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • style-genre/trunk/languages/style-genre-fr_FR.po

    r3171909 r3172037  
     1msgid ""
     2msgstr ""
     3"Project-Id-Version: Style Genre 1.0\n"
     4"Content-Type: text/plain; charset=UTF-8\n"
     5"Content-Transfer-Encoding: 8bit\n"
     6"Language: fr_FR\n"
     7
     8#: style-genre.php:21
    19msgid "Style Genre"
    210msgstr "Style Genre"
    311
    4 msgid "Style Genre - Replace parts of translations"
    5 msgstr "Style Genre - Remplacer des parties des traductions"
     12#: style-genre.php:22
     13msgid "Style Genre Settings"
     14msgstr "Paramètres de Style Genre"
    615
    7 msgid "Override Translations"
    8 msgstr "Remplacer des traductions"
     16#: style-genre.php:41
     17msgid "Substitution rules saved successfully!"
     18msgstr "Règles de substitution enregistrées avec succès !"
    919
    10 msgid "Parts of Translations to Override"
    11 msgstr "Parties des traductions à remplacer"
     20#: style-genre.php:50
     21msgid "Substitution Rules (e.g., \"autrice|auteure\"):"
     22msgstr "Règles de Substitution (ex : \"autrice|auteure\") :"
    1223
    13 msgid "Enter the part of text to be replaced and the new text, in the format:"
    14 msgstr "Entrez la partie du texte à remplacer et le nouveau texte, au format :"
     24#: style-genre.php:52
     25msgid "Enter each substitution as \"original_text|replacement_text\" separated by commas."
     26msgstr "Entrez chaque substitution sous forme de \"texte_original|texte_de_remplacement\" séparés par des virgules."
     27
     28#: style-genre.php:53
     29msgid "Save Changes"
     30msgstr "Enregistrer les modifications"
     31
     32#: style-genre.php:76
     33msgid "Run Substitution Now"
     34msgstr "Exécuter la Substitution Maintenant"
     35
     36#: style-genre.php:78
     37msgid "Substitutions applied successfully!"
     38msgstr "Substitutions appliquées avec succès !"
     39
     40#: style-genre.php:80
     41msgid "No substitutions applied. Please check your rules."
     42msgstr "Aucune substitution appliquée. Veuillez vérifier vos règles."
  • style-genre/trunk/readme.txt

    r3171909 r3172037  
    55Requires PHP: 7.0
    66Tested up to: 6.6.2
    7 Stable tag: 1.2.0
     7Stable tag: 1.3.0
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
     
    4343== Changelog ==
    4444
     45= 1.3.0 =
     46* Complete rebuild
     47
    4548= 1.2.0 =
    4649* Rebuild and shell script added (cron)
  • style-genre/trunk/style-genre.php

    r3171909 r3172037  
    11<?php
     2
    23/**
    34 * Style Genre
     
    1213 * Plugin URI:        https://profiles.wordpress.org/janiko/#content-plugins
    1314 * Description:       This extension helps you to modify some parts of the translations.
    14  * Version:           1.2.0
     15 * Version:           1.3.0
    1516 * Requires at least: 5.2
    1617 * Requires PHP:      7.2
     
    3435
    3536
    36 // If this file is called directly, abort.
    37 if ( ! defined( 'WPINC' ) ) {
    38     die;
    39 }
    40 
    41 /**
    42  * Currently plugin version.
    43  * Start at version 1.0.0 and use SemVer - https://semver.org
    44  * Rename this for your plugin and update it as you release new versions.
    45  */
    46 define( 'STYLE_GENRE_VERSION', '1.2.0' );
    4737// Sécurité : empêcher un accès direct au fichier.
    4838if (!defined('ABSPATH')) {
     
    5040}
    5141
    52 // Charger les fichiers de traduction
     42// Charger les fichiers de traduction pour le plugin
    5343function style_genre_load_textdomain() {
    54     load_plugin_textdomain('style-genre', false, basename(dirname(__FILE__)) . '/languages');
     44    load_plugin_textdomain('style-genre', false, dirname(plugin_basename(__FILE__)) . '/languages/');
    5545}
    5646add_action('plugins_loaded', 'style_genre_load_textdomain');
    5747
    58 // Fonction pour charger la page d'options du plugin.
     48// Créer une page d'administration pour configurer les paramètres
    5949function style_genre_menu() {
    60     add_options_page(
    61         esc_attr__('Style Genre', 'style-genre'),                     // Titre de la page
    62         esc_attr__('Style Genre', 'style-genre'),                     // Texte du menu
    63         'manage_options',                                     // Capability requis
    64         'style-genre',                                        // Slug de la page
    65         'style_genre_options_page'                            // Fonction callback
     50    add_menu_page(
     51        esc_attr__('Style Genre', 'style-genre'),
     52        esc_attr__('Style Genre', 'style-genre'),
     53        'manage_options',
     54        'style-genre-settings',
     55        'style_genre_settings_page',
     56        'dashicons-translation',
     57        90
    6658    );
    6759}
    6860add_action('admin_menu', 'style_genre_menu');
    6961
    70 // Fonction pour afficher la page d'options.
    71 function style_genre_options_page() {
     62// Affichage de la page d'administration pour configurer les substitutions
     63function style_genre_settings_page() {
     64    if (!current_user_can('manage_options')) {
     65        return;
     66    }
     67
     68    if (isset($_POST['save_substitution_rules'])) {
     69        check_admin_referer('style_genre_save_settings');
     70        if (isset($_POST['substitution_rules'])) {
     71            $substitution_rules = sanitize_text_field(wp_unslash($_POST['substitution_rules']));
     72            update_option('style_genre_substitution_rules', $substitution_rules);
     73            echo '<div class="notice notice-success is-dismissible"><p>' . esc_attr__('Substitution rules saved successfully!', 'style-genre') . '</p></div>';
     74        }
     75    }
     76       
     77    $substitution_rules = get_option('style_genre_substitution_rules', 'autrice|auteure, Autrice|Autrice');
    7278    ?>
    7379    <div class="wrap">
    74         <h1><?php esc_attr_e('Style Genre - Replace parts of translations', 'style-genre'); ?></h1>
    75         <form method="post" action="options.php">
    76             <?php
    77             settings_fields('style_genre_group');
    78             do_settings_sections('style-genre');
    79             submit_button();
    80             ?>
     80        <h1><?php esc_attr_e('Style Genre Settings', 'style-genre'); ?></h1>
     81        <form method="post">
     82            <?php wp_nonce_field('style_genre_save_settings'); ?>
     83            <label for="substitution_rules"><?php esc_attr_e('Substitution Rules (e.g., "autrice|auteure"):', 'style-genre'); ?></label>
     84            <textarea id="substitution_rules" name="substitution_rules" rows="5" class="large-text"><?php echo esc_textarea($substitution_rules); ?></textarea>
     85            <p><?php esc_attr_e('Enter each substitution as "original_text|replacement_text" separated by commas.', 'style-genre'); ?></p>
     86            <input type="submit" name="save_substitution_rules" class="button-primary" value="<?php esc_attr_e('Save Changes', 'style-genre'); ?>">
     87        </form>
     88
     89        <h2><?php esc_attr_e('Manual Substitution', 'style-genre'); ?></h2>
     90        <form method="post">
     91            <?php wp_nonce_field('execute_substitution_nonce'); ?>
     92            <input type="submit" name="execute_substitution" class="button-primary" value="<?php esc_attr_e('Run Substitution Now', 'style-genre'); ?>">
    8193        </form>
    8294    </div>
     
    8496}
    8597
    86 // Fonction pour enregistrer les paramètres du plugin.
    87 function style_genre_settings_init() {
    88     register_setting('style_genre_group', 'style_genre_replacements');
     98// Fonction pour appliquer les substitutions sur les fichiers de traduction
     99function apply_style_genre_substitution() {
     100    // Initialiser le système de fichiers WordPress
     101    if (!function_exists('WP_Filesystem')) {
     102        require_once ABSPATH . 'wp-admin/includes/file.php';
     103    }
    89104
    90     add_settings_section(
    91         'style_genre_section',
    92         esc_attr__('Override Translations', 'style-genre'),
    93         'style_genre_section_callback',
    94         'style-genre'
    95     );
     105    // Prépare l'accès au WP_Filesystem global
     106    global $wp_filesystem;
     107    WP_Filesystem();
    96108
    97     add_settings_field(
    98         'style_genre_field',
    99         esc_attr__('Parts of Translations to Override', 'style-genre'),
    100         'style_genre_field_callback',
    101         'style-genre',
    102         'style_genre_section'
    103     );
    104 }
    105 add_action('admin_init', 'style_genre_settings_init');
     109    // Récupérer les règles de substitution
     110    $substitution_rules = get_option('style_genre_substitution_rules', '');
    106111
    107 // Callback pour la description de la section.
    108 function style_genre_section_callback() {
    109     echo '<p>' . esc_attr__('Enter the part of text to be replaced and the new text, in the format:', 'style-genre') . ' <code>part_to_replace|new_text</code>.</p>';
     112    if (!empty($substitution_rules)) {
     113        $rules = array_map('trim', explode(',', $substitution_rules));
     114
     115        // Récupérer les fichiers à modifier (.po, .mo, .php)
     116        $translation_files = glob(ABSPATH . 'wp-content/languages/*.{po,mo,php}', GLOB_BRACE);
     117        $theme_translation_files = glob(ABSPATH . 'wp-content/languages/themes/*.{po,mo,php}', GLOB_BRACE);
     118
     119        // Appliquer les substitutions dans chaque fichier
     120        foreach (array_merge($translation_files, $theme_translation_files) as $file) {
     121            // Lire le contenu du fichier avec WP_Filesystem
     122            $content = $wp_filesystem->get_contents($file);
     123            if ($content === false) {
     124                continue; // Si la lecture échoue, passer au fichier suivant
     125            }
     126
     127            // Appliquer les substitutions
     128            foreach ($rules as $rule) {
     129                list($search, $replace) = array_map('trim', explode('|', $rule));
     130                $content = str_replace($search, $replace, $content);
     131            }
     132
     133            // Enregistrer les modifications avec WP_Filesystem
     134            $wp_filesystem->put_contents($file, $content);
     135        }
     136        return true;
     137    }
     138    return false;
    110139}
    111140
    112 // Callback pour afficher le champ d'options.
    113 function style_genre_field_callback() {
    114     // Valeurs par défaut pour les remplacements.
    115     $default_replacements = "autrice|auteure\nAutrice|Autrice";
    116     $replacements = get_option('style_genre_replacements', $default_replacements);
    117     echo '<textarea name="style_genre_replacements" rows="10" cols="50" class="large-text">' . esc_textarea($replacements) . '</textarea>';
    118 }
    119141
    120 // Fonction pour remplacer les parties de traductions.
    121 function style_genre_override($translation, $text, $domain) {
    122     // Valeurs par défaut pour les remplacements si aucune option n'est définie.
    123     $default_replacements = "autrice|auteure\nAutrice|Autrice";
    124     $replacements = get_option('style_genre_replacements', $default_replacements);
     142// Ajouter un bouton pour exécuter la substitution manuellement
     143function add_manual_style_genre_button() {
     144    if (isset($_POST['execute_substitution'])) {
     145        check_admin_referer('execute_substitution_nonce');
    125146
    126     // Si des remplacements existent, les appliquer.
    127     if (!empty($replacements)) {
    128         $lines = explode("\n", $replacements);
    129         foreach ($lines as $line) {
    130             list($old_part, $new_part) = array_map('trim', explode('|', $line));
    131             if (strpos($translation, $old_part) !== false) {
    132                 // Remplacer uniquement la partie du texte trouvée.
    133                 $translation = str_replace($old_part, $new_part, $translation);
    134             }
     147        // Ajouter un message de débogage pour voir si la soumission est capturée
     148        if (apply_style_genre_substitution()) {
     149            echo '<div class="notice notice-success is-dismissible"><p>' . esc_html__('Substitutions applied successfully!', 'style-genre') . '</p></div>';
     150        } else {
     151            echo '<div class="notice notice-error is-dismissible"><p>' . esc_html__('No substitutions applied. Please check your rules.', 'style-genre') . '</p></div>';
    135152        }
    136153    }
     154}
     155add_action('admin_notices', 'add_manual_style_genre_button');
    137156
    138     return $translation;
     157// Hook pour déclencher la substitution après une mise à jour des traductions
     158function run_style_genre_substitution_after_translation_update($upgrader, $hook_extra) {
     159    if (isset($hook_extra['type']) && $hook_extra['type'] === 'translation') {
     160        apply_style_genre_substitution();
     161    }
    139162}
    140 add_filter('gettext', 'style_genre_override', 10, 3);
     163add_action('upgrader_process_complete', 'run_style_genre_substitution_after_translation_update', 10, 2);
Note: See TracChangeset for help on using the changeset viewer.