Cimy User Extra Fields - Version 2.7.0

Version Description

Download this release

Release Info

Developer Cimmo
Plugin Icon wp plugin Cimy User Extra Fields
Version 2.7.0
Comparing to
See all releases

Code changes from version 2.6.5 to 2.7.0

README_OFFICIAL.txt CHANGED
@@ -108,10 +108,10 @@ BEFORE writing to me read carefully ALL the documentation AND the FAQ. Missing t
108
  Bugs or suggestions can be mailed at: cimmino.marco@gmail.com
109
 
110
  REQUIREMENTS:
111
- * PHP >= 5.0.0
112
- * WORDPRESS >= 3.1.x
113
- * WORDPRESS MultiSite >= 3.1.x
114
- * MYSQL >= 4.1.2
115
 
116
  INSTALLATION:
117
  - WordPress: just copy whole cimy-user-extra-fields subdir into your plug-in directory and activate it
@@ -631,6 +631,15 @@ A lot of times I cannot reproduce the problem and I need more details, so if you
631
 
632
 
633
  CHANGELOG:
 
 
 
 
 
 
 
 
 
634
  v2.6.5 - 11/05/2015
635
  - Fixed PHP error on Extended Users on WordPress 4.2 (thanks to Ryan Marshall and Josie Stauffer)
636
  - Fixed PHP notice on cimy_uef_functions.php at line 673 when using avatar Extra Field (thanks to rossini7777)
108
  Bugs or suggestions can be mailed at: cimmino.marco@gmail.com
109
 
110
  REQUIREMENTS:
111
+ * PHP >= 5.2.4
112
+ * WORDPRESS >= 4.3.1
113
+ * WORDPRESS MultiSite >= 4.3.1
114
+ * MYSQL >= 5.0
115
 
116
  INSTALLATION:
117
  - WordPress: just copy whole cimy-user-extra-fields subdir into your plug-in directory and activate it
631
 
632
 
633
  CHANGELOG:
634
+ v2.7.0 - 19/01/2016
635
+ - Fixed welcome email for new users, broken since WordPress 4.3 (thanks to Paul Yuen, Chris Norton and more)
636
+ - Fixed password change email is no longer sent if user chose its own password during registration
637
+ - Fixed 'Strict Standards' warnings on Users Extended and plug-in's options
638
+ - Dropped support for WordPress 4.2 or below
639
+ - Updated Danish (Michael Ugilt)
640
+ - Updated French (Damien Cottet)
641
+ - Updated Securimage Captcha to v3.6.2
642
+
643
  v2.6.5 - 11/05/2015
644
  - Fixed PHP error on Extended Users on WordPress 4.2 (thanks to Ryan Marshall and Josie Stauffer)
645
  - Fixed PHP notice on cimy_uef_functions.php at line 673 when using avatar Extra Field (thanks to rossini7777)
cimy_uef_admin.php CHANGED
@@ -8,7 +8,7 @@ function cimy_admin_define_extra_fields() {
8
  // if (!empty($_POST))
9
  // print_r($_POST);
10
 
11
- $role = & get_role('administrator');
12
  $role->add_cap('view_cimy_extra_fields');
13
 
14
  $errors = Array();
@@ -1273,7 +1273,7 @@ function cimy_admin_users_list_page() {
1273
  'per_page' => $users_per_page,
1274
  ));
1275
  }
1276
- function bulk_actions() {}
1277
  function extra_tablenav($which) {
1278
  if ('top' != $which)
1279
  return;
@@ -1366,7 +1366,7 @@ function cimy_admin_users_list_page() {
1366
  'per_page' => $users_per_page,
1367
  ));
1368
  }
1369
- function bulk_actions() {}
1370
  function extra_tablenav($which) {
1371
  if ('top' != $which)
1372
  return;
8
  // if (!empty($_POST))
9
  // print_r($_POST);
10
 
11
+ $role = get_role('administrator');
12
  $role->add_cap('view_cimy_extra_fields');
13
 
14
  $errors = Array();
1273
  'per_page' => $users_per_page,
1274
  ));
1275
  }
1276
+ function bulk_actions( $which = '' ) {}
1277
  function extra_tablenav($which) {
1278
  if ('top' != $which)
1279
  return;
1366
  'per_page' => $users_per_page,
1367
  ));
1368
  }
1369
+ function bulk_actions( $which = '' ) {}
1370
  function extra_tablenav($which) {
1371
  if ('top' != $which)
1372
  return;
cimy_uef_email_handler.php CHANGED
@@ -7,24 +7,36 @@ if ( !function_exists('wp_new_user_notification') ) :
7
  * @param int $user_id User ID
8
  * @param string $plaintext_pass Optional. The user's plaintext password
9
  */
10
- function wp_new_user_notification($user_id, $plaintext_pass = '') {
11
- if (isset($_POST["cimy_uef_wp_PASSWORD"]))
12
  delete_user_meta($user_id, 'default_password_nag');
 
 
 
 
13
 
14
  $options = cimy_get_options();
15
  if (!is_multisite()) {
16
  if (!$options["confirm_email"])
17
- wp_new_user_notification_original($user_id, $plaintext_pass, $options["mail_include_fields"], false, cimy_wpml_translate_string("a_opt_welcome_email", $options["welcome_email"]));
18
  // if confirmation email is enabled delete the default_password_nag but checks first if has not been done on top of this function!
19
  else if (!isset($_POST["cimy_uef_wp_PASSWORD"]))
20
  delete_user_meta($user_id, 'default_password_nag');
21
  }
22
- else
23
- wp_new_user_notification_original($user_id, $plaintext_pass, $options["mail_include_fields"]);
 
24
  }
25
  endif;
26
 
27
- function wp_new_user_notification_original($user_id, $plaintext_pass = '', $include_fields = false, $activation_data = false, $welcome_email = '') {
 
 
 
 
 
 
 
28
  $user = new WP_User($user_id);
29
 
30
  $user_login = stripslashes($user->user_login);
@@ -51,17 +63,39 @@ function wp_new_user_notification_original($user_id, $plaintext_pass = '', $incl
51
 
52
  @wp_mail($admin_email, sprintf(__('[%s] New User Registration'), $blogname), $message, $headers);
53
 
54
- if ( empty($plaintext_pass) )
55
  return;
 
56
 
57
- $welcome_email = str_replace("USERNAME", $user_login, $welcome_email);
58
- $welcome_email = str_replace("PASSWORD", $plaintext_pass, $welcome_email);
 
 
59
 
60
- if ($include_fields)
61
- $welcome_email .= cimy_uef_mail_fields($user, $activation_data);
62
- $welcome_email = str_replace("LOGINLINK", wp_login_url(), $welcome_email);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
 
64
- wp_mail($user_email, sprintf(__('[%s] Your username and password'), $blogname), $welcome_email, $headers);
65
  }
66
 
67
  function cimy_uef_mail_fields($user = false, $activation_data = false) {
@@ -295,7 +329,7 @@ function cimy_uef_activate_signup($key) {
295
  return new WP_Error( 'user_already_exists', __( 'That username is already activated.', $cimy_uef_domain), $signup);
296
 
297
  $options = cimy_get_options();
298
- wp_new_user_notification_original($user_id, $password, $options["mail_include_fields"], $meta, cimy_wpml_translate_string("a_opt_welcome_email", $options["welcome_email"]));
299
  return array('user_id' => $user_id, 'password' => $password, 'meta' => $meta);
300
  }
301
 
7
  * @param int $user_id User ID
8
  * @param string $plaintext_pass Optional. The user's plaintext password
9
  */
10
+ function wp_new_user_notification($user_id, $plaintext_pass = null, $notify = '') {
11
+ if (isset($_POST["cimy_uef_wp_PASSWORD"])) {
12
  delete_user_meta($user_id, 'default_password_nag');
13
+ if (!isset($plaintext_pass)) {
14
+ $plaintext_pass = $_POST["cimy_uef_wp_PASSWORD"];
15
+ }
16
+ }
17
 
18
  $options = cimy_get_options();
19
  if (!is_multisite()) {
20
  if (!$options["confirm_email"])
21
+ wp_new_user_notification_original($user_id, $plaintext_pass, $options["mail_include_fields"], false, cimy_wpml_translate_string("a_opt_welcome_email", $options["welcome_email"]), $notify);
22
  // if confirmation email is enabled delete the default_password_nag but checks first if has not been done on top of this function!
23
  else if (!isset($_POST["cimy_uef_wp_PASSWORD"]))
24
  delete_user_meta($user_id, 'default_password_nag');
25
  }
26
+ else {
27
+ wp_new_user_notification_original($user_id, $plaintext_pass, $options["mail_include_fields"], $notify);
28
+ }
29
  }
30
  endif;
31
 
32
+ add_filter('send_password_change_email', 'cimy_uef_send_password_change_email', 10, 3);
33
+
34
+ function cimy_uef_send_password_change_email($send, $user, $userdata) {
35
+ return empty($_POST["cimy_uef_wp_PASSWORD"]) ? true : false;
36
+ }
37
+
38
+ function wp_new_user_notification_original($user_id, $plaintext_pass = null, $include_fields = false, $activation_data = false, $welcome_email = '', $notify = '') {
39
+ global $wpdb, $wp_hasher;
40
  $user = new WP_User($user_id);
41
 
42
  $user_login = stripslashes($user->user_login);
63
 
64
  @wp_mail($admin_email, sprintf(__('[%s] New User Registration'), $blogname), $message, $headers);
65
 
66
+ if ( 'admin' === $notify || empty( $notify ) ) {
67
  return;
68
+ }
69
 
70
+ $message = str_replace("USERNAME", $user_login, $welcome_email);
71
+ if ( empty($plaintext_pass) ) {
72
+ // Generate something random for a password reset key.
73
+ $key = wp_generate_password( 20, false );
74
 
75
+ /** This action is documented in wp-login.php */
76
+ do_action( 'retrieve_password_key', $user->user_login, $key );
77
+
78
+ // Now insert the key, hashed, into the DB.
79
+ if ( empty( $wp_hasher ) ) {
80
+ require_once ABSPATH . WPINC . '/class-phpass.php';
81
+ $wp_hasher = new PasswordHash( 8, true );
82
+ }
83
+ $hashed = time() . ':' . $wp_hasher->HashPassword( $key );
84
+ $wpdb->update( $wpdb->users, array( 'user_activation_key' => $hashed ), array( 'user_login' => $user->user_login ) );
85
+
86
+ $pass_link = __('To set your password, visit the following address:') . "\r\n\r\n";
87
+ $pass_link .= '<' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user->user_login), 'login') . ">\r\n\r\n";
88
+ $message = str_replace("PASSWORD", $pass_link, $message);
89
+ } else {
90
+ $message = str_replace("PASSWORD", $plaintext_pass, $message);
91
+ }
92
+
93
+ if ($include_fields) {
94
+ $message .= cimy_uef_mail_fields($user, $activation_data);
95
+ }
96
+ $message = str_replace("LOGINLINK", wp_login_url(), $message);
97
 
98
+ wp_mail($user->user_email, sprintf(__('[%s] Your username and password info'), $blogname), $message);
99
  }
100
 
101
  function cimy_uef_mail_fields($user = false, $activation_data = false) {
329
  return new WP_Error( 'user_already_exists', __( 'That username is already activated.', $cimy_uef_domain), $signup);
330
 
331
  $options = cimy_get_options();
332
+ wp_new_user_notification_original($user_id, $password, $options["mail_include_fields"], $meta, cimy_wpml_translate_string("a_opt_welcome_email", $options["welcome_email"]), 'both');
333
  return array('user_id' => $user_id, 'password' => $password, 'meta' => $meta);
334
  }
335
 
cimy_uef_init_mce.php DELETED
@@ -1,155 +0,0 @@
1
- <?php
2
- // needed only in the registration page
3
- if (!empty($cimy_uef_register_page)) {
4
- $userid = isset($current_user) ? $current_user->ID : 0;
5
- ?>
6
- <script type='text/javascript'>
7
- var login_div = document.getElementById("login");
8
- login_div.style.width = "475px";
9
- login_div.style.margin = "7em auto";
10
- </script>
11
-
12
- <script type='text/javascript'>
13
- /* <![CDATA[ */
14
- userSettings = {
15
- url: "<?php echo esc_url(SITECOOKIEPATH); ?>",
16
- uid: "<?php echo $userid; ?>",
17
- time: "<?php echo time(); ?>",
18
- }
19
- try{convertEntities(userSettings);}catch(e){};
20
- /* ]]> */
21
- </script>
22
- <?php
23
- } else
24
- $userid = $get_user_id;
25
-
26
- // Set up init variables
27
- $mce_locale = ( '' == get_locale() ) ? 'en' : strtolower( substr(get_locale(), 0, 2) ); // only ISO 639-1
28
- $theme = "advanced";
29
- $language = isset($mce_locale) ? substr( $mce_locale, 0, 2 ) : 'en';
30
-
31
- $baseurl = get_option('siteurl') . '/wp-includes/js/tinymce';
32
-
33
- $https = ( isset($_SERVER['HTTPS']) && 'on' == strtolower($_SERVER['HTTPS']) ) ? true : false;
34
-
35
- if ( $https ) $baseurl = str_replace('http://', 'https://', $baseurl);
36
-
37
- $language . '", debug : false }, base : "' . $baseurl . '", suffix : "" };';
38
-
39
- $mce_spellchecker_languages = apply_filters('mce_spellchecker_languages', '+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv');
40
-
41
- $mce_css = $baseurl . '/wordpress.css';
42
- $mce_css = apply_filters('mce_css', $mce_css);
43
-
44
- if ( $https ) $mce_css = str_replace('http://', 'https://', $mce_css);
45
-
46
- $mce_buttons = apply_filters('mce_buttons', array('bold', 'italic', 'strikethrough', '|', 'bullist', 'numlist', 'blockquote', '|', 'justifyleft', 'justifycenter', 'justifyright', '|', 'link', 'unlink', 'image', 'wp_more', '|', 'spellchecker', 'fullscreen', 'wp_adv' ));
47
- $mce_buttons = implode($mce_buttons, ',');
48
-
49
- $mce_buttons_2 = apply_filters('mce_buttons_2', array('formatselect', 'underline', 'justifyfull', 'forecolor', '|', 'pastetext', 'pasteword', 'removeformat', '|', 'media', 'charmap', '|', 'outdent', 'indent', '|', 'undo', 'redo', 'wp_help' ));
50
- $mce_buttons_2 = implode($mce_buttons_2, ',');
51
-
52
- $mce_buttons_3 = apply_filters('mce_buttons_3', array());
53
- $mce_buttons_3 = implode($mce_buttons_3, ',');
54
-
55
- $mce_buttons_4 = apply_filters('mce_buttons_4', array());
56
- $mce_buttons_4 = implode($mce_buttons_4, ',');
57
-
58
- // $plugins = array( 'safari', 'inlinepopups', 'autosave', 'spellchecker', 'paste', 'media', 'fullscreen' );
59
- $plugins = array( 'inlinepopups', 'spellchecker', 'paste', 'fullscreen', 'wpeditimage', 'wpgallery', 'tabfocus' );
60
-
61
- // add 'wordpress' plug-in only if there is an user logged in, otherwise will produce issues on registration page
62
- if ($userid != 0)
63
- $plugins[] = 'wordpress';
64
-
65
- echo "\n\t";
66
- $initArray = array(
67
- 'mode' => "exact",
68
- 'theme' => $theme,
69
- 'elements' => esc_attr($tiny_mce_objects),
70
- 'theme_advanced_toolbar_location' => "top",
71
- 'theme_advanced_toolbar_align' => "left",
72
- 'theme_advanced_statusbar_location' => "bottom",
73
- 'extended_valid_elements' => "article[*],aside[*],audio[*],canvas[*],command[*],datalist[*],details[*],embed[*],figcaption[*],figure[*],footer[*],header[*],hgroup[*],keygen[*],mark[*],meter[*],nav[*],output[*],progress[*],section[*],source[*],summary,time[*],video[*],wbr",
74
- 'theme_advanced_buttons1' => $mce_buttons,
75
- 'theme_advanced_buttons2' => $mce_buttons_2,
76
- 'theme_advanced_buttons3' => $mce_buttons_3,
77
- 'theme_advanced_buttons4' => $mce_buttons_4,
78
- 'content_css' => $mce_css,
79
- 'language' => $mce_locale,
80
- 'spellchecker_languages' => $mce_spellchecker_languages,
81
- 'theme_advanced_resizin' => true,
82
- 'theme_advanced_resize_horizontal' => false,
83
- 'dialog_type' => "modal",
84
- 'relative_urls' => false,
85
- 'convert_urls' => false,
86
- 'remove_script_host' => false,
87
- 'plugins' => implode( ',', $plugins ),
88
- );
89
-
90
- if ($userid != 0)
91
- $initArray['skin'] = "wp_theme";
92
-
93
- if ( 'en' != $language )
94
- include_once(ABSPATH . WPINC . '/js/tinymce/langs/wp-langs.php');
95
-
96
- $mce_options = '';
97
- foreach ( $initArray as $k => $v ) {
98
- if ( is_bool($v) ) {
99
- $val = $v ? 'true' : 'false';
100
- $mce_options .= $k . ':' . $val . ', ';
101
- continue;
102
- } elseif ( !empty($v) && is_string($v) && ( '{' == $v{0} || '[' == $v{0} ) ) {
103
- $mce_options .= $k . ':' . $v . ', ';
104
- continue;
105
- }
106
-
107
- $mce_options .= $k . ':"' . $v . '", ';
108
- }
109
-
110
- global $concatenate_scripts, $compress_scripts, $tinymce_version;
111
- $mce_options = rtrim( trim($mce_options), '\n\r,' );
112
- $ext_plugins = '';
113
- $compressed = $compress_scripts && $concatenate_scripts && isset($_SERVER['HTTP_ACCEPT_ENCODING'])
114
- && false !== strpos( strtolower($_SERVER['HTTP_ACCEPT_ENCODING']), 'gzip');
115
-
116
- $version = apply_filters('tiny_mce_version', '');
117
- $version = 'ver=' . $tinymce_version . $version;
118
- ?>
119
- <script type="text/javascript">
120
- /* <![CDATA[ */
121
- tinyMCEPreInit = {
122
- base : "<?php echo $baseurl; ?>",
123
- suffix : "",
124
- query : "<?php echo $version; ?>",
125
- mceInit : {<?php echo $mce_options; ?>},
126
- load_ext : function(url,lang){var sl=tinymce.ScriptLoader;sl.markDone(url+'/langs/'+lang+'.js');sl.markDone(url+'/langs/'+lang+'_dlg.js');}
127
- };
128
- /* ]]> */
129
- </script>
130
-
131
- <?php
132
- if ( $compressed )
133
- echo "<script type='text/javascript' src='$baseurl/wp-tinymce.php?c=1&amp;$version'></script>\n";
134
- else
135
- echo "<script type='text/javascript' src='$baseurl/tiny_mce.js?$version'></script>\n";
136
-
137
- if ( 'en' != $language && isset($lang) )
138
- echo "<script type='text/javascript'>\n$lang\n</script>\n";
139
- else
140
- echo "<script type='text/javascript' src='$baseurl/langs/wp-langs-en.js?$version'></script>\n";
141
- ?>
142
-
143
- <script type="text/javascript">
144
- /* <![CDATA[ */
145
- <?php
146
- if ( $ext_plugins )
147
- echo "$ext_plugins\n";
148
-
149
- if ( ! $compressed ) {
150
- ?>
151
- (function(){var t=tinyMCEPreInit,sl=tinymce.ScriptLoader,ln=t.mceInit.language,th=t.mceInit.theme,pl=t.mceInit.plugins;sl.markDone(t.base+'/langs/'+ln+'.js');sl.markDone(t.base+'/themes/'+th+'/langs/'+ln+'.js');sl.markDone(t.base+'/themes/'+th+'/langs/'+ln+'_dlg.js');tinymce.each(pl.split(','),function(n){if(n&&n.charAt(0)!='-'){sl.markDone(t.base+'/plugins/'+n+'/langs/'+ln+'.js');sl.markDone(t.base+'/plugins/'+n+'/langs/'+ln+'_dlg.js');}});})();
152
- <?php } ?>
153
- tinyMCE.init(tinyMCEPreInit.mceInit);
154
- /* ]]> */
155
- </script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cimy_uef_register.php CHANGED
@@ -687,8 +687,6 @@ function cimy_registration_form($errors=null, $show_type=0) {
687
  if (!is_user_logged_in())
688
  $my_user_level = -1;
689
 
690
- // needed by cimy_uef_init_mce.php
691
- $cimy_uef_register_page = true;
692
  $extra_fields = get_cimyFields(false, true);
693
  $wp_fields = get_cimyFields(true);
694
 
@@ -1190,7 +1188,7 @@ function cimy_registration_form($errors=null, $show_type=0) {
1190
  $pass1_id = $unique_id;
1191
 
1192
  if ($input_name == ($prefix."PASSWORD2")) {
1193
- echo "\n\t\t<div id=\"pass-strength-result\">".__('Strength indicator')."</div>";
1194
  echo "\n\t\t<p class=\"description indicator-hint\">".__('Hint: The password should be at least seven characters long. To make it stronger, use upper and lower case letters, numbers and symbols like ! " ? $ % ^ &amp; ).')."</p><br />";
1195
  $pass2_id = $unique_id;
1196
  }
@@ -1209,13 +1207,6 @@ function cimy_registration_form($errors=null, $show_type=0) {
1209
  }
1210
  echo "\t<br />";
1211
 
1212
- if ($show_type == 0) {
1213
- // WP 3.2 or lower (N)
1214
- if (!empty($tiny_mce_objects) && !function_exists("wp_editor")) {
1215
- require_once($cuef_plugin_dir.'/cimy_uef_init_mce.php');
1216
- }
1217
- }
1218
-
1219
  if (($show_type != 2) && ($options['captcha'] == "securimage")) {
1220
  global $cuef_securimage_webpath;
1221
  if (is_multisite()) {
@@ -1333,7 +1324,7 @@ function cimy_uef_registration_redirect($redirect_to) {
1333
  if (empty($redirect_to)) {
1334
  $options = cimy_get_options();
1335
 
1336
- if ($options["redirect_to"] == "source")
1337
  $redirect_to = esc_attr($_SERVER["HTTP_REFERER"]);
1338
  }
1339
 
687
  if (!is_user_logged_in())
688
  $my_user_level = -1;
689
 
 
 
690
  $extra_fields = get_cimyFields(false, true);
691
  $wp_fields = get_cimyFields(true);
692
 
1188
  $pass1_id = $unique_id;
1189
 
1190
  if ($input_name == ($prefix."PASSWORD2")) {
1191
+ echo "\n\t\t<div id=\"pass-strength-result\" class=\"hide-if-no-js\" aria-live=\"polite\">".__('Strength indicator')."</div>";
1192
  echo "\n\t\t<p class=\"description indicator-hint\">".__('Hint: The password should be at least seven characters long. To make it stronger, use upper and lower case letters, numbers and symbols like ! " ? $ % ^ &amp; ).')."</p><br />";
1193
  $pass2_id = $unique_id;
1194
  }
1207
  }
1208
  echo "\t<br />";
1209
 
 
 
 
 
 
 
 
1210
  if (($show_type != 2) && ($options['captcha'] == "securimage")) {
1211
  global $cuef_securimage_webpath;
1212
  if (is_multisite()) {
1324
  if (empty($redirect_to)) {
1325
  $options = cimy_get_options();
1326
 
1327
+ if ($options["redirect_to"] == "source" && isset($_SERVER["HTTP_REFERER"]))
1328
  $redirect_to = esc_attr($_SERVER["HTTP_REFERER"]);
1329
  }
1330
 
cimy_user_extra_fields.php CHANGED
@@ -3,13 +3,13 @@
3
  Plugin Name: Cimy User Extra Fields
4
  Plugin URI: http://www.marcocimmino.net/cimy-wordpress-plugins/cimy-user-extra-fields/
5
  Description: Add some useful fields to registration and user's info
6
- Version: 2.6.5
7
  Author: Marco Cimmino
8
  Author URI: mailto:cimmino.marco@gmail.com
9
  License: GPL2
10
 
11
  Cimy User Extra Fields - Allows adding mySQL Data fields to store/add more user info
12
- Copyright (c) 2006-2015 Marco Cimmino
13
 
14
  Code for drop-down support is in part from Raymond Elferink raymond@raycom.com
15
  Code for regular expression under equalTo rule is in part from Shane Hartman shane@shanehartman.com
@@ -162,7 +162,7 @@ add_action('admin_init', 'cimy_uef_admin_init');
162
  add_action('init', 'cimy_uef_init');
163
 
164
  $cimy_uef_name = "Cimy User Extra Fields";
165
- $cimy_uef_version = "2.6.5";
166
  $cimy_uef_url = "http://www.marcocimmino.net/cimy-wordpress-plugins/cimy-user-extra-fields/";
167
  $cimy_project_url = "http://www.marcocimmino.net/cimy-wordpress-plugins/support-the-cimy-project-paypal/";
168
 
3
  Plugin Name: Cimy User Extra Fields
4
  Plugin URI: http://www.marcocimmino.net/cimy-wordpress-plugins/cimy-user-extra-fields/
5
  Description: Add some useful fields to registration and user's info
6
+ Version: 2.7.0
7
  Author: Marco Cimmino
8
  Author URI: mailto:cimmino.marco@gmail.com
9
  License: GPL2
10
 
11
  Cimy User Extra Fields - Allows adding mySQL Data fields to store/add more user info
12
+ Copyright (c) 2006-2016 Marco Cimmino
13
 
14
  Code for drop-down support is in part from Raymond Elferink raymond@raycom.com
15
  Code for regular expression under equalTo rule is in part from Shane Hartman shane@shanehartman.com
162
  add_action('init', 'cimy_uef_init');
163
 
164
  $cimy_uef_name = "Cimy User Extra Fields";
165
+ $cimy_uef_version = "2.7.0";
166
  $cimy_uef_url = "http://www.marcocimmino.net/cimy-wordpress-plugins/cimy-user-extra-fields/";
167
  $cimy_project_url = "http://www.marcocimmino.net/cimy-wordpress-plugins/support-the-cimy-project-paypal/";
168
 
langs/cimy_uef-da_DK.mo CHANGED
Binary file
langs/cimy_uef-da_DK.po CHANGED
@@ -3,16 +3,14 @@ msgstr ""
3
  "Project-Id-Version: Cimy User Extra Fields\n"
4
  "Report-Msgid-Bugs-To: \n"
5
  "POT-Creation-Date: 2013-09-28 06:19-0800\n"
6
- "PO-Revision-Date: 2013-09-28 06:19-0800\n"
7
  "Last-Translator: Marco Cimmino <cimmino.marco@gmail.com>\n"
8
  "Language-Team: \n"
9
- "Language: \n"
10
  "MIME-Version: 1.0\n"
11
  "Content-Type: text/plain; charset=UTF-8\n"
12
  "Content-Transfer-Encoding: 8bit\n"
13
  "X-Poedit-KeywordsList: __;_e\n"
14
- "X-Poedit-Language: German\n"
15
- "X-Poedit-Country: GERMANY\n"
16
  "X-Poedit-SourceCharset: utf-8\n"
17
  "X-Poedit-Basepath: .\n"
18
  "X-Poedit-SearchPath-0: /var/www/wp-content/plugins/cimy-user-extra-fields\n"
@@ -137,7 +135,7 @@ msgstr ""
137
 
138
  #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1186
139
  msgid "Hint: The password should be at least seven characters long. To make it stronger, use upper and lower case letters, numbers and symbols like ! \" ? $ % ^ &amp; )."
140
- msgstr ""
141
 
142
  #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1225
143
  #, fuzzy
3
  "Project-Id-Version: Cimy User Extra Fields\n"
4
  "Report-Msgid-Bugs-To: \n"
5
  "POT-Creation-Date: 2013-09-28 06:19-0800\n"
6
+ "PO-Revision-Date: 2015-10-25 17:46+0100\n"
7
  "Last-Translator: Marco Cimmino <cimmino.marco@gmail.com>\n"
8
  "Language-Team: \n"
9
+ "Language: da_DK\n"
10
  "MIME-Version: 1.0\n"
11
  "Content-Type: text/plain; charset=UTF-8\n"
12
  "Content-Transfer-Encoding: 8bit\n"
13
  "X-Poedit-KeywordsList: __;_e\n"
 
 
14
  "X-Poedit-SourceCharset: utf-8\n"
15
  "X-Poedit-Basepath: .\n"
16
  "X-Poedit-SearchPath-0: /var/www/wp-content/plugins/cimy-user-extra-fields\n"
135
 
136
  #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1186
137
  msgid "Hint: The password should be at least seven characters long. To make it stronger, use upper and lower case letters, numbers and symbols like ! \" ? $ % ^ &amp; )."
138
+ msgstr "Tip: Din adgangskode skal være mindst på midst 7 tegn. For at gare den mere sikker kann du bruge store OG små bogstaver, tal og symboler."
139
 
140
  #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1225
141
  #, fuzzy
langs/cimy_uef-fr_FR.mo CHANGED
Binary file
langs/cimy_uef-fr_FR.po CHANGED
@@ -1,1255 +1,1409 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: Cimy User Extra Fields\n"
4
- "Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: 2013-09-28 06:20-0800\n"
6
- "PO-Revision-Date: 2013-09-28 06:20-0800\n"
7
- "Last-Translator: Marco Cimmino <cimmino.marco@gmail.com>\n"
8
- "Language-Team: <cimmino.marco@gmail.com>\n"
9
- "Language: \n"
10
- "MIME-Version: 1.0\n"
11
- "Content-Type: text/plain; charset=UTF-8\n"
12
- "Content-Transfer-Encoding: 8bit\n"
13
- "X-Poedit-KeywordsList: __;_e\n"
14
- "X-Poedit-Language: French\n"
15
- "X-Poedit-Country: FRANCE\n"
16
- "X-Poedit-SourceCharset: utf-8\n"
17
- "X-Poedit-Basepath: .\n"
18
- "X-Poedit-SearchPath-0: /var/www/wp-content/plugins/cimy-user-extra-fields\n"
19
-
20
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:479
21
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:483
22
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:497
23
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:517
24
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:529
25
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:542
26
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:553
27
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:563
28
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:568
29
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:579
30
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:584
31
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:595
32
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:600
33
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:641
34
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:649
35
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1112
36
- msgid "ERROR"
37
- msgstr "ERREUR"
38
-
39
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:479
40
- msgid "does not match."
41
- msgstr "ne correspondent pas."
42
-
43
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:483
44
- msgid "hasn&#8217;t a correct email syntax."
45
- msgstr "n'a pas une syntaxe e-mail correcte"
46
-
47
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:497
48
- msgid "couldn&#8217;t be empty."
49
- msgstr "ne peut pas &#234;tre vide."
50
-
51
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:516
52
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:525
53
- msgid "isn&#8217;t correct"
54
- msgstr "n'est pas correct"
55
-
56
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:522
57
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1026
58
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1029
59
- msgid "YES"
60
- msgstr "OUI"
61
-
62
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:522
63
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1026
64
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1029
65
- msgid "NO"
66
- msgstr "NON"
67
-
68
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:527
69
- msgid "should be"
70
- msgstr "devrait &#234;tre"
71
-
72
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:542
73
- msgid "should be an image."
74
- msgstr "devrait &#234;tre une image."
75
-
76
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:553
77
- msgid "does not accept this file type."
78
- msgstr ""
79
-
80
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:563
81
- msgid "couldn&#8217;t have size less than"
82
- msgstr "ne pouvait pas avoir une taille inf&#233;rieure &#224;"
83
-
84
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:568
85
- msgid "couldn&#8217;t have length less than"
86
- msgstr "ne pouvait pas avoir une longueur inf&#233;rieur &#224;"
87
-
88
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:579
89
- msgid "couldn&#8217;t have size different than"
90
- msgstr "ne pouvais pas avoir une taille diff&#233;rente de"
91
-
92
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:584
93
- msgid "couldn&#8217;t have length different than"
94
- msgstr "ne pouvait pas avoir une longueur diff&#233;rente de"
95
-
96
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:595
97
- msgid "couldn&#8217;t have size more than"
98
- msgstr "ne pouvait pas avoir une taille sup&#233;rieure &#224;"
99
-
100
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:600
101
- msgid "couldn&#8217;t have length more than"
102
- msgstr "ne pouvait pas avoir une longueur sup&#233;rieure &#224;"
103
-
104
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:641
105
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:649
106
- #, fuzzy
107
- msgid "Typed code is not correct."
108
- msgstr "Le code saisi est incorrect."
109
-
110
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:719
111
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1534
112
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1535
113
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_user_extra_fields.php:196
114
- msgid "Username"
115
- msgstr "Identifiant"
116
-
117
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:746
118
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1544
119
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1545
120
- msgid "E-mail"
121
- msgstr "Courriel"
122
-
123
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1000
124
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_profile.php:310
125
- msgid "Please upload a file with one of the following extensions"
126
- msgstr "Veuillez t&#233;l&#233;chargez un fichier avec l'une des extensions suivantes"
127
-
128
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1006
129
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_profile.php:316
130
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:282
131
- msgid "Please upload an image with one of the following extensions"
132
- msgstr "S'il vous plait, t&#233;l&#233;chargez une image avec l'une des extensions suivantes"
133
-
134
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1185
135
- msgid "Strength indicator"
136
- msgstr "Indicateur de s&#251;ret&#233;"
137
-
138
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1186
139
- #, fuzzy
140
- msgid "Hint: The password should be at least seven characters long. To make it stronger, use upper and lower case letters, numbers and symbols like ! \" ? $ % ^ &amp; )."
141
- msgstr "Suggestion: Le mot de passe devrait contenir au moins sept caract&#232;res. Pour le s&#233;curiser encore plus, utilisez une combinaison de minuscules, de majuscules, de chiffres et de symboles tels que ! \\\" ? $ % ^ & )."
142
-
143
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1225
144
- msgid "Change image"
145
- msgstr "Changer l'image"
146
-
147
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1228
148
- msgid "Insert the code:"
149
- msgstr "Ins&#233;rer le code :"
150
-
151
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1300
152
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1302
153
- msgid "Confirm your registration"
154
- msgstr ""
155
-
156
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1308
157
- msgid "A password will be e-mailed to you."
158
- msgstr ""
159
-
160
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1316
161
- msgid "&larr; Back"
162
- msgstr ""
163
-
164
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:17
165
- msgid "Add field"
166
- msgstr "Ajouter un champ"
167
-
168
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:18
169
- msgid "Update field"
170
- msgstr "Mettre &#224; jour le champ"
171
-
172
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:19
173
- msgid "Delete field"
174
- msgstr "Supprimer le champ"
175
-
176
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:20
177
- msgid "Delete selected fields"
178
- msgstr "Supprimer les champs s&#233;lectionn&#233;s"
179
-
180
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:21
181
- msgid "Change order"
182
- msgstr "Changer l'ordre"
183
-
184
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:30
185
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:916
186
- msgid "Min length"
187
- msgstr "Longueur min"
188
-
189
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:31
190
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:917
191
- msgid "Exact length"
192
- msgstr "Longueur exacte"
193
-
194
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:32
195
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:918
196
- msgid "Max length"
197
- msgstr "Longueur max"
198
-
199
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:33
200
- msgid "Exact or Max length"
201
- msgstr "Longueur exacte ou max"
202
-
203
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:133
204
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_init.php:22
205
- msgid "Fields"
206
- msgstr "Champs"
207
-
208
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:133
209
- msgid "changed to"
210
- msgstr "chang&#233; &#224;"
211
-
212
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:136
213
- msgid "You cannot give an order that misses some numbers"
214
- msgstr "Vous ne pouvez pas donner un ordre qui manque des nombres"
215
-
216
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:139
217
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:214
218
- msgid "Nothing selected"
219
- msgstr "Rien n'est s&#233;lectionn&#233;"
220
-
221
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:211
222
- msgid "Field(s)"
223
- msgstr "Champ(s)"
224
-
225
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:211
226
- msgid "deleted correctly"
227
- msgstr "supprm&#233;(e) correctement"
228
-
229
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:245
230
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:898
231
- msgid "Min size"
232
- msgstr "Taille min"
233
-
234
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:246
235
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:899
236
- msgid "Exact size"
237
- msgstr "Taille exacte"
238
-
239
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:247
240
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:900
241
- msgid "Max size"
242
- msgstr "Taille max"
243
-
244
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:249
245
- msgid "Exact or Max size"
246
- msgstr "Taille exacte ou Max"
247
-
248
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:252
249
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:907
250
- #, fuzzy
251
- msgid "Min date"
252
- msgstr "Taille min"
253
-
254
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:253
255
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:908
256
- #, fuzzy
257
- msgid "Exact date"
258
- msgstr "Taille exacte"
259
-
260
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:254
261
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:909
262
- #, fuzzy
263
- msgid "Max date"
264
- msgstr "Taille max"
265
-
266
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:315
267
- msgid "Name not specified"
268
- msgstr "Nom non sp&#233;cifi&#233;"
269
-
270
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:317
271
- msgid "Name cannot contains spaces"
272
- msgstr "Le nom ne peut pas contenir d'espace"
273
-
274
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:320
275
- msgid "Label not specified"
276
- msgstr "&#201;tiquette non sp&#233;cifi&#233;"
277
-
278
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:325
279
- msgid "not selected (with this type is necessary)"
280
- msgstr "non s&#233;lectionn&#233; (avec ce type, c'est n&#233;cessaire)"
281
-
282
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:331
283
- msgid "If you select"
284
- msgstr "Si vous s&#233;lectionnez"
285
-
286
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:331
287
- msgid "you cannot select Min or Max"
288
- msgstr "vous ne pouvez pas s&#233;lectionner Min ou Max"
289
-
290
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:337
291
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:342
292
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:347
293
- msgid "should be in the range of"
294
- msgstr "devrait &#234;tre compris entre"
295
-
296
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:358
297
- msgid "Equal TO not specified"
298
- msgstr "&#201;gal &#192; non sp&#233;cifi&#233;"
299
-
300
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:361
301
- msgid "With checkbox type Equal TO can only be"
302
- msgstr "Avec le type checkbox, &#201;gal &#192; ne peut &#234;tre que"
303
-
304
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:364
305
- msgid "With radio type Equal TO can only be"
306
- msgstr "Avec le type radio, &#201;gal &#192; ne peut &#234;tre que"
307
-
308
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:380
309
- msgid "With checkbox type Value can only be"
310
- msgstr "Avec le type checkbox, la valeur ne peut &#234;tre que"
311
-
312
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:383
313
- msgid "With radio type Value can only be"
314
- msgstr "Avec le type radio, la valeur ne peut &#234;tre que"
315
-
316
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:439
317
- msgid "Field inserted correctly"
318
- msgstr "Champ ins&#233;r&#233; correctement"
319
-
320
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:441
321
- msgid "Field #"
322
- msgstr "Champ #"
323
-
324
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:441
325
- msgid "updated correctly"
326
- msgstr "mis &#224; jour correctement"
327
-
328
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:453
329
- msgid "Name inserted is just in the database, change to another one"
330
- msgstr "Le nom est d&#233;j&#224; dans la base de donn&#233;es; veuillez le changer"
331
-
332
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:468
333
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:367
334
- msgid "Add a new Field"
335
- msgstr "Ajouter un nouveau champ"
336
-
337
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:586
338
- msgid "To add a new field you have to choose a name, type and label; optional are value and description. Rules are applied during user registration."
339
- msgstr "Pour ajouter un nouveau champ, vous devez choisir un nom, un type et une &#233;tiquette; la valeur et la description sont optionnelles. Les r&#232;gles sont appliqu&#233;es lors de l'inscription d'un utilisateur."
340
-
341
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:588
342
- msgid "With <strong>radio</strong> and <strong>checkbox</strong>: <em>Value</em> and <em>equal TO</em> can only be 'Yes' or 'No' that means 'selected' or 'not selected'"
343
- msgstr "Avec les types <strong>radio</strong> et <strong>checkbox</strong> : <em>Valeur</em> et <em>&#233;gal &#192;</em> peuvent seulement &#234;tre 'Yes' ou 'No' ce qui signifie 's&#233;lectionn&#233;' ou 'non s&#233;lectionn&#233;'"
344
-
345
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:589
346
- msgid "With <strong>drop-down</strong>: you have to add all options into label for example: label/item1,item2,item3"
347
- msgstr "Avec le type <strong>drop-down</strong> : vous devez ajouter toutes les options dans l'&#233;tiquette, par exemple: &#233;tiquette/item1,item2,item3"
348
-
349
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:590
350
- msgid "With <strong>picture</strong>: you can preload a default image putting url in <em>Value</em>; 'min,exact,max size' are in KB; <em>equal TO</em> means max pixel size (width or height) for thumbnail"
351
- msgstr "Avec le type <strong>picture</strong> : vous pouvez pr&#233;charger une image par d&#233;faut en indiquant son URL dans <em>Valeur</em>; 'taille min,exacte,max' sont en KB; <em>&#233;gal &#192;</em> indique la taille max en pixels (largeur ou hauteur) pour les vignettes"
352
-
353
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:591
354
- msgid "With <strong>picture-url</strong>: you can preload a default image putting url in <em>Value</em>; <em>equal TO</em> means max width pixel size (height will be proportional)"
355
- msgstr "Avec le type <strong>picture-url</strong> : vous pouvez pr&#233;charger une image par d&#233;faut en indiqaunt son URL dans <em>Valeur</em>; <em>&#233;gal &#192;</em> indique la taille de la largeur max en pixels (la hauteur sera proportionnelle)"
356
-
357
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:592
358
- msgid "With <strong>registration-date</strong>: <em>equal TO</em> means date and time format"
359
- msgstr "Avec le type <strong>registration-date</strong> : <em>&#233;gal &#192;</em> indique un format date et heure"
360
-
361
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:593
362
- msgid "With <strong>avatar</strong>: you can preload a default image putting url in <em>Value</em>; 'min,exact,max size' are in KB; <em>equal TO</em> is automatically set to 512 pixels"
363
- msgstr "Avec le type <strong>picture</strong> : vous pouvez pr&#233;charger une image par d&#233;faut en indiquant son URL dans <em>Valeur</em>; 'taille min,exacte,max' sont en KB; <em>&#233;gal &#192;</em> est automatiquement mis &#224; 512 pixels"
364
-
365
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:594
366
- msgid "With <strong>file</strong>: you can preload a default file putting url in <em>Value</em>; 'min,exact,max size' are in KB; under <em>equal TO</em> can be specified allowed extensions separated by comma, example: zip,pdf,doc"
367
- msgstr "Avec le type <strong>picture</strong> : vous pouvez pr&#233;charger un fichier par d&#233;faut en indiquant son URL dans <em>Valeur</em>; 'taille min,exacte,max' sont en KB; <em>&#233;gal &#192;</em> indique les extensions de fichiers accept&#233;s s&#233;par&#233;s par une virgule, exemple: zip,pdf,doc"
368
-
369
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:595
370
- msgid "With <strong>date</strong>: you can preload a default date in <em>Value</em>; 'min date' can be relative: -1d, -1m, -1y or a specific date; 'max date' can be relative: +1d, +1m, +1y or a specific date; <em>equal TO</em> can be a specific date"
371
- msgstr ""
372
-
373
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:602
374
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:612
375
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:834
376
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:942
377
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1539
378
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1540
379
- msgid "Name"
380
- msgstr "Nom"
381
-
382
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:602
383
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:613
384
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:834
385
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:945
386
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1850
387
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1855
388
- msgid "Value"
389
- msgstr "Valeur"
390
-
391
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:603
392
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:616
393
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:834
394
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:948
395
- msgid "Type"
396
- msgstr "Type"
397
-
398
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:604
399
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:632
400
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:835
401
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:965
402
- msgid "Label"
403
- msgstr "&#201;tiquette"
404
-
405
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:604
406
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:633
407
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:835
408
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:968
409
- msgid "Description"
410
- msgstr "Description"
411
-
412
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:605
413
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:836
414
- msgid "Rules"
415
- msgstr "R&#232;gles"
416
-
417
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:606
418
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:837
419
- msgid "Actions"
420
- msgstr "Actions"
421
-
422
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:627
423
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:959
424
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1285
425
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1376
426
- msgid "Fieldset"
427
- msgstr "Regroupements"
428
-
429
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:649
430
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:986
431
- msgid "Can be empty"
432
- msgstr "Peut &#234;tre vide"
433
-
434
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:651
435
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:988
436
- msgid "Check for E-mail syntax"
437
- msgstr "V&#233;rifier la syntaxe du courriel"
438
-
439
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:654
440
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:991
441
- msgid "Can be modified"
442
- msgstr "Peut &#234;tre modifi&#233;"
443
-
444
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:655
445
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:992
446
- msgid "Can be modified only if empty"
447
- msgstr "Ne peut &#234;tre modifi&#233; que s'il est vide"
448
-
449
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:656
450
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:993
451
- msgid "Can be modified only by admin"
452
- msgstr "Ne peut &#234;tre modifi&#233; que par un admin"
453
-
454
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:657
455
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:994
456
- msgid "Can be modified only by admin or if empty"
457
- msgstr "Ne peut &#234;tre modifi&#233; que par un admin ou s'il est vide"
458
-
459
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:658
460
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:995
461
- msgid "Cannot be modified"
462
- msgstr "Ne peut pas &#234;tre modifi&#233;"
463
-
464
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:663
465
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1001
466
- msgid "Should be equal TO"
467
- msgstr "Devrait &#234;tre &#233;gal &#192;"
468
-
469
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:666
470
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1004
471
- msgid "Case sensitive"
472
- msgstr "Tenir compte de la case (majuscule/minuscule)"
473
-
474
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:670
475
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1007
476
- msgid "Regular Expression"
477
- msgstr "Expression r&#233;guli&#232;re"
478
-
479
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:674
480
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1013
481
- msgid "Show the field in the registration"
482
- msgstr "Montrer le champ lors de l'inscription"
483
-
484
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:678
485
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1017
486
- msgid "Show the field in User's profile"
487
- msgstr "Montrer le champ dans le profil de l'utilisateur"
488
-
489
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:682
490
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1027
491
- #, fuzzy
492
- msgid "Show the field in Users Extended section"
493
- msgstr "Montrer le champ dans le menu A&U &#201;tendu"
494
-
495
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:686
496
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1031
497
- msgid "Show the field in the search engine"
498
- msgstr "Montrer le champ dans les moteurs de recherche"
499
-
500
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:690
501
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1035
502
- msgid "Show the field in the blog"
503
- msgstr "Montrer le champ dans le blogue"
504
-
505
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:693
506
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1038
507
- msgid "Show the field if the role is at least:"
508
- msgstr "Montrer le champ si le r&#244;le est au moins :"
509
-
510
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:695
511
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1040
512
- msgid "Anonymous"
513
- msgstr "Anonyme"
514
-
515
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:701
516
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1046
517
- msgid "User has 'view_cimy_extra_fields' capability"
518
- msgstr ""
519
-
520
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:707
521
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1055
522
- msgid "Send an email to the admin if the user changes its value"
523
- msgstr "Envoyer un courriel &#224; l'administrateur si l'utilisateur modifie la valeur de ce champ"
524
-
525
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:709
526
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1060
527
- #, fuzzy
528
- msgid "Advanced options"
529
- msgstr "Actions"
530
-
531
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:714
532
- msgid "Clear"
533
- msgstr "Vider (RAZ)"
534
-
535
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:798
536
- msgid "Invert selection"
537
- msgstr "Inverser la s&#233;lection"
538
-
539
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:799
540
- msgid "Are you sure you want to delete field(s) and all data inserted into by users?"
541
- msgstr "&#202;tes-vous certain de vouloir supprimer ce(s) champ(s) et toutes les donn&#233;es ins&#233;r&#233;es par vos utilisateurs?"
542
-
543
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:805
544
- msgid "WordPress Fields"
545
- msgstr "Champs WordPress"
546
-
547
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:807
548
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1850
549
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1855
550
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:367
551
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_db.php:115
552
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_db.php:369
553
- msgid "Extra Fields"
554
- msgstr "Champs Suppl&#233;mentaires"
555
-
556
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:818
557
- msgid "None!"
558
- msgstr "Aucun!"
559
-
560
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:833
561
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:930
562
- msgid "Order"
563
- msgstr "Ordre"
564
-
565
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1064
566
- msgid "Reset"
567
- msgstr "R&#233;initialiser"
568
-
569
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1130
570
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:391
571
- msgid "SUCCESSFUL"
572
- msgstr "SUCC&#200;S"
573
-
574
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1149
575
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1877
576
- #, fuzzy
577
- msgid "select"
578
- msgstr "s&#233;lectionnez"
579
-
580
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1289
581
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1380
582
- msgid "Users per page"
583
- msgstr "Utilisateurs par page"
584
-
585
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1291
586
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1382
587
- msgid "Apply"
588
- msgstr "Appliquer"
589
-
590
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1456
591
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_init.php:23
592
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_init.php:31
593
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_init.php:36
594
- msgid "Users Extended"
595
- msgstr "Utilisateurs &#201;tendus"
596
-
597
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1464
598
- #, php-format
599
- msgid "Search results for &#8220;%s&#8221;"
600
- msgstr ""
601
-
602
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1502
603
- #, php-format
604
- msgid "%1$s <span class=\"count\">(%2$s)</span>"
605
- msgstr "%1$s <span class=\"count\">(%2$s)</span>"
606
-
607
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1511
608
- msgid "Search Users"
609
- msgstr "Chercher des utilisateurs"
610
-
611
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1549
612
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1550
613
- msgid "Role"
614
- msgstr "R&#244;le"
615
-
616
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1554
617
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1555
618
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_user_extra_fields.php:328
619
- msgid "Website"
620
- msgstr "Site Web"
621
-
622
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1559
623
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1560
624
- msgid "Posts"
625
- msgstr "Articles"
626
-
627
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1683
628
- msgid "View posts by this author"
629
- msgstr "Voir les articles de cet auteur"
630
-
631
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1708
632
- msgid "Super Admin"
633
- msgstr ""
634
-
635
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1719
636
- #, php-format
637
- msgid "e-mail: %s"
638
- msgstr "courriel : %s"
639
-
640
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1830
641
- #, fuzzy
642
- msgid "Change"
643
- msgstr "Changer l'image"
644
-
645
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1846
646
- msgid "Update selected users"
647
- msgstr "Mettre &#224; jour les utilisateurs s&#233;lectionn&#233;s"
648
-
649
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1867
650
- msgid "Update"
651
- msgstr "Mettre &#224; jour"
652
-
653
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1882
654
- msgid "OK"
655
- msgstr "OK"
656
-
657
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1883
658
- msgid "Cancel"
659
- msgstr "Annuler"
660
-
661
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:45
662
- #, php-format
663
- msgid "New user registration on your site %s:"
664
- msgstr "Inscription d'un nouvel utilisateur sur votre site %s :"
665
-
666
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:46
667
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:243
668
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_db.php:214
669
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_db.php:364
670
- #, php-format
671
- msgid "Username: %s"
672
- msgstr "Identifiant : %s"
673
-
674
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:47
675
- #, php-format
676
- msgid "E-mail: %s"
677
- msgstr "Courriel : %s"
678
-
679
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:52
680
- #, php-format
681
- msgid "[%s] New User Registration"
682
- msgstr "[%s] Inscription d'un nouvel utilisateur"
683
-
684
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:64
685
- #, php-format
686
- msgid "[%s] Your username and password"
687
- msgstr "[%s] Votre identifiant et mot de passe"
688
-
689
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:105
690
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:118
691
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:131
692
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:137
693
- #, php-format
694
- msgid "%s: %s"
695
- msgstr "%s : %s"
696
-
697
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:211
698
- #, php-format
699
- msgid ""
700
- "To activate your user, please click the following link:\n"
701
- "\n"
702
- "%s\n"
703
- "\n"
704
- "After you activate, you will receive *another email* with your login.\n"
705
- "\n"
706
- msgstr ""
707
- "Pour activer votre compte d'utilisateur, veuillez cliquer sur le lien suivant :\n"
708
- "\n"
709
- "%s\n"
710
- "\n"
711
- "Apr&#232;s l'activation, vous recevrez un *autre courriel* avec votre identifiant.\n"
712
-
713
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:215
714
- #, php-format
715
- msgid "[%1$s] Activate %2$s"
716
- msgstr ""
717
-
718
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:234
719
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:243
720
- msgid "Your account is now active!"
721
- msgstr "Votre compte est maintenant actif!"
722
-
723
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:235
724
- #, php-format
725
- msgid "Your site at <a href=\"%1$s\">%2$s</a> is active. You may now log in to your site using your chosen username of &#8220;%3$s&#8221;. Please check your email inbox at %4$s for your password and login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can <a href=\"%5$s\">reset your password</a></p>."
726
- msgstr "Votre compte &#224; <a href=\"%1$s\">%2$s</a> est actif. Vous pouvez vous connecter &#224; votre compte en utilisant l'identifiant \"%3$s\". Veuillez v&#233;rifier la boite de r&#233;ception de votre courriel %4$s pour votre mot de passe et les instructions de connexion. Si vous ne recevez pas ce courriel, v&#233;rifiez dans votre dossier de pourriel (spam). Si apr&#232;s une heure vous n'avez toujours pas reçu de courriel, vous pouvez <a href=\"%5$s\">r&#233;initialiser votre mot de passe</a></p>."
727
-
728
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:237
729
- msgid "An error occurred during the activation"
730
- msgstr "Une erreur est survenue durant l'activation"
731
-
732
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:243
733
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_db.php:215
734
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_db.php:365
735
- #, php-format
736
- msgid "Password: %s"
737
- msgstr "Mot de passe : %s"
738
-
739
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:257
740
- msgid "Invalid activation key."
741
- msgstr "Clef d'activation invalide."
742
-
743
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:260
744
- msgid "The site is already active."
745
- msgstr "Le compte est d&#233;j&#224; actif."
746
-
747
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:280
748
- msgid "Could not create user"
749
- msgstr "N'a pu cr&#233;er l'utilisateur"
750
-
751
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:292
752
- msgid "That username is already activated."
753
- msgstr "Cet identifiant est d&#233;j&#224; actif."
754
-
755
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:312
756
- msgid "That username is currently reserved but may be available in a couple of days."
757
- msgstr "Cet identifiant est actuellement r&#233;serv&#233;, mais peut &#234;tre disponible d'ici quelques jours."
758
-
759
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:315
760
- msgid "username and email used"
761
- msgstr "identifiant et courriel utilis&#233;"
762
-
763
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:325
764
- msgid "That email address has already been used. Please check your inbox for an activation email. It will become available in a couple of days if you do nothing."
765
- msgstr "Cette adresse courriel est d&#233;j&#224; utilis&#233;e. Veuillez v&#233;rifier votre boite aux lettres pour le courriel d'activation. Si vous ne faites rien, ce courriel sera de nouveau disponible pour l'inscription."
766
-
767
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_profile.php:144
768
- msgid "(required)"
769
- msgstr ""
770
-
771
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_profile.php:454
772
- msgid "Delete the file"
773
- msgstr "Supprimer le fichier"
774
-
775
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_profile.php:455
776
- msgid "Update the file"
777
- msgstr "Mettre &#224; jour le fichier"
778
-
779
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_profile.php:458
780
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:545
781
- msgid "Delete the picture"
782
- msgstr "Supprimer l'image"
783
-
784
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_profile.php:459
785
- msgid "Update the picture"
786
- msgstr "Mettre &#224; jour la photo"
787
-
788
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_profile.php:479
789
- msgid "Picture URL:"
790
- msgstr "URL de la photo :"
791
-
792
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_profile.php:735
793
- #, php-format
794
- msgid "%s previous value: %s new value: %s"
795
- msgstr "%s ancienne valeur : %s; nouvelle valeur : %s"
796
-
797
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_profile.php:750
798
- #, php-format
799
- msgid "%s (%s) has changed one or more fields"
800
- msgstr "%s (%s) a modifi&#233; un ou plusieurs champs"
801
-
802
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_init.php:21
803
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:364
804
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:559
805
- msgid "Options"
806
- msgstr "Options"
807
-
808
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:52
809
- msgid "WordPress Fields table emptied"
810
- msgstr "Table des champs WordPress vid&#233;e"
811
-
812
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:57
813
- msgid "WordPress Fields table deleted"
814
- msgstr "Table des champs WordPress supprim&#233;e"
815
-
816
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:66
817
- msgid "Extra Fields table emptied"
818
- msgstr "Table des champs suppl&#233;mentaires vid&#233;e"
819
-
820
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:71
821
- msgid "Extra Fields table deleted"
822
- msgstr "Table des champs suppl&#233;mentaires supprim&#233;e"
823
-
824
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:80
825
- msgid "Users Data table emptied"
826
- msgstr "Table des donn&#233;es utilsateurs vid&#233;e"
827
-
828
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:85
829
- msgid "Users Data table deleted"
830
- msgstr "Table des donn&#233;es utilsateurs supprim&#233;e"
831
-
832
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:96
833
- msgid "Options set to default values"
834
- msgstr "Options r&#233;initialis&#233;es avec les valeurs par d&#233;faut"
835
-
836
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:102
837
- msgid "Options deleted"
838
- msgstr "Options supprim&#233;es"
839
-
840
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:256
841
- msgid "Options changed"
842
- msgstr "Options chang&#233;es"
843
-
844
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:355
845
- msgid "This operation will create/update all missing tables/options, do you want to proceed?"
846
- msgstr "Cette op&#233;ration cr&#233;era ou mettra &#224; jour toutes les tables et options manquantes. Voulez-vous continuer?"
847
-
848
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:373
849
- msgid "Support the Cimy Project"
850
- msgstr "Supportez le <em>Cimy Project</em>"
851
-
852
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:381
853
- msgid "This plug-in is the results of hours of development to add new features, support new WordPress versions and fix bugs, please donate money if saved you from spending all these hours!"
854
- msgstr "Ce plug-in est le r&#233;sultat de plusieurs heures de conception pour ajouter de nouvelles fonctionnalit&#233;s, supporter les nouvelles versions de WordPress et fixer les bogues. S'il vous plait, faites un don d'argent si vous avez sauv&#233; toutes ces heures!"
855
-
856
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:405
857
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:799
858
- msgid "Save Changes"
859
- msgstr "Enregistrer les changements"
860
-
861
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:406
862
- msgid "General"
863
- msgstr "G&#233;n&#233;ral"
864
-
865
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:414
866
- #, fuzzy
867
- msgid "installed is"
868
- msgstr "install&#233;"
869
-
870
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:418
871
- msgid "OPTIONS DELETED!"
872
- msgstr "OPTIONS SUPPRIM&#201;ES!"
873
-
874
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:421
875
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:426
876
- msgid "Fix the problem"
877
- msgstr "Corriger le probl&#232;me"
878
-
879
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:424
880
- msgid "VERSIONS MISMATCH! This because you haven't de-activated and re-activated the plug-in after the update! This could give problems..."
881
- msgstr "LES VERSIONS NE CORRESPONDENT PAS! Ceci arrive lorsque vous n'avez pas d&#233;sactiv&#233; et r&#233;activ&#233; le plug-in apr&#232;s sa mise &#224; jour! Cela peut poser probl&#232;me..."
882
-
883
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:432
884
- msgid "Picture/Avatar upload"
885
- msgstr "T&#233;l&#233;chargement de photo ou d'avatar"
886
-
887
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:436
888
- msgid "is created and writable"
889
- msgstr "est cr&#233;&#233; et en &#233;criture"
890
-
891
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:438
892
- msgid "is NOT created or webserver does NOT have permission to write on it"
893
- msgstr "N'est PAS cr&#233;&#233; ou le serveur Web N'a PAS les permissions pour l'&#233;crire"
894
-
895
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:445
896
- msgid "Show all fields in the welcome email"
897
- msgstr "Montrer tous les champs dans le courriel de bienvenue"
898
-
899
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:449
900
- msgid "the email sent to the admin and to the user upon registration will have all fields"
901
- msgstr "le courriel envoy&#233; aux administrateurs et &#224; l'utilisateur lors de l'inscription contiendra tous les champs"
902
-
903
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:457
904
- msgid "Enable email confirmation"
905
- msgstr "Activer la confirmation par courriel"
906
-
907
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:461
908
- msgid "user that registers should confirm its email address via a link click"
909
- msgstr "les utilisateurs qui s'inscrivent doivent confirmer leur adresse courriel gr&#226;ce &#224; un lien &#224; cliquer"
910
-
911
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:463
912
- msgid "<strong>note:</strong> this option turned on will automatically disable (only during the registration) all upload fields: file, picture, avatar"
913
- msgstr "<strong>note :</strong> avec cette option activ&#233;e, tous les champs de t&#233;l&#233;chargement (fichiers, images, avatar) seront d&#233;sactiv&#233;s lors de l'inscription seulement"
914
-
915
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:470
916
- #, fuzzy
917
- msgid "Enable form confirmation"
918
- msgstr "Activer la confirmation par courriel"
919
-
920
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:474
921
- msgid "a summary of the registration form will be presented to the user"
922
- msgstr ""
923
-
924
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:480
925
- msgid "Customize welcome email sent to the new user"
926
- msgstr ""
927
-
928
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:484
929
- msgid "if you change or remove the placeholders then the email won't have the correct information"
930
- msgstr ""
931
-
932
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:490
933
- msgid "Redirect to the source"
934
- msgstr "Rediriger au r&#233;f&#233;rant"
935
-
936
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:494
937
- msgid "after the registration or confirmation the user will be redirected to the address where was exactly before clicking on the registration link"
938
- msgstr "apr&#232;s l'inscription, ou la confirmation, l'utilisateur sera redirig&#233; &#224; la page qu'il visitait avant de cliquer sur le lien d'inscription"
939
-
940
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:502
941
- msgid "No captcha"
942
- msgstr "Pas de captcha"
943
-
944
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:510
945
- msgid "Enable <a href=\"http://www.google.com/recaptcha\" target=\"_blank\">reCAPTCHA</a>"
946
- msgstr "Activer <a href=\"http://www.google.com/recaptcha\" target=\"_blank\">reCAPTCHA</a>"
947
-
948
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:514
949
- msgid "Public KEY"
950
- msgstr "Public KEY"
951
-
952
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:518
953
- msgid "Private KEY"
954
- msgstr "Private KEY"
955
-
956
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:526
957
- msgid "Enable <a href=\"http://www.phpcaptcha.org/\" target=\"_blank\">Securimage Captcha</a>"
958
- msgstr "Activer <a href=\"http://www.phpcaptcha.org/\" target=\"_blank\">Securimage Captcha</a>"
959
-
960
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:529
961
- msgid "This captcha is probably weaker, but is easier for users"
962
- msgstr "Ce captcha est probablement plus faible, mais plus facile d'utilisation pour les utilisateurs"
963
-
964
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:533
965
- #, php-format
966
- msgid "<strong>WARNING: to activate this captcha download <a href=\"http://www.phpcaptcha.org/latest.zip\" target=\"_blank\">this package</a> and unpack it under %s</strong>"
967
- msgstr "<strong>AVERTISSEMENT : pour activer ce captcha, t&#233;l&#233;chargez <a href=\"http://www.phpcaptcha.org/latest.zip\" target=\"_blank\">ce paquet</a> et extrayez-le sous %s</strong>"
968
-
969
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:540
970
- msgid "Change login/registration page logo"
971
- msgstr "Changer le logo de la page de connexion et d'inscription"
972
-
973
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:548
974
- msgid "Maximum recommended logo width is 328px, but any height should work."
975
- msgstr "La largeur maximum recommand&#233; est de 328px, mais n'importe quelle hauteur devrait fonctionner."
976
-
977
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:554
978
- msgid "Database"
979
- msgstr "Base de donn&#233;es"
980
-
981
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:566
982
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:586
983
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:606
984
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:626
985
- msgid "select action"
986
- msgstr "s&#233;lectionner une action"
987
-
988
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:567
989
- msgid "Default values"
990
- msgstr "Valeurs par d&#233;faut"
991
-
992
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:568
993
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:588
994
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:608
995
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:628
996
- msgid "Delete"
997
- msgstr "Supprimer"
998
-
999
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:572
1000
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:592
1001
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:612
1002
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:633
1003
- msgid "NOT PRESENT"
1004
- msgstr "NON PRESENT"
1005
-
1006
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:579
1007
- msgid "WordPress Fields table"
1008
- msgstr "Table des champs WordPress"
1009
-
1010
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:587
1011
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:607
1012
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:627
1013
- msgid "Empty"
1014
- msgstr "Vider"
1015
-
1016
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:599
1017
- msgid "Extra Fields table"
1018
- msgstr "Table des champs suppl&#233;mentaires"
1019
-
1020
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:619
1021
- msgid "Users Data table"
1022
- msgstr "Table des donn&#233;es utilisateurs"
1023
-
1024
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:630
1025
- msgid "all data inserted by users in all and only extra fields"
1026
- msgstr "toutes les donn&#233;es ins&#233;r&#233;es par les utilisateurs dans les champs suppl&#233;mentaires seulement"
1027
-
1028
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:640
1029
- msgid "Force tables creation"
1030
- msgstr "Forcer la cr&#233;ation des tables"
1031
-
1032
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:644
1033
- msgid "equivalent to de-activate and activate the plug-in; no other operation will be performed"
1034
- msgstr "&#233;quivalent &#224; d&#233;sactiver et activer le plug-in; aucune autre op&#233;ration ne sera effectu&#233;e"
1035
-
1036
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:650
1037
- msgid "User Profile"
1038
- msgstr "Profil utilisateur"
1039
-
1040
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:653
1041
- msgid "Extra Fields section title"
1042
- msgstr "Titre de la section des champs suppl&#233;mentaires"
1043
-
1044
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:657
1045
- msgid "Fieldset's titles, separates with comma"
1046
- msgstr "Titres des regroupements, s&#233;par&#233;s par des virgules"
1047
-
1048
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:657
1049
- msgid "example: title1,title2,title3"
1050
- msgstr "exemple : titre1,titre2,titre3"
1051
-
1052
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:658
1053
- msgid "<strong>note:</strong> if you change order or remove fieldsets you may need to set all extra fields' fieldset assigment again"
1054
- msgstr "<strong>note</strong> : si vous changez l'ordre ou retirez des regroupements, vous pourriez devoir refaire l'affection des fieldsets aux champs suppl&#233;mentaires"
1055
-
1056
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:663
1057
- msgid "Authors &amp; Users Extended"
1058
- msgstr "Auteurs & Utilisateurs &#201;tendus"
1059
-
1060
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:668
1061
- msgid "Hide username field"
1062
- msgstr "Cacher le champ nom d'utilisateur"
1063
-
1064
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:675
1065
- msgid "Hide name field"
1066
- msgstr "Cacher le champ nom"
1067
-
1068
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:682
1069
- msgid "Hide email field"
1070
- msgstr "Cacher le champ courriel"
1071
-
1072
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:689
1073
- msgid "Hide role field"
1074
- msgstr "Cacher le champ r&#244;le"
1075
-
1076
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:696
1077
- msgid "Hide website field"
1078
- msgstr "Cacher le champ du site Web"
1079
-
1080
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:703
1081
- msgid "Hide n. posts field"
1082
- msgstr "Cacher le champ nbre d'articles"
1083
-
1084
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:709
1085
- msgid "WordPress hidden fields"
1086
- msgstr "Champs WordPress cach&#233;s"
1087
-
1088
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:715
1089
- #, fuzzy
1090
- msgid "Show username"
1091
- msgstr "Montrer le nom"
1092
-
1093
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:717
1094
- msgid "when unchecked the email address will be used as username"
1095
- msgstr ""
1096
-
1097
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:723
1098
- msgid "Show password"
1099
- msgstr "Montrer le mot de passe"
1100
-
1101
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:730
1102
- msgid "Show confirmation password"
1103
- msgstr "Montrer la confirmation du mot de passe"
1104
-
1105
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:737
1106
- msgid "Show password strength meter"
1107
- msgstr "Montrer l'indicateur de s&#251;ret&#233;"
1108
-
1109
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:744
1110
- msgid "Show first name"
1111
- msgstr "Montrer le pr&#233;nom"
1112
-
1113
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:751
1114
- msgid "Show last name"
1115
- msgstr "Montrer le nom"
1116
-
1117
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:758
1118
- msgid "Show nickname"
1119
- msgstr "Montrer le surnom"
1120
-
1121
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:765
1122
- msgid "Show website"
1123
- msgstr "Montrer le site web"
1124
-
1125
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:772
1126
- msgid "Show AIM"
1127
- msgstr "Montrer AIM"
1128
-
1129
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:779
1130
- msgid "Show Yahoo IM"
1131
- msgstr "Montrer Yahoo IM"
1132
-
1133
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:786
1134
- msgid "Show Jabber / Google Talk"
1135
- msgstr "Montrer Jabber / Google Talk"
1136
-
1137
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:793
1138
- msgid "Show Biographical Info"
1139
- msgstr "Afficher les renseignements biographiques"
1140
-
1141
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_missing_functions.php:16
1142
- #, php-format
1143
- msgid "File '%s' doesn't exist?"
1144
- msgstr "Le fichier '%s' n'existe pas?"
1145
-
1146
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_missing_functions.php:19
1147
- msgid "The GD image library is not installed."
1148
- msgstr "La biblioth&#232;que GD n'est pas install&#233;e."
1149
-
1150
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_missing_functions.php:26
1151
- #, php-format
1152
- msgid "File '%s' is not an image."
1153
- msgstr "Le fichier '%s' n'est pas une image."
1154
-
1155
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_db.php:207
1156
- msgid "<strong>Note:</strong> this website let you personalize your password; after the registration you will receive an e-mail with another password, do not care about that!"
1157
- msgstr "<strong>Note :</strong> ce site Web vous permet de personnaliser votre mot de passe. Apr&#232;s l'inscription, vous recevrez un courriel avec un autre mot de passe, ne vous en pr&#233;occupez pas!"
1158
-
1159
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_user_extra_fields.php:218
1160
- msgid "Password"
1161
- msgstr "Mot de passe"
1162
-
1163
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_user_extra_fields.php:240
1164
- msgid "Password confirmation"
1165
- msgstr "Confirmation du mot de passe"
1166
-
1167
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_user_extra_fields.php:262
1168
- msgid "First name"
1169
- msgstr "Pr&#233;nom"
1170
-
1171
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_user_extra_fields.php:284
1172
- msgid "Last name"
1173
- msgstr "Nom"
1174
-
1175
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_user_extra_fields.php:306
1176
- msgid "Nickname"
1177
- msgstr "Pseudonyme"
1178
-
1179
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_user_extra_fields.php:350
1180
- msgid "AIM"
1181
- msgstr "AIM"
1182
-
1183
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_user_extra_fields.php:372
1184
- msgid "Yahoo IM"
1185
- msgstr "Yahoo IM"
1186
-
1187
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_user_extra_fields.php:394
1188
- msgid "Jabber / Google Talk"
1189
- msgstr "Jabber / Google Talk"
1190
-
1191
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_user_extra_fields.php:416
1192
- msgid "Biographical Info"
1193
- msgstr "Renseignements biographiques"
1194
-
1195
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_functions.php:429
1196
- msgid "no fieldset"
1197
- msgstr "aucun regroupement"
1198
-
1199
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_functions.php:433
1200
- msgid "All"
1201
- msgstr "Tous"
1202
-
1203
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_functions.php:1018
1204
- msgid "Done"
1205
- msgstr ""
1206
-
1207
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_functions.php:1019
1208
- msgid "&laquo; Previous"
1209
- msgstr ""
1210
-
1211
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_functions.php:1020
1212
- msgid "Next &raquo;"
1213
- msgstr ""
1214
-
1215
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_functions.php:1021
1216
- msgid "Today"
1217
- msgstr ""
1218
-
1219
- #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_functions.php:1024
1220
- #, fuzzy
1221
- msgid "Select Month"
1222
- msgstr "s&#233;lectionner une action"
1223
-
1224
- #~ msgid "&laquo; Back to All Users"
1225
- #~ msgstr "&laquo; Retour &#224; tous les utilisateurs"
1226
-
1227
- #~ msgid "A&amp;U Extended"
1228
- #~ msgstr "A&U &#201;tendu"
1229
-
1230
- #~ msgid "Users Matching \"%s\""
1231
- #~ msgstr "Utilisateurs correspondant &#224; \"%s\""
1232
-
1233
- #~ msgid "Users Extended List"
1234
- #~ msgstr "Liste &#233;tendue des auteurs & des utilisateurs"
1235
-
1236
- #~ msgid "Authors &amp; Users Extended List"
1237
- #~ msgstr "Liste &#233;tendue des auteurs & des utilisateurs"
1238
-
1239
- #~ msgid "Disable get_cimyFieldValue function"
1240
- #~ msgstr "D&#233;sactiver la fonction get_cimyFieldValue"
1241
-
1242
- #~ msgid "leave disabled if you don't know what to do"
1243
- #~ msgstr "Laisser d&#233;sactiv&#233; si vous ne savez pas quoi faire"
1244
-
1245
- #~ msgid "Update Options &raquo;"
1246
- #~ msgstr "Mettre &agrave; jour les options &raquo;"
1247
-
1248
- #~ msgid "Hide actions button"
1249
- #~ msgstr "Cacher le bouton actions"
1250
-
1251
- #~ msgid "User ID"
1252
- #~ msgstr "ID Utilisateur"
1253
-
1254
- #~ msgid "label"
1255
- #~ msgstr "label"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Cimy User Extra Fields\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: 2013-09-28 06:20-0800\n"
6
+ "PO-Revision-Date: 2015-10-07 17:13+0100\n"
7
+ "Last-Translator: Marco Cimmino <cimmino.marco@gmail.com>\n"
8
+ "Language-Team: <cimmino.marco@gmail.com>\n"
9
+ "Language: fr_FR\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "X-Poedit-KeywordsList: __;_e\n"
14
+ "X-Poedit-Language: French\n"
15
+ "X-Poedit-Country: FRANCE\n"
16
+ "X-Poedit-SourceCharset: utf-8\n"
17
+ "X-Poedit-Basepath: .\n"
18
+ "X-Poedit-SearchPath-0: /var/www/wp-content/plugins/cimy-user-extra-fields\n"
19
+
20
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:479
21
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:483
22
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:497
23
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:517
24
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:529
25
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:542
26
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:553
27
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:563
28
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:568
29
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:579
30
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:584
31
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:595
32
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:600
33
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:641
34
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:649
35
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1112
36
+ msgid "ERROR"
37
+ msgstr "ERREUR"
38
+
39
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:479
40
+ msgid "does not match."
41
+ msgstr "ne correspond pas."
42
+
43
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:483
44
+ msgid "hasn&#8217;t a correct email syntax."
45
+ msgstr "n'a pas une syntaxe d'email correcte."
46
+
47
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:497
48
+ msgid "couldn&#8217;t be empty."
49
+ msgstr "ne peut pas être vide."
50
+
51
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:516
52
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:525
53
+ msgid "isn&#8217;t correct"
54
+ msgstr "n'est pas correct"
55
+
56
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:522
57
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1026
58
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1029
59
+ msgid "YES"
60
+ msgstr "YES"
61
+
62
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:522
63
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1026
64
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1029
65
+ msgid "NO"
66
+ msgstr "NO"
67
+
68
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:527
69
+ msgid "should be"
70
+ msgstr "devrait être"
71
+
72
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:542
73
+ msgid "should be an image."
74
+ msgstr "devrait être une image."
75
+
76
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:553
77
+ msgid "does not accept this file type."
78
+ msgstr "n'accepte pas ce type de fichier."
79
+
80
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:563
81
+ msgid "couldn&#8217;t have size less than"
82
+ msgstr "ne pouvait pas avoir une taille inférieure à"
83
+
84
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:568
85
+ msgid "couldn&#8217;t have length less than"
86
+ msgstr "ne pouvait pas avoir une longueur inférieure à"
87
+
88
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:579
89
+ msgid "couldn&#8217;t have size different than"
90
+ msgstr "ne pouvais pas avoir une taille différente de"
91
+
92
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:584
93
+ msgid "couldn&#8217;t have length different than"
94
+ msgstr "ne pouvait pas avoir une longueur différente de"
95
+
96
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:595
97
+ msgid "couldn&#8217;t have size more than"
98
+ msgstr "ne pouvait pas avoir une taille supérieure à"
99
+
100
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:600
101
+ msgid "couldn&#8217;t have length more than"
102
+ msgstr "ne pouvait pas avoir une longueur supérieure à"
103
+
104
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:641
105
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:649
106
+ #, fuzzy
107
+ msgid "Typed code is not correct."
108
+ msgstr "Le code saisi est incorrect."
109
+
110
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:719
111
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1534
112
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1535
113
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_user_extra_fields.php:196
114
+ msgid "Username"
115
+ msgstr "Identifiant"
116
+
117
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:746
118
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1544
119
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1545
120
+ msgid "E-mail"
121
+ msgstr "Courriel"
122
+
123
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1000
124
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_profile.php:310
125
+ msgid "Please upload a file with one of the following extensions"
126
+ msgstr "Veuillez télécharger un fichier avec l'une des extensions suivantes"
127
+
128
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1006
129
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_profile.php:316
130
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:282
131
+ msgid "Please upload an image with one of the following extensions"
132
+ msgstr "Veuillez téléchargez une image avec l'une des extensions suivantes"
133
+
134
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1185
135
+ msgid "Strength indicator"
136
+ msgstr "Indicateur de sûreté"
137
+
138
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1186
139
+ msgid ""
140
+ "Hint: The password should be at least seven characters long. To make it "
141
+ "stronger, use upper and lower case letters, numbers and symbols like ! \" ? "
142
+ "$ % ^ &amp; )."
143
+ msgstr ""
144
+ "Suggestion: le mot de passe devrait contenir au moins sept caractères. Pour "
145
+ "le sécuriser encore plus, utilisez une combinaison de minuscules, de "
146
+ "majuscules, de chiffres et de symboles tels que ! \\\" ? $ % ^ & )."
147
+
148
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1225
149
+ msgid "Change image"
150
+ msgstr "Changer l'image"
151
+
152
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1228
153
+ msgid "Insert the code:"
154
+ msgstr "Insérer le code:"
155
+
156
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1300
157
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1302
158
+ msgid "Confirm your registration"
159
+ msgstr "Confirmez votre inscription"
160
+
161
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1308
162
+ msgid "A password will be e-mailed to you."
163
+ msgstr "Un courriel contenant votre mot de passe va vous être envoyé."
164
+
165
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_register.php:1316
166
+ msgid "&larr; Back"
167
+ msgstr "&larr; Retour"
168
+
169
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:17
170
+ msgid "Add field"
171
+ msgstr "Ajouter un champ"
172
+
173
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:18
174
+ msgid "Update field"
175
+ msgstr "Mettre à jour le champ"
176
+
177
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:19
178
+ msgid "Delete field"
179
+ msgstr "Supprimer le champ"
180
+
181
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:20
182
+ msgid "Delete selected fields"
183
+ msgstr "Supprimer les champs sélectionnés"
184
+
185
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:21
186
+ msgid "Change order"
187
+ msgstr "Changer l'ordre"
188
+
189
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:30
190
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:916
191
+ msgid "Min length"
192
+ msgstr "Longueur min"
193
+
194
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:31
195
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:917
196
+ msgid "Exact length"
197
+ msgstr "Longueur exacte"
198
+
199
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:32
200
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:918
201
+ msgid "Max length"
202
+ msgstr "Longueur max"
203
+
204
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:33
205
+ msgid "Exact or Max length"
206
+ msgstr "Longueur exacte ou max"
207
+
208
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:133
209
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_init.php:22
210
+ msgid "Fields"
211
+ msgstr "Champs"
212
+
213
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:133
214
+ msgid "changed to"
215
+ msgstr "changé en"
216
+
217
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:136
218
+ msgid "You cannot give an order that misses some numbers"
219
+ msgstr "Vous ne pouvez pas donner un ordre où il manque des nombres"
220
+
221
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:139
222
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:214
223
+ msgid "Nothing selected"
224
+ msgstr "Rien n'est sélectionné"
225
+
226
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:211
227
+ msgid "Field(s)"
228
+ msgstr "Champ(s)"
229
+
230
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:211
231
+ msgid "deleted correctly"
232
+ msgstr "correctement supprimé(e)"
233
+
234
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:245
235
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:898
236
+ msgid "Min size"
237
+ msgstr "Taille min"
238
+
239
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:246
240
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:899
241
+ msgid "Exact size"
242
+ msgstr "Taille exacte"
243
+
244
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:247
245
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:900
246
+ msgid "Max size"
247
+ msgstr "Taille max"
248
+
249
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:249
250
+ msgid "Exact or Max size"
251
+ msgstr "Taille exacte ou Max"
252
+
253
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:252
254
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:907
255
+ #, fuzzy
256
+ msgid "Min date"
257
+ msgstr "Taille min"
258
+
259
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:253
260
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:908
261
+ #, fuzzy
262
+ msgid "Exact date"
263
+ msgstr "Taille exacte"
264
+
265
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:254
266
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:909
267
+ #, fuzzy
268
+ msgid "Max date"
269
+ msgstr "Taille max"
270
+
271
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:315
272
+ msgid "Name not specified"
273
+ msgstr "Nom non spécifié"
274
+
275
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:317
276
+ msgid "Name cannot contains spaces"
277
+ msgstr "Le nom ne peut pas contenir d'espace"
278
+
279
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:320
280
+ msgid "Label not specified"
281
+ msgstr "étiquette non spécifiée"
282
+
283
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:325
284
+ msgid "not selected (with this type is necessary)"
285
+ msgstr "non sélectionné (nécessaire avec ce type)"
286
+
287
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:331
288
+ msgid "If you select"
289
+ msgstr "Si vous sélectionnez"
290
+
291
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:331
292
+ msgid "you cannot select Min or Max"
293
+ msgstr "vous ne pouvez pas sélectionner Min ou Max"
294
+
295
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:337
296
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:342
297
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:347
298
+ msgid "should be in the range of"
299
+ msgstr "devrait être dans l'intervalle de"
300
+
301
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:358
302
+ msgid "Equal TO not specified"
303
+ msgstr "Égal à non spécifié"
304
+
305
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:361
306
+ msgid "With checkbox type Equal TO can only be"
307
+ msgstr "Avec le type checkbox, Égal à ne peut être que"
308
+
309
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:364
310
+ msgid "With radio type Equal TO can only be"
311
+ msgstr "Avec le type radio, Égal à ne peut être que"
312
+
313
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:380
314
+ msgid "With checkbox type Value can only be"
315
+ msgstr "Avec le type case à cocher, la valeur ne peut être que"
316
+
317
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:383
318
+ msgid "With radio type Value can only be"
319
+ msgstr "Avec le type radio, la valeur ne peut être que"
320
+
321
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:439
322
+ msgid "Field inserted correctly"
323
+ msgstr "Champ inséré correctement"
324
+
325
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:441
326
+ msgid "Field #"
327
+ msgstr "Champ #"
328
+
329
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:441
330
+ msgid "updated correctly"
331
+ msgstr "correctement mis à jour"
332
+
333
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:453
334
+ msgid "Name inserted is just in the database, change to another one"
335
+ msgstr "Le nom est déjà dans la base de données; veuillez le changer"
336
+
337
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:468
338
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:367
339
+ msgid "Add a new Field"
340
+ msgstr "Ajouter un nouveau champ"
341
+
342
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:586
343
+ msgid ""
344
+ "To add a new field you have to choose a name, type and label; optional are "
345
+ "value and description. Rules are applied during user registration."
346
+ msgstr ""
347
+ "Pour ajouter un nouveau champ, vous devez choisir un nom, un type et une "
348
+ "étiquette; la valeur et la description sont optionnelles. Les règles sont "
349
+ "appliquées lors de l'inscription d'un utilisateur."
350
+
351
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:588
352
+ msgid ""
353
+ "With <strong>radio</strong> and <strong>checkbox</strong>: <em>Value</em> "
354
+ "and <em>equal TO</em> can only be 'Yes' or 'No' that means 'selected' or "
355
+ "'not selected'"
356
+ msgstr ""
357
+ "Avec les types <strong>radio</strong> et <strong>checkbox</strong>: "
358
+ "<em>Valeur</em> et <em>Égal à</em> peuvent seulement être 'Yes' ou 'No' ce "
359
+ "qui signifie 'sélectionné' ou 'non sélectionné'"
360
+
361
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:589
362
+ msgid ""
363
+ "With <strong>drop-down</strong>: you have to add all options into label for "
364
+ "example: label/item1,item2,item3"
365
+ msgstr ""
366
+ "Avec le type <strong>drop-down</strong>: vous devez ajouter toutes les "
367
+ "options dans l'étiquette, par exemple: étiquette/item1,item2,item3"
368
+
369
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:590
370
+ msgid ""
371
+ "With <strong>picture</strong>: you can preload a default image putting url "
372
+ "in <em>Value</em>; 'min,exact,max size' are in KB; <em>equal TO</em> means "
373
+ "max pixel size (width or height) for thumbnail"
374
+ msgstr ""
375
+ "Avec le type <strong>picture</strong>: vous pouvez précharger une image par "
376
+ "défaut en indiquant son URL dans <em>Valeur</em>; 'taille min,exacte,max' "
377
+ "sont en kB; <em>Égal à</em> indique la taille max en pixels (largeur ou "
378
+ "hauteur) pour les vignettes"
379
+
380
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:591
381
+ msgid ""
382
+ "With <strong>picture-url</strong>: you can preload a default image putting "
383
+ "url in <em>Value</em>; <em>equal TO</em> means max width pixel size (height "
384
+ "will be proportional)"
385
+ msgstr ""
386
+ "Avec le type <strong>picture-url</strong>: vous pouvez précharger une image "
387
+ "par défaut en indiquant son URL dans <em>Valeur</em>; <em>Égal à</em> "
388
+ "indique la taille de la largeur max en pixels (la hauteur sera "
389
+ "proportionnelle)"
390
+
391
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:592
392
+ msgid ""
393
+ "With <strong>registration-date</strong>: <em>equal TO</em> means date and "
394
+ "time format"
395
+ msgstr ""
396
+ "Avec le type <strong>registration-date</strong>: <em>Égal à</em> indique un "
397
+ "format date et heure"
398
+
399
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:593
400
+ msgid ""
401
+ "With <strong>avatar</strong>: you can preload a default image putting url in "
402
+ "<em>Value</em>; 'min,exact,max size' are in KB; <em>equal TO</em> is "
403
+ "automatically set to 512 pixels"
404
+ msgstr ""
405
+ "Avec le type <strong>picture</strong>: vous pouvez précharger une image par "
406
+ "défaut en indiquant son URL dans <em>Valeur</em>; 'taille min,exacte,max' "
407
+ "sont en kB; <em>Égal à</em> est automatiquement mis à 512 pixels"
408
+
409
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:594
410
+ msgid ""
411
+ "With <strong>file</strong>: you can preload a default file putting url in "
412
+ "<em>Value</em>; 'min,exact,max size' are in KB; under <em>equal TO</em> can "
413
+ "be specified allowed extensions separated by comma, example: zip,pdf,doc"
414
+ msgstr ""
415
+ "Avec le type <strong>picture</strong>: vous pouvez précharger un fichier par "
416
+ "défaut en indiquant son URL dans <em>Valeur</em>; 'taille min,exacte,max' "
417
+ "sont en KB; <em>Égal à</em> indique les extensions de fichiers acceptées "
418
+ "séparées par une virgule, exemple: zip,pdf,doc"
419
+
420
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:595
421
+ msgid ""
422
+ "With <strong>date</strong>: you can preload a default date in <em>Value</"
423
+ "em>; 'min date' can be relative: -1d, -1m, -1y or a specific date; 'max "
424
+ "date' can be relative: +1d, +1m, +1y or a specific date; <em>equal TO</em> "
425
+ "can be a specific date"
426
+ msgstr ""
427
+ "Avec <strong>date</strong>: vous pouvez précharger une date par défaut dans "
428
+ "<em>Value</em>; 'min date' peut être relative: -1d, -1m, -1y ou une date "
429
+ "spécifique; 'max date' peut être relative: +1d, +1m, +1y ou une date "
430
+ "spécifique; <em>égal à</em> peut être une date spécifique"
431
+
432
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:602
433
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:612
434
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:834
435
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:942
436
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1539
437
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1540
438
+ msgid "Name"
439
+ msgstr "Nom"
440
+
441
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:602
442
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:613
443
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:834
444
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:945
445
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1850
446
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1855
447
+ msgid "Value"
448
+ msgstr "Valeur"
449
+
450
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:603
451
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:616
452
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:834
453
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:948
454
+ msgid "Type"
455
+ msgstr "Type"
456
+
457
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:604
458
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:632
459
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:835
460
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:965
461
+ msgid "Label"
462
+ msgstr "Étiquette"
463
+
464
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:604
465
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:633
466
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:835
467
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:968
468
+ msgid "Description"
469
+ msgstr "Description"
470
+
471
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:605
472
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:836
473
+ msgid "Rules"
474
+ msgstr "Règles"
475
+
476
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:606
477
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:837
478
+ msgid "Actions"
479
+ msgstr "Actions"
480
+
481
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:627
482
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:959
483
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1285
484
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1376
485
+ msgid "Fieldset"
486
+ msgstr "Regroupements"
487
+
488
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:649
489
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:986
490
+ msgid "Can be empty"
491
+ msgstr "Peut être vide"
492
+
493
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:651
494
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:988
495
+ msgid "Check for E-mail syntax"
496
+ msgstr "Vérifier la syntaxe du courriel"
497
+
498
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:654
499
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:991
500
+ msgid "Can be modified"
501
+ msgstr "Peut être modifié"
502
+
503
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:655
504
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:992
505
+ msgid "Can be modified only if empty"
506
+ msgstr "Ne peut être modifié que s'il est vide"
507
+
508
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:656
509
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:993
510
+ msgid "Can be modified only by admin"
511
+ msgstr "Ne peut être modifié que par un admin"
512
+
513
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:657
514
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:994
515
+ msgid "Can be modified only by admin or if empty"
516
+ msgstr "Ne peut être modifié que par un admin ou s'il est vide"
517
+
518
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:658
519
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:995
520
+ msgid "Cannot be modified"
521
+ msgstr "Ne peut pas être modifié"
522
+
523
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:663
524
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1001
525
+ msgid "Should be equal TO"
526
+ msgstr "Devrait être égal à"
527
+
528
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:666
529
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1004
530
+ msgid "Case sensitive"
531
+ msgstr "Tenir compte de la casse (majuscule/minuscule)"
532
+
533
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:670
534
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1007
535
+ msgid "Regular Expression"
536
+ msgstr "Expression régulière"
537
+
538
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:674
539
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1013
540
+ msgid "Show the field in the registration"
541
+ msgstr "Montrer le champ lors de l'inscription"
542
+
543
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:678
544
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1017
545
+ msgid "Show the field in User's profile"
546
+ msgstr "Montrer le champ dans le profil de l'utilisateur"
547
+
548
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:682
549
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1027
550
+ msgid "Show the field in Users Extended section"
551
+ msgstr "Montrer le champ dans le menu Utilisateurs / Liste étendue"
552
+
553
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:686
554
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1031
555
+ msgid "Show the field in the search engine"
556
+ msgstr "Montrer le champ dans les moteurs de recherche"
557
+
558
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:690
559
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1035
560
+ msgid "Show the field in the blog"
561
+ msgstr "Montrer le champ dans le blog"
562
+
563
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:693
564
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1038
565
+ msgid "Show the field if the role is at least:"
566
+ msgstr "Montrer le champ si le rôle est au moins:"
567
+
568
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:695
569
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1040
570
+ msgid "Anonymous"
571
+ msgstr "Anonyme"
572
+
573
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:701
574
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1046
575
+ msgid "User has 'view_cimy_extra_fields' capability"
576
+ msgstr "L'utilisateur a les droits 'view_cimy_extra_fields'"
577
+
578
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:707
579
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1055
580
+ msgid "Send an email to the admin if the user changes its value"
581
+ msgstr ""
582
+ "Envoyer un courriel à l'administrateur si l'utilisateur modifie la valeur de "
583
+ "ce champ"
584
+
585
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:709
586
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1060
587
+ msgid "Advanced options"
588
+ msgstr "Options avancées"
589
+
590
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:714
591
+ msgid "Clear"
592
+ msgstr "Effacer"
593
+
594
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:798
595
+ msgid "Invert selection"
596
+ msgstr "Inverser la sélection"
597
+
598
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:799
599
+ msgid ""
600
+ "Are you sure you want to delete field(s) and all data inserted into by users?"
601
+ msgstr ""
602
+ "Ètes-vous certain de vouloir supprimer ce(s) champ(s) et toutes les données "
603
+ "insérées par vos utilisateurs?"
604
+
605
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:805
606
+ msgid "WordPress Fields"
607
+ msgstr "Champs WordPress"
608
+
609
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:807
610
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1850
611
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1855
612
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:367
613
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_db.php:115
614
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_db.php:369
615
+ msgid "Extra Fields"
616
+ msgstr "Champs Supplémentaires"
617
+
618
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:818
619
+ msgid "None!"
620
+ msgstr "Aucun!"
621
+
622
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:833
623
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:930
624
+ msgid "Order"
625
+ msgstr "Ordre"
626
+
627
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1064
628
+ msgid "Reset"
629
+ msgstr "Réinitialiser"
630
+
631
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1130
632
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:391
633
+ msgid "SUCCESSFUL"
634
+ msgstr "RÉUSSI"
635
+
636
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1149
637
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1877
638
+ msgid "select"
639
+ msgstr "sélectionnez"
640
+
641
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1289
642
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1380
643
+ msgid "Users per page"
644
+ msgstr "Utilisateurs par page"
645
+
646
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1291
647
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1382
648
+ msgid "Apply"
649
+ msgstr "Appliquer"
650
+
651
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1456
652
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_init.php:23
653
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_init.php:31
654
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_init.php:36
655
+ msgid "Users Extended"
656
+ msgstr "Liste étendue"
657
+
658
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1464
659
+ #, php-format
660
+ msgid "Search results for &#8220;%s&#8221;"
661
+ msgstr "Résultats de la recherche pour &#8220;%s&#8221;"
662
+
663
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1502
664
+ #, php-format
665
+ msgid "%1$s <span class=\"count\">(%2$s)</span>"
666
+ msgstr "%1$s <span class=\"count\">(%2$s)</span>"
667
+
668
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1511
669
+ msgid "Search Users"
670
+ msgstr "Chercher des utilisateurs"
671
+
672
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1549
673
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1550
674
+ msgid "Role"
675
+ msgstr "Rôle"
676
+
677
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1554
678
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1555
679
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_user_extra_fields.php:328
680
+ msgid "Website"
681
+ msgstr "Site web"
682
+
683
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1559
684
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1560
685
+ msgid "Posts"
686
+ msgstr "Articles"
687
+
688
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1683
689
+ msgid "View posts by this author"
690
+ msgstr "Voir les articles de cet auteur"
691
+
692
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1708
693
+ msgid "Super Admin"
694
+ msgstr "Super Admin"
695
+
696
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1719
697
+ #, php-format
698
+ msgid "e-mail: %s"
699
+ msgstr "courriel: %s"
700
+
701
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1830
702
+ #, fuzzy
703
+ msgid "Change"
704
+ msgstr "Changer l'image"
705
+
706
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1846
707
+ msgid "Update selected users"
708
+ msgstr "Mettre à jour les utilisateurs sélectionnés"
709
+
710
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1867
711
+ msgid "Update"
712
+ msgstr "Mettre à jour"
713
+
714
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1882
715
+ msgid "OK"
716
+ msgstr "OK"
717
+
718
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_admin.php:1883
719
+ msgid "Cancel"
720
+ msgstr "Annuler"
721
+
722
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:45
723
+ #, php-format
724
+ msgid "New user registration on your site %s:"
725
+ msgstr "Inscription d'un nouvel utilisateur sur votre site %s:"
726
+
727
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:46
728
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:243
729
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_db.php:214
730
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_db.php:364
731
+ #, php-format
732
+ msgid "Username: %s"
733
+ msgstr "Identifiant: %s"
734
+
735
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:47
736
+ #, php-format
737
+ msgid "E-mail: %s"
738
+ msgstr "Courriel: %s"
739
+
740
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:52
741
+ #, php-format
742
+ msgid "[%s] New User Registration"
743
+ msgstr "[%s] Inscription d'un nouvel utilisateur"
744
+
745
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:64
746
+ #, php-format
747
+ msgid "[%s] Your username and password"
748
+ msgstr "[%s] Votre identifiant et mot de passe"
749
+
750
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:105
751
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:118
752
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:131
753
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:137
754
+ #, php-format
755
+ msgid "%s: %s"
756
+ msgstr "%s: %s"
757
+
758
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:211
759
+ #, php-format
760
+ msgid ""
761
+ "To activate your user, please click the following link:\n"
762
+ "\n"
763
+ "%s\n"
764
+ "\n"
765
+ "After you activate, you will receive *another email* with your login.\n"
766
+ "\n"
767
+ msgstr ""
768
+ "Pour activer votre compte d'utilisateur, veuillez cliquer sur le lien "
769
+ "suivant:\n"
770
+ "\n"
771
+ "%s\n"
772
+ "\n"
773
+ "Après l'activation, vous recevrez un *autre courriel* avec votre "
774
+ "identifiant.\n"
775
+
776
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:215
777
+ #, php-format
778
+ msgid "[%1$s] Activate %2$s"
779
+ msgstr "[%1$s] Activer %2$s"
780
+
781
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:234
782
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:243
783
+ msgid "Your account is now active!"
784
+ msgstr "Votre compte est maintenant actif!"
785
+
786
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:235
787
+ #, php-format
788
+ msgid ""
789
+ "Your site at <a href=\"%1$s\">%2$s</a> is active. You may now log in to your "
790
+ "site using your chosen username of &#8220;%3$s&#8221;. Please check your "
791
+ "email inbox at %4$s for your password and login instructions. If you do not "
792
+ "receive an email, please check your junk or spam folder. If you still do "
793
+ "not receive an email within an hour, you can <a href=\"%5$s\">reset your "
794
+ "password</a></p>."
795
+ msgstr ""
796
+ "Votre compte sur <a href=\"%1$s\">%2$s</a> est actif. Vous pouvez vous "
797
+ "connecter à votre compte en utilisant l'identifiant \"%3$s\". Veuillez "
798
+ "vérifier la boite de réception de votre messagerie %4$s pour connaître votre "
799
+ "mot de passe et les instructions de connexion. Si vous ne recevez pas ce "
800
+ "courriel, vérifiez dans votre dossier de pourriel (spam). Si après une heure "
801
+ "vous n'avez toujours pas reçu de courriel, vous pouvez <a href=\"%5$s"
802
+ "\">réinitialiser votre mot de passe</a></p>."
803
+
804
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:237
805
+ msgid "An error occurred during the activation"
806
+ msgstr "Une erreur est survenue durant l'activation"
807
+
808
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:243
809
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_db.php:215
810
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_db.php:365
811
+ #, php-format
812
+ msgid "Password: %s"
813
+ msgstr "Mot de passe: %s"
814
+
815
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:257
816
+ msgid "Invalid activation key."
817
+ msgstr "Clef d'activation invalide."
818
+
819
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:260
820
+ msgid "The site is already active."
821
+ msgstr "Le compte est déjà actif."
822
+
823
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:280
824
+ msgid "Could not create user"
825
+ msgstr "Création de l'utilisateur impossible"
826
+
827
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:292
828
+ msgid "That username is already activated."
829
+ msgstr "Cet identifiant est déjà actif."
830
+
831
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:312
832
+ msgid ""
833
+ "That username is currently reserved but may be available in a couple of days."
834
+ msgstr ""
835
+ "Cet identifiant est actuellement réservé, mais peut être disponible d'ici "
836
+ "quelques jours."
837
+
838
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:315
839
+ msgid "username and email used"
840
+ msgstr "identifiant et courriel utilisés"
841
+
842
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_email_handler.php:325
843
+ msgid ""
844
+ "That email address has already been used. Please check your inbox for an "
845
+ "activation email. It will become available in a couple of days if you do "
846
+ "nothing."
847
+ msgstr ""
848
+ "Cette adresse courriel est déjà utilisée. Veuillez vérifier votre messagerie "
849
+ "pour le courriel d'activation. Si vous ne faites rien, ce courriel sera de "
850
+ "nouveau disponible pour l'inscription."
851
+
852
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_profile.php:144
853
+ msgid "(required)"
854
+ msgstr "(requis)"
855
+
856
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_profile.php:454
857
+ msgid "Delete the file"
858
+ msgstr "Supprimer le fichier"
859
+
860
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_profile.php:455
861
+ msgid "Update the file"
862
+ msgstr "Mettre à jour le fichier"
863
+
864
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_profile.php:458
865
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:545
866
+ msgid "Delete the picture"
867
+ msgstr "Supprimer l'image"
868
+
869
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_profile.php:459
870
+ msgid "Update the picture"
871
+ msgstr "Mettre à jour la photo"
872
+
873
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_profile.php:479
874
+ msgid "Picture URL:"
875
+ msgstr "URL de la photo:"
876
+
877
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_profile.php:735
878
+ #, php-format
879
+ msgid "%s previous value: %s new value: %s"
880
+ msgstr "ancienne valeur de %s: %s; nouvelle valeur: %s"
881
+
882
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_profile.php:750
883
+ #, php-format
884
+ msgid "%s (%s) has changed one or more fields"
885
+ msgstr "%s (%s) a modifié un ou plusieurs champs"
886
+
887
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_init.php:21
888
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:364
889
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:559
890
+ msgid "Options"
891
+ msgstr "Options"
892
+
893
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:52
894
+ msgid "WordPress Fields table emptied"
895
+ msgstr "Table des champs WordPress vidée"
896
+
897
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:57
898
+ msgid "WordPress Fields table deleted"
899
+ msgstr "Table des champs WordPress supprimée"
900
+
901
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:66
902
+ msgid "Extra Fields table emptied"
903
+ msgstr "Table des champs supplémentaires vidée"
904
+
905
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:71
906
+ msgid "Extra Fields table deleted"
907
+ msgstr "Table des champs supplémentaires supprimée"
908
+
909
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:80
910
+ msgid "Users Data table emptied"
911
+ msgstr "Table des données utilisateurs vidée"
912
+
913
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:85
914
+ msgid "Users Data table deleted"
915
+ msgstr "Table des données utilisateurs supprimée"
916
+
917
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:96
918
+ msgid "Options set to default values"
919
+ msgstr "Options réinitialisées à leur valeur par défaut"
920
+
921
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:102
922
+ msgid "Options deleted"
923
+ msgstr "Options supprimées"
924
+
925
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:256
926
+ msgid "Options changed"
927
+ msgstr "Options changées"
928
+
929
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:355
930
+ msgid ""
931
+ "This operation will create/update all missing tables/options, do you want to "
932
+ "proceed?"
933
+ msgstr ""
934
+ "Cette opération créera ou mettra à jour toutes les tables et options "
935
+ "manquantes. Voulez-vous continuer?"
936
+
937
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:373
938
+ msgid "Support the Cimy Project"
939
+ msgstr "Supportez le <em>Cimy Project</em>"
940
+
941
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:381
942
+ msgid ""
943
+ "This plug-in is the results of hours of development to add new features, "
944
+ "support new WordPress versions and fix bugs, please donate money if saved "
945
+ "you from spending all these hours!"
946
+ msgstr ""
947
+ "Ce plug-in est le résultat de plusieurs heures de conception pour ajouter de "
948
+ "nouvelles fonctionnalités, supporter les nouvelles versions de WordPress et "
949
+ "résoudre les bogues. Merci de faire un don s'il vous a épargné toutes ces "
950
+ "heures!"
951
+
952
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:405
953
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:799
954
+ msgid "Save Changes"
955
+ msgstr "Enregistrer les changements"
956
+
957
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:406
958
+ msgid "General"
959
+ msgstr "Général"
960
+
961
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:414
962
+ msgid "installed is"
963
+ msgstr "installé"
964
+
965
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:418
966
+ msgid "OPTIONS DELETED!"
967
+ msgstr "OPTIONS SUPPRIMÉES!"
968
+
969
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:421
970
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:426
971
+ msgid "Fix the problem"
972
+ msgstr "Corriger le problème"
973
+
974
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:424
975
+ msgid ""
976
+ "VERSIONS MISMATCH! This because you haven't de-activated and re-activated "
977
+ "the plug-in after the update! This could give problems..."
978
+ msgstr ""
979
+ "LES VERSIONS NE CORRESPONDENT PAS! Ceci parce que vous n'avez pas désactivé "
980
+ "et réactivé le plug-in après sa mise à jour! Cela peut poser problème..."
981
+
982
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:432
983
+ msgid "Picture/Avatar upload"
984
+ msgstr "Téléchargement de photo ou d'avatar"
985
+
986
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:436
987
+ msgid "is created and writable"
988
+ msgstr "est créé et en écriture"
989
+
990
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:438
991
+ msgid "is NOT created or webserver does NOT have permission to write on it"
992
+ msgstr "n'est PAS créé ou le serveur web n'a PAS les permissions pour l'écrire"
993
+
994
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:445
995
+ msgid "Show all fields in the welcome email"
996
+ msgstr "Montrer tous les champs dans le courriel de bienvenue"
997
+
998
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:449
999
+ msgid ""
1000
+ "the email sent to the admin and to the user upon registration will have all "
1001
+ "fields"
1002
+ msgstr ""
1003
+ "le courriel envoyé aux administrateurs et à l'utilisateur lors de "
1004
+ "l'inscription contiendra tous les champs"
1005
+
1006
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:457
1007
+ msgid "Enable email confirmation"
1008
+ msgstr "Activer la confirmation par courriel"
1009
+
1010
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:461
1011
+ msgid "user that registers should confirm its email address via a link click"
1012
+ msgstr ""
1013
+ "les utilisateurs qui s'inscrivent doivent confirmer leur adresse courriel "
1014
+ "grâce à un lien à cliquer"
1015
+
1016
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:463
1017
+ msgid ""
1018
+ "<strong>note:</strong> this option turned on will automatically disable "
1019
+ "(only during the registration) all upload fields: file, picture, avatar"
1020
+ msgstr ""
1021
+ "<strong>note:</strong> avec cette option activée, tous les champs de "
1022
+ "téléchargement (fichiers, images, avatar) seront désactivés lors de "
1023
+ "l'inscription seulement"
1024
+
1025
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:470
1026
+ #, fuzzy
1027
+ msgid "Enable form confirmation"
1028
+ msgstr "Activer la confirmation par courriel"
1029
+
1030
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:474
1031
+ msgid "a summary of the registration form will be presented to the user"
1032
+ msgstr "un résumé du formulaire d'inscription sera présenté à l'utilisateur"
1033
+
1034
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:480
1035
+ msgid "Customize welcome email sent to the new user"
1036
+ msgstr "Personnaliser le courriel de bienvenue envoyé au nouvel utilisateur"
1037
+
1038
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:484
1039
+ msgid ""
1040
+ "if you change or remove the placeholders then the email won't have the "
1041
+ "correct information"
1042
+ msgstr ""
1043
+ "si vous changez ou enlevez les variables alors le courriel n'aura pas "
1044
+ "l'information correcte"
1045
+
1046
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:490
1047
+ msgid "Redirect to the source"
1048
+ msgstr "Rediriger au référant"
1049
+
1050
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:494
1051
+ msgid ""
1052
+ "after the registration or confirmation the user will be redirected to the "
1053
+ "address where was exactly before clicking on the registration link"
1054
+ msgstr ""
1055
+ "après l'inscription, ou la confirmation, l'utilisateur sera redirigé à la "
1056
+ "page qu'il visitait avant de cliquer sur le lien d'inscription"
1057
+
1058
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:502
1059
+ msgid "No captcha"
1060
+ msgstr "Pas de captcha"
1061
+
1062
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:510
1063
+ msgid ""
1064
+ "Enable <a href=\"http://www.google.com/recaptcha\" target=\"_blank"
1065
+ "\">reCAPTCHA</a>"
1066
+ msgstr ""
1067
+ "Activer <a href=\"http://www.google.com/recaptcha\" target=\"_blank"
1068
+ "\">reCAPTCHA</a>"
1069
+
1070
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:514
1071
+ msgid "Public KEY"
1072
+ msgstr "Clé publique"
1073
+
1074
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:518
1075
+ msgid "Private KEY"
1076
+ msgstr "Clé privée"
1077
+
1078
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:526
1079
+ msgid ""
1080
+ "Enable <a href=\"http://www.phpcaptcha.org/\" target=\"_blank\">Securimage "
1081
+ "Captcha</a>"
1082
+ msgstr ""
1083
+ "Activer <a href=\"http://www.phpcaptcha.org/\" target=\"_blank\">Securimage "
1084
+ "Captcha</a>"
1085
+
1086
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:529
1087
+ msgid "This captcha is probably weaker, but is easier for users"
1088
+ msgstr ""
1089
+ "Ce captcha est probablement plus faible, mais plus facile pour les "
1090
+ "utilisateurs"
1091
+
1092
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:533
1093
+ #, php-format
1094
+ msgid ""
1095
+ "<strong>WARNING: to activate this captcha download <a href=\"http://www."
1096
+ "phpcaptcha.org/latest.zip\" target=\"_blank\">this package</a> and unpack it "
1097
+ "under %s</strong>"
1098
+ msgstr ""
1099
+ "<strong>AVERTISSEMENT: pour activer ce captcha, téléchargez <a href=\"http://"
1100
+ "www.phpcaptcha.org/latest.zip\" target=\"_blank\">ce paquet</a> et extrayez-"
1101
+ "le sous %s</strong>"
1102
+
1103
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:540
1104
+ msgid "Change login/registration page logo"
1105
+ msgstr "Changer le logo de la page de connexion et d'inscription"
1106
+
1107
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:548
1108
+ msgid "Maximum recommended logo width is 328px, but any height should work."
1109
+ msgstr ""
1110
+ "La largeur maximum recommandée est de 328 px, mais n'importe quelle hauteur "
1111
+ "devrait fonctionner."
1112
+
1113
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:554
1114
+ msgid "Database"
1115
+ msgstr "Base de données"
1116
+
1117
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:566
1118
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:586
1119
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:606
1120
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:626
1121
+ msgid "select action"
1122
+ msgstr "sélectionner une action"
1123
+
1124
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:567
1125
+ msgid "Default values"
1126
+ msgstr "Valeurs par défaut"
1127
+
1128
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:568
1129
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:588
1130
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:608
1131
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:628
1132
+ msgid "Delete"
1133
+ msgstr "Supprimer"
1134
+
1135
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:572
1136
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:592
1137
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:612
1138
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:633
1139
+ msgid "NOT PRESENT"
1140
+ msgstr "NON PRÉSENT"
1141
+
1142
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:579
1143
+ msgid "WordPress Fields table"
1144
+ msgstr "Table des champs WordPress"
1145
+
1146
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:587
1147
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:607
1148
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:627
1149
+ msgid "Empty"
1150
+ msgstr "Vider"
1151
+
1152
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:599
1153
+ msgid "Extra Fields table"
1154
+ msgstr "Table des champs supplémentaires"
1155
+
1156
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:619
1157
+ msgid "Users Data table"
1158
+ msgstr "Table des données utilisateurs"
1159
+
1160
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:630
1161
+ msgid "all data inserted by users in all and only extra fields"
1162
+ msgstr ""
1163
+ "toutes les données insérées par les utilisateurs dans les champs "
1164
+ "supplémentaires seulement"
1165
+
1166
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:640
1167
+ msgid "Force tables creation"
1168
+ msgstr "Forcer la création des tables"
1169
+
1170
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:644
1171
+ msgid ""
1172
+ "equivalent to de-activate and activate the plug-in; no other operation will "
1173
+ "be performed"
1174
+ msgstr ""
1175
+ "équivalent à désactiver et activer le plug-in; aucune autre opération ne "
1176
+ "sera effectuée"
1177
+
1178
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:650
1179
+ msgid "User Profile"
1180
+ msgstr "Profil utilisateur"
1181
+
1182
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:653
1183
+ msgid "Extra Fields section title"
1184
+ msgstr "Titre de la section des champs supplémentaires"
1185
+
1186
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:657
1187
+ msgid "Fieldset's titles, separates with comma"
1188
+ msgstr "Titres des regroupements, séparés par des virgules"
1189
+
1190
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:657
1191
+ msgid "example: title1,title2,title3"
1192
+ msgstr "exemple: titre1,titre2,titre3"
1193
+
1194
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:658
1195
+ msgid ""
1196
+ "<strong>note:</strong> if you change order or remove fieldsets you may need "
1197
+ "to set all extra fields' fieldset assigment again"
1198
+ msgstr ""
1199
+ "<strong>note</strong>: si vous changez l'ordre ou retirez des regroupements, "
1200
+ "vous pourriez devoir refaire l'affection des champs supplémentaires aux "
1201
+ "regroupements"
1202
+
1203
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:663
1204
+ msgid "Authors &amp; Users Extended"
1205
+ msgstr "Auteurs & Utilisateurs étendus"
1206
+
1207
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:668
1208
+ msgid "Hide username field"
1209
+ msgstr "Cacher le champ nom d'utilisateur"
1210
+
1211
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:675
1212
+ msgid "Hide name field"
1213
+ msgstr "Cacher le champ nom"
1214
+
1215
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:682
1216
+ msgid "Hide email field"
1217
+ msgstr "Cacher le champ courriel"
1218
+
1219
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:689
1220
+ msgid "Hide role field"
1221
+ msgstr "Cacher le champ rôle"
1222
+
1223
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:696
1224
+ msgid "Hide website field"
1225
+ msgstr "Cacher le champ du site web"
1226
+
1227
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:703
1228
+ msgid "Hide n. posts field"
1229
+ msgstr "Cacher le champ nombre d'articles"
1230
+
1231
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:709
1232
+ msgid "WordPress hidden fields"
1233
+ msgstr "Champs WordPress cachés"
1234
+
1235
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:715
1236
+ #, fuzzy
1237
+ msgid "Show username"
1238
+ msgstr "Montrer le nom"
1239
+
1240
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:717
1241
+ msgid "when unchecked the email address will be used as username"
1242
+ msgstr ""
1243
+ "si cette case n'est pas cochée, l'adresse courriel sera utilisée comme nom "
1244
+ "d'utilisateur"
1245
+
1246
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:723
1247
+ msgid "Show password"
1248
+ msgstr "Montrer le mot de passe"
1249
+
1250
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:730
1251
+ msgid "Show confirmation password"
1252
+ msgstr "Montrer la confirmation du mot de passe"
1253
+
1254
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:737
1255
+ msgid "Show password strength meter"
1256
+ msgstr "Montrer l'indicateur de sûreté"
1257
+
1258
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:744
1259
+ msgid "Show first name"
1260
+ msgstr "Montrer le prénom"
1261
+
1262
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:751
1263
+ msgid "Show last name"
1264
+ msgstr "Montrer le nom"
1265
+
1266
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:758
1267
+ msgid "Show nickname"
1268
+ msgstr "Montrer le surnom"
1269
+
1270
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:765
1271
+ msgid "Show website"
1272
+ msgstr "Montrer le site web"
1273
+
1274
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:772
1275
+ msgid "Show AIM"
1276
+ msgstr "Montrer AIM"
1277
+
1278
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:779
1279
+ msgid "Show Yahoo IM"
1280
+ msgstr "Montrer Yahoo IM"
1281
+
1282
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:786
1283
+ msgid "Show Jabber / Google Talk"
1284
+ msgstr "Montrer Jabber / Google Talk"
1285
+
1286
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_options.php:793
1287
+ msgid "Show Biographical Info"
1288
+ msgstr "Afficher les renseignements biographiques"
1289
+
1290
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_missing_functions.php:16
1291
+ #, php-format
1292
+ msgid "File '%s' doesn't exist?"
1293
+ msgstr "Le fichier '%s' n'existe pas?"
1294
+
1295
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_missing_functions.php:19
1296
+ msgid "The GD image library is not installed."
1297
+ msgstr "La bibliothèque GD n'est pas installée."
1298
+
1299
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_missing_functions.php:26
1300
+ #, php-format
1301
+ msgid "File '%s' is not an image."
1302
+ msgstr "Le fichier '%s' n'est pas une image."
1303
+
1304
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_db.php:207
1305
+ msgid ""
1306
+ "<strong>Note:</strong> this website let you personalize your password; after "
1307
+ "the registration you will receive an e-mail with another password, do not "
1308
+ "care about that!"
1309
+ msgstr ""
1310
+ "<strong>Note:</strong> ce site web vous permet de personnaliser votre mot de "
1311
+ "passe. Après l'inscription, vous recevrez un courriel avec un autre mot de "
1312
+ "passe, ne vous en préoccupez pas!"
1313
+
1314
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_user_extra_fields.php:218
1315
+ msgid "Password"
1316
+ msgstr "Mot de passe"
1317
+
1318
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_user_extra_fields.php:240
1319
+ msgid "Password confirmation"
1320
+ msgstr "Confirmation du mot de passe"
1321
+
1322
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_user_extra_fields.php:262
1323
+ msgid "First name"
1324
+ msgstr "Prénom"
1325
+
1326
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_user_extra_fields.php:284
1327
+ msgid "Last name"
1328
+ msgstr "Nom"
1329
+
1330
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_user_extra_fields.php:306
1331
+ msgid "Nickname"
1332
+ msgstr "Pseudonyme"
1333
+
1334
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_user_extra_fields.php:350
1335
+ msgid "AIM"
1336
+ msgstr "AIM"
1337
+
1338
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_user_extra_fields.php:372
1339
+ msgid "Yahoo IM"
1340
+ msgstr "Yahoo IM"
1341
+
1342
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_user_extra_fields.php:394
1343
+ msgid "Jabber / Google Talk"
1344
+ msgstr "Jabber / Google Talk"
1345
+
1346
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_user_extra_fields.php:416
1347
+ msgid "Biographical Info"
1348
+ msgstr "Renseignements biographiques"
1349
+
1350
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_functions.php:429
1351
+ msgid "no fieldset"
1352
+ msgstr "aucun regroupement"
1353
+
1354
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_functions.php:433
1355
+ msgid "All"
1356
+ msgstr "Tous"
1357
+
1358
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_functions.php:1018
1359
+ msgid "Done"
1360
+ msgstr "Fait"
1361
+
1362
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_functions.php:1019
1363
+ msgid "&laquo; Previous"
1364
+ msgstr "&laquo; Précédent"
1365
+
1366
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_functions.php:1020
1367
+ msgid "Next &raquo;"
1368
+ msgstr "Suivant &raquo;"
1369
+
1370
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_functions.php:1021
1371
+ msgid "Today"
1372
+ msgstr "Aujourd'hui"
1373
+
1374
+ #: /var/www/wp-content/plugins/cimy-user-extra-fields/cimy_uef_functions.php:1024
1375
+ msgid "Select Month"
1376
+ msgstr "Sélectionner un mois"
1377
+
1378
+ #~ msgid "&laquo; Back to All Users"
1379
+ #~ msgstr "&laquo; Retour &#224; tous les utilisateurs"
1380
+
1381
+ #~ msgid "A&amp;U Extended"
1382
+ #~ msgstr "A&U &#201;tendu"
1383
+
1384
+ #~ msgid "Users Matching \"%s\""
1385
+ #~ msgstr "Utilisateurs correspondant &#224; \"%s\""
1386
+
1387
+ #~ msgid "Users Extended List"
1388
+ #~ msgstr "Liste &#233;tendue des auteurs & des utilisateurs"
1389
+
1390
+ #~ msgid "Authors &amp; Users Extended List"
1391
+ #~ msgstr "Liste &#233;tendue des auteurs & des utilisateurs"
1392
+
1393
+ #~ msgid "Disable get_cimyFieldValue function"
1394
+ #~ msgstr "D&#233;sactiver la fonction get_cimyFieldValue"
1395
+
1396
+ #~ msgid "leave disabled if you don't know what to do"
1397
+ #~ msgstr "Laisser d&#233;sactiv&#233; si vous ne savez pas quoi faire"
1398
+
1399
+ #~ msgid "Update Options &raquo;"
1400
+ #~ msgstr "Mettre &agrave; jour les options &raquo;"
1401
+
1402
+ #~ msgid "Hide actions button"
1403
+ #~ msgstr "Cacher le bouton actions"
1404
+
1405
+ #~ msgid "User ID"
1406
+ #~ msgstr "ID Utilisateur"
1407
+
1408
+ #~ msgid "label"
1409
+ #~ msgstr "label"
readme.txt CHANGED
@@ -3,9 +3,9 @@ Contributors: Marco Cimmino
3
  Donate link: http://www.marcocimmino.net/cimy-wordpress-plugins/support-the-cimy-project-paypal/
4
  Website link: http://www.marcocimmino.net/cimy-wordpress-plugins/cimy-user-extra-fields/
5
  Tags: cimy, admin, registration, profile, extra fields, avatar, gravatar, recaptcha, captcha
6
- Requires at least: 3.1
7
- Tested up to: 4.2
8
- Stable tag: 2.6.5
9
 
10
  Add some useful fields to registration and user's info
11
 
3
  Donate link: http://www.marcocimmino.net/cimy-wordpress-plugins/support-the-cimy-project-paypal/
4
  Website link: http://www.marcocimmino.net/cimy-wordpress-plugins/cimy-user-extra-fields/
5
  Tags: cimy, admin, registration, profile, extra fields, avatar, gravatar, recaptcha, captcha
6
+ Requires at least: 4.3.1
7
+ Tested up to: 4.4
8
+ Stable tag: 2.7.0
9
 
10
  Add some useful fields to registration and user's info
11
 
securimage/README.md ADDED
@@ -0,0 +1,239 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ## Name:
2
+
3
+ **Securimage** - A PHP class for creating captcha images and audio with many options.
4
+
5
+ ## Version:
6
+
7
+ **3.6.2**
8
+
9
+ ## Author:
10
+
11
+ Drew Phillips <drew@drew-phillips.com>
12
+
13
+ ## Download:
14
+
15
+ The latest version can always be found at [phpcaptcha.org](https://www.phpcaptcha.org)
16
+
17
+ ## Documentation:
18
+
19
+ Online documentation of the class, methods, and variables can be found
20
+ at http://www.phpcaptcha.org/Securimage_Docs/
21
+
22
+ ## Requirements:
23
+
24
+ * PHP 5.2 or greater
25
+ * GD 2.0
26
+ * FreeType (Required, for TTF fonts)
27
+ * PDO (if using Sqlite, MySQL, or PostgreSQL)
28
+
29
+ ## Synopsis:
30
+
31
+ **Within your HTML form**
32
+
33
+ <form method="post" action="">
34
+ .. form elements
35
+
36
+ <div>
37
+ <?php
38
+ require_once 'securimage.php';
39
+ echo Securimage::getCaptchaHtml();
40
+ ?>
41
+ </div>
42
+ </form>
43
+
44
+
45
+ **Within your PHP form processor**
46
+
47
+ require_once 'securimage.php';
48
+
49
+ // Code Validation
50
+
51
+ $image = new Securimage();
52
+ if ($image->check($_POST['captcha_code']) == true) {
53
+ echo "Correct!";
54
+ } else {
55
+ echo "Sorry, wrong code.";
56
+ }
57
+
58
+ ## Description:
59
+
60
+ What is **Securimage**?
61
+
62
+ Securimage is a PHP class that is used to generate and validate CAPTCHA images.
63
+
64
+ The classes uses an existing PHP session or creates its own if none is found to
65
+ store the CAPTCHA code. In addition, a database can be used instead of
66
+ session storage.
67
+
68
+ Variables within the class are used to control the style and display of the
69
+ image. The class uses TTF fonts and effects for strengthening the security of
70
+ the image.
71
+
72
+ It also creates audible codes which are played for visually impared users.
73
+
74
+ ## UPGRADE NOTICE:
75
+
76
+ **3.6.2 and above:**
77
+
78
+ If you are upgrading to 3.6.2 or greater *AND* are using database storage,
79
+ the table structure has changed in 3.6.2 adding an audio_data column for
80
+ storing audio files in the database in order to support HTTP range
81
+ requests. Delete your tables and have Securimage recreate them or see
82
+ the function createDatabaseTables() in securimage.php for the new structure
83
+ depending on which database backend you are using and alter the tables as
84
+ needed. If using SQLite, just overwrite your existing securimage.sq3 file
85
+ with the one from this release.
86
+
87
+ *If you are not using database tables for storage, ignore this notice.*
88
+
89
+ ## Copyright:
90
+ Script
91
+ Copyright (c) 2015 Drew Phillips
92
+ All rights reserved.
93
+
94
+ Redistribution and use in source and binary forms, with or without
95
+ modification, are permitted provided that the following conditions are met:
96
+
97
+ - Redistributions of source code must retain the above copyright notice,
98
+ this list of conditions and the following disclaimer.
99
+ - Redistributions in binary form must reproduce the above copyright notice,
100
+ this list of conditions and the following disclaimer in the documentation
101
+ and/or other materials provided with the distribution.
102
+
103
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
104
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
105
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
106
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
107
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
108
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
109
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
110
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
111
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
112
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
113
+ POSSIBILITY OF SUCH DAMAGE.
114
+
115
+ ## Licenses:
116
+
117
+ **WavFile.php**
118
+
119
+ The WavFile.php class used in Securimage by Drew Phillips and Paul Voegler
120
+ is used under the BSD License. See WavFile.php for details.
121
+ Many thanks to Paul Voegler (http://www.voegler.eu/) for contributing to
122
+ Securimage.
123
+ Script
124
+ ---------------------------------------------------------------------------
125
+
126
+ **Flash code for Securimage**
127
+
128
+ Flash code created by Age Bosma & Mario Romero (animario@hotmail.com)
129
+ Many thanks for releasing this to the project!
130
+
131
+ ---------------------------------------------------------------------------
132
+
133
+ **HKCaptcha**
134
+
135
+ Portions of Securimage contain code from Han-Kwang Nienhuys' PHP captcha
136
+
137
+ Han-Kwang Nienhuys' PHP captcha
138
+ Copyright June 2007
139
+
140
+ This copyright message and attribution must be preserved upon
141
+ modification. Redistribution under other licenses is expressly allowed.
142
+ Other licenses include GPL 2 or higher, BSD, and non-free licenses.
143
+ The original, unrestricted version can be obtained from
144
+ http://www.lagom.nl/linux/hkcaptcha/
145
+
146
+ ---------------------------------------------------------------------------
147
+
148
+ **AHGBold.ttf**
149
+
150
+ AHGBold.ttf (AlteHaasGroteskBold.ttf) font was created by Yann Le Coroller
151
+ and is distributed as freeware.
152
+
153
+ Alte Haas Grotesk is a typeface that look like an helvetica printed in an
154
+ old Muller-Brockmann Book.
155
+
156
+ These fonts are freeware and can be distributed as long as they are
157
+ together with this text file.
158
+
159
+ I would appreciate very much to see what you have done with it anyway.
160
+
161
+ yann le coroller
162
+ www.yannlecoroller.com
163
+ yann@lecoroller.com
164
+
165
+ ---------------------------------------------------------------------------
166
+
167
+ **PopForge Flash Library**
168
+
169
+ Portions of securimage_play.swf use the PopForge flash library for playing audio
170
+
171
+ /**
172
+ * Copyright(C) 2007 Andre Michelle and Joa Ebert
173
+ *
174
+ * PopForge is an ActionScript3 code sandbox developed by Andre Michelle
175
+ * and Joa Ebert
176
+ * http://sandbox.popforge.de
177
+ *
178
+ * PopforgeAS3Audio is free software; you can redistribute it and/or modify
179
+ * it under the terms of the GNU General Public License as published by
180
+ * the Free Software Foundation; either version 3 of the License, or
181
+ * (at your option) any later version.
182
+ *
183
+ * PopforgeAS3Audio is distributed in the hope that it will be useful,
184
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
185
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
186
+ * GNU General Public License for more details.
187
+ *
188
+ * You should have received a copy of the GNU General Public License
189
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
190
+ */
191
+
192
+ --------------------------------------------------------------------------
193
+
194
+ **Graphics**
195
+
196
+ Some graphics used are from the Humility Icon Pack by WorLord
197
+
198
+ License: GNU/GPL (http://findicons.com/pack/1723/humility)
199
+ http://findicons.com/icon/192558/gnome_volume_control
200
+ http://findicons.com/icon/192562/gtk_refresh
201
+
202
+ --------------------------------------------------------------------------
203
+
204
+
205
+ **Background noise sound files are from SoundJay.com**
206
+
207
+ http://www.soundjay.com/tos.html
208
+
209
+ All sound effects on this website are created by us and protected under
210
+ the copyright laws, international treaty provisions and other applicable
211
+ laws. By downloading sounds, music or any material from this site implies
212
+ that you have read and accepted these terms and conditions:
213
+
214
+ Sound Effects
215
+ You are allowed to use the sounds free of charge and royalty free in your
216
+ projects (such as films, videos, games, presentations, animations, stage
217
+ plays, radio plays, audio books, apps) be it for commercial or
218
+ non-commercial purposes.
219
+
220
+ But you are NOT allowed to
221
+ - post the sounds (as sound effects or ringtones) on any website for
222
+ others to download, copy or use
223
+ - use them as a raw material to create sound effects or ringtones that
224
+ you will sell, distribute or offer for downloading
225
+ - sell, re-sell, license or re-license the sounds (as individual sound
226
+ effects or as a sound effects library) to anyone else
227
+ - claim the sounds as yours
228
+ - link directly to individual sound files
229
+ - distribute the sounds in apps or computer programs that are clearly
230
+ sound related in nature (such as sound machine, sound effect
231
+ generator, ringtone maker, funny sounds app, sound therapy app, etc.)
232
+ or in apps or computer programs that use the sounds as the program's
233
+ sound resource library for other people's use (such as animation
234
+ creator, digital book creator, song maker software, etc.). If you are
235
+ developing such computer programs, contact us for licensing options.
236
+
237
+ If you use the sound effects, please consider giving us a credit and
238
+ linking back to us but it's not required.
239
+
securimage/README.txt CHANGED
@@ -4,7 +4,7 @@ NAME:
4
 
5
  VERSION:
6
 
7
- 3.5.4
8
 
9
  AUTHOR:
10
 
@@ -70,9 +70,23 @@ DESCRIPTION:
70
 
71
  It also creates audible codes which are played for visually impared users.
72
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
73
  COPYRIGHT:
74
 
75
- Copyright (c) 2014 Drew Phillips
76
  All rights reserved.
77
 
78
  Redistribution and use in source and binary forms, with or without
4
 
5
  VERSION:
6
 
7
+ 3.6.2
8
 
9
  AUTHOR:
10
 
70
 
71
  It also creates audible codes which are played for visually impared users.
72
 
73
+ UPGRADE NOTICE:
74
+
75
+ 3.6.2 and above:
76
+ If you are upgrading to 3.6.2 or greater AND are using database storage,
77
+ the table structure has changed in 3.6.2 adding an audio_data column for
78
+ storing audio files in the database in order to support HTTP range
79
+ requests. Delete your tables and have Securimage recreate them or see
80
+ the function createDatabaseTables() in securimage.php for the new structure
81
+ depending on which database backend you are using and alter the tables as
82
+ needed. If using SQLite, just overwrite your existing securimage.sq3 file
83
+ with the one from this release.
84
+
85
+ If you are not using database tables for storage, ignore this notice.
86
+
87
  COPYRIGHT:
88
 
89
+ Copyright (c) 2015 Drew Phillips
90
  All rights reserved.
91
 
92
  Redistribution and use in source and binary forms, with or without
securimage/WavFile.php CHANGED
@@ -6,7 +6,7 @@
6
  * Project: PHPWavUtils: Classes for creating, reading, and manipulating WAV files in PHP<br />
7
  * File: WavFile.php<br />
8
  *
9
- * Copyright (c) 2012 - 2014, Drew Phillips
10
  * All rights reserved.
11
  *
12
  * Redistribution and use in source and binary forms, with or without modification,
@@ -33,14 +33,16 @@
33
  * Any modifications to the library should be indicated clearly in the source code
34
  * to inform users that the changes are not a part of the original software.<br /><br />
35
  *
36
- * @copyright 2012 Drew Phillips
37
  * @author Drew Phillips <drew@drew-phillips.com>
38
  * @author Paul Voegler <http://www.voegler.eu/>
39
- * @version 1.1 (Feb 2014)
40
  * @package PHPWavUtils
41
  * @license BSD License
42
  *
43
  * Changelog:
 
 
44
  *
45
  * 1.1 (02/8/2014)
46
  * - Add method setIgnoreChunkSizes() to allow reading of wav data with bogus chunk sizes set.
@@ -167,7 +169,7 @@ class WavFile
167
  /** @var int Size of the data chunk in the opened wav file */
168
  protected $_dataSize_fp;
169
 
170
- /** @var int Does _dataSize really reflect strlen($_samples)? Case when a wav file is read with readData = false */
171
  protected $_dataSize_valid;
172
 
173
  /** @var int Starting offset of data chunk */
@@ -176,7 +178,7 @@ class WavFile
176
  /** @var int The audio format - WavFile::WAVE_FORMAT_* */
177
  protected $_audioFormat;
178
 
179
- /** @var int The audio subformat - WavFile::WAVE_SUBFORMAT_* */
180
  protected $_audioSubFormat;
181
 
182
  /** @var int Number of channels in the audio file */
@@ -209,7 +211,7 @@ class WavFile
209
  /** @var string Binary string of samples */
210
  protected $_samples;
211
 
212
- /** @var resource The file pointer used for reading wavs from file or memory */
213
  protected $_fp;
214
 
215
 
@@ -294,7 +296,7 @@ class WavFile
294
  *
295
  * @param string $sampleBinary (Required) The sample to decode.
296
  * @param int $bitDepth (Optional) The bits per sample to decode. If omitted, derives it from the length of $sampleBinary.
297
- * @return int|float The numeric sample value. Float for 32-bit samples. Returns null for unsupported bit depths.
298
  */
299
  public static function unpackSample($sampleBinary, $bitDepth = null)
300
  {
@@ -340,7 +342,7 @@ class WavFile
340
  *
341
  * @param int|float $sample (Required) The sample to encode. Has to be within valid range for $bitDepth. Float values only for 32 bits.
342
  * @param int $bitDepth (Required) The bits per sample to encode with.
343
- * @return string The encoded binary sample. Returns null for unsupported bit depths.
344
  */
345
  public static function packSample($sample, $bitDepth)
346
  {
@@ -467,6 +469,7 @@ class WavFile
467
  return $this->_actualSize;
468
  }
469
 
 
470
  protected function setActualSize($actualSize = null) {
471
  if (is_null($actualSize)) {
472
  $this->_actualSize = 8 + $this->_chunkSize; // + "RIFF" header (ID + size)
@@ -481,6 +484,7 @@ class WavFile
481
  return $this->_chunkSize;
482
  }
483
 
 
484
  protected function setChunkSize($chunkSize = null) {
485
  if (is_null($chunkSize)) {
486
  $this->_chunkSize = 4 + // "WAVE" chunk
@@ -501,6 +505,7 @@ class WavFile
501
  return $this->_fmtChunkSize;
502
  }
503
 
 
504
  protected function setFmtChunkSize($fmtChunkSize = null) {
505
  if (is_null($fmtChunkSize)) {
506
  $this->_fmtChunkSize = 16 + $this->_fmtExtendedSize;
@@ -518,6 +523,7 @@ class WavFile
518
  return $this->_fmtExtendedSize;
519
  }
520
 
 
521
  protected function setFmtExtendedSize($fmtExtendedSize = null) {
522
  if (is_null($fmtExtendedSize)) {
523
  if ($this->_audioFormat == self::WAVE_FORMAT_EXTENSIBLE) {
@@ -540,6 +546,7 @@ class WavFile
540
  return $this->_factChunkSize;
541
  }
542
 
 
543
  protected function setFactChunkSize($factChunkSize = null) {
544
  if (is_null($factChunkSize)) {
545
  if ($this->_audioFormat != self::WAVE_FORMAT_PCM) {
@@ -561,6 +568,7 @@ class WavFile
561
  return $this->_dataSize;
562
  }
563
 
 
564
  protected function setDataSize($dataSize = null) {
565
  if (is_null($dataSize)) {
566
  $this->_dataSize = strlen($this->_samples);
@@ -579,6 +587,7 @@ class WavFile
579
  return $this->_dataOffset;
580
  }
581
 
 
582
  protected function setDataOffset($dataOffset = null) {
583
  if (is_null($dataOffset)) {
584
  $this->_dataOffset = 8 + // "RIFF" header (ID + size)
@@ -597,6 +606,7 @@ class WavFile
597
  return $this->_audioFormat;
598
  }
599
 
 
600
  protected function setAudioFormat($audioFormat = null) {
601
  if (is_null($audioFormat)) {
602
  if (($this->_bitsPerSample <= 16 || $this->_bitsPerSample == 32)
@@ -626,6 +636,7 @@ class WavFile
626
  return $this->_audioSubFormat;
627
  }
628
 
 
629
  protected function setAudioSubFormat($audioSubFormat = null) {
630
  if (is_null($audioSubFormat)) {
631
  if ($this->_bitsPerSample == 32) {
@@ -644,6 +655,7 @@ class WavFile
644
  return $this->_numChannels;
645
  }
646
 
 
647
  public function setNumChannels($numChannels) {
648
  if ($numChannels < 1 || $numChannels > self::MAX_CHANNEL) {
649
  throw new WavFileException('Unsupported number of channels. Only up to ' . self::MAX_CHANNEL . ' channels are supported.');
@@ -746,6 +758,7 @@ class WavFile
746
  return $this->_blockAlign;
747
  }
748
 
 
749
  protected function setBlockAlign($blockAlign = null) {
750
  if (is_null($blockAlign)) {
751
  $this->_blockAlign = $this->_numChannels * $this->_bitsPerSample / 8;
@@ -763,6 +776,7 @@ class WavFile
763
  return $this->_numBlocks;
764
  }
765
 
 
766
  protected function setNumBlocks($numBlocks = null) {
767
  if (is_null($numBlocks)) {
768
  $this->_numBlocks = (int)($this->_dataSize / $this->_blockAlign); // do not count incomplete sample blocks
@@ -777,6 +791,7 @@ class WavFile
777
  return $this->_byteRate;
778
  }
779
 
 
780
  protected function setByteRate($byteRate = null) {
781
  if (is_null($byteRate)) {
782
  $this->_byteRate = $this->_sampleRate * $this->_numChannels * $this->_bitsPerSample / 8;
@@ -1014,7 +1029,7 @@ class WavFile
1014
  /**
1015
  * Read wav file from a stream.
1016
  *
1017
- * @param $readData (Optional) If true, also read the data chunk.
1018
  * @throws WavFormatException
1019
  * @throws WavFileException
1020
  */
@@ -1251,7 +1266,6 @@ class WavFile
1251
  throw new WavFormatException('Missing "data" subchunk.', 101);
1252
  }
1253
 
1254
-
1255
  // check "data" subchunk
1256
  $dataOffset = ftell($this->_fp);
1257
  if ($this->getIgnoreChunkSizes()) {
@@ -1291,8 +1305,8 @@ class WavFile
1291
  /**
1292
  * Read the wav data from the file into the buffer.
1293
  *
1294
- * @param $dataOffset (Optional) The byte offset to skip before starting to read. Must be a multiple of BlockAlign.
1295
- * @param $dataSize (Optional) The size of the data to read in bytes. Must be a multiple of BlockAlign. Defaults to all data.
1296
  * @throws WavFileException
1297
  */
1298
  public function readWavData($dataOffset = 0, $dataSize = null)
@@ -1334,7 +1348,7 @@ class WavFile
1334
  * Return a single sample block from the file.
1335
  *
1336
  * @param int $blockNum (Required) The sample block number. Zero based.
1337
- * @return string The binary sample block (all channels). Returns null if the sample block number was out of range.
1338
  */
1339
  public function getSampleBlock($blockNum)
1340
  {
@@ -1403,7 +1417,7 @@ class WavFile
1403
  *
1404
  * @param int $blockNum (Required) The sample block number to fetch. Zero based.
1405
  * @param int $channelNum (Required) The channel number within the sample block to fetch. First channel is 1.
1406
- * @return float The float sample value. Returns null if the sample block number was out of range.
1407
  * @throws WavFileException
1408
  */
1409
  public function getSampleValue($blockNum, $channelNum)
@@ -1770,8 +1784,8 @@ class WavFile
1770
  */
1771
  public function degrade($quality = 1.0)
1772
  {
1773
- return $this->filter(self::FILTER_DEGRADE, array(
1774
- WavFile::FILTER_DEGRADE => $quality
1775
  ));
1776
  }
1777
 
6
  * Project: PHPWavUtils: Classes for creating, reading, and manipulating WAV files in PHP<br />
7
  * File: WavFile.php<br />
8
  *
9
+ * Copyright (c) 2014, Drew Phillips
10
  * All rights reserved.
11
  *
12
  * Redistribution and use in source and binary forms, with or without modification,
33
  * Any modifications to the library should be indicated clearly in the source code
34
  * to inform users that the changes are not a part of the original software.<br /><br />
35
  *
36
+ * @copyright 2014 Drew Phillips
37
  * @author Drew Phillips <drew@drew-phillips.com>
38
  * @author Paul Voegler <http://www.voegler.eu/>
39
+ * @version 1.1.1 (Sep 2015)
40
  * @package PHPWavUtils
41
  * @license BSD License
42
  *
43
  * Changelog:
44
+ * 1.1.1 (09/08/2015)
45
+ * - Fix degrade() method to call filter correctly (Rasmus Lerdorf)
46
  *
47
  * 1.1 (02/8/2014)
48
  * - Add method setIgnoreChunkSizes() to allow reading of wav data with bogus chunk sizes set.
169
  /** @var int Size of the data chunk in the opened wav file */
170
  protected $_dataSize_fp;
171
 
172
+ /** @var bool Does _dataSize really reflect strlen($_samples)? Case when a wav file is read with readData = false */
173
  protected $_dataSize_valid;
174
 
175
  /** @var int Starting offset of data chunk */
178
  /** @var int The audio format - WavFile::WAVE_FORMAT_* */
179
  protected $_audioFormat;
180
 
181
+ /** @var int|string|null The audio subformat - WavFile::WAVE_SUBFORMAT_* */
182
  protected $_audioSubFormat;
183
 
184
  /** @var int Number of channels in the audio file */
211
  /** @var string Binary string of samples */
212
  protected $_samples;
213
 
214
+ /** @var resource|null The file pointer used for reading wavs from file or memory */
215
  protected $_fp;
216
 
217
 
296
  *
297
  * @param string $sampleBinary (Required) The sample to decode.
298
  * @param int $bitDepth (Optional) The bits per sample to decode. If omitted, derives it from the length of $sampleBinary.
299
+ * @return int|float|null The numeric sample value. Float for 32-bit samples. Returns null for unsupported bit depths.
300
  */
301
  public static function unpackSample($sampleBinary, $bitDepth = null)
302
  {
342
  *
343
  * @param int|float $sample (Required) The sample to encode. Has to be within valid range for $bitDepth. Float values only for 32 bits.
344
  * @param int $bitDepth (Required) The bits per sample to encode with.
345
+ * @return string|null The encoded binary sample. Returns null for unsupported bit depths.
346
  */
347
  public static function packSample($sample, $bitDepth)
348
  {
469
  return $this->_actualSize;
470
  }
471
 
472
+ /** @param int $actualSize */
473
  protected function setActualSize($actualSize = null) {
474
  if (is_null($actualSize)) {
475
  $this->_actualSize = 8 + $this->_chunkSize; // + "RIFF" header (ID + size)
484
  return $this->_chunkSize;
485
  }
486
 
487
+ /** @param int $chunkSize */
488
  protected function setChunkSize($chunkSize = null) {
489
  if (is_null($chunkSize)) {
490
  $this->_chunkSize = 4 + // "WAVE" chunk
505
  return $this->_fmtChunkSize;
506
  }
507
 
508
+ /** @param int $fmtChunkSize */
509
  protected function setFmtChunkSize($fmtChunkSize = null) {
510
  if (is_null($fmtChunkSize)) {
511
  $this->_fmtChunkSize = 16 + $this->_fmtExtendedSize;
523
  return $this->_fmtExtendedSize;
524
  }
525
 
526
+ /** @param int $fmtExtendedSize */
527
  protected function setFmtExtendedSize($fmtExtendedSize = null) {
528
  if (is_null($fmtExtendedSize)) {
529
  if ($this->_audioFormat == self::WAVE_FORMAT_EXTENSIBLE) {
546
  return $this->_factChunkSize;
547
  }
548
 
549
+ /** @param int $factChunkSize */
550
  protected function setFactChunkSize($factChunkSize = null) {
551
  if (is_null($factChunkSize)) {
552
  if ($this->_audioFormat != self::WAVE_FORMAT_PCM) {
568
  return $this->_dataSize;
569
  }
570
 
571
+ /** @param int $dataSize */
572
  protected function setDataSize($dataSize = null) {
573
  if (is_null($dataSize)) {
574
  $this->_dataSize = strlen($this->_samples);
587
  return $this->_dataOffset;
588
  }
589
 
590
+ /** @param int $dataOffset */
591
  protected function setDataOffset($dataOffset = null) {
592
  if (is_null($dataOffset)) {
593
  $this->_dataOffset = 8 + // "RIFF" header (ID + size)
606
  return $this->_audioFormat;
607
  }
608
 
609
+ /** @param int $audioFormat */
610
  protected function setAudioFormat($audioFormat = null) {
611
  if (is_null($audioFormat)) {
612
  if (($this->_bitsPerSample <= 16 || $this->_bitsPerSample == 32)
636
  return $this->_audioSubFormat;
637
  }
638
 
639
+ /** @param int $audioSubFormat */
640
  protected function setAudioSubFormat($audioSubFormat = null) {
641
  if (is_null($audioSubFormat)) {
642
  if ($this->_bitsPerSample == 32) {
655
  return $this->_numChannels;
656
  }
657
 
658
+ /** @param int $numChannels */
659
  public function setNumChannels($numChannels) {
660
  if ($numChannels < 1 || $numChannels > self::MAX_CHANNEL) {
661
  throw new WavFileException('Unsupported number of channels. Only up to ' . self::MAX_CHANNEL . ' channels are supported.');
758
  return $this->_blockAlign;
759
  }
760
 
761
+ /** @param int $blockAlign */
762
  protected function setBlockAlign($blockAlign = null) {
763
  if (is_null($blockAlign)) {
764
  $this->_blockAlign = $this->_numChannels * $this->_bitsPerSample / 8;
776
  return $this->_numBlocks;
777
  }
778
 
779
+ /** @param int $numBlocks */
780
  protected function setNumBlocks($numBlocks = null) {
781
  if (is_null($numBlocks)) {
782
  $this->_numBlocks = (int)($this->_dataSize / $this->_blockAlign); // do not count incomplete sample blocks
791
  return $this->_byteRate;
792
  }
793
 
794
+ /** @param int $byteRate */
795
  protected function setByteRate($byteRate = null) {
796
  if (is_null($byteRate)) {
797
  $this->_byteRate = $this->_sampleRate * $this->_numChannels * $this->_bitsPerSample / 8;
1029
  /**
1030
  * Read wav file from a stream.
1031
  *
1032
+ * @param bool $readData (Optional) If true, also read the data chunk.
1033
  * @throws WavFormatException
1034
  * @throws WavFileException
1035
  */
1266
  throw new WavFormatException('Missing "data" subchunk.', 101);
1267
  }
1268
 
 
1269
  // check "data" subchunk
1270
  $dataOffset = ftell($this->_fp);
1271
  if ($this->getIgnoreChunkSizes()) {
1305
  /**
1306
  * Read the wav data from the file into the buffer.
1307
  *
1308
+ * @param int $dataOffset (Optional) The byte offset to skip before starting to read. Must be a multiple of BlockAlign.
1309
+ * @param int $dataSize (Optional) The size of the data to read in bytes. Must be a multiple of BlockAlign. Defaults to all data.
1310
  * @throws WavFileException
1311
  */
1312
  public function readWavData($dataOffset = 0, $dataSize = null)
1348
  * Return a single sample block from the file.
1349
  *
1350
  * @param int $blockNum (Required) The sample block number. Zero based.
1351
+ * @return string|null The binary sample block (all channels). Returns null if the sample block number was out of range.
1352
  */
1353
  public function getSampleBlock($blockNum)
1354
  {
1417
  *
1418
  * @param int $blockNum (Required) The sample block number to fetch. Zero based.
1419
  * @param int $channelNum (Required) The channel number within the sample block to fetch. First channel is 1.
1420
+ * @return float|null The float sample value. Returns null if the sample block number was out of range.
1421
  * @throws WavFileException
1422
  */
1423
  public function getSampleValue($blockNum, $channelNum)
1784
  */
1785
  public function degrade($quality = 1.0)
1786
  {
1787
+ return $this->filter(array(
1788
+ self::FILTER_DEGRADE => $quality
1789
  ));
1790
  }
1791
 
securimage/captcha.html CHANGED
@@ -1,14 +1,136 @@
1
- <!-- The following is example HTML that can be used on your form -->
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
- <p>
4
- <img id="siimage" style="border: 1px solid #000; margin-right: 15px" src="./securimage_show.php?sid=<?php echo md5(uniqid()) ?>" alt="CAPTCHA Image" align="left">
5
- <object type="application/x-shockwave-flash" data="./securimage_play.swf?bgcol=#ffffff&amp;icon_file=./images/audio_icon.png&amp;audio_file=./securimage_play.php" height="32" width="32">
6
- <param name="movie" value="./securimage_play.swf?bgcol=#ffffff&amp;icon_file=./images/audio_icon.png&amp;audio_file=./securimage_play.php" />
7
- </object>
8
- &nbsp;
9
- <a tabindex="-1" style="border-style: none;" href="#" title="Refresh Image" onclick="document.getElementById('siimage').src = './securimage_show.php?sid=' + Math.random(); this.blur(); return false"><img src="./images/refresh.png" alt="Reload Image" onclick="this.blur()" align="bottom" border="0"></a><br />
10
- <strong>Enter Code*:</strong><br />
11
- <input type="text" name="ct_captcha" size="12" maxlength="16" />
12
- </p>
13
-
14
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <!--
4
+ The following is a complete HTML snippet that can be used on your form for
5
+ displaying the captcha image.
6
+
7
+ This HTML snippet generates a CAPTCHA image, HTML5 audio controls, a button
8
+ to refresh the image and audio, as well as an input field for accepting the
9
+ captcha code input.
10
+
11
+ Modify to fit your needs and the website appearance. The audio section can
12
+ also be removed if desired.
13
+
14
+ The same code is given twice, first as a whole and then repeated with
15
+ inline comments describing the individual elements.
16
+
17
+ Most of this code can be generated automatically with many customization
18
+ options by using the function Securimage::getCaptchaHtml() instead.
19
+ -->
20
+
21
+ <head>
22
+ <meta charset="utf-8">
23
+ <title>Sample CAPTCHA HTML</title>
24
+ <link rel="stylesheet" href="securimage.css" media="screen">
25
+ </head>
26
+ <body>
27
+
28
+ <h4>Note: Running this on a PHP enabled server will likely work, but you should use example_form.php for testing instead.</h4>
29
+
30
+ <div>
31
+ <img style="float: left; padding-right: 5px" id="captcha_image" src="securimage_show.php?<?php echo md5(uniqid(time)) ?>" alt="CAPTCHA Image">
32
+ <div id="captcha_image_audio_div">
33
+ <audio id="captcha_image_audio" preload="none" style="display: none">
34
+ <!-- <source id="captcha_image_source_mp3" src="securimage_play.php?id=1234&amp;format=mp3" type="audio/mpeg"> -->
35
+ <source id="captcha_image_source_wav" src="securimage_play.php?id=1234" type="audio/wav">
36
+ <object type="application/x-shockwave-flash" data="securimage_play.swf?bgcol=%23ffffff&amp;icon_file=images%2Faudio_icon.png&amp;audio_file=securimage_play.php" height="32" width="32">
37
+ <param name="movie" value="securimage_play.swf?bgcol=%23ffffff&amp;icon_file=images%2Faudio_icon.png&amp;audio_file=securimage_play.php" />
38
+ </object>
39
+ </audio>
40
+ </div>
41
+ <div id="captcha_image_audio_controls">
42
+ <a tabindex="-1" class="captcha_play_button" href="securimage_play.php?id=1234 ?>" onclick="return false">
43
+ <img class="captcha_play_image" height="32" width="32" src="images/audio_icon.png" alt="Play CAPTCHA Audio" style="border: 0px">
44
+ <img class="captcha_loading_image rotating" height="32" width="32" src="images/loading.png" alt="Loading audio" style="display: none">
45
+ </a>
46
+ <noscript>Enable Javascript for audio controls</noscript>
47
+ </div>
48
+
49
+ <a tabindex="-1" style="border: 0" href="#" title="Refresh Image" onclick="document.getElementById('captcha_image').src = 'securimage_show.php?' + Math.random(); captcha_image_audioObj.refresh(); this.blur(); return false">
50
+ <img height="32" width="32" src="images/refresh.png" alt="Refresh Image" onclick="this.blur()" style="border: 0px; vertical-align: bottom" />
51
+ </a>
52
+ <br>
53
+
54
+ <script type="text/javascript" src="securimage.js"></script>
55
+ <script type="text/javascript">
56
+ captcha_image_audioObj = new SecurimageAudio({ audioElement: 'captcha_image_audio', controlsElement: 'captcha_image_audio_controls' });
57
+ </script>
58
+ <div style="clear: both"></div>
59
+
60
+ <label for="captcha_code">Type the text:</label>
61
+ <input type="text" name="captcha_code" id="captcha_code">
62
+ </div>
63
+
64
+
65
+ <!-- and once again with comments for clarity -->
66
+ <!-- all IDs have been changed so this *should* work on a PHP enabled server -->
67
+ <!-- example_form.php should really be used for testing though -->
68
+ <br><br>
69
+
70
+
71
+ <div>
72
+ <!-- captcha image element; the <?php echo md5(...) ?> code throughout is to prevent caching issues -->
73
+ <img style="float: left; padding-right: 5px" id="captcha_image2" src="securimage_show.php?<?php echo md5(uniqid(time)) ?>" alt="CAPTCHA Image">
74
 
75
+ <!-- invisible div containing captcha audio tag, and optional flash fallback code -->
76
+ <div id="captcha_image_audio_div2">
77
+ <!-- the audio tag -->
78
+ <audio id="captcha_image2_audio" preload="none" style="display: none">
79
+ <!-- mp3 source tag - uncomment if you have LAME installed -->
80
+ <!-- <source id="captcha_image2_source_mp3" src="securimage_play.php?id=<?php echo uniqid() ?>&amp;format=mp3" type="audio/mpeg"> -->
81
+
82
+ <!-- wav source tag -->
83
+ <source id="captcha_image2_source_wav" src="securimage_play.php?id=<?php echo uniqid() ?>" type="audio/wav">
84
+
85
+ <!-- flash player fallback - delete if you don't want flash fallback -->
86
+ <object type="application/x-shockwave-flash" data="securimage_play.swf?bgcol=%23ffffff&amp;icon_file=images%2Faudio_icon.png&amp;audio_file=securimage_play.php" height="32" width="32">
87
+ <param name="movie" value="securimage_play.swf?bgcol=%23ffffff&amp;icon_file=images%2Faudio_icon.png&amp;audio_file=securimage_play.php" />
88
+ </object>
89
+ </audio>
90
+ </div>
91
+ <!-- div containing the HTML audio controls -->
92
+ <div id="captcha_image2_audio_controls">
93
+ <!-- play button and loading image that gets toggled when audio is loading -->
94
+ <a tabindex="-1" class="captcha_play_button" href="securimage_play.php?id=<?php echo uniqid() ?>" onclick="return false">
95
+ <img class="captcha_play_image" height="32" width="32" src="images/audio_icon.png" alt="Play CAPTCHA Audio" style="border: 0px">
96
+ <img class="captcha_loading_image rotating" height="32" width="32" src="images/loading.png" alt="Loading audio" style="display: none">
97
+ </a>
98
+ <noscript>Enable Javascript for audio controls</noscript>
99
+ </div>
100
+
101
+ <!-- link to refresh the captcha image and audios -->
102
+ <a tabindex="-1" style="border: 0" href="#" title="Refresh Image" onclick="document.getElementById('captcha_image2').src = 'securimage_show.php?' + Math.random(); captcha_image2_audioObj.refresh(); this.blur(); return false">
103
+ <img height="32" width="32" src="images/refresh.png" alt="Refresh Image" onclick="this.blur()" style="border: 0px; vertical-align: bottom" />
104
+ </a>
105
+ <br>
106
+
107
+ <!-- javascript code for refreshing and playing captcha audio -->
108
+ <script type="text/javascript" src="securimage.js"></script>
109
+ <script type="text/javascript">
110
+ captcha_image2_audioObj = new SecurimageAudio({ audioElement: 'captcha_image2_audio', controlsElement: 'captcha_image2_audio_controls' });
111
+ /*
112
+ The SecurimageAudio object accepts a single object paramter with two properties:
113
+ audioElement: the ID of the div containing the <audio> and <source> HTML tags
114
+ controlsElement: the ID of the div containing the audio playback controls
115
+
116
+ Note: securimage.js automatically finds the play and loading images by looking for images with
117
+ class names of captcha_play_image and captcha_loading_image, respectively.
118
+
119
+ The image inside of the controls div including the class name "captcha_play_image" will have
120
+ click events registered to start/stop audio playback
121
+
122
+ The image inside of the controls div including the class name "captcha_loading_image will be
123
+ displayed with the audio is loading and hidden again once playback starts.
124
+
125
+ Clicking the play button starts and stops audio playback.
126
+ */
127
+ </script>
128
+ <div style="clear: both"></div>
129
+
130
+ <!-- captcha input -->
131
+ <label for="captcha_code2">Type the text:</label>
132
+ <input type="text" name="captcha_code2" id="captcha_code2">
133
+ </div>
134
+
135
+ </body>
136
+ </html>
securimage/database/securimage.sq3 CHANGED
Binary file
securimage/example_form.php CHANGED
@@ -1,4 +1,8 @@
1
  <?php
 
 
 
 
2
  session_start(); // this MUST be called prior to any output including whitespaces and line breaks!
3
 
4
  $GLOBALS['DEBUG_MODE'] = 1;
@@ -9,11 +13,13 @@ $GLOBALS['ct_recipient'] = 'YOU@EXAMPLE.COM'; // Change to your email address!
9
  $GLOBALS['ct_msg_subject'] = 'Securimage Test Contact Form';
10
 
11
  ?>
12
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
13
- <html xmlns="http://www.w3.org/1999/xhtml">
14
  <head>
15
- <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
 
16
  <title>Securimage Example Form</title>
 
17
  <style type="text/css">
18
  <!--
19
  div.error { display: block; color: #f00; font-weight: bold; font-size: 1.2em; }
@@ -41,44 +47,45 @@ $GLOBALS['ct_msg_subject'] = 'Securimage Test Contact Form';
41
  process_si_contact_form(); // Process the form, if it was submitted
42
 
43
  if (isset($_SESSION['ctform']['error']) && $_SESSION['ctform']['error'] == true): /* The last form submission had 1 or more errors */ ?>
44
- <div class="error">There was a problem with your submission. Errors are displayed below in red.</div><br />
45
  <?php elseif (isset($_SESSION['ctform']['success']) && $_SESSION['ctform']['success'] == true): /* form was processed successfully */ ?>
46
  <div class="success">The captcha was correct and the message has been sent! The captcha was solved in <?php echo $_SESSION['ctform']['timetosolve'] ?> seconds.</div><br />
47
  <?php endif; ?>
48
 
49
  <form method="post" action="<?php echo htmlspecialchars($_SERVER['REQUEST_URI'] . $_SERVER['QUERY_STRING']) ?>" id="contact_form">
50
- <input type="hidden" name="do" value="contact" />
51
 
52
  <p>
53
  <label for="ct_name">Name*:</label>
54
  <?php echo @$_SESSION['ctform']['name_error'] ?>
55
- <input type="text" name="ct_name" size="35" value="<?php echo htmlspecialchars(@$_SESSION['ctform']['ct_name']) ?>" />
56
  </p>
57
 
58
  <p>
59
  <label for="ct_email">Email*:</label>
60
  <?php echo @$_SESSION['ctform']['email_error'] ?>
61
- <input type="text" name="ct_email" size="35" value="<?php echo htmlspecialchars(@$_SESSION['ctform']['ct_email']) ?>" />
62
  </p>
63
 
64
  <p>
65
  <label for="ct_URL">URL:</label>
66
  <?php echo @$_SESSION['ctform']['URL_error'] ?>
67
- <input type="text" name="ct_URL" size="35" value="<?php echo htmlspecialchars(@$_SESSION['ctform']['ct_URL']) ?>" />
68
  </p>
69
 
70
  <p>
71
  <label for="ct_message">Message*:</label>
72
  <?php echo @$_SESSION['ctform']['message_error'] ?>
73
- <textarea name="ct_message" rows="12" cols="60"><?php echo htmlspecialchars(@$_SESSION['ctform']['ct_message']) ?></textarea>
74
  </p>
75
 
76
- <p>
77
  <?php
78
  // show captcha HTML using Securimage::getCaptchaHtml()
79
  require_once 'securimage.php';
80
  $options = array();
81
- $options['input_name'] = 'ct_captcha'; // change name of input element for form post
 
82
 
83
  if (!empty($_SESSION['ctform']['captcha_error'])) {
84
  // error html to show in captcha output
@@ -87,11 +94,11 @@ if (isset($_SESSION['ctform']['error']) && $_SESSION['ctform']['error'] == true
87
 
88
  echo Securimage::getCaptchaHtml($options);
89
  ?>
90
- </p>
91
 
92
  <p>
93
- <br />
94
- <input type="submit" value="Submit Message" />
95
  </p>
96
 
97
  </form>
@@ -138,7 +145,7 @@ function process_si_contact_form()
138
  if (strlen($email) == 0) {
139
  // no email address given
140
  $errors['email_error'] = 'Email address is required';
141
- } else if ( !preg_match('/^(?:[\w\d-]+\.?)+@(?:(?:[\w\d]\-?)+\.)+\w{2,4}$/i', $email)) {
142
  // invalid email format
143
  $errors['email_error'] = 'Email address entered is invalid';
144
  }
1
  <?php
2
+
3
+ error_reporting(E_ALL);
4
+ ini_set('display_errors', 1);
5
+
6
  session_start(); // this MUST be called prior to any output including whitespaces and line breaks!
7
 
8
  $GLOBALS['DEBUG_MODE'] = 1;
13
  $GLOBALS['ct_msg_subject'] = 'Securimage Test Contact Form';
14
 
15
  ?>
16
+ <!DOCTYPE html>
17
+ <html>
18
  <head>
19
+ <meta charset="utf-8">
20
+ <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
21
  <title>Securimage Example Form</title>
22
+ <link rel="stylesheet" href="securimage.css" media="screen">
23
  <style type="text/css">
24
  <!--
25
  div.error { display: block; color: #f00; font-weight: bold; font-size: 1.2em; }
47
  process_si_contact_form(); // Process the form, if it was submitted
48
 
49
  if (isset($_SESSION['ctform']['error']) && $_SESSION['ctform']['error'] == true): /* The last form submission had 1 or more errors */ ?>
50
+ <div class="error">There was a problem with your submission. Errors are displayed below in red.</div><br>
51
  <?php elseif (isset($_SESSION['ctform']['success']) && $_SESSION['ctform']['success'] == true): /* form was processed successfully */ ?>
52
  <div class="success">The captcha was correct and the message has been sent! The captcha was solved in <?php echo $_SESSION['ctform']['timetosolve'] ?> seconds.</div><br />
53
  <?php endif; ?>
54
 
55
  <form method="post" action="<?php echo htmlspecialchars($_SERVER['REQUEST_URI'] . $_SERVER['QUERY_STRING']) ?>" id="contact_form">
56
+ <input type="hidden" name="do" value="contact">
57
 
58
  <p>
59
  <label for="ct_name">Name*:</label>
60
  <?php echo @$_SESSION['ctform']['name_error'] ?>
61
+ <input type="text" id="ct_name" name="ct_name" size="35" value="<?php echo htmlspecialchars(@$_SESSION['ctform']['ct_name']) ?>">
62
  </p>
63
 
64
  <p>
65
  <label for="ct_email">Email*:</label>
66
  <?php echo @$_SESSION['ctform']['email_error'] ?>
67
+ <input type="text" id="ct_email" name="ct_email" size="35" value="<?php echo htmlspecialchars(@$_SESSION['ctform']['ct_email']) ?>">
68
  </p>
69
 
70
  <p>
71
  <label for="ct_URL">URL:</label>
72
  <?php echo @$_SESSION['ctform']['URL_error'] ?>
73
+ <input type="text" id="ct_URL" name="ct_URL" size="35" value="<?php echo htmlspecialchars(@$_SESSION['ctform']['ct_URL']) ?>">
74
  </p>
75
 
76
  <p>
77
  <label for="ct_message">Message*:</label>
78
  <?php echo @$_SESSION['ctform']['message_error'] ?>
79
+ <textarea id="ct_message" name="ct_message" rows="12" cols="60"><?php echo htmlspecialchars(@$_SESSION['ctform']['ct_message']) ?></textarea>
80
  </p>
81
 
82
+ <div>
83
  <?php
84
  // show captcha HTML using Securimage::getCaptchaHtml()
85
  require_once 'securimage.php';
86
  $options = array();
87
+ $options['input_name'] = 'ct_captcha'; // change name of input element for form post
88
+ $options['disable_flash_fallback'] = false; // allow flash fallback
89
 
90
  if (!empty($_SESSION['ctform']['captcha_error'])) {
91
  // error html to show in captcha output
94
 
95
  echo Securimage::getCaptchaHtml($options);
96
  ?>
97
+ </div>
98
 
99
  <p>
100
+ <br>
101
+ <input type="submit" value="Submit Message">
102
  </p>
103
 
104
  </form>
145
  if (strlen($email) == 0) {
146
  // no email address given
147
  $errors['email_error'] = 'Email address is required';
148
+ } else if ( !preg_match('/^(?:[\w\d-]+\.?)+@(?:(?:[\w\d]\-?)+\.)+\w{2,63}$/i', $email)) {
149
  // invalid email format
150
  $errors['email_error'] = 'Email address entered is invalid';
151
  }
securimage/images/ajax-loader.gif DELETED
Binary file
securimage/images/loading.png ADDED
Binary file
securimage/securimage.css ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @CHARSET "UTF-8";
2
+
3
+ @-webkit-keyframes rotating /* Safari and Chrome */ {
4
+ from {
5
+ -ms-transform: rotate(0deg);
6
+ -moz-transform: rotate(0deg);
7
+ -webkit-transform: rotate(0deg);
8
+ -o-transform: rotate(0deg);
9
+ transform: rotate(0deg);
10
+ }
11
+ to {
12
+ -ms-transform: rotate(360deg);
13
+ -moz-transform: rotate(360deg);
14
+ -webkit-transform: rotate(360deg);
15
+ -o-transform: rotate(360deg);
16
+ transform: rotate(360deg);
17
+ }
18
+ }
19
+ @keyframes rotating {
20
+ from {
21
+ -ms-transform: rotate(0deg);
22
+ -moz-transform: rotate(0deg);
23
+ -webkit-transform: rotate(0deg);
24
+ -o-transform: rotate(0deg);
25
+ transform: rotate(0deg);
26
+ }
27
+ to {
28
+ -ms-transform: rotate(360deg);
29
+ -moz-transform: rotate(360deg);
30
+ -webkit-transform: rotate(360deg);
31
+ -o-transform: rotate(360deg);
32
+ transform: rotate(360deg);
33
+ }
34
+ }
35
+ .rotating {
36
+ -webkit-animation: rotating 1.5s linear infinite;
37
+ -moz-animation: rotating 1.5s linear infinite;
38
+ -ms-animation: rotating 1.5s linear infinite;
39
+ -o-animation: rotating 1.5s linear infinite;
40
+ animation: rotating 1.5s linear infinite;
41
+ }
securimage/securimage.js ADDED
@@ -0,0 +1,251 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Securimage CAPTCHA Audio Library
3
+ * https://www.phpcaptcha.org/
4
+ *
5
+ * Copyright 2015 phpcaptcha.org
6
+ * Released under the BSD-3 license
7
+ * See https://github.com/dapphp/securimage/blob/master/README.md
8
+ */
9
+
10
+ var SecurimageAudio = function(options) {
11
+ this.html5Support = true;
12
+ this.flashFallback = false;
13
+ this.captchaId = null;
14
+ this.playing = false;
15
+ this.reload = false;
16
+ this.audioElement = null;
17
+ this.controlsElement = null;
18
+ this.playButton = null;
19
+ this.playButtonImage = null;
20
+ this.loadingImage = null;
21
+
22
+ if (options.audioElement) {
23
+ this.audioElement = document.getElementById(options.audioElement);
24
+ }
25
+ if (options.controlsElement) {
26
+ this.controlsElement = document.getElementById(options.controlsElement);
27
+ }
28
+
29
+ this.init();
30
+ }
31
+
32
+ SecurimageAudio.prototype.init = function() {
33
+ var ua = navigator.userAgent.toLowerCase();
34
+ var ieVer = (ua.indexOf('msie') != -1) ? parseInt(ua.split('msie')[1]) : false;
35
+ // ie 11+ detection
36
+ if (!ieVer && null != (ieVer = ua.match(/trident\/.*rv:(\d+\.\d+)/)))
37
+ ieVer = parseInt(ieVer[1]);
38
+
39
+ var objAu = this.audioElement.getElementsByTagName('object');
40
+ if (objAu.length > 0) {
41
+ objAu = objAu[0];
42
+ } else {
43
+ objAu = null;
44
+ }
45
+
46
+ if (ieVer) {
47
+ if (ieVer < 9) {
48
+ // no html5 audio support, hide player controls
49
+ this.controlsElement.style.display = 'none';
50
+ this.html5Support = false;
51
+ return ;
52
+ } else if ('' == this.audioElement.canPlayType('audio/wav')) {
53
+ // check for mpeg <source> tag - if not found then fallback to flash
54
+ var sources = this.audioElement.getElementsByTagName('source');
55
+ var mp3support = false;
56
+ var type;
57
+
58
+ if (objAu) {
59
+ this.flashFallback = true;
60
+ }
61
+
62
+ for (var i = 0; i < sources.length; ++i) {
63
+ type = sources[i].attributes["type"].value;
64
+ if (type.toLowerCase().indexOf('mpeg') >= 0 || type.toLowerCase().indexOf('mp3') >= 0) {
65
+ mp3support = true;
66
+ break;
67
+ }
68
+ }
69
+
70
+ if (false == mp3support) {
71
+ // browser supports <audio> but does not support WAV audio and no flash audio available
72
+ this.html5Support = false;
73
+
74
+ if (this.flashFallback) {
75
+ // ie9+? bug - flash object does not display when moved from within audio tag to other dom node
76
+ var newObjAu = document.createElement('object');
77
+ var newParams = document.createElement('param');
78
+ var oldParams = objAu.getElementsByTagName('param');
79
+ this.copyElementAttributes(newObjAu, objAu);
80
+ if (oldParams.length > 0) {
81
+ this.copyElementAttributes(newParams, oldParams[0]);
82
+ newObjAu.appendChild(newParams);
83
+ }
84
+ objAu.parentNode.removeChild(objAu);
85
+ this.audioElement.parentNode.appendChild(newObjAu);
86
+ }
87
+
88
+ this.audioElement.parentNode.removeChild(this.audioElement);
89
+ this.controlsElement.parentNode.removeChild(this.controlsElement);
90
+
91
+ return ;
92
+ }
93
+ }
94
+ }
95
+
96
+ this.audioElement.addEventListener('playing', this.updateControls.bind(this), false);
97
+ this.audioElement.addEventListener('ended', this.audioStopped.bind(this), false);
98
+
99
+ // find the element used as the play button and register click event to play/stop audio
100
+ var children = this.controlsElement.getElementsByTagName('*');
101
+ for (var i = 0; i < children.length; ++i) {
102
+ var el = children[i];
103
+ if (undefined != el.className) {
104
+ if (el.className.indexOf('play_button') >= 0) {
105
+ this.playButton = el;
106
+ el.addEventListener('click', this.play.bind(this), false);
107
+ } else if (el.className.indexOf('play_image') >= 0) {
108
+ this.playButtonImage = el;
109
+ } else if (el.className.indexOf('loading_image') >= 0) {
110
+ this.loadingImage = el;
111
+ }
112
+ }
113
+ }
114
+
115
+ if (objAu) {
116
+ // remove flash object from DOM
117
+ objAu.parentNode.removeChild(objAu);
118
+ }
119
+ }
120
+
121
+ SecurimageAudio.prototype.play = function(evt) {
122
+ if (null != this.playButton) {
123
+ this.playButton.blur();
124
+ }
125
+
126
+ if (this.reload) {
127
+ this.replaceElements();
128
+ this.reload = false;
129
+ }
130
+
131
+ try {
132
+ if (!this.playing) {
133
+ if (this.playButtonImage != null) {
134
+ this.playButtonImage.style.display = 'none';
135
+ }
136
+ if (this.loadingImage != null) {
137
+ this.loadingImage.style.display = '';
138
+ }
139
+ //TODO: FIX, most likely browser doesn't support audio type
140
+ this.audioElement.onerror = this.audioError;
141
+ try {
142
+ this.audioElement.play();
143
+ } catch(ex) {
144
+ alert('Audio error: ' + ex);
145
+ }
146
+ } else {
147
+ this.audioElement.pause();
148
+ if (this.loadingImage != null) {
149
+ this.loadingImage.style.display = 'none';
150
+ }
151
+ if (this.playButtonImage != null) {
152
+ this.playButtonImage.style.display = '';
153
+ }
154
+ this.playing = false;
155
+ }
156
+ } catch (ex) {
157
+ alert('Audio error: ' + ex);
158
+ }
159
+
160
+ if (undefined !== evt) {
161
+ evt.preventDefault();
162
+ }
163
+ return false;
164
+ }
165
+
166
+ SecurimageAudio.prototype.refresh = function(captchaId) {
167
+ if (!this.html5Support) {
168
+ return;
169
+ }
170
+
171
+ if (undefined !== captchaId) {
172
+ this.captchaId = captchaId;
173
+ }
174
+
175
+ this.playing = true;
176
+ this.reload = false;
177
+ this.play(); // stops audio if playing
178
+ this.reload = true;
179
+
180
+ return false;
181
+ }
182
+
183
+ SecurimageAudio.prototype.copyElementAttributes = function(newEl, el) {
184
+ for (var i = 0, atts = el.attributes, n = atts.length; i < n; ++i) {
185
+ newEl.setAttribute(atts[i].nodeName, atts[i].value);
186
+ }
187
+
188
+ return newEl;
189
+ }
190
+
191
+ SecurimageAudio.prototype.replaceElements = function() {
192
+ var parent = this.audioElement.parentNode;
193
+ parent.removeChild(this.audioElement);
194
+
195
+ var newAudioEl = document.createElement('audio');
196
+ newAudioEl.setAttribute('style', 'display: none;');
197
+ newAudioEl.setAttribute('preload', 'false');
198
+
199
+ for (var c = 0; c < this.audioElement.children.length; ++c) {
200
+ if (this.audioElement.children[c].tagName.toLowerCase() != 'source') continue;
201
+ var sourceEl = document.createElement('source');
202
+ this.copyElementAttributes(sourceEl, this.audioElement.children[c]);
203
+ var cid = (null !== this.captchaId) ? this.captchaId : (Math.random() + '').replace('0.', '');
204
+ sourceEl.src = sourceEl.src.replace(/id=[a-zA-Z0-9]+/, 'id=' + cid);
205
+ newAudioEl.appendChild(sourceEl);
206
+ }
207
+
208
+ this.audioElement = null;
209
+ this.audioElement = newAudioEl;
210
+ parent.appendChild(this.audioElement);
211
+
212
+ this.audioElement.addEventListener('playing', this.updateControls.bind(this), false);
213
+ this.audioElement.addEventListener('ended', this.audioStopped.bind(this), false);
214
+ }
215
+
216
+ SecurimageAudio.prototype.updateControls = function() {
217
+ this.playing = true;
218
+ if (this.loadingImage != null) {
219
+ this.loadingImage.style.display = 'none';
220
+ }
221
+ if (this.playButtonImage != null) {
222
+ this.playButtonImage.style.display = '';
223
+ }
224
+ }
225
+
226
+ SecurimageAudio.prototype.audioStopped = function() {
227
+ this.playing = false;
228
+ }
229
+
230
+ SecurimageAudio.prototype.audioError = function(err) {
231
+ var msg = null;
232
+ switch(err.target.error.code) {
233
+ case err.target.error.MEDIA_ERR_ABORTED:
234
+ break;
235
+ case err.target.error.MEDIA_ERR_NETWORK:
236
+ msg = 'A network error caused the audio download to fail.';
237
+ break;
238
+ case err.target.error.MEDIA_ERR_DECODE:
239
+ alert('An error occurred while decoding the audio');
240
+ break;
241
+ case err.target.error.MEDIA_ERR_SRC_NOT_SUPPORTED:
242
+ alert('The audio format is not supported by your browser.');
243
+ break;
244
+ default:
245
+ alert('An unknown error occurred trying to play the audio.');
246
+ break;
247
+ }
248
+ if (msg) {
249
+ alert('Audio playback error: ' + msg);
250
+ }
251
+ }
securimage/securimage.php CHANGED
@@ -6,7 +6,7 @@
6
  * Project: Securimage: A PHP class dealing with CAPTCHA images, audio, and validation
7
  * File: securimage.php
8
  *
9
- * Copyright (c) 2014, Drew Phillips
10
  * All rights reserved.
11
  *
12
  * Redistribution and use in source and binary forms, with or without modification,
@@ -39,20 +39,29 @@
39
  * @link http://www.phpcaptcha.org Securimage PHP CAPTCHA
40
  * @link http://www.phpcaptcha.org/latest.zip Download Latest Version
41
  * @link http://www.phpcaptcha.org/Securimage_Docs/ Online Documentation
42
- * @copyright 2014 Drew Phillips
43
  * @author Drew Phillips <drew@drew-phillips.com>
44
- * @version 3.5.4 (Aug 27, 2014)
45
  * @package Securimage
46
  *
47
  */
48
 
49
  /**
50
 
51
- TODO:
52
- - Implement HTML5 playback of audio using Javascript, DOM, and HTML5 <audio> with Flash fallback
53
-
54
  ChangeLog
55
 
 
 
 
 
 
 
 
 
 
 
 
 
56
  3.5.4
57
  - Fix email validation code in example form files
58
  - Fix backslashes in getCaptchaHtml for img attribute on Windows systems
@@ -300,25 +309,25 @@ class Securimage
300
 
301
  /**
302
  * The background color of the captcha
303
- * @var Securimage_Color
304
  */
305
  public $image_bg_color = '#ffffff';
306
 
307
  /**
308
  * The color of the captcha text
309
- * @var Securimage_Color
310
  */
311
  public $text_color = '#707070';
312
 
313
  /**
314
  * The color of the lines over the captcha
315
- * @var Securimage_Color
316
  */
317
  public $line_color = '#707070';
318
 
319
  /**
320
  * The color of the noise that is drawn
321
- * @var Securimage_Color
322
  */
323
  public $noise_color = '#707070';
324
 
@@ -415,7 +424,7 @@ class Securimage
415
 
416
  /**
417
  * The color of the signature text
418
- * @var Securimage_Color
419
  */
420
  public $signature_color = '#707070';
421
 
@@ -632,6 +641,15 @@ class Securimage
632
  */
633
  public $sox_binary_path = '/usr/bin/sox';
634
 
 
 
 
 
 
 
 
 
 
635
  /**
636
  * The path to the directory containing audio files that will be selected
637
  * randomly and mixed with the captcha audio.
@@ -735,7 +753,7 @@ class Securimage
735
 
736
  /**
737
  * The background image GD resource
738
- * @var resource
739
  */
740
  protected $bgimg;
741
 
@@ -761,7 +779,7 @@ class Securimage
761
  * Either the case-sensitive/insensitive word captcha, or the solution to
762
  * the math captcha.
763
  *
764
- * @var string Captcha challenge value
765
  */
766
  protected $code;
767
 
@@ -836,35 +854,35 @@ class Securimage
836
  /**
837
  * PDO connection when a database is used
838
  *
839
- * @var resource
840
  */
841
  protected $pdo_conn;
842
 
843
  /**
844
- * The GD color resource for the background color
845
  *
846
- * @var resource
847
  */
848
  protected $gdbgcolor;
849
 
850
  /**
851
- * The GD color resource for the text color
852
  *
853
- * @var resource
854
  */
855
  protected $gdtextcolor;
856
 
857
  /**
858
- * The GD color resource for the line color
859
  *
860
- * @var resource
861
  */
862
  protected $gdlinecolor;
863
 
864
  /**
865
- * The GD color resource for the signature text color
866
  *
867
- * @var resource
868
  */
869
  protected $gdsignaturecolor;
870
 
@@ -890,6 +908,24 @@ class Securimage
890
  {
891
  $this->securimage_path = dirname(__FILE__);
892
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
893
  if (is_array($options) && sizeof($options) > 0) {
894
  foreach($options as $prop => $val) {
895
  if ($prop == 'captchaId') {
@@ -1107,14 +1143,25 @@ class Securimage
1107
  *
1108
  * 'securimage_path':
1109
  * Optional: The URI to where securimage is installed (e.g. /securimage)
 
 
 
 
 
1110
  * 'image_id':
1111
  * A string that sets the "id" attribute of the captcha image (default: captcha_image)
1112
  * 'image_alt_text':
1113
  * The alt text of the captcha image (default: CAPTCHA Image)
1114
  * 'show_audio_button':
1115
  * true/false Whether or not to show the audio button (default: true)
 
 
1116
  * 'show_refresh_button':
1117
  * true/false Whether or not to show a button to refresh the image (default: true)
 
 
 
 
1118
  * 'show_text_input':
1119
  * true/false Whether or not to show the text input for the captcha (default: true)
1120
  * 'refresh_alt_text':
@@ -1142,6 +1189,8 @@ class Securimage
1142
  */
1143
  public static function getCaptchaHtml($options = array())
1144
  {
 
 
1145
  if (!isset($options['securimage_path'])) {
1146
  $docroot = (isset($_SERVER['DOCUMENT_ROOT'])) ? $_SERVER['DOCUMENT_ROOT'] : substr($_SERVER['SCRIPT_FILENAME'], 0, -strlen($_SERVER['SCRIPT_NAME']));
1147
  $docroot = realpath($docroot);
@@ -1151,12 +1200,17 @@ class Securimage
1151
  $securimage_path = $options['securimage_path'];
1152
  }
1153
 
 
1154
  $image_id = (isset($options['image_id'])) ? $options['image_id'] : 'captcha_image';
1155
  $image_alt = (isset($options['image_alt_text'])) ? $options['image_alt_text'] : 'CAPTCHA Image';
1156
  $show_audio_btn = (isset($options['show_audio_button'])) ? (bool)$options['show_audio_button'] : true;
 
1157
  $show_refresh_btn = (isset($options['show_refresh_button'])) ? (bool)$options['show_refresh_button'] : true;
 
1158
  $audio_but_bg_col = (isset($options['audio_button_bgcol'])) ? $options['audio_button_bgcol'] : '#ffffff';
1159
  $audio_icon_url = (isset($options['audio_icon_url'])) ? $options['audio_icon_url'] : null;
 
 
1160
  $audio_play_url = (isset($options['audio_play_url'])) ? $options['audio_play_url'] : null;
1161
  $audio_swf_url = (isset($options['audio_swf_url'])) ? $options['audio_swf_url'] : null;
1162
  $show_input = (isset($options['show_text_input'])) ? (bool)$options['show_text_input'] : true;
@@ -1176,12 +1230,19 @@ class Securimage
1176
 
1177
  $image_attr = '';
1178
  if (!is_array($image_attrs)) $image_attrs = array();
1179
- if (!isset($image_attrs['align'])) $image_attrs['align'] = 'left';
1180
  $image_attrs['id'] = $image_id;
1181
 
1182
  $show_path = $securimage_path . '/securimage_show.php?';
 
 
 
 
 
 
 
1183
  if (!empty($namespace)) {
1184
- $show_path .= sprintf('namespace=%s&', $namespace);
1185
  }
1186
  $image_attrs['src'] = $show_path . $rand;
1187
 
@@ -1191,55 +1252,117 @@ class Securimage
1191
  $image_attr .= sprintf('%s="%s" ', $name, htmlspecialchars($val));
1192
  }
1193
 
 
 
1194
  $html = sprintf('<img %s/>', $image_attr);
1195
 
1196
  if ($show_audio_btn) {
1197
  $swf_path = $securimage_path . '/securimage_play.swf';
1198
- $play_path = $securimage_path . '/securimage_play.php';
1199
  $icon_path = $securimage_path . '/images/audio_icon.png';
 
 
 
1200
 
1201
  if (!empty($audio_icon_url)) {
1202
  $icon_path = $audio_icon_url;
1203
  }
1204
 
 
 
 
 
1205
  if (!empty($audio_play_url)) {
1206
- $play_path = $audio_play_url;
 
 
 
 
 
 
 
 
1207
  }
1208
 
1209
  if (!empty($audio_swf_url)) {
1210
  $swf_path = $audio_swf_url;
1211
  }
1212
 
1213
- $html .= sprintf('<object type="application/x-shockwave-flash" data="%s?bgcol=%s&amp;icon_file=%s&amp;audio_file=%s" height="32" width="32">',
1214
- htmlspecialchars($swf_path),
1215
- urlencode($audio_but_bg_col),
1216
- urlencode($icon_path),
1217
- urlencode($play_path)
1218
- );
1219
 
1220
- $html .= sprintf('<param name="movie" value="%s?bgcol=%s&amp;icon_file=%s&amp;audio_file=%s" />',
1221
- htmlspecialchars($swf_path),
1222
- urlencode($audio_but_bg_col),
1223
- urlencode($icon_path),
1224
- urlencode($play_path)
1225
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1226
 
1227
- $html .= '</object><br />';
 
 
 
 
 
 
 
 
 
 
 
1228
  }
1229
 
1230
  if ($show_refresh_btn) {
1231
  $icon_path = $securimage_path . '/images/refresh.png';
1232
- $img_tag = sprintf('<img height="32" width="32" src="%s" alt="%s" onclick="this.blur()" align="bottom" border="0" />',
1233
- htmlspecialchars($icon_path), htmlspecialchars($refresh_alt));
 
 
 
1234
 
1235
- $html .= sprintf('<a tabindex="-1" style="border: 0" href="#" title="%s" onclick="document.getElementById(\'%s\').src = \'%s\' + Math.random(); this.blur(); return false">%s</a><br />',
1236
  htmlspecialchars($refresh_title),
 
1237
  $image_id,
1238
  $show_path,
1239
  $img_tag
1240
  );
1241
  }
1242
 
 
 
 
 
 
 
 
 
 
 
 
1243
  $html .= '<div style="clear: both"></div>';
1244
 
1245
  $html .= sprintf('<label for="%s">%s</label> ',
@@ -1302,15 +1425,34 @@ class Securimage
1302
  * $img->outputAudioFile(); // outputs a wav file to the browser
1303
  * exit;
1304
  *
 
1305
  */
1306
- public function outputAudioFile()
1307
  {
1308
  set_error_handler(array(&$this, 'errorHandler'));
1309
 
1310
- require_once dirname(__FILE__) . '/WavFile.php';
 
 
 
 
 
 
 
 
1311
 
1312
  try {
1313
- $audio = $this->getAudibleCode();
 
 
 
 
 
 
 
 
 
 
1314
  } catch (Exception $ex) {
1315
  if (($fp = @fopen(dirname(__FILE__) . '/si.error_log', 'a+')) !== false) {
1316
  fwrite($fp, date('Y-m-d H:i:s') . ': Securimage audio error "' . $ex->getMessage() . '"' . "\n");
@@ -1320,23 +1462,31 @@ class Securimage
1320
  $audio = $this->audioError();
1321
  }
1322
 
 
 
 
 
 
 
1323
  if ($this->canSendHeaders() || $this->send_headers == false) {
1324
  if ($this->send_headers) {
1325
- $uniq = md5(uniqid(microtime()));
1326
- header("Content-Disposition: attachment; filename=\"securimage_audio-{$uniq}.wav\"");
 
 
 
 
 
 
 
 
1327
  header('Cache-Control: no-store, no-cache, must-revalidate');
1328
  header('Expires: Sun, 1 Jan 2000 12:00:00 GMT');
1329
  header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . 'GMT');
1330
- header('Content-type: audio/x-wav');
1331
-
1332
- if (extension_loaded('zlib')) {
1333
- ini_set('zlib.output_compression', true); // compress output if supported by browser
1334
- } else {
1335
- header('Content-Length: ' . strlen($audio));
1336
- }
1337
  }
1338
 
1339
- echo $audio;
1340
  } else {
1341
  echo '<hr /><strong>'
1342
  .'Failed to generate audio file, content has already been '
@@ -1349,6 +1499,68 @@ class Securimage
1349
  if (!$this->no_exit) exit;
1350
  }
1351
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1352
  /**
1353
  * Return the code from the session or database (if configured). If none exists or was found, an empty string is returned.
1354
  *
@@ -1576,6 +1788,7 @@ class Securimage
1576
 
1577
  /**
1578
  * Scan the directory for a background image to use
 
1579
  */
1580
  protected function getBackgroundFromDirectory()
1581
  {
@@ -1621,7 +1834,7 @@ class Securimage
1621
  }
1622
  } while ($c <= 0); // no negative #'s or 0
1623
 
1624
- $this->code = $c;
1625
  $this->code_display = "$left $sign $right";
1626
  break;
1627
  }
@@ -1674,7 +1887,7 @@ class Securimage
1674
  $x = floor($width2 / 2 - $tx / 2 - $bb[0]);
1675
  $y = round($height2 / 2 - $ty / 2 - $bb[1]);
1676
 
1677
- imagettftext($this->tmpimg, $font_size, 0, $x, $y, $this->gdtextcolor, $this->ttf_file, $this->code_display);
1678
  } else {
1679
  $font_size = $this->image_height * $ratio;
1680
  $bb = imageftbbox($font_size, 0, $this->ttf_file, $this->code_display);
@@ -1683,7 +1896,7 @@ class Securimage
1683
  $x = floor($this->image_width / 2 - $tx / 2 - $bb[0]);
1684
  $y = round($this->image_height / 2 - $ty / 2 - $bb[1]);
1685
 
1686
- imagettftext($this->im, $font_size, 0, $x, $y, $this->gdtextcolor, $this->ttf_file, $this->code_display);
1687
  }
1688
  }
1689
 
@@ -1935,7 +2148,7 @@ class Securimage
1935
  * Seek to a random offset in the file and reads a block of data and returns a line from the file.
1936
  *
1937
  * @param int $numWords Number of words (lines) to read from the file
1938
- * @return string|array Returns a string if only one word is to be read, or an array of words
1939
  */
1940
  protected function readCodeFromFile($numWords = 1)
1941
  {
@@ -2055,6 +2268,7 @@ class Securimage
2055
  $_SESSION['securimage_code_disp'] [$this->namespace] = '';
2056
  $_SESSION['securimage_code_value'][$this->namespace] = '';
2057
  $_SESSION['securimage_code_ctime'][$this->namespace] = '';
 
2058
  }
2059
  $this->clearCodeFromDatabase();
2060
  }
@@ -2076,6 +2290,7 @@ class Securimage
2076
  $_SESSION['securimage_code_disp'] [$this->namespace] = $this->code_display;
2077
  $_SESSION['securimage_code_value'][$this->namespace] = $this->code;
2078
  $_SESSION['securimage_code_ctime'][$this->namespace] = time();
 
2079
  }
2080
 
2081
  if ($this->use_database) {
@@ -2083,6 +2298,47 @@ class Securimage
2083
  }
2084
  }
2085
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2086
  /**
2087
  * Saves the CAPTCHA data to the configured database.
2088
  */
@@ -2104,6 +2360,8 @@ class Securimage
2104
  $code_disp = $this->code_display;
2105
 
2106
  // This is somewhat expensive in PDO Sqlite3 (when there is something to delete)
 
 
2107
  $this->clearCodeFromDatabase();
2108
 
2109
  $query = "INSERT INTO {$this->database_table} ("
@@ -2130,6 +2388,35 @@ class Securimage
2130
  return $success !== false;
2131
  }
2132
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2133
  /**
2134
  * Opens a connection to the configured database.
2135
  *
@@ -2187,7 +2474,7 @@ class Securimage
2187
  }
2188
  } catch (Exception $ex) {
2189
  trigger_error($ex->getMessage(), E_USER_WARNING);
2190
- $this->pdo_conn = null;
2191
  return false;
2192
  }
2193
 
@@ -2300,6 +2587,7 @@ class Securimage
2300
  code VARCHAR(32) NOT NULL,
2301
  code_display VARCHAR(32) NOT NULL,
2302
  created INTEGER NOT NULL,
 
2303
  PRIMARY KEY(id, namespace)
2304
  )";
2305
 
@@ -2313,6 +2601,7 @@ class Securimage
2313
  `code` VARCHAR(32) NOT NULL,
2314
  `code_display` VARCHAR(32) NOT NULL,
2315
  `created` INT NOT NULL,
 
2316
  PRIMARY KEY(id, namespace),
2317
  INDEX(created)
2318
  )";
@@ -2325,6 +2614,7 @@ class Securimage
2325
  code character varying(32) NOT NULL,
2326
  code_display character varying(32) NOT NULL,
2327
  created integer NOT NULL,
 
2328
  CONSTRAINT pkey_id_namespace PRIMARY KEY (id, namespace)
2329
  )";
2330
 
@@ -2383,10 +2673,19 @@ class Securimage
2383
  } else {
2384
  if ( ($row = $stmt->fetch()) !== false ) {
2385
  if (false == $this->isCodeExpired($row['created'])) {
 
 
 
 
 
 
 
 
2386
  $code = array(
2387
  'code' => $row['code'],
2388
  'code_disp' => $row['code_display'],
2389
  'time' => $row['created'],
 
2390
  );
2391
  }
2392
  }
@@ -2433,8 +2732,8 @@ class Securimage
2433
 
2434
  $query = sprintf("DELETE FROM %s WHERE %s - created > %s",
2435
  $this->database_table,
2436
- $this->pdo_conn->quote($now, PDO::PARAM_INT),
2437
- $this->pdo_conn->quote($limit, PDO::PARAM_INT));
2438
 
2439
  $result = $this->pdo_conn->query($query);
2440
  }
@@ -2757,6 +3056,90 @@ class Securimage
2757
  return $data;
2758
  }
2759
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2760
  /**
2761
  * Return a wav file saying there was an error generating file
2762
  *
@@ -2799,7 +3182,7 @@ class Securimage
2799
  /**
2800
  * Convert an html color code to a Securimage_Color
2801
  * @param string $color
2802
- * @param Securimage_Color $default The defalt color to use if $color is invalid
2803
  */
2804
  protected function initColor($color, $default)
2805
  {
6
  * Project: Securimage: A PHP class dealing with CAPTCHA images, audio, and validation
7
  * File: securimage.php
8
  *
9
+ * Copyright (c) 2015, Drew Phillips
10
  * All rights reserved.
11
  *
12
  * Redistribution and use in source and binary forms, with or without modification,
39
  * @link http://www.phpcaptcha.org Securimage PHP CAPTCHA
40
  * @link http://www.phpcaptcha.org/latest.zip Download Latest Version
41
  * @link http://www.phpcaptcha.org/Securimage_Docs/ Online Documentation
42
+ * @copyright 2015 Drew Phillips
43
  * @author Drew Phillips <drew@drew-phillips.com>
44
+ * @version 3.6.2 (Oct 13, 2015)
45
  * @package Securimage
46
  *
47
  */
48
 
49
  /**
50
 
 
 
 
51
  ChangeLog
52
 
53
+ 3.6.2
54
+ - Support HTTP range requests with audio playback (iOS requirement)
55
+ - Add optional config.inc.php for storing global configuration settings
56
+
57
+ 3.6.1
58
+ - Fix copyElement bug in securimage.js for IE Flash fallback
59
+
60
+ 3.6
61
+ - Implement CAPTCHA audio using HTML5 <audio> with optional Flash fallback
62
+ - Support MP3 audio using LAME MP3 Encoder (Internet Explorer 9+ does not support WAV format in <audio> tags)
63
+ - Add getCaptchaHtml() options to support full framework integration (ruifil)
64
+
65
  3.5.4
66
  - Fix email validation code in example form files
67
  - Fix backslashes in getCaptchaHtml for img attribute on Windows systems
309
 
310
  /**
311
  * The background color of the captcha
312
+ * @var Securimage_Color|string
313
  */
314
  public $image_bg_color = '#ffffff';
315
 
316
  /**
317
  * The color of the captcha text
318
+ * @var Securimage_Color|string
319
  */
320
  public $text_color = '#707070';
321
 
322
  /**
323
  * The color of the lines over the captcha
324
+ * @var Securimage_Color|string
325
  */
326
  public $line_color = '#707070';
327
 
328
  /**
329
  * The color of the noise that is drawn
330
+ * @var Securimage_Color|string
331
  */
332
  public $noise_color = '#707070';
333
 
424
 
425
  /**
426
  * The color of the signature text
427
+ * @var Securimage_Color|string
428
  */
429
  public $signature_color = '#707070';
430
 
641
  */
642
  public $sox_binary_path = '/usr/bin/sox';
643
 
644
+ /**
645
+ * The path to the lame (mp3 encoder) binary on your system
646
+ * Static so that Securimage::getCaptchaHtml() has access to this value.
647
+ *
648
+ * @since 3.6
649
+ * @var string
650
+ */
651
+ public static $lame_binary_path = '/usr/bin/lame';
652
+
653
  /**
654
  * The path to the directory containing audio files that will be selected
655
  * randomly and mixed with the captcha audio.
753
 
754
  /**
755
  * The background image GD resource
756
+ * @var string
757
  */
758
  protected $bgimg;
759
 
779
  * Either the case-sensitive/insensitive word captcha, or the solution to
780
  * the math captcha.
781
  *
782
+ * @var string|bool Captcha challenge value
783
  */
784
  protected $code;
785
 
854
  /**
855
  * PDO connection when a database is used
856
  *
857
+ * @var PDO|bool
858
  */
859
  protected $pdo_conn;
860
 
861
  /**
862
+ * The GD color for the background color
863
  *
864
+ * @var int
865
  */
866
  protected $gdbgcolor;
867
 
868
  /**
869
+ * The GD color for the text color
870
  *
871
+ * @var int
872
  */
873
  protected $gdtextcolor;
874
 
875
  /**
876
+ * The GD color for the line color
877
  *
878
+ * @var int
879
  */
880
  protected $gdlinecolor;
881
 
882
  /**
883
+ * The GD color for the signature text color
884
  *
885
+ * @var int
886
  */
887
  protected $gdsignaturecolor;
888
 
908
  {
909
  $this->securimage_path = dirname(__FILE__);
910
 
911
+ if (!is_array($options)) {
912
+ trigger_error(
913
+ '$options passed to Securimage::__construct() must be an array. ' .
914
+ gettype($options) . ' given',
915
+ E_USER_WARNING
916
+ );
917
+ $options = array();
918
+ }
919
+
920
+ // check for and load settings from custom config file
921
+ if (file_exists(dirname(__FILE__) . '/config.inc.php')) {
922
+ $settings = include dirname(__FILE__) . '/config.inc.php';
923
+
924
+ if (is_array($settings)) {
925
+ $options = array_merge($settings, $options);
926
+ }
927
+ }
928
+
929
  if (is_array($options) && sizeof($options) > 0) {
930
  foreach($options as $prop => $val) {
931
  if ($prop == 'captchaId') {
1143
  *
1144
  * 'securimage_path':
1145
  * Optional: The URI to where securimage is installed (e.g. /securimage)
1146
+ * 'show_image_url':
1147
+ * Path to the securimage_show.php script (useful when integrating with a framework or moving outside the securimage directory)
1148
+ * This will be passed as a urlencoded string to the <img> tag for outputting the captcha image
1149
+ * 'audio_play_url':
1150
+ * Same as show_image_url, except this indicates the URL of the audio playback script
1151
  * 'image_id':
1152
  * A string that sets the "id" attribute of the captcha image (default: captcha_image)
1153
  * 'image_alt_text':
1154
  * The alt text of the captcha image (default: CAPTCHA Image)
1155
  * 'show_audio_button':
1156
  * true/false Whether or not to show the audio button (default: true)
1157
+ * 'disable_flash_fallback':)
1158
+ * Allow only HTML5 audio and disable Flash fallback
1159
  * 'show_refresh_button':
1160
  * true/false Whether or not to show a button to refresh the image (default: true)
1161
+ * 'audio_icon_url':
1162
+ * URL to the image used for showing the HTML5 audio icon
1163
+ * 'icon_size':
1164
+ * Size (for both height & width) in pixels of the audio and refresh buttons
1165
  * 'show_text_input':
1166
  * true/false Whether or not to show the text input for the captcha (default: true)
1167
  * 'refresh_alt_text':
1189
  */
1190
  public static function getCaptchaHtml($options = array())
1191
  {
1192
+ static $javascript_init = false;
1193
+
1194
  if (!isset($options['securimage_path'])) {
1195
  $docroot = (isset($_SERVER['DOCUMENT_ROOT'])) ? $_SERVER['DOCUMENT_ROOT'] : substr($_SERVER['SCRIPT_FILENAME'], 0, -strlen($_SERVER['SCRIPT_NAME']));
1196
  $docroot = realpath($docroot);
1200
  $securimage_path = $options['securimage_path'];
1201
  }
1202
 
1203
+ $show_image_url = (isset($options['show_image_url'])) ? $options['show_image_url'] : null;
1204
  $image_id = (isset($options['image_id'])) ? $options['image_id'] : 'captcha_image';
1205
  $image_alt = (isset($options['image_alt_text'])) ? $options['image_alt_text'] : 'CAPTCHA Image';
1206
  $show_audio_btn = (isset($options['show_audio_button'])) ? (bool)$options['show_audio_button'] : true;
1207
+ $disable_flash_fbk = (isset($options['disable_flash_fallback'])) ? (bool)$options['disable_flash_fallback'] : false;
1208
  $show_refresh_btn = (isset($options['show_refresh_button'])) ? (bool)$options['show_refresh_button'] : true;
1209
+ $refresh_icon_url = (isset($options['refresh_icon_url'])) ? $options['refresh_icon_url'] : null;
1210
  $audio_but_bg_col = (isset($options['audio_button_bgcol'])) ? $options['audio_button_bgcol'] : '#ffffff';
1211
  $audio_icon_url = (isset($options['audio_icon_url'])) ? $options['audio_icon_url'] : null;
1212
+ $loading_icon_url = (isset($options['loading_icon_url'])) ? $options['loading_icon_url'] : null;
1213
+ $icon_size = (isset($options['icon_size'])) ? $options['icon_size'] : 32;
1214
  $audio_play_url = (isset($options['audio_play_url'])) ? $options['audio_play_url'] : null;
1215
  $audio_swf_url = (isset($options['audio_swf_url'])) ? $options['audio_swf_url'] : null;
1216
  $show_input = (isset($options['show_text_input'])) ? (bool)$options['show_text_input'] : true;
1230
 
1231
  $image_attr = '';
1232
  if (!is_array($image_attrs)) $image_attrs = array();
1233
+ if (!isset($image_attrs['style'])) $image_attrs['style'] = 'float: left; padding-right: 5px';
1234
  $image_attrs['id'] = $image_id;
1235
 
1236
  $show_path = $securimage_path . '/securimage_show.php?';
1237
+ if ($show_image_url) {
1238
+ if (parse_url($show_image_url, PHP_URL_QUERY)) {
1239
+ $show_path = "{$show_image_url}&";
1240
+ } else {
1241
+ $show_path = "{$show_image_url}?";
1242
+ }
1243
+ }
1244
  if (!empty($namespace)) {
1245
+ $show_path .= sprintf('namespace=%s&amp;', $namespace);
1246
  }
1247
  $image_attrs['src'] = $show_path . $rand;
1248
 
1252
  $image_attr .= sprintf('%s="%s" ', $name, htmlspecialchars($val));
1253
  }
1254
 
1255
+ $audio_obj = null;
1256
+
1257
  $html = sprintf('<img %s/>', $image_attr);
1258
 
1259
  if ($show_audio_btn) {
1260
  $swf_path = $securimage_path . '/securimage_play.swf';
1261
+ $play_path = $securimage_path . '/securimage_play.php?';
1262
  $icon_path = $securimage_path . '/images/audio_icon.png';
1263
+ $load_path = $securimage_path . '/images/loading.png';
1264
+ $js_path = $securimage_path . '/securimage.js';
1265
+ $audio_obj = $image_id . '_audioObj';
1266
 
1267
  if (!empty($audio_icon_url)) {
1268
  $icon_path = $audio_icon_url;
1269
  }
1270
 
1271
+ if (!empty($loading_icon_url)) {
1272
+ $load_path = $loading_icon_url;
1273
+ }
1274
+
1275
  if (!empty($audio_play_url)) {
1276
+ if (parse_url($audio_play_url, PHP_URL_QUERY)) {
1277
+ $play_path = "{$audio_play_url}&";
1278
+ } else {
1279
+ $play_path = "{$audio_play_url}?";
1280
+ }
1281
+ }
1282
+
1283
+ if (!empty($namespace)) {
1284
+ $play_path .= sprintf('namespace=%s&amp;', $namespace);
1285
  }
1286
 
1287
  if (!empty($audio_swf_url)) {
1288
  $swf_path = $audio_swf_url;
1289
  }
1290
 
1291
+ // html5 audio
1292
+ $html .= sprintf('<div id="%s_audio_div">', $image_id) . "\n" .
1293
+ sprintf('<audio id="%s_audio" preload="none" style="display: none">', $image_id) . "\n";
 
 
 
1294
 
1295
+ // check for existence and executability of LAME binary
1296
+ // prefer mp3 over wav by sourcing it first, if available
1297
+ if (is_executable(Securimage::$lame_binary_path)) {
1298
+ $html .= sprintf('<source id="%s_source_mp3" src="%sid=%s&amp;format=mp3" type="audio/mpeg">', $image_id, $play_path, uniqid()) . "\n";
1299
+ }
1300
+
1301
+ // output wav source
1302
+ $html .= sprintf('<source id="%s_source_wav" src="%sid=%s" type="audio/wav">', $image_id, $play_path, uniqid()) . "\n";
1303
+
1304
+ // flash audio button
1305
+ if (!$disable_flash_fbk) {
1306
+ $html .= sprintf('<object type="application/x-shockwave-flash" data="%s?bgcol=%s&amp;icon_file=%s&amp;audio_file=%s" height="%d" width="%d">',
1307
+ htmlspecialchars($swf_path),
1308
+ urlencode($audio_but_bg_col),
1309
+ urlencode($icon_path),
1310
+ urlencode(html_entity_decode($play_path)),
1311
+ $icon_size, $icon_size
1312
+ );
1313
+
1314
+ $html .= sprintf('<param name="movie" value="%s?bgcol=%s&amp;icon_file=%s&amp;audio_file=%s" />',
1315
+ htmlspecialchars($swf_path),
1316
+ urlencode($audio_but_bg_col),
1317
+ urlencode($icon_path),
1318
+ urlencode(html_entity_decode($play_path))
1319
+ );
1320
+
1321
+ $html .= '</object><br />';
1322
+ }
1323
 
1324
+ // html5 audio close
1325
+ $html .= "</audio>\n</div>\n";
1326
+
1327
+ // html5 audio controls
1328
+ $html .= sprintf('<div id="%s_audio_controls">', $image_id) . "\n" .
1329
+ sprintf('<a tabindex="-1" class="captcha_play_button" href="%sid=%s" onclick="return false">',
1330
+ $play_path, uniqid()
1331
+ ) . "\n" .
1332
+ sprintf('<img class="captcha_play_image" height="%d" width="%d" src="%s" alt="Play CAPTCHA Audio" style="border: 0px">', $icon_size, $icon_size, htmlspecialchars($icon_path)) . "\n" .
1333
+ sprintf('<img class="captcha_loading_image rotating" height="%d" width="%d" src="%s" alt="Loading audio" style="display: none">', $icon_size, $icon_size, htmlspecialchars($load_path)) . "\n" .
1334
+ "</a>\n<noscript>Enable Javascript for audio controls</noscript>\n" .
1335
+ "</div>\n";
1336
  }
1337
 
1338
  if ($show_refresh_btn) {
1339
  $icon_path = $securimage_path . '/images/refresh.png';
1340
+ if ($refresh_icon_url) {
1341
+ $icon_path = $refresh_icon_url;
1342
+ }
1343
+ $img_tag = sprintf('<img height="%d" width="%d" src="%s" alt="%s" onclick="this.blur()" style="border: 0px; vertical-align: bottom" />',
1344
+ $icon_size, $icon_size, htmlspecialchars($icon_path), htmlspecialchars($refresh_alt));
1345
 
1346
+ $html .= sprintf('<a tabindex="-1" style="border: 0" href="#" title="%s" onclick="%sdocument.getElementById(\'%s\').src = \'%s\' + Math.random(); this.blur(); return false">%s</a><br />',
1347
  htmlspecialchars($refresh_title),
1348
+ ($audio_obj) ? "{$audio_obj}.refresh(); " : '',
1349
  $image_id,
1350
  $show_path,
1351
  $img_tag
1352
  );
1353
  }
1354
 
1355
+ if ($show_audio_btn) {
1356
+ // html5 javascript
1357
+ if (!$javascript_init) {
1358
+ $html .= sprintf('<script type="text/javascript" src="%s"></script>', $js_path) . "\n";
1359
+ $javascript_init = true;
1360
+ }
1361
+ $html .= '<script type="text/javascript">' .
1362
+ "$audio_obj = new SecurimageAudio({ audioElement: '{$image_id}_audio', controlsElement: '{$image_id}_audio_controls' });" .
1363
+ "</script>\n";
1364
+ }
1365
+
1366
  $html .= '<div style="clear: both"></div>';
1367
 
1368
  $html .= sprintf('<label for="%s">%s</label> ',
1425
  * $img->outputAudioFile(); // outputs a wav file to the browser
1426
  * exit;
1427
  *
1428
+ * @param string $format
1429
  */
1430
+ public function outputAudioFile($format = null)
1431
  {
1432
  set_error_handler(array(&$this, 'errorHandler'));
1433
 
1434
+ if (isset($_SERVER['HTTP_RANGE'])) {
1435
+ $range = true;
1436
+ $rangeId = (isset($_SERVER['HTTP_X_PLAYBACK_SESSION_ID'])) ?
1437
+ 'ID' . $_SERVER['HTTP_X_PLAYBACK_SESSION_ID'] :
1438
+ 'ID' . md5($_SERVER['REQUEST_URI']);
1439
+ $uniq = $rangeId;
1440
+ } else {
1441
+ $uniq = md5(uniqid(microtime()));
1442
+ }
1443
 
1444
  try {
1445
+ if (!($audio = $this->getAudioData())) {
1446
+ // if previously generated audio not found for current captcha
1447
+ require_once dirname(__FILE__) . '/WavFile.php';
1448
+ $audio = $this->getAudibleCode();
1449
+
1450
+ if (strtolower($format) == 'mp3') {
1451
+ $audio = $this->wavToMp3($audio);
1452
+ }
1453
+
1454
+ $this->saveAudioData($audio);
1455
+ }
1456
  } catch (Exception $ex) {
1457
  if (($fp = @fopen(dirname(__FILE__) . '/si.error_log', 'a+')) !== false) {
1458
  fwrite($fp, date('Y-m-d H:i:s') . ': Securimage audio error "' . $ex->getMessage() . '"' . "\n");
1462
  $audio = $this->audioError();
1463
  }
1464
 
1465
+ if ($this->no_session != true) {
1466
+ // close session to make it available to other requests in the event
1467
+ // streaming the audio takes sevaral seconds or more
1468
+ session_write_close();
1469
+ }
1470
+
1471
  if ($this->canSendHeaders() || $this->send_headers == false) {
1472
  if ($this->send_headers) {
1473
+ if ($format == 'mp3') {
1474
+ $ext = 'mp3';
1475
+ $type = 'audio/mpeg';
1476
+ } else {
1477
+ $ext = 'wav';
1478
+ $type = 'audio/wav';
1479
+ }
1480
+
1481
+ header('Accept-Ranges: bytes');
1482
+ header("Content-Disposition: attachment; filename=\"securimage_audio-{$uniq}.{$ext}\"");
1483
  header('Cache-Control: no-store, no-cache, must-revalidate');
1484
  header('Expires: Sun, 1 Jan 2000 12:00:00 GMT');
1485
  header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . 'GMT');
1486
+ header('Content-type: ' . $type);
 
 
 
 
 
 
1487
  }
1488
 
1489
+ $this->rangeDownload($audio);
1490
  } else {
1491
  echo '<hr /><strong>'
1492
  .'Failed to generate audio file, content has already been '
1499
  if (!$this->no_exit) exit;
1500
  }
1501
 
1502
+ /**
1503
+ * Output audio data with http range support. Typically this shouldn't be
1504
+ * called directly unless being used with a custom implentation. Use
1505
+ * Securimage::outputAudioFile instead.
1506
+ *
1507
+ * @param string $audio Raw wav or mp3 audio file content
1508
+ */
1509
+ public function rangeDownload($audio)
1510
+ {
1511
+ /* Congratulations Firefox Android/Linux/Windows for being the most
1512
+ * sensible browser of all when streaming HTML5 audio!
1513
+ *
1514
+ * Chrome on Android and iOS on iPad/iPhone both make extra HTTP requests
1515
+ * for the audio whether on WiFi or the mobile network resulting in
1516
+ * multiple downloads of the audio file and wasted bandwidth.
1517
+ *
1518
+ * If I'm doing something wrong in this code or anyone knows why, I'd
1519
+ * love to hear from you.
1520
+ */
1521
+ $audioLength = $size = strlen($audio);
1522
+
1523
+ if (isset($_SERVER['HTTP_RANGE'])) {
1524
+ list( , $range) = explode('=', $_SERVER['HTTP_RANGE']); // bytes=byte-range-set
1525
+ $range = trim($range);
1526
+
1527
+ if (strpos($range, ',') !== false) {
1528
+ // eventually, we should handle requests with multiple ranges
1529
+ // most likely these types of requests will never be sent
1530
+ header('HTTP/1.1 416 Range Not Satisfiable');
1531
+ echo "<h1>Range Not Satisfiable</h1>";
1532
+ exit;
1533
+ } else if (preg_match('/(\d+)-(\d+)/', $range, $match)) {
1534
+ // bytes n - m
1535
+ $range = array(intval($match[1]), intval($match[2]));
1536
+ } else if (preg_match('/(\d+)-$/', $range, $match)) {
1537
+ // bytes n - last byte of file
1538
+ $range = array(intval($match[1]), null);
1539
+ } else if (preg_match('/-(\d+)/', $range, $match)) {
1540
+ // final n bytes of file
1541
+ $range = array($size - intval($match[1]), $size - 1);
1542
+ }
1543
+
1544
+ if ($range[1] === null) $range[1] = $size - 1;
1545
+ $length = $range[1] - $range[0] + 1;
1546
+ $audio = substr($audio, $range[0], $length);
1547
+ $audioLength = strlen($audio);
1548
+
1549
+ header('HTTP/1.1 206 Partial Content');
1550
+ header("Content-Range: bytes {$range[0]}-{$range[1]}/{$size}");
1551
+
1552
+ if ($range[0] < 0 ||$range[1] >= $size || $range[0] >= $size || $range[0] > $range[1]) {
1553
+ header('HTTP/1.1 416 Range Not Satisfiable');
1554
+ echo "<h1>Range Not Satisfiable</h1>";
1555
+ exit;
1556
+ }
1557
+ }
1558
+
1559
+ header('Content-Length: ' . $audioLength);
1560
+
1561
+ echo $audio;
1562
+ }
1563
+
1564
  /**
1565
  * Return the code from the session or database (if configured). If none exists or was found, an empty string is returned.
1566
  *
1788
 
1789
  /**
1790
  * Scan the directory for a background image to use
1791
+ * @return string|bool
1792
  */
1793
  protected function getBackgroundFromDirectory()
1794
  {
1834
  }
1835
  } while ($c <= 0); // no negative #'s or 0
1836
 
1837
+ $this->code = "$c";
1838
  $this->code_display = "$left $sign $right";
1839
  break;
1840
  }
1887
  $x = floor($width2 / 2 - $tx / 2 - $bb[0]);
1888
  $y = round($height2 / 2 - $ty / 2 - $bb[1]);
1889
 
1890
+ imagettftext($this->tmpimg, $font_size, 0, (int)$x, (int)$y, $this->gdtextcolor, $this->ttf_file, $this->code_display);
1891
  } else {
1892
  $font_size = $this->image_height * $ratio;
1893
  $bb = imageftbbox($font_size, 0, $this->ttf_file, $this->code_display);
1896
  $x = floor($this->image_width / 2 - $tx / 2 - $bb[0]);
1897
  $y = round($this->image_height / 2 - $ty / 2 - $bb[1]);
1898
 
1899
+ imagettftext($this->im, $font_size, 0, (int)$x, (int)$y, $this->gdtextcolor, $this->ttf_file, $this->code_display);
1900
  }
1901
  }
1902
 
2148
  * Seek to a random offset in the file and reads a block of data and returns a line from the file.
2149
  *
2150
  * @param int $numWords Number of words (lines) to read from the file
2151
+ * @return string|array|bool Returns a string if only one word is to be read, or an array of words
2152
  */
2153
  protected function readCodeFromFile($numWords = 1)
2154
  {
2268
  $_SESSION['securimage_code_disp'] [$this->namespace] = '';
2269
  $_SESSION['securimage_code_value'][$this->namespace] = '';
2270
  $_SESSION['securimage_code_ctime'][$this->namespace] = '';
2271
+ $_SESSION['securimage_code_audio'][$this->namespace] = '';
2272
  }
2273
  $this->clearCodeFromDatabase();
2274
  }
2290
  $_SESSION['securimage_code_disp'] [$this->namespace] = $this->code_display;
2291
  $_SESSION['securimage_code_value'][$this->namespace] = $this->code;
2292
  $_SESSION['securimage_code_ctime'][$this->namespace] = time();
2293
+ $_SESSION['securimage_code_audio'][$this->namespace] = null; // clear previous audio, if set
2294
  }
2295
 
2296
  if ($this->use_database) {
2298
  }
2299
  }
2300
 
2301
+ /**
2302
+ * Save audio data to session and/or the configured database
2303
+ *
2304
+ * @param string $data The CAPTCHA audio data
2305
+ */
2306
+ protected function saveAudioData($data)
2307
+ {
2308
+ if ($this->no_session != true) {
2309
+ $_SESSION['securimage_code_audio'][$this->namespace] = $data;
2310
+ }
2311
+
2312
+ if ($this->use_database) {
2313
+ $this->saveAudioToDatabase($data);
2314
+ }
2315
+ }
2316
+
2317
+ /**
2318
+ * Gets audio file contents from the session or database
2319
+ *
2320
+ * @return string|boolean Audio contents on success, or false if no audio found in session or DB
2321
+ */
2322
+ protected function getAudioData()
2323
+ {
2324
+ if ($this->no_session != true) {
2325
+ if (isset($_SESSION['securimage_code_audio'][$this->namespace])) {
2326
+ return $_SESSION['securimage_code_audio'][$this->namespace];
2327
+ }
2328
+ }
2329
+
2330
+ if ($this->use_database) {
2331
+ $this->openDatabase();
2332
+ $code = $this->getCodeFromDatabase();
2333
+
2334
+ if (!empty($code['audio_data'])) {
2335
+ return $code['audio_data'];
2336
+ }
2337
+ }
2338
+
2339
+ return false;
2340
+ }
2341
+
2342
  /**
2343
  * Saves the CAPTCHA data to the configured database.
2344
  */
2360
  $code_disp = $this->code_display;
2361
 
2362
  // This is somewhat expensive in PDO Sqlite3 (when there is something to delete)
2363
+ // Clears previous captcha for this client from database so we can do a straight insert
2364
+ // without having to do INSERT ... ON DUPLICATE KEY or a find/update
2365
  $this->clearCodeFromDatabase();
2366
 
2367
  $query = "INSERT INTO {$this->database_table} ("
2388
  return $success !== false;
2389
  }
2390
 
2391
+ /**
2392
+ * Saves CAPTCHA audio to the configured database
2393
+ *
2394
+ * @param string $data Audio data
2395
+ * @return boolean true on success, false on failure
2396
+ */
2397
+ protected function saveAudioToDatabase($data)
2398
+ {
2399
+ $success = false;
2400
+ $this->openDatabase();
2401
+
2402
+ if ($this->use_database && $this->pdo_conn) {
2403
+ $id = $this->getCaptchaId(false);
2404
+ $ip = $_SERVER['REMOTE_ADDR'];
2405
+
2406
+ if (empty($id)) {
2407
+ $id = $ip;
2408
+ }
2409
+
2410
+ $query = "UPDATE {$this->database_table} SET audio_data = :audioData WHERE id = :id";
2411
+ $stmt = $this->pdo_conn->prepare($query);
2412
+ $stmt->bindParam(':audioData', $data, PDO::PARAM_LOB);
2413
+ $stmt->bindParam(':id', $id);
2414
+ $success = $stmt->execute();
2415
+ }
2416
+
2417
+ return $success !== false;
2418
+ }
2419
+
2420
  /**
2421
  * Opens a connection to the configured database.
2422
  *
2474
  }
2475
  } catch (Exception $ex) {
2476
  trigger_error($ex->getMessage(), E_USER_WARNING);
2477
+ $this->pdo_conn = false;
2478
  return false;
2479
  }
2480
 
2587
  code VARCHAR(32) NOT NULL,
2588
  code_display VARCHAR(32) NOT NULL,
2589
  created INTEGER NOT NULL,
2590
+ audio_data BLOB NULL,
2591
  PRIMARY KEY(id, namespace)
2592
  )";
2593
 
2601
  `code` VARCHAR(32) NOT NULL,
2602
  `code_display` VARCHAR(32) NOT NULL,
2603
  `created` INT NOT NULL,
2604
+ `audio_data` MEDIUMBLOB NULL,
2605
  PRIMARY KEY(id, namespace),
2606
  INDEX(created)
2607
  )";
2614
  code character varying(32) NOT NULL,
2615
  code_display character varying(32) NOT NULL,
2616
  created integer NOT NULL,
2617
+ audio_data bytea NULL,
2618
  CONSTRAINT pkey_id_namespace PRIMARY KEY (id, namespace)
2619
  )";
2620
 
2673
  } else {
2674
  if ( ($row = $stmt->fetch()) !== false ) {
2675
  if (false == $this->isCodeExpired($row['created'])) {
2676
+ if ($this->database_driver == self::SI_DRIVER_PGSQL && is_resource($row['audio_data'])) {
2677
+ // pg bytea data returned as stream resource
2678
+ $data = '';
2679
+ while (!feof($row['audio_data'])) {
2680
+ $data .= fgets($row['audio_data']);
2681
+ }
2682
+ $row['audio_data'] = $data;
2683
+ }
2684
  $code = array(
2685
  'code' => $row['code'],
2686
  'code_disp' => $row['code_display'],
2687
  'time' => $row['created'],
2688
+ 'audio_data' => $row['audio_data'],
2689
  );
2690
  }
2691
  }
2732
 
2733
  $query = sprintf("DELETE FROM %s WHERE %s - created > %s",
2734
  $this->database_table,
2735
+ $now,
2736
+ $this->pdo_conn->quote("$limit", PDO::PARAM_INT));
2737
 
2738
  $result = $this->pdo_conn->query($query);
2739
  }
3056
  return $data;
3057
  }
3058
 
3059
+ /**
3060
+ * Convert WAV data to MP3 using the Lame MP3 encoder binary
3061
+ *
3062
+ * @param string $data Contents of the WAV file to convert
3063
+ * @return string MP3 file data
3064
+ */
3065
+ protected function wavToMp3($data)
3066
+ {
3067
+ if (!file_exists(self::$lame_binary_path) || !is_executable(self::$lame_binary_path)) {
3068
+ throw new Exception('Lame binary "' . $this->lame_binary_path . '" does not exist or is not executable');
3069
+ }
3070
+
3071
+ // size of wav data input
3072
+ $size = strlen($data);
3073
+
3074
+ // file descriptors for reading and writing to the Lame process
3075
+ $descriptors = array(
3076
+ 0 => array('pipe', 'r'), // stdin
3077
+ 1 => array('pipe', 'w'), // stdout
3078
+ 2 => array('pipe', 'a'), // stderr
3079
+ );
3080
+
3081
+ if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
3082
+ // workaround for Windows conversion
3083
+ // writing to STDIN seems to hang indefinitely after writing approximately 0xC400 bytes
3084
+ $wavinput = tempnam(sys_get_temp_dir(), 'wav');
3085
+ if (!$wavinput) {
3086
+ throw new Exception('Failed to create temporary file for WAV to MP3 conversion');
3087
+ }
3088
+ file_put_contents($wavinput, $data);
3089
+ $size = 0;
3090
+ } else {
3091
+ $wavinput = '-'; // stdin
3092
+ }
3093
+
3094
+ // Mono, variable bit rate, 32 kHz sampling rate, read WAV from stdin, write MP3 to stdout
3095
+ $cmd = sprintf("%s -m m -v -b 32 %s -", self::$lame_binary_path, $wavinput);
3096
+ $proc = proc_open($cmd, $descriptors, $pipes);
3097
+
3098
+ if (!is_resource($proc)) {
3099
+ throw new Exception('Failed to open process for MP3 encoding');
3100
+ }
3101
+
3102
+ stream_set_blocking($pipes[0], 0); // set stdin to be non-blocking
3103
+
3104
+ for ($written = 0; $written < $size; $written += $len) {
3105
+ // write to stdin until all WAV data is written
3106
+ $len = fwrite($pipes[0], substr($data, $written, 0x20000));
3107
+
3108
+ if ($len === 0) {
3109
+ // fwrite wrote no data, make sure process is still alive, otherwise wait for it to process
3110
+ $status = proc_get_status($proc);
3111
+ if ($status['running'] === false) break;
3112
+ usleep(25000);
3113
+ } else if ($written < $size) {
3114
+ // couldn't write all data, small pause and try again
3115
+ usleep(10000);
3116
+ } else if ($len === false) {
3117
+ // fwrite failed, should not happen
3118
+ break;
3119
+ }
3120
+ }
3121
+
3122
+ fclose($pipes[0]);
3123
+
3124
+ $data = stream_get_contents($pipes[1]);
3125
+ $err = trim(stream_get_contents($pipes[2]));
3126
+
3127
+ fclose($pipes[1]);
3128
+ fclose($pipes[2]);
3129
+
3130
+ $return = proc_close($proc);
3131
+
3132
+ if ($wavinput != '-') unlink($wavinput); // delete temp file on Windows
3133
+
3134
+ if ($return !== 0) {
3135
+ throw new Exception("Failed to convert WAV to MP3. Shell returned ({$return}): {$err}");
3136
+ } else if ($written < $size) {
3137
+ throw new Exception('Failed to convert WAV to MP3. Failed to write all data to encoder');
3138
+ }
3139
+
3140
+ return $data;
3141
+ }
3142
+
3143
  /**
3144
  * Return a wav file saying there was an error generating file
3145
  *
3182
  /**
3183
  * Convert an html color code to a Securimage_Color
3184
  * @param string $color
3185
+ * @param Securimage_Color|string $default The defalt color to use if $color is invalid
3186
  */
3187
  protected function initColor($color, $default)
3188
  {
securimage/securimage_play.php CHANGED
@@ -52,6 +52,7 @@ $img = new Securimage();
52
  //$img->audio_use_noise = true;
53
  //$img->degrade_audio = false;
54
  //$img->sox_binary_path = 'sox';
 
55
 
56
  // To use an alternate language, uncomment the following and download the files from phpcaptcha.org
57
  // $img->audio_path = $img->securimage_path . '/audio/es/';
@@ -62,4 +63,8 @@ $img = new Securimage();
62
  // set namespace if supplied to script via HTTP GET
63
  if (!empty($_GET['namespace'])) $img->setNamespace($_GET['namespace']);
64
 
65
- $img->outputAudioFile();
 
 
 
 
52
  //$img->audio_use_noise = true;
53
  //$img->degrade_audio = false;
54
  //$img->sox_binary_path = 'sox';
55
+ //Securimage::$lame_binary_path = '/usr/bin/lame'; // for mp3 audio support
56
 
57
  // To use an alternate language, uncomment the following and download the files from phpcaptcha.org
58
  // $img->audio_path = $img->securimage_path . '/audio/es/';
63
  // set namespace if supplied to script via HTTP GET
64
  if (!empty($_GET['namespace'])) $img->setNamespace($_GET['namespace']);
65
 
66
+
67
+ // mp3 or wav format
68
+ $format = (isset($_GET['format']) && strtolower($_GET['format']) == 'mp3') ? 'mp3' : null;
69
+
70
+ $img->outputAudioFile($format);