Nov 24
 

Source de la version 1.0.1 du fichier random_number_generator.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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
<?php
/*
Plugin Name: Random Number Generator
Plugin URI: http://blogs.wittwer.fr/whiler/2009/11/24/random-number-generator/
Description: Generates a random number (for instance, useful to avoid browsers links cache)
Version: 1.0.1
Author: Whiler
Author URI: http://william.wittwer.fr/
*/


// Interdit les appels directs à la page
if (!function_exists("get_option")) {
  echo 'SIG'; // Silence is golden
  die;
}

// Clé utilisée pour le tag à détecter dans les articles/pages/commentaires [random-number] (not a constant... users can maybe update it in a future release)
$random_number_generator_key = 'random-number';

// Charge le fichier de traduction s'il existe
load_plugin_textdomain('random_number_generator', '', plugin_basename(dirname(__FILE__).'/languages'));

/**
 * Fonction qui valide les paramètres avant de les renvoyer par référence
 * @param integer &$random_number_generator_from   Valeur minimale
 * @param integer &$random_number_generator_to     Valeur maximale
 * @param string  &$random_number_generator_format Format utilisé pour l'affichage
 */

function validate_data(&$random_number_generator_from, &$random_number_generator_to, &$random_number_generator_format) {
  // Validation de la cohérence des valeurs
  if (($random_number_generator_from == $random_number_generator_to) || ($random_number_generator_from > $random_number_generator_to)) {
    $random_number_generator_from = 0;
    $random_number_generator_to   = mt_getrandmax();
  }
  if (($random_number_generator_format == null) || (trim($random_number_generator_format) == '')) {
    $random_number_generator_format = "%x";
  }
}

/**
 * Fonction appelée à l'activation de l'extension
 */

function random_number_generator_install() {
  // Ajout des valeurs par défaut
  add_option('random_number_generator_from', 0);
  add_option('random_number_generator_to', mt_getrandmax());
  add_option('random_number_generator_format', "%x");
}

/**
 * Fonction affichant la page de réglage des options
 */

function random_number_generator_optionsPage() {
  // Récupération des paramètres depuis les options de WP
  $random_number_generator_from   = get_option('random_number_generator_from');
  $random_number_generator_to     = get_option('random_number_generator_to');
  $random_number_generator_format = get_option('random_number_generator_format');
  validate_data($random_number_generator_from, $random_number_generator_to, $random_number_generator_format);
?>
<div class="wrap">
  <h2><?php /*Tr.: Settings page title / %s: Plugin name*/ printf(str_replace('%s', '<strong>%s</strong>', __('%s Options', 'random_number_generator')), 'Random Number Generator'); ?></h2>
  <form method="post" action="options.php">
    <?php wp_nonce_field('update-options'); ?>
    <table class="form-table">
      <tr valign="top">
        <th  colspan="2" scope="row">
          <?php global $random_number_generator_key; printf(__('Simply replace the tag %s by a random number.', 'random_number_generator'), "<code>[$random_number_generator_key]</code>"); ?><br/>
          <span class="description"><?php printf(__('Used to avoid browsers cache by inserting a random number. For instance, %1$s generates %2$s.', 'random_number_generator'), "<code>&lt;a href="http://".__('my_url', 'random_number_generator')."?[$random_number_generator_key]"&gt;</code>", "<code>&lt;a href="http://".__('my_url', 'random_number_generator')."?<span style="color:black;font-size:medium;font-weight:bold;">".do_shortcode("[$random_number_generator_key]")."</span>"&gt;</code>"); ?></span>
        </th>
      </tr>
      <tr valign="top">
        <th scope="row" style="text-align: right;">
          <?php _e('From:', 'random_number_generator') ?>
        </th>
        <td>
          <input type="text" name="random_number_generator_from" value="<?php echo $random_number_generator_from; ?>" />
          <a class="button" title="<?php _e('Dispay more details', 'random_number_generator') ?>" onclick="javascript:switchVisibility('random_number_generator_from_help');"><?php /*Tr.: Button caption for help*/ _e('?', 'random_number_generator'); ?></a>
          <span id="random_number_generator_from_help" style="text-align: left; display: none;"> <?php printf(__('Lowest integer value to be returned (default: <code>%d</code>).', 'random_number_generator'), 0); ?></span>
        </td>
      </tr>
      <tr valign="top">
        <th scope="row" style="text-align: right;">
          <?php _e('To:', 'random_number_generator'); ?>
        </th>
        <td>
          <input type="text" name="random_number_generator_to" value="<?php echo $random_number_generator_to; ?>" />
          <a class="button" title="<?php _e('Dispay more details', 'random_number_generator') ?>" onclick="javascript:switchVisibility('random_number_generator_to_help');"><?php _e('?', 'random_number_generator'); ?></a>
          <span id="random_number_generator_to_help" style="text-align: left; display: none;"> <?php printf(__('Highest integer value to be returned (default: <code>%d</code>).', 'random_number_generator'), mt_getrandmax()); ?></span>
        </td>
      </tr>
      <tr valign="top">
        <th scope="row" style="text-align: right;">
          <?php _e('Format:', 'random_number_generator') ?>
        </th>
        <td>
          <input type="text" name="random_number_generator_format" value="<?php echo $random_number_generator_format; ?>" />
          <a class="button" title="<?php _e('Dispay more details', 'random_number_generator') ?>" onclick="javascript:switchVisibility('random_number_generator_format_help');"><?php _e('?', 'random_number_generator'); ?></a>
          <span id="random_number_generator_format_help" style="text-align: left; display: none;"> <?php printf(__('Random number produced according to the formatting string above (default: <code>%s</code>).', 'random_number_generator'), '%x'); ?><br/>
          <?php printf(__('See %s documentation for a description of format.', 'random_number_generator'), '<a href="'.__('http://www.php.net/manual/en/function.sprintf.php', 'random_number_generator').'" target"_blank" title="'.__('Visit PHP: sprintf - Manual page', 'random_number_generator').'">sprintf()</a>'); ?></span>
        </td>
      </tr>
    </table>
    <input type="hidden" name="action" value="update" />
    <input type="hidden" name="page_options" value="random_number_generator_from,random_number_generator_to,random_number_generator_format" />
    <?php settings_fields( 'random_number_generator' ); ?>
    <p class="submit">
      <input type="submit" class="button-primary" value="<?php _e('Save Changes', 'random_number_generator') ?>" />
    </p>
  </form>
</div>
<?php
}

/**
 * Fonction ajoutant un lien pour la page des options dans la liste des extensions
 * @param string $links Lien en cours
 * @param string $file Extension en cours
 * @return HTML
 */

function random_number_generator_plugin_action_links($links, $file) {
  if ($file == plugin_basename(dirname(__FILE__).'/random_number_generator.php')){
    //Le commentaire ci-dessous est extrait par Poedit pour être mis dans les commentaires afin d'aider à la traduction
    //Tr.: Below the plugin name, in the plugin page
    $settings_link = "<a href='options-general.php?page=".plugin_basename(dirname(__FILE__).'/random_number_generator.php')."'>".__('Settings','random_number_generator')."</a>";
    array_unshift( $links, $settings_link );
  }
  return $links;
}

/**
 * Fonction ajoutant les scripts nécessaires dans les réglages de l'extension
 */

function random_number_generator_scripts() {
  wp_enqueue_script('random_number_generator_script1', WP_PLUGIN_URL.'/'.str_replace(".php",".js",plugin_basename(__FILE__)));
//  wp_enqueue_script('random_number_generator_script2', 'my2ndScript', array('jquery', 'jquery-ui-tabs'));
}

/**
 * Fonction ajoutant un lien dans le menu Réglages pour la page des options de l'extension
 */

function random_number_generator_settings_menu() {
  if (function_exists('add_submenu_page')) {
    //Tr.: Settings menu plugin caption
    $random_number_generator_settings_page = add_submenu_page('options-general.php',__('Rand#Gen.','random_number_generator'), __('Rand#Gen.','random_number_generator'), "install_plugins", __FILE__, 'random_number_generator_optionsPage');
    // Ajoute les scripts JavaScript utilisés par les pages d'administration de l'extension
    add_action( "admin_print_scripts-$random_number_generator_settings_page", 'random_number_generator_scripts' );
  }
}

/**
 * Fonction qui répertorie les paramètres de l'extension et les méthodes de callback(validation)
 */

function register_random_number_generator_settings() { // whitelist options
  register_setting( 'random_number_generator', 'random_number_generator_from', 'intval' ); // Valeur entière uniquement
  register_setting( 'random_number_generator', 'random_number_generator_to', 'intval' );
  register_setting( 'random_number_generator', 'random_number_generator_format', 'wp_filter_nohtml_kses' ); // HTML interdit
}


/**
 * Fonction renvoyant un chiffre aléatoire
 * @param string $atts Attributs éventuellement passés dans le tag
 * @param string $content Format à utiliser si encapsulé par le tag
 * @return HTML
 */

function random_number_generator_shortcode_handler($atts, $content) {
  // $atts    ::= array of attributes
  // $content ::= text within enclosing form of shortcode element
  // $code    ::= the shortcode found, when == callback name
  // examples: [my-shortcode]
  //           [my-shortcode/]
  //           [my-shortcode foo='bar']
  //           [my-shortcode foo='bar'/]
  //           [my-shortcode]content[/my-shortcode]
  //           [my-shortcode foo='bar']content[/my-shortcode]
 
  // [random-number from="2" to="72" format="%b"]%d minutes[/random-number]
  // output:   an integer value between 2 & 72 followed by the word 'minutes'
  // affiche : une valeur entière entre 2 & 72 suivie du mot 'minutes'

  // Récupération des paramètres depuis les options de WP
  $random_number_generator_from   = get_option('random_number_generator_from');
  $random_number_generator_to     = get_option('random_number_generator_to');
  $random_number_generator_format = get_option('random_number_generator_format');

  // Récupération des paramètres éventuels avec les options sauvegardées comme valeur par défaut
  extract(shortcode_atts(array('from' => $random_number_generator_from, 'to' => $random_number_generator_to, 'format' => $random_number_generator_format), $atts));

  // Si on a entouré du texte avec la balise, c'est que ce texte est LE format à utiliser
  // Il devrait contenir un champ de spécification pour afficher le nombre aléatoire
  if ($content != "") {
    $format = $content;
  }

  // Valide les différentes options
  validate_data($from, $to, $format);
  // Génération aléatoire
  mt_srand();
  // Renvoie un nombre aléatoire
  return sprintf($format, mt_rand($from, $to));
}

// Ajout du hook pour détecter/remplacer le mot-clé lorsqu'il est utilisé
add_shortcode($random_number_generator_key, 'random_number_generator_shortcode_handler');

// Si on est administrateur
if (is_admin()) {
  // Méthode à appeler lors de l'activation de l'extension
  register_activation_hook(__FILE__, "random_number_generator_install");
  // Méthode à appeler lors de la génération du menu d'admin
  add_action('admin_menu', 'random_number_generator_settings_menu');
  // Méthode à appeler lors de l'accès à l'administration
  add_action('admin_init', 'register_random_number_generator_settings' );
  // Méthode à appeler lors de l'affichage des liens d'action sur la page des extensions installées
  add_filter('plugin_action_links', 'random_number_generator_plugin_action_links', 10, 2);
}

?>

On remarquera que je fais également appel à la fonction do_shortcode() pour afficher un exemple avec les valeurs choisies dans la page de réglages des options. |-(

Le code source est disponible sur les serveurs SVN de WordPress ou sur la page des extensions.

Share

Pages : 1 2

Lien permanent vers Random Number Generator 1.0 Rédigé par Whiler \\ Tags : , , , , , , , , ,

Laisser une réponse

(requis)

(requis)

*

Notifiez-moi les commentaires à venir via email. Vous pouvez aussi vous abonner sans commenter.

;) (lol) (y) |-( (hi) 8-) (angel) :s (clap) (bow) (tmi) (:| plus »

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.