WP User Avatar - Version 1.8.5

Version Description

  • Add: Capability check in one function
Download this release

Release Info

Developer bangbay
Plugin Icon 128x128 WP User Avatar
Version 1.8.5
Comparing to
See all releases

Code changes from version 1.5.4 to 1.8.5

css/wp-user-avatar.css CHANGED
@@ -1,11 +1,11 @@
1
- #wpua-errors, #wpua-message, #wpua-readable-size-error, .wpua-error { color: #c00 !important; font-weight: 700 !important; }
2
- #wpua-message, #wpua-readable-size-error { display: none; }
 
3
  #wpua-preview, #wpua-thumbnail { display: inline-block; text-align: center; vertical-align: top; }
4
- #wpua-preview { margin-right: 10px !important; }
5
  #wpua-preview img, #wpua-thumbnail img { max-height: 96px; border: 1px solid #dfdfdf; display: block; }
6
  .defaultavatarpicker #wpua-preview { width: 32px; height: 32px; margin-right: 0; display: inline-block; overflow: hidden; vertical-align: middle; }
7
  .defaultavatarpicker #wpua-preview img { width: 32px; height: auto; border: 0; }
8
- #wpua-edit { padding-left: 15px !important; }
9
- #wpua-edit #wpua-remove { margin-left: 10px !important; }
10
  #wpua-slider { width: 22.75em; }
 
11
  .wpua-hide { display: none !important; }
1
+ #wpua-errors, #wpua-readable-size-error, .wpua-error { color: #c00 !important; font-weight: 700 !important; }
2
+ #wpua-readable-size-error, #wpua-undo-button { display: none; }
3
+ #wpua-preview { margin-right: 10px; }
4
  #wpua-preview, #wpua-thumbnail { display: inline-block; text-align: center; vertical-align: top; }
 
5
  #wpua-preview img, #wpua-thumbnail img { max-height: 96px; border: 1px solid #dfdfdf; display: block; }
6
  .defaultavatarpicker #wpua-preview { width: 32px; height: 32px; margin-right: 0; display: inline-block; overflow: hidden; vertical-align: middle; }
7
  .defaultavatarpicker #wpua-preview img { width: 32px; height: auto; border: 0; }
8
+ #wpua-edit #wpua-remove, #wpua-edit #wpua-undo { margin-left: 10px !important; }
 
9
  #wpua-slider { width: 22.75em; }
10
+ #wpua-upload-messages span { display: block; }
11
  .wpua-hide { display: none !important; }
images/{wp-user-avatar-150x150.png → wpua-150x150.png} RENAMED
File without changes
images/{wp-user-avatar-300x300.png → wpua-300x300.png} RENAMED
File without changes
images/{wp-user-avatar-32x32.png → wpua-32x32.png} RENAMED
File without changes
images/{wp-user-avatar-96x96.png → wpua-96x96.png} RENAMED
File without changes
images/wpua-icon.png ADDED
Binary file
images/{wp-user-avatar.png → wpua.png} RENAMED
File without changes
includes/class-wp-user-avatar-admin.php ADDED
@@ -0,0 +1,223 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Defines all of administrative, activation, and deactivation settings.
4
+ *
5
+ * @package WP User Avatar
6
+ * @version 1.8.5
7
+ */
8
+
9
+ class WP_User_Avatar_Admin {
10
+ public function __construct() {
11
+ global $show_avatars, $wpua_allow_upload, $wpua_tinymce;
12
+ // Initialize default settings
13
+ register_activation_hook(__FILE__, array($this, 'wpua_options'));
14
+ // Settings saved to wp_options
15
+ add_action('admin_init', array($this, 'wpua_options'));
16
+ // Remove subscribers edit_posts capability
17
+ register_deactivation_hook(__FILE__, array($this, 'wpua_deactivate'));
18
+ // Translations
19
+ load_plugin_textdomain('wp-user-avatar', "", WPUA_FOLDER.'/lang');
20
+ // Admin menu settings
21
+ add_action('admin_menu', array($this, 'wpua_admin'));
22
+ // Default avatar
23
+ add_filter('default_avatar_select', array($this, 'wpua_add_default_avatar'), 10);
24
+ add_filter('whitelist_options', array($this, 'wpua_whitelist_options'), 10);
25
+ // Additional plugin info
26
+ add_filter('plugin_action_links', array($this, 'wpua_action_links'), 10, 2);
27
+ add_filter('plugin_row_meta', array($this, 'wpua_row_meta'), 10, 2);
28
+ // Hide column in Users table if default avatars are enabled
29
+ if((bool) $show_avatars == 0 && is_admin()){
30
+ add_filter('manage_users_columns', array($this, 'wpua_add_column'), 10, 1);
31
+ add_filter('manage_users_custom_column', array($this, 'wpua_show_column'), 10, 3);
32
+ }
33
+ // Media states
34
+ add_filter('display_media_states', array($this, 'wpua_add_media_state'), 10, 1);
35
+ // Load TinyMCE only if enabled
36
+ if((bool) $wpua_tinymce == 1){
37
+ include_once(WPUA_INC.'wpua-tinymce.php');
38
+ }
39
+ }
40
+
41
+ // Settings saved to wp_options
42
+ public function wpua_options() {
43
+ add_option('avatar_default_wp_user_avatar', "");
44
+ add_option('wp_user_avatar_allow_upload', '0');
45
+ add_option('wp_user_avatar_disable_gravatar', '0');
46
+ add_option('wp_user_avatar_edit_avatar', '1');
47
+ add_option('wp_user_avatar_resize_crop', '0');
48
+ add_option('wp_user_avatar_resize_h', '96');
49
+ add_option('wp_user_avatar_resize_upload', '0');
50
+ add_option('wp_user_avatar_resize_w', '96');
51
+ add_option('wp_user_avatar_tinymce', '1');
52
+ add_option('wp_user_avatar_upload_size_limit', '0');
53
+ }
54
+
55
+ // On deactivation
56
+ public function wpua_deactivate() {
57
+ global $wpua_subscriber;
58
+ // Remove subscribers edit_posts capability
59
+ $wpua_subscriber->wpua_subscriber_remove_cap();
60
+ // Reset all default avatar to Mystery Man
61
+ update_option('avatar_default', 'mystery');
62
+ }
63
+
64
+ // Add options page and settings
65
+ public function wpua_admin() {
66
+ add_menu_page(__('WP User Avatar', 'wp-user-avatar'), __('WP User Avatar', 'wp-user-avatar'), 'manage_options', 'wp-user-avatar', array($this, 'wpua_options_page'), WPUA_URL.'images/wpua-icon.png');
67
+ add_submenu_page('wp-user-avatar', __('Settings'), __('Settings'), 'manage_options', 'wp-user-avatar', array($this, 'wpua_options_page'));
68
+ add_submenu_page('wp-user-avatar', __('Library'), __('Library'), 'manage_options', 'wp-user-avatar-library', array($this, 'wpua_media_page'));
69
+ add_action('admin_init', array($this, 'wpua_admin_settings'));
70
+ }
71
+
72
+ // Checks if current page is settings page
73
+ public function wpua_is_menu_page() {
74
+ global $pagenow;
75
+ $is_menu_page = ($pagenow == 'admin.php' && isset($_GET['page']) && $_GET['page'] == 'wp-user-avatar') ? true : false;
76
+ return $is_menu_page;
77
+ }
78
+
79
+ // Media page
80
+ public function wpua_media_page() {
81
+ require_once(WPUA_INC.'wpua-media-page.php');
82
+ }
83
+
84
+ // Options page
85
+ public function wpua_options_page() {
86
+ require_once(WPUA_INC.'wpua-options-page.php');
87
+ }
88
+
89
+ // Whitelist settings
90
+ public function wpua_admin_settings() {
91
+ register_setting('wpua-settings-group', 'avatar_rating');
92
+ register_setting('wpua-settings-group', 'avatar_default');
93
+ register_setting('wpua-settings-group', 'avatar_default_wp_user_avatar', 'intval');
94
+ register_setting('wpua-settings-group', 'show_avatars', 'intval');
95
+ register_setting('wpua-settings-group', 'wp_user_avatar_tinymce', 'intval');
96
+ register_setting('wpua-settings-group', 'wp_user_avatar_allow_upload', 'intval');
97
+ register_setting('wpua-settings-group', 'wp_user_avatar_disable_gravatar', 'intval');
98
+ register_setting('wpua-settings-group', 'wp_user_avatar_edit_avatar', 'intval');
99
+ register_setting('wpua-settings-group', 'wp_user_avatar_resize_crop', 'intval');
100
+ register_setting('wpua-settings-group', 'wp_user_avatar_resize_h', 'intval');
101
+ register_setting('wpua-settings-group', 'wp_user_avatar_resize_upload', 'intval');
102
+ register_setting('wpua-settings-group', 'wp_user_avatar_resize_w', 'intval');
103
+ register_setting('wpua-settings-group', 'wp_user_avatar_upload_size_limit', 'intval');
104
+ }
105
+
106
+ // Add default avatar
107
+ public function wpua_add_default_avatar($avatar_list=null){
108
+ global $avatar_default, $mustache_admin, $mustache_medium, $wpua_avatar_default, $wpua_disable_gravatar;
109
+ // Remove get_avatar filter
110
+ remove_filter('get_avatar', 'wpua_get_avatar_filter');
111
+ // Set avatar_list variable
112
+ $avatar_list = "";
113
+ // Set avatar defaults
114
+ $avatar_defaults = array(
115
+ 'mystery' => __('Mystery Man'),
116
+ 'blank' => __('Blank'),
117
+ 'gravatar_default' => __('Gravatar Logo'),
118
+ 'identicon' => __('Identicon (Generated)'),
119
+ 'wavatar' => __('Wavatar (Generated)'),
120
+ 'monsterid' => __('MonsterID (Generated)'),
121
+ 'retro' => __('Retro (Generated)')
122
+ );
123
+ // No Default Avatar, set to Mystery Man
124
+ if(empty($avatar_default)){
125
+ $avatar_default = 'mystery';
126
+ }
127
+ // Take avatar_defaults and get examples for unknown@gravatar.com
128
+ foreach($avatar_defaults as $default_key => $default_name){
129
+ $avatar = get_avatar('unknown@gravatar.com', 32, $default_key);
130
+ $selected = ($avatar_default == $default_key) ? 'checked="checked" ' : "";
131
+ $avatar_list .= "\n\t<label><input type='radio' name='avatar_default' id='avatar_{$default_key}' value='".esc_attr($default_key)."' {$selected}/> ";
132
+ $avatar_list .= preg_replace("/src='(.+?)'/", "src='\$1&amp;forcedefault=1'", $avatar);
133
+ $avatar_list .= ' '.$default_name.'</label>';
134
+ $avatar_list .= '<br />';
135
+ }
136
+ // Show remove link if custom Default Avatar is set
137
+ if(!empty($wpua_avatar_default) && wp_attachment_is_image($wpua_avatar_default)){
138
+ $avatar_thumb_src = wp_get_attachment_image_src($wpua_avatar_default, array(32,32));
139
+ $avatar_thumb = $avatar_thumb_src[0];
140
+ $hide_remove = "";
141
+ } else {
142
+ $avatar_thumb = $mustache_admin;
143
+ $hide_remove = ' class="wpua-hide"';
144
+ }
145
+ // Default Avatar is wp_user_avatar, check the radio button next to it
146
+ $selected_avatar = ((bool) $wpua_disable_gravatar == 1 || $avatar_default == 'wp_user_avatar') ? ' checked="checked" ' : "";
147
+ // Wrap WPUA in div
148
+ $avatar_thumb_img = '<div id="wpua-preview"><img src="'.$avatar_thumb.'" width="32" /></div>';
149
+ // Add WPUA to list
150
+ $wpua_list = "\n\t<label><input type='radio' name='avatar_default' id='wp_user_avatar_radio' value='wp_user_avatar'$selected_avatar /> ";
151
+ $wpua_list .= preg_replace("/src='(.+?)'/", "src='\$1'", $avatar_thumb_img);
152
+ $wpua_list .= ' '.__('WP User Avatar', 'wp-user-avatar').'</label>';
153
+ $wpua_list .= '<p id="wpua-edit"><button type="button" class="button" id="wpua-add" name="wpua-add">'.__('Choose Image').'</button>';
154
+ $wpua_list .= '<span id="wpua-remove-button"'.$hide_remove.'><a href="#" id="wpua-remove">'.__('Remove').'</a></span><span id="wpua-undo-button"><a href="#" id="wpua-undo">'.__('Undo').'</a></span></p>';
155
+ $wpua_list .= '<input type="hidden" id="wp-user-avatar" name="avatar_default_wp_user_avatar" value="'.$wpua_avatar_default.'">';
156
+ if((bool) $wpua_disable_gravatar != 1){
157
+ return $wpua_list.'<div id="wp-avatars">'.$avatar_list.'</div>';
158
+ } else {
159
+ return $wpua_list;
160
+ }
161
+ }
162
+
163
+ // Add default avatar_default to whitelist
164
+ public function wpua_whitelist_options($whitelist_options){
165
+ $whitelist_options['discussion'][] = 'avatar_default_wp_user_avatar';
166
+ return $whitelist_options;
167
+ }
168
+
169
+ // Add actions links on plugin page
170
+ public function wpua_action_links($links, $file){
171
+ if(basename($file) == basename(plugin_basename(__FILE__))){
172
+ $settings_link = '<a href="'.add_query_arg(array('page' => 'wp-user-avatar'), admin_url('admin.php')).'">'.__('Settings').'</a>';
173
+ $links = array_merge($links, array($settings_link));
174
+ }
175
+ return $links;
176
+ }
177
+
178
+ // Add row meta on plugin page
179
+ public function wpua_row_meta($links, $file){
180
+ if(basename($file) == basename(plugin_basename(__FILE__))){
181
+ $support_link = '<a href="http://wordpress.org/support/plugin/wp-user-avatar" target="_blank">'.__('Support Forums').'</a>';
182
+ $donate_link = '<a href="http://siboliban.org/donate" target="_blank">'.__('Donate', 'wp-user-avatar').'</a>';
183
+ $links = array_merge($links, array($support_link, $donate_link));
184
+ }
185
+ return $links;
186
+ }
187
+
188
+ // Add column to Users table
189
+ public function wpua_add_column($columns){
190
+ return $columns + array('wp-user-avatar' => __('WP User Avatar', 'wp-user-avatar'));
191
+ }
192
+
193
+ // Show thumbnail in Users table
194
+ public function wpua_show_column($value, $column_name, $user_id){
195
+ global $blog_id, $wpdb;
196
+ $wpua = get_user_meta($user_id, $wpdb->get_blog_prefix($blog_id).'user_avatar', true);
197
+ $wpua_image = wp_get_attachment_image($wpua, array(32,32));
198
+ if($column_name == 'wp-user-avatar'){ $value = $wpua_image; }
199
+ return $value;
200
+ }
201
+
202
+ // Get list table
203
+ public function _wpua_get_list_table($class, $args = array()){
204
+ require_once(WPUA_INC.'class-wp-user-avatar-list-table.php');
205
+ $args['screen'] = 'wp-user-avatar';
206
+ return new $class($args);
207
+ }
208
+
209
+ // Add media states
210
+ public function wpua_add_media_state($media_states) {
211
+ global $post, $wpua_avatar_default;
212
+ $is_wpua = get_post_custom_values('_wp_attachment_wp_user_avatar', $post->ID);
213
+ if(!empty($is_wpua)) {
214
+ $media_states[] = __('Avatar');
215
+ }
216
+ if(!empty($wpua_avatar_default) && ($wpua_avatar_default == $post->ID)) {
217
+ $media_states[] = __('Default Avatar');
218
+ }
219
+ return apply_filters('wpua_add_media_state', $media_states);
220
+ }
221
+ }
222
+
223
+ $wpua_admin = new WP_User_Avatar_Admin();
includes/class-wp-user-avatar-list-table.php ADDED
@@ -0,0 +1,278 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Based on WP_Media_List_Table class.
4
+ *
5
+ * @package WP User Avatar
6
+ * @version 1.8.5
7
+ */
8
+
9
+ class WP_User_Avatar_List_Table extends WP_List_Table {
10
+ function __construct($args = array()) {
11
+ global $avatars_array, $post, $wpua_avatar_default;
12
+ $q = array(
13
+ 'post_type' => 'attachment',
14
+ 'post_status' => 'inherit',
15
+ 'posts_per_page' => '-1',
16
+ 'meta_query' => array(
17
+ array(
18
+ 'key' => '_wp_attachment_wp_user_avatar',
19
+ 'value' => '',
20
+ 'compare' => '!='
21
+ )
22
+ )
23
+ );
24
+ $avatars_wp_query = new WP_Query($q);
25
+ $avatars_array = array();
26
+ while($avatars_wp_query->have_posts()) : $avatars_wp_query->the_post();
27
+ $avatars_array[] = $post->ID;
28
+ endwhile;
29
+ wp_reset_query();
30
+ // Include default avatar
31
+ $avatars_array[] = $wpua_avatar_default;
32
+ parent::__construct(array(
33
+ 'plural' => 'media',
34
+ 'screen' => isset($args['screen']) ? $args['screen'] : null
35
+ ));
36
+ }
37
+
38
+ function ajax_user_can() {
39
+ return current_user_can('upload_files');
40
+ }
41
+
42
+ function prepare_items() {
43
+ global $avatars_array, $lost, $wpdb, $wp_query, $post_mime_types, $avail_post_mime_types, $post;
44
+ $q = $_REQUEST;
45
+ $q['post__in'] = $avatars_array;
46
+ list($post_mime_types, $avail_post_mime_types) = wp_edit_attachments_query($q);
47
+ $this->is_trash = isset($_REQUEST['status']) && 'trash' == $_REQUEST['status'];
48
+ $this->set_pagination_args(array(
49
+ 'total_items' => $wp_query->found_posts,
50
+ 'total_pages' => $wp_query->max_num_pages,
51
+ 'per_page' => $wp_query->query_vars['posts_per_page'],
52
+ ));
53
+ }
54
+
55
+ function get_views() {
56
+ global $avatars_array;
57
+ $type_links = array();
58
+ $_total_posts = count($avatars_array);
59
+ $class = (empty($_GET['post_mime_type']) && !isset($_GET['status'])) ? ' class="current"' : '';
60
+ $type_links['all'] = sprintf('<a href="%s">',esc_url(add_query_arg(array('page' => 'wp-user-avatar-library'), 'admin.php'))).sprintf(_nx('All <span class="count">(%s)</span>', 'All <span class="count">(%s)</span>', $_total_posts, 'uploaded files'), number_format_i18n($_total_posts)).'</a>';
61
+ return $type_links;
62
+ }
63
+
64
+ function get_bulk_actions() {
65
+ $actions = array();
66
+ $actions['delete'] = __('Delete Permanently');
67
+ return $actions;
68
+ }
69
+
70
+ function extra_tablenav($which) { ?>
71
+ <div class="alignleft actions">
72
+ <?php
73
+ if($this->is_trash && current_user_can('edit_others_posts')) {
74
+ submit_button(__('Empty Trash'), 'apply', 'delete_all', false );
75
+ }
76
+ ?>
77
+ </div>
78
+ <?php
79
+ }
80
+
81
+ function current_action() {
82
+ if(isset($_REQUEST['delete_all']) || isset($_REQUEST['delete_all2'])) {
83
+ return 'delete_all';
84
+ }
85
+ return parent::current_action();
86
+ }
87
+
88
+ function has_items() {
89
+ return have_posts();
90
+ }
91
+
92
+ function no_items() {
93
+ _e('No media attachments found.');
94
+ }
95
+
96
+ function get_columns() {
97
+ $posts_columns = array();
98
+ $posts_columns['cb'] = '<input type="checkbox" />';
99
+ $posts_columns['icon'] = '';
100
+ $posts_columns['title'] = _x('File', 'column name');
101
+ $posts_columns['author'] = __('Author');
102
+ $posts_columns['parent'] = _x('Uploaded to', 'column name');
103
+ $posts_columns['date'] = _x('Date', 'column name');
104
+ return $posts_columns;
105
+ }
106
+
107
+ function get_sortable_columns() {
108
+ return array(
109
+ 'title' => 'title',
110
+ 'author' => 'author',
111
+ 'date' => array('date', true),
112
+ );
113
+ }
114
+
115
+ function display_rows() {
116
+ global $post, $wpdb;
117
+ add_filter('the_title','esc_html');
118
+ $alt = '';
119
+ while (have_posts()) : the_post();
120
+ $user_can_edit = current_user_can('edit_post', $post->ID);
121
+
122
+ if($this->is_trash && $post->post_status != 'trash' || !$this->is_trash && $post->post_status == 'trash')
123
+ continue;
124
+
125
+ $alt = ('alternate' == $alt) ? '' : 'alternate';
126
+ $post_owner = (get_current_user_id() == $post->post_author) ? 'self' : 'other';
127
+ $att_title = _draft_or_post_title();
128
+ ?>
129
+ <tr id='post-<?php echo $post->ID; ?>' class='<?php echo trim($alt.' author-'.$post_owner.' status-'.$post->post_status); ?>' valign="top">
130
+ <?php
131
+ list( $columns, $hidden ) = $this->get_column_info();
132
+ foreach($columns as $column_name => $column_display_name) {
133
+ $class = "class='$column_name column-$column_name'";
134
+ $style = '';
135
+ if(in_array($column_name, $hidden)) {
136
+ $style = ' style="display:none;"';
137
+ }
138
+ $attributes = $class.$style;
139
+ switch($column_name) {
140
+ case 'cb':
141
+ ?>
142
+ <th scope="row" class="check-column">
143
+ <?php if ( $user_can_edit ) { ?>
144
+ <label class="screen-reader-text" for="cb-select-<?php the_ID(); ?>"><?php echo sprintf( __( 'Select %s' ), $att_title );?></label>
145
+ <input type="checkbox" name="media[]" id="cb-select-<?php the_ID(); ?>" value="<?php the_ID(); ?>" />
146
+ <?php } ?>
147
+ </th>
148
+ <?php
149
+ break;
150
+ case 'icon':
151
+ $attributes = 'class="column-icon media-icon"'.$style;
152
+ ?>
153
+ <td <?php echo $attributes ?>><?php
154
+ if ( $thumb = wp_get_attachment_image( $post->ID, array( 80, 60 ), true ) ) {
155
+ if ( $this->is_trash || ! $user_can_edit ) {
156
+ echo $thumb;
157
+ } else {
158
+ ?>
159
+ <a href="<?php echo get_edit_post_link( $post->ID, true ); ?>" title="<?php echo esc_attr( sprintf( __( 'Edit &#8220;%s&#8221;' ), $att_title ) ); ?>">
160
+ <?php echo $thumb; ?>
161
+ </a>
162
+ <?php } }
163
+ ?>
164
+ </td>
165
+ <?php
166
+ break;
167
+ case 'title':
168
+ ?>
169
+ <td <?php echo $attributes ?>><strong>
170
+ <?php if ( $this->is_trash || ! $user_can_edit ) {
171
+ echo $att_title;
172
+ } else { ?>
173
+ <a href="<?php echo get_edit_post_link( $post->ID, true ); ?>"
174
+ title="<?php echo esc_attr( sprintf( __( 'Edit &#8220;%s&#8221;' ), $att_title ) ); ?>">
175
+ <?php echo $att_title; ?></a>
176
+ <?php };
177
+ _media_states( $post ); ?></strong>
178
+ <p>
179
+ <?php
180
+ if ( preg_match( '/^.*?\.(\w+)$/', get_attached_file( $post->ID ), $matches ) )
181
+ echo esc_html( strtoupper( $matches[1] ) );
182
+ else
183
+ echo strtoupper( str_replace( 'image/', '', get_post_mime_type() ) );
184
+ ?>
185
+ </p>
186
+ <?php echo $this->row_actions( $this->_get_row_actions( $post, $att_title ) ); ?>
187
+ </td>
188
+ <?php
189
+ break;
190
+ case 'author':
191
+ ?>
192
+ <td <?php echo $attributes ?>>
193
+ <?php
194
+ printf( '<a href="%s">%s</a>',
195
+ esc_url( add_query_arg( array( 'author' => get_the_author_meta('ID') ), 'upload.php' ) ),
196
+ get_the_author()
197
+ ); ?>
198
+ </td>
199
+ <?php
200
+ break;
201
+ case 'date':
202
+ if ( '0000-00-00 00:00:00' == $post->post_date ) {
203
+ $h_time = __( 'Unpublished' );
204
+ } else {
205
+ $m_time = $post->post_date;
206
+ $time = get_post_time( 'G', true, $post, false );
207
+ if ( ( abs( $t_diff = time() - $time ) ) < DAY_IN_SECONDS ) {
208
+ if ( $t_diff < 0 )
209
+ $h_time = sprintf( __( '%s from now' ), human_time_diff( $time ) );
210
+ else
211
+ $h_time = sprintf( __( '%s ago' ), human_time_diff( $time ) );
212
+ } else {
213
+ $h_time = mysql2date( __( 'Y/m/d' ), $m_time );
214
+ }
215
+ }
216
+ ?>
217
+ <td <?php echo $attributes ?>><?php echo $h_time ?></td>
218
+ <?php
219
+ break;
220
+ case 'parent':
221
+ global $blog_id, $wpdb;
222
+ // Find all users with this WPUA
223
+ $wpua_metakey = $wpdb->get_blog_prefix($blog_id).'user_avatar';
224
+ $wpuas = $wpdb->get_results($wpdb->prepare("SELECT wpum.user_id FROM $wpdb->usermeta AS wpum, $wpdb->users AS wpu WHERE wpum.meta_key = %s AND wpum.meta_value = %d AND wpum.user_id = wpu.ID ORDER BY wpu.user_login", $wpua_metakey, $post->ID));
225
+ // Find users without WPUA
226
+ $nowpuas = $wpdb->get_results($wpdb->prepare("SELECT wpu.ID FROM $wpdb->users AS wpu, $wpdb->usermeta AS wpum WHERE wpum.meta_key = %s AND wpum.meta_value = %d AND wpum.user_id = wpu.ID ORDER BY wpu.user_login", $wpua_metakey, ""));
227
+ $user_array = array();
228
+ ?>
229
+ <td <?php echo $attributes ?>>
230
+ <strong>
231
+ <?php
232
+ if(!empty($wpuas)){
233
+ foreach($wpuas as $usermeta) {
234
+ $user = get_userdata($usermeta->user_id);
235
+ $user_array[] = '<a href="'.get_edit_user_link($user->ID).'">'.$user->user_login.'</a>';
236
+ }
237
+ } else {
238
+ foreach($nowpuas as $usermeta) {
239
+ $user = get_userdata($usermeta->ID);
240
+ $user_array[] = '<a href="'.get_edit_user_link($user->ID).'">'.$user->user_login.'</a>';
241
+ }
242
+ }
243
+ ?>
244
+ <?php echo implode(', ', array_filter($user_array)); ?>
245
+ </strong>
246
+ </td>
247
+ <?php
248
+ break;
249
+ }
250
+ }
251
+ ?>
252
+ </tr>
253
+ <?php endwhile;
254
+ }
255
+
256
+ function _get_row_actions($post, $att_title) {
257
+ $actions = array();
258
+ if(current_user_can('edit_post', $post->ID) && !$this->is_trash) {
259
+ $actions['edit'] = '<a href="'.get_edit_post_link($post->ID, true).'">'.__('Edit').'</a>';
260
+ }
261
+ if(current_user_can('delete_post', $post->ID)) {
262
+ if($this->is_trash) {
263
+ $actions['untrash'] = "<a class='submitdelete' href='".wp_nonce_url("post.php?action=untrash&amp;post=$post->ID", 'untrash-post_'.$post->ID)."'>".__('Restore')."</a>";
264
+ } elseif (EMPTY_TRASH_DAYS && MEDIA_TRASH) {
265
+ $actions['trash'] = "<a class='submitdelete' href='".wp_nonce_url("post.php?action=trash&amp;post=$post->ID", 'trash-post_'. $post->ID)."'>".__('Trash')."</a>";
266
+ }
267
+ if($this->is_trash || !EMPTY_TRASH_DAYS || !MEDIA_TRASH) {
268
+ $delete_ays = (!$this->is_trash && !MEDIA_TRASH) ? " onclick='return showNotice.warn();'" : '';
269
+ $actions['delete'] = "<a class='submitdelete'$delete_ays href='".wp_nonce_url("post.php?action=delete&amp;post=$post->ID", 'delete-post_'.$post->ID)."'>".__('Delete Permanently')."</a>";
270
+ }
271
+ }
272
+ if(!$this->is_trash) {
273
+ $title =_draft_or_post_title($post->post_parent);
274
+ $actions['view'] = '<a href="'.get_permalink($post->ID).'" title="'.esc_attr(sprintf(__('View &#8220;%s&#8221;'), $title)).'" rel="permalink">'.__('View').'</a>';
275
+ }
276
+ return $actions;
277
+ }
278
+ }
includes/class-wp-user-avatar-shortcode.php ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Defines shortcodes.
4
+ *
5
+ * @package WP User Avatar
6
+ * @version 1.8.5
7
+ */
8
+
9
+ class WP_User_Avatar_Shortcode {
10
+ public function __construct() {
11
+ add_shortcode('avatar', array($this, 'wpua_shortcode'));
12
+ add_shortcode('avatar_upload', array($this, 'wpua_edit_shortcode'));
13
+ // Add avatar and scripts to avatar_upload
14
+ add_action('wpua_show_profile', array('wp_user_avatar', 'wpua_action_show_user_profile'));
15
+ add_action('wpua_update', array('wp_user_avatar', 'wpua_action_process_option_update'));
16
+ // Add error messages to avatar_upload
17
+ add_action('wpua_update_errors', array('wp_user_avatar', 'wpua_upload_errors'), 10, 3);
18
+ }
19
+
20
+ // Display shortcode
21
+ public function wpua_shortcode($atts, $content=null) {
22
+ global $all_sizes, $blog_id, $post, $wpdb;
23
+ // Set shortcode attributes
24
+ extract(shortcode_atts(array('user' => "", 'size' => '96', 'align' => "", 'link' => "", 'target' => ""), $atts));
25
+ // Find user by ID, login, slug, or e-mail address
26
+ if(!empty($user)) {
27
+ $user = is_numeric($user) ? get_user_by('id', $user) : get_user_by('login', $user);
28
+ $user = empty($user) ? get_user_by('slug', $user) : $user;
29
+ $user = empty($user) ? get_user_by('email', $user) : $user;
30
+ } else {
31
+ // Find author's name if id_or_email is empty
32
+ $author_name = get_query_var('author_name');
33
+ if(is_author()) {
34
+ // On author page, get user by page slug
35
+ $user = get_user_by('slug', $author_name);
36
+ } else {
37
+ // On post, get user by author meta
38
+ $user_id = get_the_author_meta('ID');
39
+ $user = get_user_by('id', $user_id);
40
+ }
41
+ }
42
+ // Numeric sizes leave as-is
43
+ $get_size = $size;
44
+ // Check for custom image sizes if there are captions
45
+ if(!empty($content)) {
46
+ if(in_array($size, $all_sizes)) {
47
+ if(in_array($size, array('original', 'large', 'medium', 'thumbnail'))) {
48
+ $get_size = ($size == 'original') ? get_option('large_size_w') : get_option($size.'_size_w');
49
+ } else {
50
+ $get_size = $_wp_additional_image_sizes[$size]['width'];
51
+ }
52
+ }
53
+ }
54
+ // Get user ID
55
+ $id_or_email = !empty($user) ? $user->ID : 'unknown@gravatar.com';
56
+ // Check if link is set
57
+ if(!empty($link)) {
58
+ // CSS class is same as link type, except for URL
59
+ $link_class = $link;
60
+ if($link == 'file') {
61
+ // Get image src
62
+ $link = get_wp_user_avatar_src($id_or_email, 'original');
63
+ } elseif($link == 'attachment') {
64
+ // Get attachment URL
65
+ $link = get_attachment_link(get_the_author_meta($wpdb->get_blog_prefix($blog_id).'user_avatar', $id_or_email));
66
+ } else {
67
+ // URL
68
+ $link_class = 'custom';
69
+ }
70
+ // Open in new window
71
+ $target_link = !empty($target) ? ' target="'.$target.'"' : "";
72
+ // Wrap the avatar inside the link
73
+ $html = '<a href="'.$link.'" class="wp-user-avatar-link wp-user-avatar-'.$link_class.'"'.$target_link.'>'.get_wp_user_avatar($id_or_email, $get_size, $align).'</a>';
74
+ } else {
75
+ $html = get_wp_user_avatar($id_or_email, $get_size, $align);
76
+ }
77
+ // Check if caption is set
78
+ if(!empty($content)) {
79
+ // Get attachment ID
80
+ $wpua = get_user_meta($id_or_email, $wpdb->get_blog_prefix($blog_id).'user_avatar', true);
81
+ // Clean up caption
82
+ $content = trim($content);
83
+ $content = preg_replace('/\r|\n/', "", $content);
84
+ $content = preg_replace('/<\/p><p>/', "", $content, 1);
85
+ $content = preg_replace('/<\/p><p>$/', "", $content);
86
+ $content = str_replace('</p><p>', "<br /><br />", $content);
87
+ $avatar = do_shortcode(image_add_caption($html, $wpua, $content, $title="", $align, $link, $get_size, $alt=""));
88
+ } else {
89
+ $avatar = $html;
90
+ }
91
+ return $avatar;
92
+ }
93
+
94
+ // Update user
95
+ private function wpua_edit_user($user_id = 0){
96
+ $user = new stdClass;
97
+ if($user_id){
98
+ $update = true;
99
+ $user->ID = (int) $user_id;
100
+ } else {
101
+ $update = false;
102
+ }
103
+ $errors = new WP_Error();
104
+ do_action_ref_array('wpua_update_errors', array(&$errors, $update, &$user));
105
+ if($errors->get_error_codes()){
106
+ return $errors;
107
+ }
108
+ if($update){
109
+ $user_id = wp_update_user($user);
110
+ }
111
+ return $user_id;
112
+ }
113
+
114
+ // Edit shortcode
115
+ public function wpua_edit_shortcode($atts) {
116
+ global $current_user, $errors;
117
+ // Shortcode only works with logged in user
118
+ if(is_user_logged_in()){
119
+ // Save
120
+ if(isset($_POST['submit']) && $_POST['submit'] && $_POST['action'] == 'update'){
121
+ do_action('wpua_update', $current_user->ID);
122
+ // Check for errors
123
+ $errors = $this->wpua_edit_user($current_user->ID);
124
+ }
125
+ // Errors
126
+ if(isset($errors) && is_wp_error($errors)) {
127
+ echo '<div class="error"><p>'.implode( "</p>\n<p>", $errors->get_error_messages()).'</p></div>';
128
+ } elseif(isset($errors) && !is_wp_error($errors)) {
129
+ echo '<div class="updated"><p><strong>'.__('Profile updated.').'</strong></p></div>';
130
+ }
131
+ // Form
132
+ echo '<form id="wpua-edit-'.$current_user->ID.'" class="wpua-edit" action="'.get_permalink().'" method="post" enctype="multipart/form-data">';
133
+ do_action('wpua_show_profile', $current_user);
134
+ echo '<input type="hidden" name="action" value="update" />';
135
+ echo '<input type="hidden" name="user_id" id="user_id" value="'.esc_attr($current_user->ID).'" />';
136
+ wp_nonce_field('update-user_'.$current_user->ID);
137
+ submit_button(__('Save'));
138
+ echo '</form>';
139
+ }
140
+ }
141
+ }
142
+
143
+ $wpua_shortcode = new WP_User_Avatar_Shortcode();
includes/class-wp-user-avatar-subscriber.php ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Settings only for subscribers and contributors.
4
+ *
5
+ * @package WP User Avatar
6
+ * @version 1.8.5
7
+ */
8
+
9
+ class WP_User_Avatar_Subscriber {
10
+ public function __construct() {
11
+ global $wpua_allow_upload;
12
+ if((bool) $wpua_allow_upload == 1) {
13
+ add_action('user_edit_form_tag', array($this, 'wpua_add_edit_form_multipart_encoding'));
14
+ // Only Subscribers lack delete_posts capability
15
+ if(!current_user_can('delete_posts')) {
16
+ add_action('admin_menu', array($this, 'wpua_subscriber_remove_menu_pages'));
17
+ add_action('wp_before_admin_bar_render', array($this, 'wpua_subscriber_remove_menu_bar_items'));
18
+ add_action('wp_dashboard_setup', array($this, 'wpua_subscriber_remove_dashboard_widgets'));
19
+ add_action('admin_init', array($this, 'wpua_subscriber_offlimits'));
20
+ }
21
+ }
22
+ add_action('admin_init', array($this, 'wpua_subscriber_capability'));
23
+ }
24
+
25
+ // Allow multipart data in form
26
+ public function wpua_add_edit_form_multipart_encoding() {
27
+ echo ' enctype="multipart/form-data"';
28
+ }
29
+
30
+ // Remove menu items
31
+ public function wpua_subscriber_remove_menu_pages() {
32
+ remove_menu_page('edit.php');
33
+ remove_menu_page('edit-comments.php');
34
+ remove_menu_page('tools.php');
35
+ }
36
+
37
+ // Remove menu bar items
38
+ public function wpua_subscriber_remove_menu_bar_items() {
39
+ global $wp_admin_bar;
40
+ $wp_admin_bar->remove_menu('comments');
41
+ $wp_admin_bar->remove_menu('new-content');
42
+ }
43
+
44
+ // Remove dashboard items
45
+ public function wpua_subscriber_remove_dashboard_widgets() {
46
+ remove_meta_box('dashboard_quick_press', 'dashboard', 'side');
47
+ remove_meta_box('dashboard_recent_drafts', 'dashboard', 'side');
48
+ remove_meta_box('dashboard_right_now', 'dashboard', 'normal');
49
+ }
50
+
51
+ // Restrict access to pages
52
+ public function wpua_subscriber_offlimits() {
53
+ global $pagenow, $wpua_edit_avatar;
54
+ $offlimits = array('edit.php', 'edit-comments.php', 'post-new.php', 'tools.php');
55
+ if((bool) $wpua_edit_avatar != 1) {
56
+ array_push($offlimits, 'post.php');
57
+ }
58
+ if(in_array($pagenow, $offlimits)) {
59
+ do_action('admin_page_access_denied');
60
+ wp_die(__('You do not have sufficient permissions to access this page.'));
61
+ }
62
+ }
63
+
64
+ // Give subscribers edit_posts capability
65
+ public function wpua_subscriber_capability() {
66
+ global $blog_id, $wpdb, $wpua_allow_upload, $wpua_edit_avatar;;
67
+ $wp_user_roles = $wpdb->get_blog_prefix($blog_id).'user_roles';
68
+ $user_roles = get_option($wp_user_roles);
69
+ if((bool) $wpua_allow_upload == 1 && (bool) $wpua_edit_avatar == 1) {
70
+ $user_roles['subscriber']['capabilities']['edit_posts'] = true;
71
+ } else {
72
+ unset($user_roles['subscriber']['capabilities']['edit_posts']);
73
+ }
74
+ update_option($wp_user_roles, $user_roles);
75
+ }
76
+ }
77
+
78
+ // Initialize WP_User_Avatar_Subscriber
79
+ function wpua_subcriber_init() {
80
+ global $wpua_subscriber;
81
+ $wpua_subscriber = new WP_User_Avatar_Subscriber();
82
+ }
83
+ add_action('init', 'wpua_subcriber_init');
includes/class-wp-user-avatar-update.php ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Updates for legacy settings.
4
+ *
5
+ * @package WP User Avatar
6
+ * @version 1.8.5
7
+ */
8
+
9
+ class WP_User_Avatar_Update {
10
+ public function __construct() {
11
+ global $wpua_default_avatar_updated, $wpua_media_updated, $wpua_users_updated;
12
+ if(empty($wpua_default_avatar_updated)) {
13
+ add_action('admin_init', array($this, 'wpua_default_avatar'));
14
+ }
15
+ if(empty($wpua_users_updated)) {
16
+ add_action('admin_init', array($this, 'wpua_user_meta'));
17
+ }
18
+ if(empty($wpua_media_updated)) {
19
+ add_action('admin_init', array($this, 'wpua_media_state'));
20
+ }
21
+ }
22
+
23
+ // Update default avatar to new format
24
+ public function wpua_default_avatar() {
25
+ global $avatar_default, $mustache_original, $wpua_avatar_default;
26
+ // If default avatar is the old mustache URL, update it
27
+ if($avatar_default == $mustache_original) {
28
+ update_option('avatar_default', 'wp_user_avatar');
29
+ }
30
+ // If user had an image URL as the default avatar, replace with ID instead
31
+ if(!empty($wpua_avatar_default)) {
32
+ $wpua_avatar_default_image = wp_get_attachment_image_src($wpua_avatar_default, 'medium');
33
+ if($avatar_default == $wpua_avatar_default_image[0]) {
34
+ update_option('avatar_default', 'wp_user_avatar');
35
+ }
36
+ }
37
+ update_option('wp_user_avatar_default_avatar_updated', '1');
38
+ }
39
+
40
+ // Rename user meta to match database settings
41
+ public function wpua_user_meta() {
42
+ global $blog_id, $wpdb;
43
+ $wpua_metakey = $wpdb->get_blog_prefix($blog_id).'user_avatar';
44
+ // If database tables start with something other than wp_
45
+ if($wpua_metakey != 'wp_user_avatar') {
46
+ $users = get_users();
47
+ // Move current user metakeys to new metakeys
48
+ foreach($users as $user) {
49
+ $wpua = get_user_meta($user->ID, 'wp_user_avatar', true);
50
+ if(!empty($wpua)) {
51
+ update_user_meta($user->ID, $wpua_metakey, $wpua);
52
+ delete_user_meta($user->ID, 'wp_user_avatar');
53
+ }
54
+ }
55
+ }
56
+ update_option('wp_user_avatar_users_updated', '1');
57
+ }
58
+
59
+ // Add media state to existing avatars
60
+ public function wpua_media_state() {
61
+ global $blog_id, $wpdb;
62
+ // Find all users with WPUA
63
+ $wpua_metakey = $wpdb->get_blog_prefix($blog_id).'user_avatar';
64
+ $wpuas = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->usermeta WHERE meta_key = %s AND meta_value != %d AND meta_value != %d", $wpua_metakey, 0, ""));
65
+ foreach($wpuas as $usermeta) {
66
+ update_post_meta($usermeta->meta_value, '_wp_attachment_wp_user_avatar', $usermeta->user_id);
67
+ }
68
+ update_option('wp_user_avatar_media_updated', '1');
69
+ }
70
+ }
71
+
72
+ $wpua_update = new WP_User_Avatar_Update();
includes/class-wp-user-avatar.php ADDED
@@ -0,0 +1,279 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Defines all profile and upload settings.
4
+ *
5
+ * @package WP User Avatar
6
+ * @version 1.8.5
7
+ */
8
+
9
+ class WP_User_Avatar {
10
+ public function __construct() {
11
+ global $pagenow, $show_avatars, $wpua_admin, $wpua_allow_upload;
12
+ // Add WPUA to profile
13
+ if($this->wpua_is_author_or_above() || ((bool) $wpua_allow_upload == 1 && is_user_logged_in())) {
14
+ // Profile functions and scripts
15
+ add_action('show_user_profile', array('wp_user_avatar', 'wpua_action_show_user_profile'));
16
+ add_action('edit_user_profile', array($this, 'wpua_action_show_user_profile'));
17
+ add_action('personal_options_update', array($this, 'wpua_action_process_option_update'));
18
+ add_action('edit_user_profile_update', array($this, 'wpua_action_process_option_update'));
19
+ if(!is_admin()) {
20
+ add_action('show_user_profile', array($this, 'wpua_media_upload_scripts'));
21
+ add_action('edit_user_profile', array($this, 'wpua_media_upload_scripts'));
22
+ }
23
+ // Admin scripts
24
+ $pages = array('profile.php', 'options-discussion.php', 'user-edit.php');
25
+ if(in_array($pagenow, $pages) || $wpua_admin->wpua_is_menu_page()) {
26
+ add_action('admin_enqueue_scripts', array($this, 'wpua_media_upload_scripts'));
27
+ }
28
+ if(!$this->wpua_is_author_or_above()) {
29
+ // Upload errors
30
+ add_action('user_profile_update_errors', array($this, 'wpua_upload_errors'), 10, 3);
31
+ // Prefilter upload size
32
+ add_filter('wp_handle_upload_prefilter', array($this, 'wpua_handle_upload_prefilter'));
33
+ }
34
+ }
35
+ add_filter('media_view_settings', array($this, 'wpua_media_view_settings'), 10, 1);
36
+ }
37
+
38
+ // Avatars have no parent posts
39
+ public function wpua_media_view_settings($settings) {
40
+ $settings['post']['id'] = 0;
41
+ return $settings;
42
+ }
43
+
44
+ // Media Uploader
45
+ public static function wpua_media_upload_scripts($user="") {
46
+ global $current_user, $mustache_admin, $pagenow, $show_avatars, $wp_user_avatar, $wpua_admin, $wpua_upload_size_limit;
47
+ $user = ($pagenow == 'user-edit.php' && isset($_GET['user_id'])) ? get_user_by('id', $_GET['user_id']) : $current_user;
48
+ wp_enqueue_script('jquery');
49
+ if($wp_user_avatar->wpua_is_author_or_above()) {
50
+ wp_enqueue_script('admin-bar');
51
+ wp_enqueue_media(array('post' => 0));
52
+ wp_enqueue_script('wp-user-avatar', WPUA_URL.'js/wp-user-avatar.js', array('jquery', 'media-editor'), WPUA_VERSION, true);
53
+ } else {
54
+ wp_enqueue_script('wp-user-avatar', WPUA_URL.'js/wp-user-avatar-user.js', array('jquery'), WPUA_VERSION, true);
55
+ }
56
+ wp_enqueue_style('wp-user-avatar', WPUA_URL.'css/wp-user-avatar.css', array('media-views'), WPUA_VERSION);
57
+ // Admin scripts
58
+ if($pagenow == 'options-discussion.php' || $wpua_admin->wpua_is_menu_page()) {
59
+ // Size limit slider
60
+ wp_enqueue_script('jquery-ui-slider');
61
+ wp_enqueue_style('wp-user-avatar-jqueryui', WPUA_URL.'css/jquery.ui.slider.css', "", null);
62
+ // Remove/edit settings
63
+ $wpua_custom_scripts = array('section' => __('Default Avatar'), 'edit_image' => __('Edit Image'), 'select_image' => __('Select Image'), 'avatar_thumb' => $mustache_admin);
64
+ wp_localize_script('wp-user-avatar', 'wpua_custom', $wpua_custom_scripts);
65
+ // Settings control
66
+ wp_enqueue_script('wp-user-avatar-admin', WPUA_URL.'js/wp-user-avatar-admin.js', array('wp-user-avatar'), WPUA_VERSION, true);
67
+ $wpua_admin_scripts = array('upload_size_limit' => $wpua_upload_size_limit, 'max_upload_size' => wp_max_upload_size());
68
+ wp_localize_script('wp-user-avatar-admin', 'wpua_admin', $wpua_admin_scripts);
69
+ } else {
70
+ // User remove/edit settings
71
+ $avatar_medium_src = (bool) $show_avatars == 1 ? wpua_get_avatar_original($user->user_email, 96) : includes_url().'images/blank.gif';
72
+ $wpua_custom_scripts = array('section' => $user->display_name, 'edit_image' => __('Edit Image'), 'select_image' => __('Select Image'), 'avatar_thumb' => $avatar_medium_src);
73
+ wp_localize_script('wp-user-avatar', 'wpua_custom', $wpua_custom_scripts);
74
+ }
75
+ }
76
+
77
+ // Add to edit user profile
78
+ public static function wpua_action_show_user_profile($user) {
79
+ global $blog_id, $current_user, $post, $show_avatars, $wpdb, $wp_user_avatar, $wpua_allow_upload, $wpua_edit_avatar, $wpua_upload_size_limit_with_units;
80
+ // Get WPUA attachment ID
81
+ $wpua = get_user_meta($user->ID, $wpdb->get_blog_prefix($blog_id).'user_avatar', true);
82
+ // Show remove button if WPUA is set
83
+ $hide_remove = !has_wp_user_avatar($user->ID) ? 'wpua-hide' : "";
84
+ // If avatars are enabled, get original avatar image or show blank
85
+ $avatar_medium_src = (bool) $show_avatars == 1 ? wpua_get_avatar_original($user->user_email, 96) : includes_url().'images/blank.gif';
86
+ // Check if user has wp_user_avatar, if not show image from above
87
+ $avatar_medium = has_wp_user_avatar($user->ID) ? get_wp_user_avatar_src($user->ID, 'medium') : $avatar_medium_src;
88
+ // Check if user has wp_user_avatar, if not show image from above
89
+ $avatar_thumbnail = has_wp_user_avatar($user->ID) ? get_wp_user_avatar_src($user->ID, 96) : $avatar_medium_src;
90
+ $edit_attachment_link = add_query_arg(array('post' => $wpua, 'action' => 'edit'), admin_url('post.php'));
91
+ ?>
92
+ <?php do_action('wpua_before_avatar'); ?>
93
+ <input type="hidden" name="wp-user-avatar" id="wp-user-avatar" value="<?php echo $wpua; ?>" />
94
+ <?php if($wp_user_avatar->wpua_is_author_or_above()) : // Button to launch Media Uploader ?>
95
+ <p id="wpua-add-button"><button type="button" class="button" id="wpua-add" name="wpua-add"><?php _e('Choose Image'); ?></button></p>
96
+ <?php elseif(!$wp_user_avatar->wpua_is_author_or_above() && !has_wp_user_avatar($current_user->ID)) : // Upload button ?>
97
+ <p id="wpua-upload-button">
98
+ <input name="wpua-file" id="wpua-file" type="file" />
99
+ <button type="submit" class="button" id="wpua-upload" name="submit" value="<?php _e('Upload'); ?>"><?php _e('Upload'); ?></button>
100
+ </p>
101
+ <p id="wpua-upload-messages">
102
+ <span id="wpua-max-upload"><?php printf(__('Maximum upload file size: %d%s.'), esc_html($wpua_upload_size_limit_with_units), esc_html('KB')); ?></span>
103
+ <span id="wpua-allowed-files"><?php _e('Allowed Files'); ?>: <?php _e('<code>jpg jpeg png gif</code>'); ?></span>
104
+ </p>
105
+ <?php elseif((bool) $wpua_edit_avatar == 1 && !wpua_is_author_or_above() && has_wp_user_avatar($current_user->ID) && $wp_user_avatar->wpua_author($wpua, $current_user->ID)) : // Edit button ?>
106
+ <p id="wpua-edit-button"><button type="button" class="button" id="wpua-edit" name="wpua-edit" onclick="window.open('<?php echo $edit_attachment_link; ?>', '_self');"><?php _e('Edit Image'); ?></button></p>
107
+ <?php endif; ?>
108
+ <p id="wpua-preview">
109
+ <img src="<?php echo $avatar_medium; ?>" alt="" />
110
+ <?php _e('Original Size'); ?>
111
+ </p>
112
+ <p id="wpua-thumbnail">
113
+ <img src="<?php echo $avatar_thumbnail; ?>" alt="" />
114
+ <?php _e('Thumbnail'); ?>
115
+ </p>
116
+ <p id="wpua-remove-button" class="<?php echo $hide_remove; ?>"><button type="button" class="button" id="wpua-remove" name="wpua-remove"><?php _e('Remove Image'); ?></button></p>
117
+ <p id="wpua-undo-button"><button type="button" class="button" id="wpua-undo" name="wpua-undo"><?php _e('Undo'); ?></button></p>
118
+ <?php do_action('wpua_after_avatar'); ?>
119
+ <?php
120
+ }
121
+
122
+ // Add upload error messages
123
+ public static function wpua_upload_errors($errors, $update, $user) {
124
+ global $wpua_upload_size_limit;
125
+ if($update && !empty($_FILES['wpua-file'])) {
126
+ $size = $_FILES['wpua-file']['size'];
127
+ $type = $_FILES['wpua-file']['type'];
128
+ $upload_dir = wp_upload_dir();
129
+ // Allow only JPG, GIF, PNG
130
+ if(!empty($type) && !preg_match('/(jpe?g|gif|png)$/i', $type)) {
131
+ $errors->add('wpua_file_type', __('This file is not an image. Please try another.'));
132
+ }
133
+ // Upload size limit
134
+ if(!empty($size) && $size > $wpua_upload_size_limit) {
135
+ $errors->add('wpua_file_size', __('Memory exceeded. Please try another smaller file.'));
136
+ }
137
+ // Check if directory is writeable
138
+ if(!is_writeable($upload_dir['path'])) {
139
+ $errors->add('wpua_file_directory', sprintf(__('Unable to create directory %s. Is its parent directory writable by the server?'), $upload_dir['path']));
140
+ }
141
+ }
142
+ }
143
+
144
+ // Set upload size limit
145
+ public function wpua_handle_upload_prefilter($file) {
146
+ global $wpua_upload_size_limit;
147
+ $size = $file['size'];
148
+ if(!empty($size) && $size > $wpua_upload_size_limit) {
149
+ function wpua_file_size_error($errors, $update, $user) {
150
+ $errors->add('wpua_file_size', __('Memory exceeded. Please try another smaller file.'));
151
+ }
152
+ add_action('user_profile_update_errors', 'wpua_file_size_error', 10, 3);
153
+ return;
154
+ }
155
+ return $file;
156
+ }
157
+
158
+ // Update user meta
159
+ public static function wpua_action_process_option_update($user_id) {
160
+ global $blog_id, $post, $wpdb, $wp_user_avatar, $wpua_resize_crop, $wpua_resize_h, $wpua_resize_upload, $wpua_resize_w;
161
+ // Check if user has publish_posts capability
162
+ if(wpua_is_author_or_above()) {
163
+ $wpua_id = isset($_POST['wp-user-avatar']) ? intval($_POST['wp-user-avatar']) : "";
164
+ // Remove old attachment postmeta
165
+ delete_metadata('post', null, '_wp_attachment_wp_user_avatar', $user_id, true);
166
+ // Create new attachment postmeta
167
+ update_post_meta($wpua_id, '_wp_attachment_wp_user_avatar', $user_id);
168
+ // Update usermeta
169
+ update_user_meta($user_id, $wpdb->get_blog_prefix($blog_id).'user_avatar', $wpua_id);
170
+ } else {
171
+ // Remove attachment info if avatar is blank
172
+ if(isset($_POST['wp-user-avatar']) && empty($_POST['wp-user-avatar'])) {
173
+ // Uploads by user
174
+ $q = array(
175
+ 'author' => $user_id,
176
+ 'post_type' => 'attachment',
177
+ 'post_status' => 'inherit',
178
+ 'posts_per_page' => '-1',
179
+ 'meta_query' => array(
180
+ array(
181
+ 'key' => '_wp_attachment_wp_user_avatar',
182
+ 'value' => '',
183
+ 'compare' => '!='
184
+ )
185
+ )
186
+ );
187
+ $avatars_wp_query = new WP_Query($q);
188
+ while($avatars_wp_query->have_posts()) : $avatars_wp_query->the_post();
189
+ wp_delete_attachment($post->ID);
190
+ endwhile;
191
+ wp_reset_query();
192
+ // Remove attachment postmeta
193
+ delete_metadata('post', null, '_wp_attachment_wp_user_avatar', $user_id, true);
194
+ // Remove usermeta
195
+ update_user_meta($user_id, $wpdb->get_blog_prefix($blog_id).'user_avatar', "");
196
+ }
197
+ // Create attachment from upload
198
+ if(isset($_POST['submit']) && $_POST['submit'] && !empty($_FILES['wpua-file'])) {
199
+ $name = $_FILES['wpua-file']['name'];
200
+ $file = wp_handle_upload($_FILES['wpua-file'], array('test_form' => false));
201
+ $type = $_FILES['wpua-file']['type'];
202
+ $upload_dir = wp_upload_dir();
203
+ if(is_writeable($upload_dir['path'])) {
204
+ if(!empty($type) && preg_match('/(jpe?g|gif|png)$/i', $type)) {
205
+ // Resize uploaded image
206
+ if((bool) $wpua_resize_upload == 1) {
207
+ // Original image
208
+ $uploaded_image = wp_get_image_editor($file['file']);
209
+ // Check for errors
210
+ if(!is_wp_error($uploaded_image)) {
211
+ // Resize image
212
+ $uploaded_image->resize($wpua_resize_w, $wpua_resize_h, $wpua_resize_crop);
213
+ // Save image
214
+ $resized_image = $uploaded_image->save($file['file']);
215
+ }
216
+ }
217
+ // Break out file info
218
+ $name_parts = pathinfo($name);
219
+ $name = trim(substr($name, 0, -(1 + strlen($name_parts['extension']))));
220
+ $url = $file['url'];
221
+ $file = $file['file'];
222
+ $title = $name;
223
+ // Use image exif/iptc data for title if possible
224
+ if($image_meta = @wp_read_image_metadata($file)) {
225
+ if(trim($image_meta['title']) && !is_numeric(sanitize_title($image_meta['title']))) {
226
+ $title = $image_meta['title'];
227
+ }
228
+ }
229
+ // Construct the attachment array
230
+ $attachment = array(
231
+ 'guid' => $url,
232
+ 'post_mime_type' => $type,
233
+ 'post_title' => $title,
234
+ 'post_content' => ""
235
+ );
236
+ // This should never be set as it would then overwrite an existing attachment
237
+ if(isset($attachment['ID'])) {
238
+ unset($attachment['ID']);
239
+ }
240
+ // Save the attachment metadata
241
+ $attachment_id = wp_insert_attachment($attachment, $file);
242
+ if(!is_wp_error($attachment_id)) {
243
+ wp_update_attachment_metadata($attachment_id, wp_generate_attachment_metadata($attachment_id, $file));
244
+ // Remove old attachment postmeta
245
+ delete_metadata('post', null, '_wp_attachment_wp_user_avatar', $user_id, true);
246
+ // Create new attachment postmeta
247
+ update_post_meta($attachment_id, '_wp_attachment_wp_user_avatar', $user_id);
248
+ // Update usermeta
249
+ update_user_meta($user_id, $wpdb->get_blog_prefix($blog_id).'user_avatar', $attachment_id);
250
+ }
251
+ }
252
+ }
253
+ }
254
+ }
255
+ }
256
+
257
+ // Check who owns image
258
+ private function wpua_author($attachment_id, $user_id, $wpua_author=false) {
259
+ $attachment = get_post($attachment_id);
260
+ if(!empty($attachment) && $attachment->post_author == $user_id) {
261
+ $wpua_author = true;
262
+ }
263
+ return $wpua_author;
264
+ }
265
+
266
+ // Check if current user has at least Author privileges
267
+ private function wpua_is_author_or_above() {
268
+ $is_author_or_above = (current_user_can('edit_published_posts') && current_user_can('upload_files') && current_user_can('publish_posts') && current_user_can('delete_published_posts')) ? true : false;
269
+ return $is_author_or_above;
270
+ }
271
+
272
+ }
273
+
274
+ // Initialize WP_User_Avatar
275
+ function wpua_init() {
276
+ global $wp_user_avatar;
277
+ $wp_user_avatar = new WP_User_Avatar();
278
+ }
279
+ add_action('init', 'wpua_init');
includes/tinymce/editor_plugin.js CHANGED
@@ -1 +1 @@
1
- (function(){tinymce.PluginManager.requireLangPack('wpUserAvatar');tinymce.create('tinymce.plugins.wpUserAvatar',{init:function(ed,url){ed.addCommand('mceWpUserAvatar',function(){ed.windowManager.open({file:ajaxurl+'?action=wp_user_avatar_tinymce',width:500,height:265,inline:1},{plugin_url:url})});ed.addButton('wpUserAvatar',{title:'Insert WP User Avatar',cmd:'mceWpUserAvatar',image:url+'/../../images/wp-user-avatar-32x32.png'});ed.onNodeChange.add(function(ed,cm,n){cm.setActive('wpUserAvatar',n.nodeName=='IMG')})},createControl:function(n,cm){return null},getInfo:function(){return{longname:'WP User Avatar',author:'Bangbay Siboliban',authorurl:'http://siboliban.org/',infourl:'http://wordpress.org/extend/plugins/wp-user-avatar/',version:"1.5.4"}}});tinymce.PluginManager.add('wpUserAvatar',tinymce.plugins.wpUserAvatar)})();
1
+ (function() {tinymce.PluginManager.requireLangPack('wpUserAvatar');tinymce.create('tinymce.plugins.wpUserAvatar',{init:function(ed,url) {ed.addCommand('mceWpUserAvatar',function() {ed.windowManager.open({file:ajaxurl+'?action=wp_user_avatar_tinymce',width:500,height:360,inline:1},{plugin_url:url})});ed.addButton('wpUserAvatar',{title:'Insert WP User Avatar',cmd:'mceWpUserAvatar',image:url+'/../../images/wpua-32x32.png'});ed.onNodeChange.add(function(ed,cm,n) {cm.setActive('wpUserAvatar',n.nodeName=='IMG')})},createControl:function(n,cm) {return null},getInfo:function() {return{longname:'WP User Avatar',author:'Bangbay Siboliban',authorurl:'http://siboliban.org/',infourl:'http://wordpress.org/plugins/wp-user-avatar/',version:"1.8.5"}}});tinymce.PluginManager.add('wpUserAvatar',tinymce.plugins.wpUserAvatar)})();
includes/tinymce/window.php CHANGED
@@ -1,26 +1,32 @@
1
  <?php
2
  /**
 
 
3
  * @package WP User Avatar
4
- * @version 1.5.4
5
  */
6
 
7
- if(!defined('ABSPATH')){
8
  die(__('You are not allowed to call this page directly.'));
9
  @header('Content-Type:'.get_option('html_type').';charset='.get_option('blog_charset'));
10
  }
11
  ?>
12
- <html xmlns="http://www.w3.org/1999/xhtml">
 
13
  <head>
14
  <title><?php _e('WP User Avatar', 'wp-user-avatar'); ?></title>
15
  <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php echo get_option('blog_charset'); ?>" />
16
  <base target="_self" />
17
  <script type="text/javascript" src="<?php echo site_url(); ?>/wp-includes/js/jquery/jquery.js"></script>
 
 
 
18
  <script type="text/javascript" src="<?php echo site_url(); ?>/wp-includes/js/tinymce/tiny_mce_popup.js"></script>
19
  <script type="text/javascript" src="<?php echo site_url(); ?>/wp-includes/js/tinymce/utils/form_utils.js"></script>
20
  <script type="text/javascript">
21
- function insert_wp_user_avatar(){
22
  // Custom shortcode values
23
- var shortcode;
24
  var user = document.getElementById('wp_user_avatar_user').value;
25
  var size = document.getElementById('wp_user_avatar_size').value;
26
  var size_number = document.getElementById('wp_user_avatar_size_number').value;
@@ -28,102 +34,148 @@ if(!defined('ABSPATH')){
28
  var link = document.getElementById('wp_user_avatar_link').value;
29
  var link_external = document.getElementById('wp_user_avatar_link_external').value;
30
  var target = document.getElementById('wp_user_avatar_target').value;
 
31
 
32
  // Add tag to shortcode only if not blank
33
  var user_tag = (user != "") ? ' user="' + user + '"' : "";
34
  var size_tag = (size != "" && size_number == "") ? ' size="' + size + '"' : "";
35
- size_tag = (size_number != "") ? ' size="' + size_number + '"' : size_tag;
36
  var align_tag = (align != "") ? ' align="' + align + '"' : "";
37
  var link_tag = (link != "" && link != 'custom-url' && link_external == "") ? ' link="' + link + '"' : "";
38
- link_tag = (link_external != "") ? ' link="' + link_external + '"' : link_tag;
39
  var target_tag = document.getElementById('wp_user_avatar_target').checked && (link_tag != "") ? ' target="' + target + '"' : "";
40
-
41
- shortcode = "<p>[avatar" + user_tag + size_tag + align_tag + link_tag + target_tag + "]</p>";
42
 
43
- if(window.tinyMCE){
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  window.tinyMCE.execInstanceCommand(window.tinyMCE.activeEditor.id, 'mceInsertContent', false, shortcode);
45
  tinyMCEPopup.editor.execCommand('mceRepaint');
46
  tinyMCEPopup.close();
47
  }
48
  return;
49
  }
50
- jQuery(function(){
51
- jQuery('#wp_user_avatar_link').change(function(){
52
- jQuery('#wp_user_avatar_link_external_section').toggle(jQuery('#wp_user_avatar_link').val() == 'custom-url');
53
  });
54
- jQuery('#wp_user_avatar_size').change(function(){
55
- jQuery('#wp_user_avatar_size_number_section').toggle(jQuery('#wp_user_avatar_size').val() == 'custom');
56
  });
 
57
  });
58
  </script>
59
  <style type="text/css">
60
- form { background: #fff; border: 1px solid #eee; }
 
 
 
 
61
  p, h4 { margin: 0; padding: 12px 0 0; }
62
  h4.center { text-align: center; }
63
- label { width: 150px; display: inline-block; text-align: right; }
64
  .mceActionPanel { padding: 7px 0 12px; text-align: center; }
65
  .mceActionPanel #insert { float: none; width: 180px; margin: 0 auto; }
66
  #wp_user_avatar_size_number_section, #wp_user_avatar_link_external_section { display: none; }
67
  </style>
68
  </head>
69
- <body id="link" class="wp-core-ui" onload="document.body.style.display="";" style="display:none;">
70
- <form name="wpUserAvatar" action="#">
71
- <p><label for="<?php esc_attr_e('wp_user_avatar_user'); ?>"><strong><?php _e('User Name'); ?>:</strong></label>
72
- <select id="<?php esc_attr_e('wp_user_avatar_user'); ?>" name="<?php esc_attr_e('wp_user_avatar_user'); ?>">
73
- <option value=""></option>
74
- <?php $users = get_users(); foreach($users as $user) : ?>
75
- <option value="<?php echo $user->user_login; ?>"><?php echo $user->display_name; ?></option>
76
- <?php endforeach; ?>
77
- </select></p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
 
79
- <p>
80
- <label for="<?php esc_attr_e('wp_user_avatar_size'); ?>"><strong><?php _e('Size'); ?>:</strong></label>
81
- <select id="<?php esc_attr_e('wp_user_avatar_size'); ?>" name="<?php esc_attr_e('wp_user_avatar_size'); ?>">
82
- <option value=""></option>
83
- <option value="original"><?php _e('Original Size'); ?></option>
84
- <option value="large"><?php _e('Large'); ?></option>
85
- <option value="medium"><?php _e('Medium'); ?></option>
86
- <option value="thumbnail"><?php _e('Thumbnail'); ?></option>
87
- <option value="custom"><?php _e('Custom'); ?></option>
88
- </select>
89
- </p>
90
 
91
- <p id="<?php esc_attr_e('wp_user_avatar_size_number_section'); ?>">
92
- <label for="<?php esc_attr_e('wp_user_avatar_size_number'); ?>"><?php _e('Size'); ?></label>
93
- <input type="text" size="8" id="<?php esc_attr_e('wp_user_avatar_size_number'); ?>" name="<?php esc_attr_e('wp_user_avatar_size'); ?>" value="" />
94
- </p>
 
 
 
 
 
95
 
96
- <p><label for="<?php esc_attr_e('wp_user_avatar_align'); ?>"><strong><?php _e('Alignment'); ?>:</strong></label>
97
- <select id="<?php esc_attr_e('wp_user_avatar_align'); ?>" name="<?php esc_attr_e('wp_user_avatar_align'); ?>">
98
- <option value=""></option>
99
- <option value="center"><?php _e('Center'); ?></option>
100
- <option value="left"><?php _e('Left'); ?></option>
101
- <option value="right"><?php _e('Right'); ?></option>
102
- </select></p>
103
 
104
- <p>
105
- <label for="<?php esc_attr_e('wp_user_avatar_link'); ?>"><strong><?php _e('Link To'); ?>:</strong></label>
106
- <select id="<?php esc_attr_e('wp_user_avatar_link'); ?>" name="<?php esc_attr_e('wp_user_avatar_link'); ?>">
107
- <option value=""></option>
108
- <option value="file"><?php _e('Image File'); ?></option>
109
- <option value="attachment"><?php _e('Attachment Page'); ?></option>
110
- <option value="custom-url"><?php _e('Custom URL'); ?></option>
111
- </select>
112
- </p>
113
 
114
- <p id="<?php esc_attr_e('wp_user_avatar_link_external_section'); ?>">
115
- <label for="<?php esc_attr_e('wp_user_avatar_link_external'); ?>"><?php _e('URL'); ?></label>
116
- <input type="text" size="36" id="<?php esc_attr_e('wp_user_avatar_link_external'); ?>" name="<?php esc_attr_e('wp_user_avatar_link_external'); ?>" value="" />
117
- </p>
118
 
119
- <p>
120
- <label for="<?php esc_attr_e('wp_user_avatar_target'); ?>"></label>
121
- <input type="checkbox" id="<?php esc_attr_e('wp_user_avatar_target'); ?>" name="<?php esc_attr_e('wp_user_avatar_target'); ?>" value="_blank" /> <strong><?php _e('Open link in a new window'); ?></strong>
122
- </p>
 
 
 
 
 
123
 
124
- <div class="mceActionPanel">
125
- <input type="submit" id="insert" class="button-primary" name="insert" value="<?php _e('Insert into Post'); ?>" onclick="insert_wp_user_avatar();" />
126
- </div>
127
- </form>
 
 
128
  </body>
129
  </html>
1
  <?php
2
  /**
3
+ * TinyMCE modal window.
4
+ *
5
  * @package WP User Avatar
6
+ * @version 1.8.5
7
  */
8
 
9
+ if(!defined('ABSPATH')) {
10
  die(__('You are not allowed to call this page directly.'));
11
  @header('Content-Type:'.get_option('html_type').';charset='.get_option('blog_charset'));
12
  }
13
  ?>
14
+ <!DOCTYPE html>
15
+ <html>
16
  <head>
17
  <title><?php _e('WP User Avatar', 'wp-user-avatar'); ?></title>
18
  <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php echo get_option('blog_charset'); ?>" />
19
  <base target="_self" />
20
  <script type="text/javascript" src="<?php echo site_url(); ?>/wp-includes/js/jquery/jquery.js"></script>
21
+ <script type="text/javascript" src="<?php echo site_url(); ?>/wp-includes/js/jquery/ui/jquery.ui.core.min.js"></script>
22
+ <script type="text/javascript" src="<?php echo site_url(); ?>/wp-includes/js/jquery/ui/jquery.ui.widget.min.js"></script>
23
+ <script type="text/javascript" src="<?php echo site_url(); ?>/wp-includes/js/jquery/ui/jquery.ui.tabs.min.js"></script>
24
  <script type="text/javascript" src="<?php echo site_url(); ?>/wp-includes/js/tinymce/tiny_mce_popup.js"></script>
25
  <script type="text/javascript" src="<?php echo site_url(); ?>/wp-includes/js/tinymce/utils/form_utils.js"></script>
26
  <script type="text/javascript">
27
+ function wpuaInsertAvatar() {
28
  // Custom shortcode values
29
+ var shortcode, closing_tag;
30
  var user = document.getElementById('wp_user_avatar_user').value;
31
  var size = document.getElementById('wp_user_avatar_size').value;
32
  var size_number = document.getElementById('wp_user_avatar_size_number').value;
34
  var link = document.getElementById('wp_user_avatar_link').value;
35
  var link_external = document.getElementById('wp_user_avatar_link_external').value;
36
  var target = document.getElementById('wp_user_avatar_target').value;
37
+ var caption = document.getElementById('wp_user_avatar_caption').value;
38
 
39
  // Add tag to shortcode only if not blank
40
  var user_tag = (user != "") ? ' user="' + user + '"' : "";
41
  var size_tag = (size != "" && size_number == "") ? ' size="' + size + '"' : "";
42
+ size_tag = (size_number != "") ? ' size="' + size_number + '"' : size_tag;
43
  var align_tag = (align != "") ? ' align="' + align + '"' : "";
44
  var link_tag = (link != "" && link != 'custom-url' && link_external == "") ? ' link="' + link + '"' : "";
45
+ link_tag = (link_external != "") ? ' link="' + link_external + '"' : link_tag;
46
  var target_tag = document.getElementById('wp_user_avatar_target').checked && (link_tag != "") ? ' target="' + target + '"' : "";
 
 
47
 
48
+ // Assemble the shortcode
49
+ closing_tag = (caption != "") ? "]" + caption + "[/avatar]" : " /]";
50
+ shortcode = "<p>[avatar" + user_tag + size_tag + align_tag + link_tag + target_tag + closing_tag + "</p>";
51
+
52
+ if(window.tinyMCE) {
53
+ window.tinyMCE.execInstanceCommand(window.tinyMCE.activeEditor.id, 'mceInsertContent', false, shortcode);
54
+ tinyMCEPopup.editor.execCommand('mceRepaint');
55
+ tinyMCEPopup.close();
56
+ }
57
+ return;
58
+ }
59
+ function wpuaInsertAvatarUpload() {
60
+ // Upload shortcode
61
+ var shortcode = "<p>[avatar_upload]</p>";
62
+
63
+ if(window.tinyMCE) {
64
  window.tinyMCE.execInstanceCommand(window.tinyMCE.activeEditor.id, 'mceInsertContent', false, shortcode);
65
  tinyMCEPopup.editor.execCommand('mceRepaint');
66
  tinyMCEPopup.close();
67
  }
68
  return;
69
  }
70
+ jQuery(function($) {
71
+ $('#wp_user_avatar_link').change(function() {
72
+ $('#wp_user_avatar_link_external_section').toggle($('#wp_user_avatar_link').val() == 'custom-url');
73
  });
74
+ $('#wp_user_avatar_size').change(function() {
75
+ $('#wp_user_avatar_size_number_section').toggle($('#wp_user_avatar_size').val() == 'custom');
76
  });
77
+ $('#wpua-tabs').tabs();
78
  });
79
  </script>
80
  <style type="text/css">
81
+ ul { margin: 0; padding: 0; list-style: none; }
82
+ ul li { float: left; }
83
+ ul li a { float: left; padding: 2px 5px; background: #ddd; border: 1px solid #eee; border-bottom: 0; display: block; font-weight: 700; outline: none; text-decoration: none; }
84
+ ul li.ui-tabs-active a { background: #fff; }
85
+ form { clear: both; background: #fff; border: 1px solid #eee; }
86
  p, h4 { margin: 0; padding: 12px 0 0; }
87
  h4.center { text-align: center; }
88
+ label { width: 150px; margin-right: 3px; display: inline-block; text-align: right; vertical-align: top; }
89
  .mceActionPanel { padding: 7px 0 12px; text-align: center; }
90
  .mceActionPanel #insert { float: none; width: 180px; margin: 0 auto; }
91
  #wp_user_avatar_size_number_section, #wp_user_avatar_link_external_section { display: none; }
92
  </style>
93
  </head>
94
+ <body id="link" class="wp-core-ui" onload="document.body.style.display='';" style="display:none;">
95
+ <div id="wpua-tabs">
96
+ <ul>
97
+ <li><a href="#wpua"><?php _e('Avatar'); ?></a></li>
98
+ <li><a href="#wpua-upload"><?php _e('Upload'); ?></a></li>
99
+ </ul>
100
+ <form name="wpUserAvatar" action="#">
101
+ <div id="wpua">
102
+ <p>
103
+ <label for="<?php esc_attr_e('wp_user_avatar_user'); ?>"><strong><?php _e('User Name'); ?>:</strong></label>
104
+ <select id="<?php esc_attr_e('wp_user_avatar_user'); ?>" name="<?php esc_attr_e('wp_user_avatar_user'); ?>">
105
+ <option value=""></option>
106
+ <?php $users = get_users(); foreach($users as $user) : ?>
107
+ <option value="<?php echo $user->user_login; ?>"><?php echo $user->display_name; ?></option>
108
+ <?php endforeach; ?>
109
+ </select>
110
+ </p>
111
+
112
+ <p>
113
+ <label for="<?php esc_attr_e('wp_user_avatar_size'); ?>"><strong><?php _e('Size'); ?>:</strong></label>
114
+ <select id="<?php esc_attr_e('wp_user_avatar_size'); ?>" name="<?php esc_attr_e('wp_user_avatar_size'); ?>">
115
+ <option value=""></option>
116
+ <option value="original"><?php _e('Original Size'); ?></option>
117
+ <option value="large"><?php _e('Large'); ?></option>
118
+ <option value="medium"><?php _e('Medium'); ?></option>
119
+ <option value="thumbnail"><?php _e('Thumbnail'); ?></option>
120
+ <option value="custom"><?php _e('Custom'); ?></option>
121
+ </select>
122
+ </p>
123
+
124
+ <p id="<?php esc_attr_e('wp_user_avatar_size_number_section'); ?>">
125
+ <label for="<?php esc_attr_e('wp_user_avatar_size_number'); ?>"><?php _e('Size'); ?>:</label>
126
+ <input type="text" size="8" id="<?php esc_attr_e('wp_user_avatar_size_number'); ?>" name="<?php esc_attr_e('wp_user_avatar_size'); ?>" value="" />
127
+ </p>
128
 
129
+ <p>
130
+ <label for="<?php esc_attr_e('wp_user_avatar_align'); ?>"><strong><?php _e('Alignment'); ?>:</strong></label>
131
+ <select id="<?php esc_attr_e('wp_user_avatar_align'); ?>" name="<?php esc_attr_e('wp_user_avatar_align'); ?>">
132
+ <option value=""></option>
133
+ <option value="center"><?php _e('Center'); ?></option>
134
+ <option value="left"><?php _e('Left'); ?></option>
135
+ <option value="right"><?php _e('Right'); ?></option>
136
+ </select>
137
+ </p>
 
 
138
 
139
+ <p>
140
+ <label for="<?php esc_attr_e('wp_user_avatar_link'); ?>"><strong><?php _e('Link To'); ?>:</strong></label>
141
+ <select id="<?php esc_attr_e('wp_user_avatar_link'); ?>" name="<?php esc_attr_e('wp_user_avatar_link'); ?>">
142
+ <option value=""></option>
143
+ <option value="file"><?php _e('Image File'); ?></option>
144
+ <option value="attachment"><?php _e('Attachment Page'); ?></option>
145
+ <option value="custom-url"><?php _e('Custom URL'); ?></option>
146
+ </select>
147
+ </p>
148
 
149
+ <p id="<?php esc_attr_e('wp_user_avatar_link_external_section'); ?>">
150
+ <label for="<?php esc_attr_e('wp_user_avatar_link_external'); ?>"><?php _e('URL'); ?>:</label>
151
+ <input type="text" size="36" id="<?php esc_attr_e('wp_user_avatar_link_external'); ?>" name="<?php esc_attr_e('wp_user_avatar_link_external'); ?>" value="" />
152
+ </p>
 
 
 
153
 
154
+ <p>
155
+ <label for="<?php esc_attr_e('wp_user_avatar_target'); ?>"></label>
156
+ <input type="checkbox" id="<?php esc_attr_e('wp_user_avatar_target'); ?>" name="<?php esc_attr_e('wp_user_avatar_target'); ?>" value="_blank" /> <strong><?php _e('Open link in a new window'); ?></strong>
157
+ </p>
 
 
 
 
 
158
 
159
+ <p>
160
+ <label for="<?php esc_attr_e('wp_user_avatar_caption'); ?>"><strong><?php _e('Caption'); ?>:</strong></label>
161
+ <textarea cols="36" rows="2" id="<?php esc_attr_e('wp_user_avatar_caption'); ?>" name="<?php esc_attr_e('wp_user_avatar_size'); ?>"></textarea>
162
+ </p>
163
 
164
+ <div class="mceActionPanel">
165
+ <input type="submit" id="insert" class="button-primary" name="insert" value="<?php _e('Insert into Post'); ?>" onclick="wpuaInsertAvatar();" />
166
+ </div>
167
+ </div>
168
+ <div id="wpua-upload">
169
+ <p id="<?php esc_attr_e('wp_user_avatar_upload'); ?>">
170
+ <label for="<?php esc_attr_e('wp_user_avatar_upload'); ?>"><strong><?php _e('Upload'); ?>:</strong></label>
171
+ <input type="text" size="36" id="<?php esc_attr_e('wp_user_avatar_upload'); ?>" name="<?php esc_attr_e('wp_user_avatar_upload'); ?>" value="<?php esc_attr_e('[avatar_upload]'); ?>" readonly="readonly" />
172
+ </p>
173
 
174
+ <div class="mceActionPanel">
175
+ <input type="submit" id="insert" class="button-primary" name="insert" value="<?php _e('Insert into Post'); ?>" onclick="wpuaInsertAvatarUpload();" />
176
+ </div>
177
+ </div>
178
+ </form>
179
+ </div>
180
  </body>
181
  </html>
includes/wpua-functions.php ADDED
@@ -0,0 +1,297 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Core user functions.
4
+ *
5
+ * @package WP User Avatar
6
+ * @version 1.8.5
7
+ */
8
+
9
+ // Returns true if user has Gravatar-hosted image
10
+ function wpua_has_gravatar($id_or_email, $has_gravatar=false, $user="", $email="") {
11
+ if(!is_object($id_or_email) && !empty($id_or_email)) {
12
+ // Find user by ID or e-mail address
13
+ $user = is_numeric($id_or_email) ? get_user_by('id', $id_or_email) : get_user_by('email', $id_or_email);
14
+ // Get registered user e-mail address
15
+ $email = !empty($user) ? $user->user_email : "";
16
+ }
17
+ // Check if Gravatar image returns 200 (OK) or 404 (Not Found)
18
+ $hash = md5(strtolower(trim($email)));
19
+ $gravatar = 'http://www.gravatar.com/avatar/'.$hash.'?d=404';
20
+ $data = wp_cache_get($hash);
21
+ if(false === $data) {
22
+ $response = wp_remote_head($gravatar);
23
+ $data = is_wp_error($response) ? 'not200' : $response['response']['code'];
24
+ wp_cache_set($hash, $data, $group="", $expire=60*5);
25
+ }
26
+ $has_gravatar = ($data == '200') ? true : false;
27
+ return $has_gravatar;
28
+ }
29
+
30
+ // Returns true if user has wp_user_avatar
31
+ function has_wp_user_avatar($id_or_email="", $has_wpua=false, $user="", $user_id="") {
32
+ global $blog_id, $wpdb;
33
+ if(!is_object($id_or_email) && !empty($id_or_email)) {
34
+ // Find user by ID or e-mail address
35
+ $user = is_numeric($id_or_email) ? get_user_by('id', $id_or_email) : get_user_by('email', $id_or_email);
36
+ // Get registered user ID
37
+ $user_id = !empty($user) ? $user->ID : "";
38
+ }
39
+ $wpua = get_user_meta($user_id, $wpdb->get_blog_prefix($blog_id).'user_avatar', true);
40
+ $has_wpua = !empty($wpua) && wp_attachment_is_image($wpua) ? true : false;
41
+ return $has_wpua;
42
+ }
43
+
44
+ // Replace get_avatar only in get_wp_user_avatar
45
+ function wpua_get_avatar_filter($avatar, $id_or_email="", $size="", $default="", $alt="") {
46
+ global $avatar_default, $mustache_admin, $mustache_avatar, $mustache_medium, $mustache_original, $mustache_thumbnail, $post, $wpua_avatar_default, $wpua_disable_gravatar;
47
+ // User has WPUA
48
+ if(is_object($id_or_email)) {
49
+ if(!empty($id_or_email->comment_author_email)) {
50
+ $avatar = get_wp_user_avatar($id_or_email, $size, $default, $alt);
51
+ } else {
52
+ $avatar = get_wp_user_avatar('unknown@gravatar.com', $size, $default, $alt);
53
+ }
54
+ } else {
55
+ if(has_wp_user_avatar($id_or_email)) {
56
+ $avatar = get_wp_user_avatar($id_or_email, $size, $default, $alt);
57
+ // User has Gravatar and Gravatar is not disabled
58
+ } elseif((bool) $wpua_disable_gravatar != 1 && wpua_has_gravatar($id_or_email)) {
59
+ $avatar = $avatar;
60
+ // User doesn't have WPUA or Gravatar and Default Avatar is wp_user_avatar, show custom Default Avatar
61
+ } elseif($avatar_default == 'wp_user_avatar') {
62
+ // Show custom Default Avatar
63
+ if(!empty($wpua_avatar_default) && wp_attachment_is_image($wpua_avatar_default)) {
64
+ // Get image
65
+ $wpua_avatar_default_image = wp_get_attachment_image_src($wpua_avatar_default, array($size,$size));
66
+ // Image src
67
+ $default = $wpua_avatar_default_image[0];
68
+ // Add dimensions if numeric size
69
+ $dimensions = ' width="'.$wpua_avatar_default_image[1].'" height="'.$wpua_avatar_default_image[2].'"';
70
+ } else {
71
+ // Get mustache image based on numeric size comparison
72
+ if($size > get_option('medium_size_w')) {
73
+ $default = $mustache_original;
74
+ } elseif($size <= get_option('medium_size_w') && $size > get_option('thumbnail_size_w')) {
75
+ $default = $mustache_medium;
76
+ } elseif($size <= get_option('thumbnail_size_w') && $size > 96) {
77
+ $default = $mustache_thumbnail;
78
+ } elseif($size <= 96 && $size > 32) {
79
+ $default = $mustache_avatar;
80
+ } elseif($size <= 32) {
81
+ $default = $mustache_admin;
82
+ }
83
+ // Add dimensions if numeric size
84
+ $dimensions = ' width="'.$size.'" height="'.$size.'"';
85
+ }
86
+ // Construct the img tag
87
+ $avatar = '<img src="'.$default.'"'.$dimensions.' alt="'.$alt.'" class="avatar avatar-'.$size.' wp-user-avatar wp-user-avatar-'.$size.' photo avatar-default" />';
88
+ }
89
+ }
90
+ return $avatar;
91
+ }
92
+ add_filter('get_avatar', 'wpua_get_avatar_filter', 10, 6);
93
+
94
+ // Get original avatar, for when user removes wp_user_avatar
95
+ function wpua_get_avatar_original($id_or_email, $size="", $default="", $alt="") {
96
+ global $avatar_default, $mustache_avatar, $wpua_avatar_default, $wpua_disable_gravatar;
97
+ // Remove get_avatar filter
98
+ remove_filter('get_avatar', 'wpua_get_avatar_filter');
99
+ if((bool) $wpua_disable_gravatar != 1) {
100
+ // User doesn't have Gravatar and Default Avatar is wp_user_avatar, show custom Default Avatar
101
+ if(!wpua_has_gravatar($id_or_email) && $avatar_default == 'wp_user_avatar') {
102
+ // Show custom Default Avatar
103
+ if(!empty($wpua_avatar_default) && wp_attachment_is_image($wpua_avatar_default)) {
104
+ $wpua_avatar_default_image = wp_get_attachment_image_src($wpua_avatar_default, array($size,$size));
105
+ $default = $wpua_avatar_default_image[0];
106
+ } else {
107
+ $default = $mustache_avatar;
108
+ }
109
+ } else {
110
+ // Get image from Gravatar, whether it's the user's image or default image
111
+ $wpua_image = get_avatar($id_or_email, $size);
112
+ // Takes the img tag, extracts the src
113
+ $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $wpua_image, $matches, PREG_SET_ORDER);
114
+ $default = !empty($matches) ? $matches [0] [1] : "";
115
+ }
116
+ } else {
117
+ if(!empty($wpua_avatar_default) && wp_attachment_is_image($wpua_avatar_default)) {
118
+ $wpua_avatar_default_image = wp_get_attachment_image_src($wpua_avatar_default, array($size,$size));
119
+ $default = $wpua_avatar_default_image[0];
120
+ } else {
121
+ $default = $mustache_avatar;
122
+ }
123
+ }
124
+ // Enable get_avatar filter
125
+ add_filter('get_avatar', 'wpua_get_avatar_filter', 10, 6);
126
+ return $default;
127
+ }
128
+
129
+ // Find WPUA, show get_avatar if empty
130
+ function get_wp_user_avatar($id_or_email="", $size='96', $align="", $alt="", $email='unknown@gravatar.com') {
131
+ global $all_sizes, $avatar_default, $blog_id, $post, $wpdb, $_wp_additional_image_sizes;
132
+ // Checks if comment
133
+ if(is_object($id_or_email)) {
134
+ // Checks if comment author is registered user by user ID
135
+ if($id_or_email->user_id != 0) {
136
+ $email = $id_or_email->user_id;
137
+ // Checks that comment author isn't anonymous
138
+ } elseif(!empty($id_or_email->comment_author_email)) {
139
+ // Checks if comment author is registered user by e-mail address
140
+ $user = get_user_by('email', $id_or_email->comment_author_email);
141
+ // Get registered user info from profile, otherwise e-mail address should be value
142
+ $email = !empty($user) ? $user->ID : $id_or_email->comment_author_email;
143
+ }
144
+ $alt = $id_or_email->comment_author;
145
+ } else {
146
+ if(!empty($id_or_email)) {
147
+ // Find user by ID or e-mail address
148
+ $user = is_numeric($id_or_email) ? get_user_by('id', $id_or_email) : get_user_by('email', $id_or_email);
149
+ } else {
150
+ // Find author's name if id_or_email is empty
151
+ $author_name = get_query_var('author_name');
152
+ if(is_author()) {
153
+ // On author page, get user by page slug
154
+ $user = get_user_by('slug', $author_name);
155
+ } else {
156
+ // On post, get user by author meta
157
+ $user_id = get_the_author_meta('ID');
158
+ $user = get_user_by('id', $user_id);
159
+ }
160
+ }
161
+ // Set user's ID and name
162
+ if(!empty($user)) {
163
+ $email = $user->ID;
164
+ $alt = $user->display_name;
165
+ }
166
+ }
167
+ // Checks if user has WPUA
168
+ $wpua_meta = get_the_author_meta($wpdb->get_blog_prefix($blog_id).'user_avatar', $email);
169
+ // Add alignment class
170
+ $alignclass = !empty($align) && ($align == 'left' || $align == 'right' || $align == 'center') ? ' align'.$align : ' alignnone';
171
+ // User has WPUA, bypass get_avatar
172
+ if(!empty($wpua_meta)) {
173
+ // Numeric size use size array
174
+ $get_size = is_numeric($size) ? array($size,$size) : $size;
175
+ // Get image src
176
+ $wpua_image = wp_get_attachment_image_src($wpua_meta, $get_size);
177
+ // Add dimensions to img only if numeric size was specified
178
+ $dimensions = is_numeric($size) ? ' width="'.$wpua_image[1].'" height="'.$wpua_image[2].'"' : "";
179
+ // Construct the img tag
180
+ $avatar = '<img src="'.$wpua_image[0].'"'.$dimensions.' alt="'.$alt.'" class="avatar avatar-'.$size.' wp-user-avatar wp-user-avatar-'.$size.$alignclass.' photo" />';
181
+ } else {
182
+ // Check for custom image sizes
183
+ if(in_array($size, $all_sizes)) {
184
+ if(in_array($size, array('original', 'large', 'medium', 'thumbnail'))) {
185
+ $get_size = ($size == 'original') ? get_option('large_size_w') : get_option($size.'_size_w');
186
+ } else {
187
+ $get_size = $_wp_additional_image_sizes[$size]['width'];
188
+ }
189
+ } else {
190
+ // Numeric sizes leave as-is
191
+ $get_size = $size;
192
+ }
193
+ // User with no WPUA uses get_avatar
194
+ $avatar = get_avatar($email, $get_size, $default="", $alt="");
195
+ // Remove width and height for non-numeric sizes
196
+ if(in_array($size, array('original', 'large', 'medium', 'thumbnail'))) {
197
+ $avatar = preg_replace('/(width|height)=\"\d*\"\s/', "", $avatar);
198
+ $avatar = preg_replace("/(width|height)=\'\d*\'\s/", "", $avatar);
199
+ }
200
+ $str_replacemes = array('wp-user-avatar ', 'wp-user-avatar-'.$get_size.' ', 'wp-user-avatar-'.$size.' ', 'avatar-'.$get_size, 'photo');
201
+ $str_replacements = array("", "", "", 'avatar-'.$size, 'wp-user-avatar wp-user-avatar-'.$size.$alignclass.' photo');
202
+ $avatar = str_replace($str_replacemes, $str_replacements, $avatar);
203
+ }
204
+ return $avatar;
205
+ }
206
+
207
+ // Return just the image src
208
+ function get_wp_user_avatar_src($id_or_email, $size="", $align="") {
209
+ $wpua_image_src = "";
210
+ // Gets the avatar img tag
211
+ $wpua_image = get_wp_user_avatar($id_or_email, $size, $align);
212
+ // Takes the img tag, extracts the src
213
+ if(!empty($wpua_image)) {
214
+ $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $wpua_image, $matches, PREG_SET_ORDER);
215
+ $wpua_image_src = !empty($matches) ? $matches [0] [1] : "";
216
+ }
217
+ return $wpua_image_src;
218
+ }
219
+
220
+ // Check if avatar_upload is in use
221
+ function wpua_has_shortcode() {
222
+ global $post;
223
+ $content = !empty($post->post_content) ? $post->post_content : null;
224
+ $has_shortcode = has_shortcode($content, 'avatar_upload') ? true : false;
225
+ return $has_shortcode;
226
+ }
227
+
228
+ // Before wrapper for profile
229
+ function wpua_before_avatar() {
230
+ do_action('wpua_before_avatar');
231
+ }
232
+ add_action('wpua_before_avatar', 'wpua_do_before_avatar');
233
+
234
+ // After wrapper for profile
235
+ function wpua_after_avatar() {
236
+ do_action('wpua_after_avatar');
237
+ }
238
+ add_action('wpua_after_avatar', 'wpua_do_after_avatar');
239
+
240
+ // Before avatar container
241
+ function wpua_do_before_avatar() { ?>
242
+ <?php if(class_exists('bbPress') && bbp_is_edit()) : // Add to bbPress profile with same style ?>
243
+ <h2 class="entry-title"><?php _e('Avatar'); ?></h2>
244
+ <fieldset class="bbp-form">
245
+ <legend><?php _e('Image'); ?></legend>
246
+ <?php elseif(class_exists('WPUF_Main') && wpuf_has_shortcode('wpuf_editprofile')) : // Add to WP User Frontend profile with same style ?>
247
+ <fieldset>
248
+ <legend><?php _e('Avatar') ?></legend>
249
+ <table class="wpuf-table">
250
+ <tr>
251
+ <th><label for="wp_user_avatar"><?php _e('Image'); ?></label></th>
252
+ <td>
253
+ <?php elseif(wpua_has_shortcode()) : // Add to profile without table ?>
254
+ <div class="wpua-edit-container">
255
+ <h3><?php _e('Avatar') ?></h3>
256
+ <?php else : // Add to profile with admin style ?>
257
+ <h3><?php _e('Avatar') ?></h3>
258
+ <table class="form-table">
259
+ <tr>
260
+ <th><label for="wp_user_avatar"><?php _e('Image'); ?></label></th>
261
+ <td>
262
+ <?php endif; ?>
263
+ <?php
264
+ }
265
+
266
+ // After avatar container
267
+ function wpua_do_after_avatar() { ?>
268
+ <?php if(class_exists('bbPress') && bbp_is_edit()) : // Add to bbPress profile with same style ?>
269
+ </fieldset>
270
+ <?php elseif(class_exists('WPUF_Main') && wpuf_has_shortcode('wpuf_editprofile')) : // Add to WP User Frontend profile with same style ?>
271
+ </td>
272
+ </tr>
273
+ </table>
274
+ </fieldset>
275
+ <?php elseif(wpua_has_shortcode()) : // Add to profile without table ?>
276
+ </div>
277
+ <?php else : // Add to profile with admin style ?>
278
+ </td>
279
+ </tr>
280
+ </table>
281
+ <?php endif; ?>
282
+ <?php
283
+ }
284
+
285
+ // Dontation message
286
+ function wpua_do_donation_message() { ?>
287
+ <div class="updated">
288
+ <p><?php _e('Do you like WP User Avatar?', 'wp-user-avatar'); ?> <a href="http://siboliban.org/donate" target="_blank"><?php _e('Make a donation.', 'wp-user-avatar'); ?></a></p>
289
+ </div>
290
+ <?php
291
+ }
292
+
293
+ // Filter for the inevitable complaints about the donation message :(
294
+ function wpua_donation_message() {
295
+ do_action('wpua_donation_message');
296
+ }
297
+ add_action('wpua_donation_message', 'wpua_do_donation_message');
includes/wpua-globals.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Global variables used in plugin.
4
+ *
5
+ * @package WP User Avatar
6
+ * @version 1.8.5
7
+ */
8
+
9
+ // Define global variables
10
+ $avatar_default = get_option('avatar_default');
11
+ $show_avatars = get_option('show_avatars');
12
+ $wpua_allow_upload = get_option('wp_user_avatar_allow_upload');
13
+ $wpua_avatar_default = get_option('avatar_default_wp_user_avatar');
14
+ $wpua_disable_gravatar = get_option('wp_user_avatar_disable_gravatar');
15
+ $wpua_edit_avatar = get_option('wp_user_avatar_edit_avatar');
16
+ $wpua_resize_crop = get_option('wp_user_avatar_resize_crop');
17
+ $wpua_resize_h = get_option('wp_user_avatar_resize_h');
18
+ $wpua_resize_upload = get_option('wp_user_avatar_resize_upload');
19
+ $wpua_resize_w = get_option('wp_user_avatar_resize_w');
20
+ $wpua_tinymce = get_option('wp_user_avatar_tinymce');
21
+ $mustache_original = WPUA_URL.'images/wpua.png';
22
+ $mustache_medium = WPUA_URL.'images/wpua-300x300.png';
23
+ $mustache_thumbnail = WPUA_URL.'images/wpua-150x150.png';
24
+ $mustache_avatar = WPUA_URL.'images/wpua-96x96.png';
25
+ $mustache_admin = WPUA_URL.'images/wpua-32x32.png';
26
+
27
+ // Check for updates
28
+ $wpua_default_avatar_updated = get_option('wp_user_avatar_default_avatar_updated');
29
+ $wpua_users_updated = get_option('wp_user_avatar_users_updated');
30
+ $wpua_media_updated = get_option('wp_user_avatar_media_updated');
31
+
32
+ // Server upload size limit
33
+ $upload_size_limit = wp_max_upload_size();
34
+ // Convert to KB
35
+ if($upload_size_limit > 1024) {
36
+ $upload_size_limit /= 1024;
37
+ }
38
+ $upload_size_limit_with_units = (int) $upload_size_limit.'KB';
39
+
40
+ // User upload size limit
41
+ $wpua_user_upload_size_limit = get_option('wp_user_avatar_upload_size_limit');
42
+ if($wpua_user_upload_size_limit == 0 || $wpua_user_upload_size_limit > wp_max_upload_size()) {
43
+ $wpua_user_upload_size_limit = wp_max_upload_size();
44
+ }
45
+ // Value in bytes
46
+ $wpua_upload_size_limit = $wpua_user_upload_size_limit;
47
+ // Convert to KB
48
+ if($wpua_user_upload_size_limit > 1024) {
49
+ $wpua_user_upload_size_limit /= 1024;
50
+ }
51
+ $wpua_upload_size_limit_with_units = (int) $wpua_user_upload_size_limit.'KB';
52
+
53
+ // Check for custom image sizes
54
+ $all_sizes = array_merge(get_intermediate_image_sizes(), array('original'));
includes/wpua-media-page.php ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Media Library view of all avatars in use.
4
+ *
5
+ * @package WP User Avatar
6
+ * @version 1.8.5
7
+ */
8
+
9
+ $wp_list_table = $this->_wpua_get_list_table('WP_User_Avatar_List_Table');
10
+ $wp_list_table->prepare_items();
11
+ wp_enqueue_script('wp-ajax-response');
12
+ wp_enqueue_script('jquery-ui-draggable');
13
+ wp_enqueue_script('media');
14
+ ?>
15
+ <div class="wrap">
16
+ <h2><?php _e('Avatars'); ?></h2>
17
+ <?php
18
+ $message = '';
19
+ if(!empty($_GET['posted'])) {
20
+ $message = __('Media attachment updated.');
21
+ $_SERVER['REQUEST_URI'] = remove_query_arg(array('posted'), $_SERVER['REQUEST_URI']);
22
+ }
23
+
24
+ if(!empty($_GET['attached']) && $attached = absint($_GET['attached'])) {
25
+ $message = sprintf( _n('Reattached %d attachment.', 'Reattached %d attachments.', $attached), $attached);
26
+ $_SERVER['REQUEST_URI'] = remove_query_arg(array('attached'), $_SERVER['REQUEST_URI']);
27
+ }
28
+
29
+ if(!empty($_GET['deleted']) && $deleted = absint($_GET['deleted'])) {
30
+ $message = sprintf(_n('Media attachment permanently deleted.', '%d media attachments permanently deleted.', $deleted), number_format_i18n($_GET['deleted']));
31
+ $_SERVER['REQUEST_URI'] = remove_query_arg(array('deleted'), $_SERVER['REQUEST_URI']);
32
+ }
33
+
34
+ if(!empty($_GET['trashed']) && $trashed = absint($_GET['trashed'])) {
35
+ $message = sprintf(_n('Media attachment moved to the trash.', '%d media attachments moved to the trash.', $trashed), number_format_i18n( $_GET['trashed']));
36
+ $message .= ' <a href="'.esc_url(wp_nonce_url( 'upload.php?doaction=undo&action=untrash&ids='.(isset($_GET['ids']) ? $_GET['ids'] : ''), "bulk-media" )).'">'.__('Undo').'</a>';
37
+ $_SERVER['REQUEST_URI'] = remove_query_arg(array('trashed'), $_SERVER['REQUEST_URI']);
38
+ }
39
+
40
+ if(!empty($_GET['untrashed']) && $untrashed = absint($_GET['untrashed'])) {
41
+ $message = sprintf(_n('Media attachment restored from the trash.', '%d media attachments restored from the trash.', $untrashed), number_format_i18n($_GET['untrashed']));
42
+ $_SERVER['REQUEST_URI'] = remove_query_arg(array('untrashed'), $_SERVER['REQUEST_URI']);
43
+ }
44
+
45
+ $messages[1] = __('Media attachment updated.');
46
+ $messages[2] = __('Media permanently deleted.');
47
+ $messages[3] = __('Error saving media attachment.');
48
+ $messages[4] = __('Media moved to the trash.').' <a href="'.esc_url(wp_nonce_url('upload.php?doaction=undo&action=untrash&ids='.(isset($_GET['ids']) ? $_GET['ids'] : ''), "bulk-media")).'">'.__('Undo').'</a>';
49
+ $messages[5] = __('Media restored from the trash.');
50
+
51
+ if(!empty($_GET['message']) && isset($messages[$_GET['message']])) {
52
+ $message = $messages[$_GET['message']];
53
+ $_SERVER['REQUEST_URI'] = remove_query_arg(array('message'), $_SERVER['REQUEST_URI']);
54
+ }
55
+
56
+ if(!empty($message)) { ?>
57
+ <div id="message" class="updated"><p><?php echo $message; ?></p></div>
58
+ <?php } ?>
59
+ <?php $wp_list_table->views(); ?>
60
+ <form id="posts-filter" action="" method="get">
61
+ <?php $wp_list_table->display(); ?>
62
+ <div id="ajax-response"></div>
63
+ <?php find_posts_div(); ?>
64
+ <br class="clear" />
65
+ </form>
66
+ </div>
includes/wpua-options-page.php ADDED
@@ -0,0 +1,150 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Admin page to change plugin options.
4
+ *
5
+ * @package WP User Avatar
6
+ * @version 1.8.5
7
+ */
8
+
9
+ global $show_avatars, $upload_size_limit_with_units, $wpua_allow_upload, $wpua_disable_gravatar, $wpua_edit_avatar, $wpua_resize_crop, $wpua_resize_h, $wpua_resize_upload, $wpua_resize_w, $wpua_subscriber, $wpua_tinymce, $wpua_upload_size_limit, $wpua_upload_size_limit_with_units;
10
+ $updated = false;
11
+ if(isset($_GET['settings-updated']) && $_GET['settings-updated'] == 'true') {
12
+ $updated = true;
13
+ }
14
+ $hide_size = (bool) $wpua_allow_upload != 1 ? ' style="display:none;"' : "";
15
+ $hide_resize = (bool) $wpua_resize_upload != 1 ? ' style="display:none;"' : "";
16
+ ?>
17
+
18
+ <?php if($updated) : ?>
19
+ <div id="message" class="updated"><p><strong><?php _e( 'Settings saved.' ); ?></strong></p></div>
20
+ <?php endif; ?>
21
+
22
+ <div class="wrap">
23
+ <h2><?php _e('WP User Avatar', 'wp-user-avatar'); ?></h2>
24
+ <form method="post" action="<?php echo admin_url('options.php'); ?>">
25
+ <?php settings_fields('wpua-settings-group'); ?>
26
+ <?php do_settings_fields('wpua-settings-group', ""); ?>
27
+ <?php do_action('wpua_donation_message'); ?>
28
+ <table class="form-table">
29
+ <tr valign="top">
30
+ <th scope="row"><?php _e('Settings'); ?></th>
31
+ <td>
32
+ <fieldset>
33
+ <legend class="screen-reader-text"><span><?php _e('Settings'); ?></span></legend>
34
+ <label for="wp_user_avatar_tinymce">
35
+ <input name="wp_user_avatar_tinymce" type="checkbox" id="wp_user_avatar_tinymce" value="1" <?php checked($wpua_tinymce, 1); ?> />
36
+ <?php _e('Add avatar button to Visual Editor', 'wp-user-avatar'); ?>
37
+ </label>
38
+ </fieldset>
39
+ <fieldset>
40
+ <label for="wp_user_avatar_allow_upload">
41
+ <input name="wp_user_avatar_allow_upload" type="checkbox" id="wp_user_avatar_allow_upload" value="1" <?php checked($wpua_allow_upload, 1); ?> />
42
+ <?php _e('Allow Contributors & Subscribers to upload avatars', 'wp-user-avatar'); ?>
43
+ </label>
44
+ </fieldset>
45
+ <fieldset>
46
+ <label for="wp_user_avatar_disable_gravatar">
47
+ <input name="wp_user_avatar_disable_gravatar" type="checkbox" id="wp_user_avatar_disable_gravatar" value="1" <?php checked($wpua_disable_gravatar, 1); ?> />
48
+ <?php _e('Disable Gravatar and use only local avatars', 'wp-user-avatar'); ?>
49
+ </label>
50
+ </fieldset>
51
+ </td>
52
+ </tr>
53
+ </table>
54
+ <div id="wpua-contributors-subscribers"<?php echo $hide_size; ?>>
55
+ <table class="form-table">
56
+ <tr valign="top">
57
+ <th scope="row">
58
+ <label for="wp_user_avatar_upload_size_limit">
59
+ <?php _e('Upload Size Limit', 'wp-user-avatar'); ?> <?php _e('(only for Contributors & Subscribers)', 'wp-user-avatar'); ?>
60
+ </label>
61
+ </th>
62
+ <td>
63
+ <fieldset>
64
+ <legend class="screen-reader-text"><span><?php _e('Upload Size Limit', 'wp-user-avatar'); ?> <?php _e('(only for Contributors & Subscribers)', 'wp-user-avatar'); ?></span></legend>
65
+ <input name="wp_user_avatar_upload_size_limit" type="text" id="wp_user_avatar_upload_size_limit" value="<?php echo $wpua_upload_size_limit; ?>" class="regular-text" />
66
+ <span id="wpua-readable-size"><?php echo $wpua_upload_size_limit_with_units; ?></span>
67
+ <span id="wpua-readable-size-error"><?php printf(__('%s exceeds the maximum upload size for this site.'), ""); ?></span>
68
+ <div id="wpua-slider"></div>
69
+ <span class="description"><?php printf(__('Maximum upload file size: %d%s.'), esc_html(wp_max_upload_size()), esc_html(' bytes ('.$upload_size_limit_with_units.')')); ?></span>
70
+ </fieldset>
71
+ <fieldset>
72
+ <label for="wp_user_avatar_edit_avatar">
73
+ <input name="wp_user_avatar_edit_avatar" type="checkbox" id="wp_user_avatar_edit_avatar" value="1" <?php checked($wpua_edit_avatar, 1); ?> />
74
+ <?php _e('Allow users to edit avatars', 'wp-user-avatar'); ?>
75
+ </label>
76
+ </fieldset>
77
+ <fieldset>
78
+ <label for="wp_user_avatar_resize_upload">
79
+ <input name="wp_user_avatar_resize_upload" type="checkbox" id="wp_user_avatar_resize_upload" value="1" <?php checked($wpua_resize_upload, 1); ?> />
80
+ <?php _e('Resize avatars on upload', 'wp-user-avatar'); ?>
81
+ </label>
82
+ </fieldset>
83
+ <fieldset id="wpua-resize-sizes"<?php echo $hide_resize; ?>
84
+ <br />
85
+ <br />
86
+ <label for="wp_user_avatar_resize_w"><?php _e('Width'); ?></label>
87
+ <input name="wp_user_avatar_resize_w" type="number" step="1" min="0" id="wp_user_avatar_resize_w" value="<?php form_option('wp_user_avatar_resize_w'); ?>" class="small-text" />
88
+ <label for="wp_user_avatar_resize_h"><?php _e('Height'); ?></label>
89
+ <input name="wp_user_avatar_resize_h" type="number" step="1" min="0" id="wp_user_avatar_resize_h" value="<?php form_option('wp_user_avatar_resize_h'); ?>" class="small-text" />
90
+ <br />
91
+ <input name="wp_user_avatar_resize_crop" type="checkbox" id="wp_user_avatar_resize_crop" value="1" <?php checked('1', $wpua_resize_crop); ?> />
92
+ <label for="wp_user_avatar_resize_crop"><?php _e('Crop avatars to exact dimensions', 'wp-user-avatar'); ?></label>
93
+ </fieldset>
94
+ </td>
95
+ </tr>
96
+ </table>
97
+ </div>
98
+ <h3 class="title"><?php _e('Avatars'); ?></h3>
99
+ <p><?php _e('An avatar is an image that follows you from weblog to weblog appearing beside your name when you comment on avatar enabled sites. Here you can enable the display of avatars for people who comment on your site.'); ?></p>
100
+ <table class="form-table">
101
+ <tr valign="top">
102
+ <th scope="row"><?php _e('Avatar Display'); ?></th>
103
+ <td>
104
+ <fieldset>
105
+ <legend class="screen-reader-text"><span><?php _e('Avatar Display'); ?></span></legend>
106
+ <label for="show_avatars">
107
+ <input type="checkbox" id="show_avatars" name="show_avatars" value="1" <?php checked($show_avatars, 1); ?> />
108
+ <?php _e('Show Avatars'); ?>
109
+ </label>
110
+ </fieldset>
111
+ </td>
112
+ </tr>
113
+ <?php if((bool) $wpua_disable_gravatar != 1) : ?>
114
+ <tr valign="top" id="avatar-rating">
115
+ <th scope="row"><?php _e('Maximum Rating'); ?></th>
116
+ <td>
117
+ <fieldset>
118
+ <legend class="screen-reader-text"><span><?php _e('Maximum Rating'); ?></span></legend>
119
+ <?php
120
+ $ratings = array(
121
+ 'G' => __('G &#8212; Suitable for all audiences'),
122
+ 'PG' => __('PG &#8212; Possibly offensive, usually for audiences 13 and above'),
123
+ 'R' => __('R &#8212; Intended for adult audiences above 17'),
124
+ 'X' => __('X &#8212; Even more mature than above')
125
+ );
126
+ foreach ($ratings as $key => $rating) :
127
+ $selected = (get_option('avatar_rating') == $key) ? 'checked="checked"' : "";
128
+ echo "\n\t<label><input type='radio' name='avatar_rating' value='" . esc_attr($key) . "' $selected/> $rating</label><br />";
129
+ endforeach;
130
+ ?>
131
+ </fieldset>
132
+ </td>
133
+ </tr>
134
+ <?php else : ?>
135
+ <input type="hidden" id="avatar_rating" name="avatar_rating" value="<?php echo get_option('avatar_rating'); ?>" />
136
+ <?php endif; ?>
137
+ <tr valign="top">
138
+ <th scope="row"><?php _e('Default Avatar') ?></th>
139
+ <td class="defaultavatarpicker">
140
+ <fieldset>
141
+ <legend class="screen-reader-text"><span><?php _e('Default Avatar'); ?></span></legend>
142
+ <?php _e('For users without a custom avatar of their own, you can either display a generic logo or a generated one based on their e-mail address.'); ?><br />
143
+ <?php echo $this->wpua_add_default_avatar(); ?>
144
+ </fieldset>
145
+ </td>
146
+ </tr>
147
+ </table>
148
+ <?php submit_button(); ?>
149
+ </form>
150
+ </div>
includes/{tinymce.php → wpua-tinymce.php} RENAMED
@@ -1,21 +1,18 @@
1
  <?php
2
  /**
 
 
3
  * @package WP User Avatar
4
- * @version 1.5.4
5
  */
6
 
7
- if(!defined('ABSPATH')){
8
- die(__('You are not allowed to call this page directly.'));
9
- @header('Content-Type:'.get_option('html_type').';charset='.get_option('blog_charset'));
10
- }
11
-
12
- function wpua_myplugin_addbuttons(){
13
  // Don't bother doing this stuff if the current user lacks permissions
14
- if(!current_user_can('edit_posts') && !current_user_can('edit_pages')){
15
  return;
16
  }
17
  // Add only in Rich Editor mode
18
- if(get_user_option('rich_editing') == 'true'){
19
  add_filter('mce_external_plugins', 'wpua_add_myplugin_tinymce_plugin');
20
  add_filter('mce_buttons', 'wpua_register_myplugin_button');
21
  }
@@ -23,25 +20,23 @@ function wpua_myplugin_addbuttons(){
23
  // init process for button control
24
  add_action('init', 'wpua_myplugin_addbuttons');
25
 
26
-
27
- function wpua_register_myplugin_button($buttons){
28
  array_push($buttons, 'separator', 'wpUserAvatar');
29
  return $buttons;
30
  }
31
 
32
  // Load the TinyMCE plugin : editor_plugin.js (wp2.5)
33
- function wpua_add_myplugin_tinymce_plugin($plugin_array){
34
- $plugin_array['wpUserAvatar'] = WPUA_URLPATH.'includes/tinymce/editor_plugin.js';
35
  return $plugin_array;
36
  }
37
 
38
  // Call TinyMCE window content via admin-ajax
39
- function wpua_ajax_tinymce(){
40
- if(!current_user_can('edit_posts') && !current_user_can('edit_pages')){
41
  die('You are not allowed to call this page directly.');
42
  }
43
- include_once(WPUA_ABSPATH.'includes/tinymce/window.php');
44
  die();
45
  }
46
  add_action('wp_ajax_wp_user_avatar_tinymce', 'wpua_ajax_tinymce');
47
- ?>
1
  <?php
2
  /**
3
+ * TinyMCE button for Visual Editor.
4
+ *
5
  * @package WP User Avatar
6
+ * @version 1.8.5
7
  */
8
 
9
+ function wpua_myplugin_addbuttons() {
 
 
 
 
 
10
  // Don't bother doing this stuff if the current user lacks permissions
11
+ if(!current_user_can('edit_posts') && !current_user_can('edit_pages')) {
12
  return;
13
  }
14
  // Add only in Rich Editor mode
15
+ if(get_user_option('rich_editing') == 'true') {
16
  add_filter('mce_external_plugins', 'wpua_add_myplugin_tinymce_plugin');
17
  add_filter('mce_buttons', 'wpua_register_myplugin_button');
18
  }
20
  // init process for button control
21
  add_action('init', 'wpua_myplugin_addbuttons');
22
 
23
+ function wpua_register_myplugin_button($buttons) {
 
24
  array_push($buttons, 'separator', 'wpUserAvatar');
25
  return $buttons;
26
  }
27
 
28
  // Load the TinyMCE plugin : editor_plugin.js (wp2.5)
29
+ function wpua_add_myplugin_tinymce_plugin($plugin_array) {
30
+ $plugin_array['wpUserAvatar'] = WPUA_INC_URL.'tinymce/editor_plugin.js';
31
  return $plugin_array;
32
  }
33
 
34
  // Call TinyMCE window content via admin-ajax
35
+ function wpua_ajax_tinymce() {
36
+ if(!current_user_can('edit_posts') && !current_user_can('edit_pages')) {
37
  die('You are not allowed to call this page directly.');
38
  }
39
+ include_once(WPUA_INC.'tinymce/window.php');
40
  die();
41
  }
42
  add_action('wp_ajax_wp_user_avatar_tinymce', 'wpua_ajax_tinymce');
 
js/wp-user-avatar-admin.js CHANGED
@@ -1,37 +1,40 @@
1
- jQuery(function(){
2
  // Show size info only if allow uploads is checked
3
- jQuery('#wp_user_avatar_allow_upload').change(function(){
4
- jQuery('#wpua-size-limit').removeClass('wpua-hide').toggle(jQuery('#wp_user_avatar_allow_upload').is(':checked'));
 
 
 
 
5
  });
6
  // Hide Gravatars if disable Gravatars is checked
7
- jQuery('#wp_user_avatar_disable_gravatar').change(function(){
8
- if(jQuery('#wp-avatars').length){
9
- jQuery('#wp-avatars').toggle(!jQuery('#wp_user_avatar_disable_gravatar').is(':checked'));
10
- jQuery('#wp_user_avatar_radio').trigger('click');
11
  }
12
- jQuery('#wpua-message').show();
13
  });
14
  // Add size slider
15
- jQuery('#wpua-slider').slider({
16
  value: parseInt(wpua_admin.upload_size_limit),
17
  min: 0,
18
  max: parseInt(wpua_admin.max_upload_size),
19
  step: 1,
20
- slide: function(event, ui){
21
- jQuery('#wp_user_avatar_upload_size_limit').val(ui.value);
22
- jQuery('#wpua-readable-size').html(Math.floor(ui.value / 1024) + 'KB');
23
- jQuery('#wpua-readable-size-error').hide();
24
- jQuery('#wpua-readable-size').removeClass('wpua-error');
25
  }
26
  });
27
  // Update readable size on keyup
28
- jQuery('#wp_user_avatar_upload_size_limit').keyup(function(){
29
- var wpua_upload_size_limit = jQuery(this).val();
30
- wpua_upload_size_limit = wpua_upload_size_limit.replace(/\D/g, '');
31
- jQuery(this).val(wpua_upload_size_limit);
32
- jQuery('#wpua-readable-size').html(Math.floor(wpua_upload_size_limit / 1024) + 'KB');
33
- jQuery('#wpua-readable-size-error').toggle(wpua_upload_size_limit > parseInt(wpua_admin.max_upload_size));
34
- jQuery('#wpua-readable-size').toggleClass('wpua-error', wpua_upload_size_limit > parseInt(wpua_admin.max_upload_size));
35
  });
36
- jQuery('#wp_user_avatar_upload_size_limit').val(jQuery('#wpua-slider').slider('value'));
37
  });
1
+ jQuery(function($) {
2
  // Show size info only if allow uploads is checked
3
+ $('#wp_user_avatar_allow_upload').change(function() {
4
+ $('#wpua-contributors-subscribers').slideToggle($('#wp_user_avatar_allow_upload').is(':checked'));
5
+ });
6
+ // Show resize info only if resize uploads is checked
7
+ $('#wp_user_avatar_resize_upload').change(function() {
8
+ $('#wpua-resize-sizes').slideToggle($('#wp_user_avatar_resize_upload').is(':checked'));
9
  });
10
  // Hide Gravatars if disable Gravatars is checked
11
+ $('#wp_user_avatar_disable_gravatar').change(function() {
12
+ if($('#wp-avatars').length) {
13
+ $('#wp-avatars, #avatar-rating').slideToggle(!$('#wp_user_avatar_disable_gravatar').is(':checked'));
14
+ $('#wp_user_avatar_radio').trigger('click');
15
  }
 
16
  });
17
  // Add size slider
18
+ $('#wpua-slider').slider({
19
  value: parseInt(wpua_admin.upload_size_limit),
20
  min: 0,
21
  max: parseInt(wpua_admin.max_upload_size),
22
  step: 1,
23
+ slide: function(event, ui) {
24
+ $('#wp_user_avatar_upload_size_limit').val(ui.value);
25
+ $('#wpua-readable-size').html(Math.floor(ui.value / 1024) + 'KB');
26
+ $('#wpua-readable-size-error').hide();
27
+ $('#wpua-readable-size').removeClass('wpua-error');
28
  }
29
  });
30
  // Update readable size on keyup
31
+ $('#wp_user_avatar_upload_size_limit').keyup(function() {
32
+ var wpuaUploadSizeLimit = $(this).val();
33
+ wpuaUploadSizeLimit = wpuaUploadSizeLimit.replace(/\D/g, '');
34
+ $(this).val(wpuaUploadSizeLimit);
35
+ $('#wpua-readable-size').html(Math.floor(wpuaUploadSizeLimit / 1024) + 'KB');
36
+ $('#wpua-readable-size-error').toggle(wpuaUploadSizeLimit > parseInt(wpua_admin.max_upload_size));
37
+ $('#wpua-readable-size').toggleClass('wpua-error', wpuaUploadSizeLimit > parseInt(wpua_admin.max_upload_size));
38
  });
39
+ $('#wp_user_avatar_upload_size_limit').val($('#wpua-slider').slider('value'));
40
  });
js/wp-user-avatar-user.js ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery(function($) {
2
+ // Add enctype to form with JavaScript as backup
3
+ $('#your-profile').attr('enctype', 'multipart/form-data');
4
+ // Store WP User Avatar ID
5
+ var wpuaID = $('#wp-user-avatar').val();
6
+ // Store WP User Avatar src
7
+ var wpuaSrc = $('#wpua-preview').find('img').attr('src');
8
+ // Remove WP User Avatar
9
+ $('body').on('click', '#wpua-remove', function(e) {
10
+ e.preventDefault();
11
+ $('#wpua-original').remove();
12
+ $('#wpua-remove-button, #wpua-thumbnail').hide();
13
+ $('#wpua-preview').find('img:first').hide();
14
+ $('#wpua-preview').prepend('<img id="wpua-original" height="98" />');
15
+ $('#wpua-original').attr('src', wpua_custom.avatar_thumb);
16
+ $('#wp-user-avatar').val("");
17
+ $('#wpua-original, #wpua-undo-button').show();
18
+ $('#wp_user_avatar_radio').trigger('click');
19
+ });
20
+ // Undo WP User Avatar
21
+ $('body').on('click', '#wpua-undo', function(e) {
22
+ e.preventDefault();
23
+ $('#wpua-original').remove();
24
+ $('#wpua-undo-button').hide();
25
+ $('#wpua-remove-button, #wpua-thumbnail').show();
26
+ $('#wpua-preview').find('img:first').attr('src', wpuaSrc).show();
27
+ $('#wp-user-avatar').val(wpuaID);
28
+ $('#wp_user_avatar_radio').trigger('click');
29
+ });
30
+ });
js/wp-user-avatar.js CHANGED
@@ -1 +1 @@
1
- function wpuaMediaUploader(c,d,f){wp.media.wpUserAvatar={get:function(){return wp.media.view.settings.post.wpUserAvatarId},set:function(a){var b=wp.media.view.settings;b.post.wpUserAvatarId=a;b.post.wpUserAvatarSrc=jQuery('div.attachment-info').find('img').attr('src');if(b.post.wpUserAvatarId){wpuaSetAvatar(b.post.wpUserAvatarId,b.post.wpUserAvatarSrc);jQuery('#wp_user_avatar_radio').trigger('click')}},frame:function(){if(this._frame){return this._frame}this._frame=wp.media({state:'library',states:[new wp.media.controller.Library({title:d+": "+c})]});this._frame.on('open',function(){var a=this.state().get('selection');id=jQuery('#wp-user-avatar').val();attachment=wp.media.attachment(id);attachment.fetch();a.add(attachment?[attachment]:[])},this._frame);this._frame.on('toolbar:create:select',function(a){this.createSelectToolbar(a,{text:f})},this._frame);this._frame.state('library').on('select',this.select);return this._frame},select:function(a){var b=wp.media.view.settings,selection=this.get('selection').single();wp.media.wpUserAvatar.set(selection?selection.id:-1)},init:function(){jQuery('body').on('click','#wpua-add',function(e){e.preventDefault();e.stopPropagation();wp.media.wpUserAvatar.frame().open()})}};jQuery(wp.media.wpUserAvatar.init)}function wpuaSetAvatar(a,b){jQuery('#wp-user-avatar',window.parent.document).val(a);jQuery('#wpua-preview',window.parent.document).find('img').attr('src',b).removeAttr('width',"").removeAttr('height',"");jQuery('#wpua-message',window.parent.document).show();jQuery('#wpua-remove',window.parent.document).removeClass('wpua-hide').show();jQuery('#wpua-thumbnail',window.parent.document).hide();jQuery('#wp_user_avatar_radio',window.parent.document).trigger('click');wp.media.wpUserAvatar.frame().close()}function wpuaRemoveAvatar(a){jQuery('body').on('click','#wpua-remove',function(e){e.preventDefault();jQuery(this).hide();jQuery('#wpua-edit, #wpua-thumbnail').hide();jQuery('#wpua-preview').find('img').attr('src',a).removeAttr('width',"").removeAttr('height',"");jQuery('#wp-user-avatar').val("");jQuery('#wpua-message').show();jQuery('#wp_user_avatar_radio').trigger('click')})}jQuery(function(){jQuery('#your-profile').attr('enctype','multipart/form-data');if(typeof(wp)!='undefined'){wpuaMediaUploader(wpua_custom.section,wpua_custom.edit_image,wpua_custom.select_image)}wpuaRemoveAvatar(wpua_custom.avatar_thumb)});
1
+ eval(function(p,a,c,k,e,r) {e=function(c) {return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)) {while(c--)r[e(c)]=k[c]||e(c);k=[function(e) {return r[e]}];e=function() {return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('4 V(c,d,f) {2.6.y={S:4() {T 2.6.G.N.8.C},W:4(a) {x b=2.6.G.N;b.8.C=a;b.8.P=5(\'1n.o-1a\').A(\'m\').k(\'r\');O(b.8.C&&b.8.P) {5(\'#2-s-t\',g.9.h).v(b.8.C);5(\'#0-w\',g.9.h).A(\'m\').k(\'r\',b.8.P).1c(\'10\',"");5(\'#0-L\',g.9.h).p();5(\'#0-B-n\',g.9.h).p();5(\'#0-l-n\',g.9.h).z();5(\'#0-H\',g.9.h).z();5(\'#I\',g.9.h).J(\'i\')}2.6.y.K().1d()},K:4() {O(3.7) {T 3.7}3.7=2.6({M:\'11\',1r:[13 2.6.16.12({1b:d+": "+c})]});3.7.j(\'U\',4() {x a=3.M().S(\'u\');D=5(\'#2-s-t\').v();o=2.6.o(D);o.1s();a.X(o?[o]:[])},3.7);3.7.j(\'14:15:E\',4(a) {3.17(a,{18:f})},3.7);3.7.M(\'11\').j(\'E\',3.E);T 3.7},E:4(a) {x b=2.6.G.N,u=3.S(\'u\').19();2.6.y.W(u?u.D:-1)},Z:4() {5(\'Q\').j(\'i\',\'#0-X\',4(e) {e.R();e.1e();2.6.y.K().U()})}};5(2.6.y.Z)}5(4($) {$(\'#1f-1g\').k(\'1h\',\'1i/1j-1k\');O(1l(2)!=\'1m\') {V(F.1o,F.1p,F.1q)}x a=$(\'#2-s-t\').v();x b=$(\'#0-w\').A(\'m\').k(\'r\');$(\'Q\').j(\'i\',\'#0-l\',4(e) {e.R();$(\'#0-q\').l();$(\'#0-l-n, #0-H\').z();$(\'#0-w\').A(\'m:Y\').z();$(\'#0-w\').1t(\'<m D="0-q" 10="1u" />\');$(\'#0-q\').k(\'r\',F.1v);$(\'#2-s-t\').v("");$(\'#0-L, #0-q, #0-B-n\').p();$(\'#I\').J(\'i\')});$(\'Q\').j(\'i\',\'#0-B\',4(e) {e.R();$(\'#0-q\').l();$(\'#0-L, #0-B-n\').z();$(\'#0-l-n, #0-H\').p();$(\'#0-w\').A(\'m:Y\').k(\'r\',b).p();$(\'#2-s-t\').v(a);$(\'#I\').J(\'i\')})});',62,94,'wpua||wp|this|function|jQuery|media|_frame|post|parent|||||||window|document|click|on|attr|remove|img|button|attachment|show|original|src|user|avatar|selection|val|preview|var|wpUserAvatar|hide|find|undo|wpUserAvatarId|id|select|wpua_custom|view|thumbnail|wp_user_avatar_radio|trigger|frame|message|state|settings|if|wpUserAvatarSrc|body|preventDefault|get|return|open|wpuaMediaUploader|set|add|first|init|height|library|Library|new|toolbar|create|controller|createSelectToolbar|text|single|info|title|removeAttr|close|stopPropagation|your|profile|enctype|multipart|form|data|typeof|undefined|div|section|edit_image|select_image|states|fetch|prepend|98|avatar_thumb'.split('|'),0,{}))
lang/wp-user-avatar-de_DE.mo CHANGED
Binary file
lang/wp-user-avatar-de_DE.po CHANGED
@@ -1,12 +1,12 @@
1
  # German (de_DE) translation for WP User Avatar.
2
- # Copyright (C) 2013 Bangbay Siboliban.
3
  # This file is distributed under the same license as the WP User Avatar package.
4
  #
5
  msgid ""
6
  msgstr ""
7
- "Project-Id-Version: WP User Avatar 1.5.4\n"
8
  "Report-Msgid-Bugs-To: http://wordpress.org/plugins/wp-user-avatar/\n"
9
- "PO-Revision-Date: 2013-07-31 00:00-0000\n"
10
  "Language: de_DE\n"
11
  "Last-Translator: WP User Avatar\n"
12
  "Language-Team: WP User Avatar\n"
@@ -14,32 +14,52 @@ msgstr ""
14
  "Content-Type: text/plain; charset=UTF-8\n"
15
  "Content-Transfer-Encoding: 8bit\n"
16
 
17
- #: wp-user-avatar.php:341
18
- #: wp-user-avatar.php:798
19
- msgid "Click %s to save your changes"
20
- msgstr "Klicken Sie %s, um Ihre Änderungen zu speichern"
21
 
22
- #: wp-user-avatar.php:870
 
 
 
 
 
 
 
 
23
  msgid "Add avatar button to Visual Editor"
24
  msgstr "Einen Avatar-Knopf zum WYSIWYG-Editor hinzufügen"
25
 
26
- #: wp-user-avatar.php:875
27
  msgid "Allow Contributors & Subscribers to upload avatars"
28
  msgstr "Mitarbeiter und Abonnenten erlauben, Avatare hochzuladen"
29
 
30
- #: wp-user-avatar.php:880
31
  msgid "Disable Gravatar and use only local avatars"
32
  msgstr "Gravatar deaktivieren und nur lokale Avatare verwenden"
33
 
34
- #: wp-user-avatar.php:888
35
- #: wp-user-avatar.php:893
36
- msgid "Upload Size Limit (only for Contributors & Subscribers)"
37
- msgstr "Dateigrößenbeschränkung (nur für Mitarbeiter und Abonnenten)"
 
 
 
 
 
38
 
39
- #: wp-user-avatar.php:902
40
  msgid "Allow users to edit avatars"
41
  msgstr "Benutzer erlauben, Avatare bearbeiten"
42
 
 
 
 
 
 
 
 
 
43
  #. Plugin Name of the plugin/theme
44
  msgid "WP User Avatar"
45
  msgstr "WP-Benutzer-Avatar"
1
  # German (de_DE) translation for WP User Avatar.
2
+ # Copyright (C) 2014 Bangbay Siboliban.
3
  # This file is distributed under the same license as the WP User Avatar package.
4
  #
5
  msgid ""
6
  msgstr ""
7
+ "Project-Id-Version: WP User Avatar 1.8.5\n"
8
  "Report-Msgid-Bugs-To: http://wordpress.org/plugins/wp-user-avatar/\n"
9
+ "PO-Revision-Date: 2014-03-07 00:00-0000\n"
10
  "Language: de_DE\n"
11
  "Last-Translator: WP User Avatar\n"
12
  "Language-Team: WP User Avatar\n"
14
  "Content-Type: text/plain; charset=UTF-8\n"
15
  "Content-Transfer-Encoding: 8bit\n"
16
 
17
+ #: includes/class-wp-user-avatar-admin.php:182
18
+ msgid "Donate"
19
+ msgstr "Spenden"
 
20
 
21
+ #: includes/wpua-functions.php:279
22
+ msgid "Do you like WP User Avatar?"
23
+ msgstr "Bist Du mit WP-Benutzer-Avatar zufrieden?"
24
+
25
+ #: includes/wpua-functions.php:279
26
+ msgid "Make a donation."
27
+ msgstr "Spenden"
28
+
29
+ #: includes/wpua-options-page.php:40
30
  msgid "Add avatar button to Visual Editor"
31
  msgstr "Einen Avatar-Knopf zum WYSIWYG-Editor hinzufügen"
32
 
33
+ #: includes/wpua-options-page.php:46
34
  msgid "Allow Contributors & Subscribers to upload avatars"
35
  msgstr "Mitarbeiter und Abonnenten erlauben, Avatare hochzuladen"
36
 
37
+ #: includes/wpua-options-page.php:52
38
  msgid "Disable Gravatar and use only local avatars"
39
  msgstr "Gravatar deaktivieren und nur lokale Avatare verwenden"
40
 
41
+ #: includes/wpua-options-page.php:63
42
+ #: includes/wpua-options-page.php:68
43
+ msgid "Upload Size Limit"
44
+ msgstr "Dateigrößenbeschränkung"
45
+
46
+ #: includes/wpua-options-page.php:63
47
+ #: includes/wpua-options-page.php:68
48
+ msgid "(only for Contributors & Subscribers)"
49
+ msgstr "(nur für Mitarbeiter und Abonnenten)"
50
 
51
+ #: includes/wpua-options-page.php:78
52
  msgid "Allow users to edit avatars"
53
  msgstr "Benutzer erlauben, Avatare bearbeiten"
54
 
55
+ #: includes/wpua-options-page.php:84
56
+ msgid "Resize avatars on upload"
57
+ msgstr "Resize Avatare beim Upload"
58
+
59
+ #: includes/wpua-options-page.php:96
60
+ msgid "Crop avatars to exact dimensions"
61
+ msgstr "Avatare auf exakte Größe beschneiden"
62
+
63
  #. Plugin Name of the plugin/theme
64
  msgid "WP User Avatar"
65
  msgstr "WP-Benutzer-Avatar"
lang/wp-user-avatar-es_ES.mo CHANGED
Binary file
lang/wp-user-avatar-es_ES.po CHANGED
@@ -1,12 +1,12 @@
1
  # Spanish (es_ES) translation for WP User Avatar.
2
- # Copyright (C) 2013 Bangbay Siboliban.
3
  # This file is distributed under the same license as the WP User Avatar package.
4
  #
5
  msgid ""
6
  msgstr ""
7
- "Project-Id-Version: WP User Avatar 1.5.4\n"
8
  "Report-Msgid-Bugs-To: http://wordpress.org/plugins/wp-user-avatar/\n"
9
- "PO-Revision-Date: 2013-07-31 00:00-0000\n"
10
  "Language: es_ES\n"
11
  "Last-Translator: WP User Avatar\n"
12
  "Language-Team: WP User Avatar\n"
@@ -14,32 +14,52 @@ msgstr ""
14
  "Content-Type: text/plain; charset=UTF-8\n"
15
  "Content-Transfer-Encoding: 8bit\n"
16
 
17
- #: wp-user-avatar.php:341
18
- #: wp-user-avatar.php:798
19
- msgid "Click %s to save your changes"
20
- msgstr "Haz clic %s para guardar los cambios"
21
 
22
- #: wp-user-avatar.php:870
 
 
 
 
 
 
 
 
23
  msgid "Add avatar button to Visual Editor"
24
  msgstr "Añadir botón avatar al editor visual"
25
 
26
- #: wp-user-avatar.php:875
27
  msgid "Allow Contributors & Subscribers to upload avatars"
28
  msgstr "Permitir los colaboradores y los suscriptores subir avatares"
29
 
30
- #: wp-user-avatar.php:880
31
  msgid "Disable Gravatar and use only local avatars"
32
  msgstr "Desactivar Gravatar y utilizar sólo los avatares locales"
33
 
34
- #: wp-user-avatar.php:888
35
- #: wp-user-avatar.php:893
36
- msgid "Upload Size Limit (only for Contributors & Subscribers)"
37
- msgstr "Sube límite de tamaño (para colaboradores y suscriptores)"
 
 
 
 
 
38
 
39
- #: wp-user-avatar.php:902
40
  msgid "Allow users to edit avatars"
41
  msgstr "Permitir a los usuarios editar avatar"
42
 
 
 
 
 
 
 
 
 
43
  #. Plugin Name of the plugin/theme
44
  msgid "WP User Avatar"
45
  msgstr "WP-Usuario-Avatar"
1
  # Spanish (es_ES) translation for WP User Avatar.
2
+ # Copyright (C) 2014 Bangbay Siboliban.
3
  # This file is distributed under the same license as the WP User Avatar package.
4
  #
5
  msgid ""
6
  msgstr ""
7
+ "Project-Id-Version: WP User Avatar 1.8.5\n"
8
  "Report-Msgid-Bugs-To: http://wordpress.org/plugins/wp-user-avatar/\n"
9
+ "PO-Revision-Date: 2014-03-07 00:00-0000\n"
10
  "Language: es_ES\n"
11
  "Last-Translator: WP User Avatar\n"
12
  "Language-Team: WP User Avatar\n"
14
  "Content-Type: text/plain; charset=UTF-8\n"
15
  "Content-Transfer-Encoding: 8bit\n"
16
 
17
+ #: includes/class-wp-user-avatar-admin.php:182
18
+ msgid "Donate"
19
+ msgstr "Donar"
 
20
 
21
+ #: includes/wpua-functions.php:279
22
+ msgid "Do you like WP User Avatar?"
23
+ msgstr "¿Está satisfecho con WP-Usuario-Avatar?"
24
+
25
+ #: includes/wpua-functions.php:279
26
+ msgid "Make a donation."
27
+ msgstr "Donar"
28
+
29
+ #: includes/wpua-options-page.php:40
30
  msgid "Add avatar button to Visual Editor"
31
  msgstr "Añadir botón avatar al editor visual"
32
 
33
+ #: includes/wpua-options-page.php:46
34
  msgid "Allow Contributors & Subscribers to upload avatars"
35
  msgstr "Permitir los colaboradores y los suscriptores subir avatares"
36
 
37
+ #: includes/wpua-options-page.php:52
38
  msgid "Disable Gravatar and use only local avatars"
39
  msgstr "Desactivar Gravatar y utilizar sólo los avatares locales"
40
 
41
+ #: includes/wpua-options-page.php:63
42
+ #: includes/wpua-options-page.php:68
43
+ msgid "Upload Size Limit"
44
+ msgstr "Sube límite de tamaño"
45
+
46
+ #: includes/wpua-options-page.php:63
47
+ #: includes/wpua-options-page.php:68
48
+ msgid "(only for Contributors & Subscribers)"
49
+ msgstr "(para colaboradores y suscriptores)"
50
 
51
+ #: includes/wpua-options-page.php:78
52
  msgid "Allow users to edit avatars"
53
  msgstr "Permitir a los usuarios editar avatar"
54
 
55
+ #: includes/wpua-options-page.php:84
56
+ msgid "Resize avatars on upload"
57
+ msgstr "Cambiar el tamaño de avatares en carga"
58
+
59
+ #: includes/wpua-options-page.php:96
60
+ msgid "Crop avatars to exact dimensions"
61
+ msgstr "Recortar los avatares a sus dimensiones exactas"
62
+
63
  #. Plugin Name of the plugin/theme
64
  msgid "WP User Avatar"
65
  msgstr "WP-Usuario-Avatar"
lang/wp-user-avatar-fr_FR.mo CHANGED
Binary file
lang/wp-user-avatar-fr_FR.po CHANGED
@@ -1,12 +1,12 @@
1
  # French (fr_FR) translation for WP User Avatar.
2
- # Copyright (C) 2013 Bangbay Siboliban.
3
  # This file is distributed under the same license as the WP User Avatar package.
4
  #
5
  msgid ""
6
  msgstr ""
7
- "Project-Id-Version: WP User Avatar 1.5.4\n"
8
  "Report-Msgid-Bugs-To: http://wordpress.org/plugins/wp-user-avatar/\n"
9
- "PO-Revision-Date: 2013-07-31 00:00-0000\n"
10
  "Language: fr_FR\n"
11
  "Last-Translator: WP User Avatar\n"
12
  "Language-Team: WP User Avatar\n"
@@ -14,32 +14,52 @@ msgstr ""
14
  "Content-Type: text/plain; charset=UTF-8\n"
15
  "Content-Transfer-Encoding: 8bit\n"
16
 
17
- #: wp-user-avatar.php:341
18
- #: wp-user-avatar.php:798
19
- msgid "Click %s to save your changes"
20
- msgstr "Cliquez sur %s pour enregistrer vos modifications"
21
 
22
- #: wp-user-avatar.php:870
 
 
 
 
 
 
 
 
23
  msgid "Add avatar button to Visual Editor"
24
  msgstr "Ajouter le bouton avatar sur l'éditeur visuel"
25
 
26
- #: wp-user-avatar.php:875
27
  msgid "Allow Contributors & Subscribers to upload avatars"
28
  msgstr "Permettre aux contributeurs et aux abonnés d'envoyer des avatars"
29
 
30
- #: wp-user-avatar.php:880
31
  msgid "Disable Gravatar and use only local avatars"
32
  msgstr "Désactiver Gravatar et utiliser les avatars fournis"
33
 
34
- #: wp-user-avatar.php:888
35
- #: wp-user-avatar.php:893
36
- msgid "Upload Size Limit (only for Contributors & Subscribers)"
37
- msgstr "Taille limite d'envoi de fichiers (pour contributeurs et abonnés)"
 
 
 
 
 
38
 
39
- #: wp-user-avatar.php:902
40
  msgid "Allow users to edit avatars"
41
  msgstr "Permettre aux utilisateurs de modifier avatar"
42
 
 
 
 
 
 
 
 
 
43
  #. Plugin Name of the plugin/theme
44
  msgid "WP User Avatar"
45
  msgstr "WP-Utilisateur-Avatar"
1
  # French (fr_FR) translation for WP User Avatar.
2
+ # Copyright (C) 2014 Bangbay Siboliban.
3
  # This file is distributed under the same license as the WP User Avatar package.
4
  #
5
  msgid ""
6
  msgstr ""
7
+ "Project-Id-Version: WP User Avatar 1.8.5\n"
8
  "Report-Msgid-Bugs-To: http://wordpress.org/plugins/wp-user-avatar/\n"
9
+ "PO-Revision-Date: 2014-03-07 00:00-0000\n"
10
  "Language: fr_FR\n"
11
  "Last-Translator: WP User Avatar\n"
12
  "Language-Team: WP User Avatar\n"
14
  "Content-Type: text/plain; charset=UTF-8\n"
15
  "Content-Transfer-Encoding: 8bit\n"
16
 
17
+ #: includes/class-wp-user-avatar-admin.php:182
18
+ msgid "Donate"
19
+ msgstr "Faites un don"
 
20
 
21
+ #: includes/wpua-functions.php:279
22
+ msgid "Do you like WP User Avatar?"
23
+ msgstr "Etes-vous satisfait avec WP-Utilisateur-Avatar?"
24
+
25
+ #: includes/wpua-functions.php:279
26
+ msgid "Make a donation."
27
+ msgstr "Faites un don"
28
+
29
+ #: includes/wpua-options-page.php:40
30
  msgid "Add avatar button to Visual Editor"
31
  msgstr "Ajouter le bouton avatar sur l'éditeur visuel"
32
 
33
+ #: includes/wpua-options-page.php:46
34
  msgid "Allow Contributors & Subscribers to upload avatars"
35
  msgstr "Permettre aux contributeurs et aux abonnés d'envoyer des avatars"
36
 
37
+ #: includes/wpua-options-page.php:52
38
  msgid "Disable Gravatar and use only local avatars"
39
  msgstr "Désactiver Gravatar et utiliser les avatars fournis"
40
 
41
+ #: includes/wpua-options-page.php:63
42
+ #: includes/wpua-options-page.php:68
43
+ msgid "Upload Size Limit"
44
+ msgstr "Taille limite d'envoi de fichiers"
45
+
46
+ #: includes/wpua-options-page.php:63
47
+ #: includes/wpua-options-page.php:68
48
+ msgid "(only for Contributors & Subscribers)"
49
+ msgstr "(pour contributeurs et abonnés)"
50
 
51
+ #: includes/wpua-options-page.php:78
52
  msgid "Allow users to edit avatars"
53
  msgstr "Permettre aux utilisateurs de modifier avatar"
54
 
55
+ #: includes/wpua-options-page.php:84
56
+ msgid "Resize avatars on upload"
57
+ msgstr "Redimensionner avatars lors du téléchargement"
58
+
59
+ #: includes/wpua-options-page.php:78
60
+ msgid "Crop avatars to exact dimensions"
61
+ msgstr "Recadrer les avatars pour parvenir aux dimensions exactes"
62
+
63
  #. Plugin Name of the plugin/theme
64
  msgid "WP User Avatar"
65
  msgstr "WP-Utilisateur-Avatar"
lang/wp-user-avatar-pl_PL.mo ADDED
Binary file
lang/wp-user-avatar-pl_PL.po ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Polish (pl_PL) translation for WP User Avatar.
2
+ # Copyright (C) 2014 Bangbay Siboliban.
3
+ # This file is distributed under the same license as the WP User Avatar package.
4
+ #
5
+ msgid ""
6
+ msgstr ""
7
+ "Project-Id-Version: WP User Avatar 1.8.5\n"
8
+ "Report-Msgid-Bugs-To: http://wordpress.org/plugins/wp-user-avatar/\n"
9
+ "PO-Revision-Date: 2014-03-07 00:00-0000\n"
10
+ "Language: de_DE\n"
11
+ "Last-Translator: WP User Avatar\n"
12
+ "Language-Team: WP User Avatar\n"
13
+ "MIME-Version: 1.0\n"
14
+ "Content-Type: text/plain; charset=UTF-8\n"
15
+ "Content-Transfer-Encoding: 8bit\n"
16
+
17
+ #: includes/class-wp-user-avatar-admin.php:182
18
+ msgid "Donate"
19
+ msgstr "Dotuj"
20
+
21
+ #: includes/wpua-functions.php:279
22
+ msgid "Do you like WP User Avatar?"
23
+ msgstr "Jesteś zadowolony z Wp User Avatar"
24
+
25
+ #: includes/wpua-functions.php:279
26
+ msgid "Make a donation."
27
+ msgstr "Dokonaj dotacji"
28
+
29
+ #: includes/wpua-options-page.php:40
30
+ msgid "Add avatar button to Visual Editor"
31
+ msgstr "Dodaj przycisk avatara do edytora wizualnego"
32
+
33
+ #: includes/wpua-options-page.php:46
34
+ msgid "Allow Contributors & Subscribers to upload avatars"
35
+ msgstr "Pozwalaj kontrybutorom oraz subskrynentom przesyłać awatary"
36
+
37
+ #: includes/wpua-options-page.php:52
38
+ msgid "Disable Gravatar and use only local avatars"
39
+ msgstr "Wyłącz gravatary i używaj tylko lokalnych awatarów"
40
+
41
+ #: includes/wpua-options-page.php:63
42
+ #: includes/wpua-options-page.php:68
43
+ msgid "Upload Size Limit"
44
+ msgstr "Limit wielkości pliku"
45
+
46
+ #: includes/wpua-options-page.php:63
47
+ #: includes/wpua-options-page.php:68
48
+ msgid "(only for Contributors & Subscribers)"
49
+ msgstr "(tylko dla subskrynentów i kontrybutorów)"
50
+
51
+ #: includes/wpua-options-page.php:78
52
+ msgid "Allow users to edit avatars"
53
+ msgstr "Pozwalaj użytkownikom edytować awatary"
54
+
55
+ #: includes/wpua-options-page.php:84
56
+ msgid "Resize avatars on upload"
57
+ msgstr "Zmieniaj rozmiar po przesłaniu"
58
+
59
+ #: includes/wpua-options-page.php:96
60
+ msgid "Crop avatars to exact dimensions"
61
+ msgstr "Przytnij awatar do dokładnych rozmiarów"
62
+
63
+ #. Plugin Name of the plugin/theme
64
+ msgid "WP User Avatar"
65
+ msgstr "WP Awatar Użytkownika"
66
+
67
+ #. Plugin URI of the plugin/theme
68
+ msgid "http://wordpress.org/plugins/wp-user-avatar/"
69
+ msgstr "http://wordpress.org/plugins/wp-user-avatar/"
70
+
71
+ #. Description of the plugin/theme
72
+ msgid "Use any image from your WordPress Media Library as a custom user avatar. Add your own Default Avatar."
73
+ msgstr "Użyj dowolnego obrazka z biblioteki mediów jako awatar użytkownika. Dodaj swój własny domyślny awatar."
74
+
75
+ #. Author of the plugin/theme
76
+ msgid "Bangbay Siboliban"
77
+ msgstr "Bangbay Siboliban"
78
+
79
+ #. Author URI of the plugin/theme
80
+ msgid "http://siboliban.org/"
81
+ msgstr "http://siboliban.org/"
lang/wp-user-avatar-sv_SE.mo CHANGED
Binary file
lang/wp-user-avatar-sv_SE.po CHANGED
@@ -1,12 +1,12 @@
1
  # Swedish (sv_SE) translation for WP User Avatar.
2
- # Copyright (C) 2013 Bangbay Siboliban.
3
  # This file is distributed under the same license as the WP User Avatar package.
4
  #
5
  msgid ""
6
  msgstr ""
7
- "Project-Id-Version: WP User Avatar 1.5.4\n"
8
  "Report-Msgid-Bugs-To: http://wordpress.org/plugins/wp-user-avatar/\n"
9
- "PO-Revision-Date: 2013-07-31 00:00-0000\n"
10
  "Language: sv_SE\n"
11
  "Last-Translator: Mattias Tengblad <mst@eyesx.com>\n"
12
  "Language-Team: WordPress Sverige <info@wpsv.se>\n"
@@ -14,32 +14,52 @@ msgstr ""
14
  "Content-Type: text/plain; charset=UTF-8\n"
15
  "Content-Transfer-Encoding: 8bit\n"
16
 
17
- #: wp-user-avatar.php:341
18
- #: wp-user-avatar.php:798
19
- msgid "Click %s to save your changes"
20
- msgstr "Klicka på %s för att spara dina ändringar"
21
 
22
- #: wp-user-avatar.php:870
 
 
 
 
 
 
 
 
23
  msgid "Add avatar button to Visual Editor"
24
  msgstr "Lägg till knapp för avatarer i den visuella redigeraren"
25
 
26
- #: wp-user-avatar.php:875
27
  msgid "Allow Contributors & Subscribers to upload avatars"
28
  msgstr "Tillåt medarbetare & prenumeranter att ladda upp avatarer"
29
 
30
- #: wp-user-avatar.php:880
31
  msgid "Disable Gravatar and use only local avatars"
32
  msgstr "Inaktivera Gravatar och använd endast lokala avatarer"
33
 
34
- #: wp-user-avatar.php:888
35
- #: wp-user-avatar.php:893
36
- msgid "Upload Size Limit (only for Contributors & Subscribers)"
37
- msgstr "Storleksgräns för uppladdningar (endast för medarbetare & prenumeranter)"
 
 
 
 
 
38
 
39
- #: wp-user-avatar.php:902
40
  msgid "Allow users to edit avatars"
41
  msgstr "Tillåt användare att redigera avatarer"
42
 
 
 
 
 
 
 
 
 
43
  #. Plugin Name of the plugin/theme
44
  msgid "WP User Avatar"
45
  msgstr "Visningsbild (avatar)"
1
  # Swedish (sv_SE) translation for WP User Avatar.
2
+ # Copyright (C) 2014 Bangbay Siboliban.
3
  # This file is distributed under the same license as the WP User Avatar package.
4
  #
5
  msgid ""
6
  msgstr ""
7
+ "Project-Id-Version: WP User Avatar 1.8.5\n"
8
  "Report-Msgid-Bugs-To: http://wordpress.org/plugins/wp-user-avatar/\n"
9
+ "PO-Revision-Date: 2014-03-07 00:00-0000\n"
10
  "Language: sv_SE\n"
11
  "Last-Translator: Mattias Tengblad <mst@eyesx.com>\n"
12
  "Language-Team: WordPress Sverige <info@wpsv.se>\n"
14
  "Content-Type: text/plain; charset=UTF-8\n"
15
  "Content-Transfer-Encoding: 8bit\n"
16
 
17
+ #: includes/class-wp-user-avatar-admin.php:182
18
+ msgid "Donate"
19
+ msgstr "Donera"
 
20
 
21
+ #: includes/wpua-functions.php:279
22
+ msgid "Do you like WP User Avatar?"
23
+ msgstr "Är du nöjd med Visningsbild (avatar)?"
24
+
25
+ #: includes/wpua-functions.php:279
26
+ msgid "Make a donation."
27
+ msgstr "Donera"
28
+
29
+ #: includes/wpua-options-page.php:40
30
  msgid "Add avatar button to Visual Editor"
31
  msgstr "Lägg till knapp för avatarer i den visuella redigeraren"
32
 
33
+ #: includes/wpua-options-page.php:46
34
  msgid "Allow Contributors & Subscribers to upload avatars"
35
  msgstr "Tillåt medarbetare & prenumeranter att ladda upp avatarer"
36
 
37
+ #: includes/wpua-options-page.php:52
38
  msgid "Disable Gravatar and use only local avatars"
39
  msgstr "Inaktivera Gravatar och använd endast lokala avatarer"
40
 
41
+ #: includes/wpua-options-page.php:63
42
+ #: includes/wpua-options-page.php:68
43
+ msgid "Upload Size Limit"
44
+ msgstr "Storleksgräns för uppladdningar"
45
+
46
+ #: includes/wpua-options-page.php:63
47
+ #: includes/wpua-options-page.php:68
48
+ msgid "(only for Contributors & Subscribers)"
49
+ msgstr "(endast för medarbetare & prenumeranter)"
50
 
51
+ #: includes/wpua-options-page.php:78
52
  msgid "Allow users to edit avatars"
53
  msgstr "Tillåt användare att redigera avatarer"
54
 
55
+ #: includes/wpua-options-page.php:84
56
+ msgid "Resize avatars on upload"
57
+ msgstr "Ändra storlek på avatarer på uppladdning"
58
+
59
+ #: includes/wpua-options-page.php:96
60
+ msgid "Crop avatars to exact dimensions"
61
+ msgstr "Beskär avatarer till exakta dimensioner"
62
+
63
  #. Plugin Name of the plugin/theme
64
  msgid "WP User Avatar"
65
  msgstr "Visningsbild (avatar)"
readme.txt CHANGED
@@ -3,9 +3,9 @@
3
  Contributors: bangbay
4
  Donate link: http://siboliban.org/donate
5
  Tags: author image, author photo, author avatar, avatar, bbPress, profile avatar, profile image, user avatar, user image, user photo
6
- Requires at least: 3.5
7
- Tested up to: 3.7-alpha-24927
8
- Stable tag: 1.5.4
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -13,16 +13,17 @@ Use any image from your WordPress Media Library as a custom user avatar. Add you
13
 
14
  == Description ==
15
 
16
- WordPress currently only allows you to use custom avatars that are uploaded through [Gravatar](http://gravatar.com/). WP User Avatar enables you to use any photo uploaded into your Media Library as an avatar. This means you use the same uploader and library as your posts. No extra folders or image editing functions are necessary.
17
 
18
- WP User Avatar also lets you:
19
 
20
  * Upload your own Default Avatar in your WP User Avatar settings.
21
  * Show the user's [Gravatar](http://gravatar.com/) avatar or Default Avatar if the user doesn't have a WP User Avatar image.
22
  * Disable [Gravatar](http://gravatar.com/) avatars and use only local avatars.
23
- * Use the <code>[avatar]</code> shortcode in your posts. The shortcode will work with any theme, whether it has avatar support or not.
 
24
  * Allow Contributors and Subscribers to upload their own avatars.
25
- * Limit upload file size for Contributors and Subscribers.
26
 
27
  == Installation ==
28
 
@@ -32,7 +33,7 @@ WP User Avatar also lets you:
32
  4. Click "Update Profile".
33
  5. Upload your own Default Avatar in your WP User Avatar settings (optional). You can also allow Contributors & Subscribers to upload avatars and disable Gravatar.
34
  6. Choose a theme that has avatar support. In your theme, manually replace <code>get_avatar</code> with <code>get_wp_user_avatar</code> or leave <code>get_avatar</code> as-is. [Read about the differences here](http://wordpress.org/extend/plugins/wp-user-avatar/faq/).
35
- 7. You can also use the <code>[avatar]</code> shortcode in your posts. The shortcode will work with any theme, whether it has avatar support or not.
36
 
37
  **Example Usage**
38
 
@@ -90,11 +91,21 @@ For comments, you must specify the $comment variable.
90
 
91
  **Other Available Functions**
92
 
 
 
 
 
93
  = [avatar] shortcode =
94
 
95
  You can use the <code>[avatar]</code> shortcode in your posts. It will detect the author of the post or you can specify an author by username. You can specify a size, alignment, and link, but they are optional. For links, you can link to the original image file, attachment page, or a custom URL.
96
 
97
- `[avatar user="admin" size="medium" align="left" link="file"]`
 
 
 
 
 
 
98
 
99
  = get_wp_user_avatar_src =
100
 
@@ -126,9 +137,10 @@ First, choose a theme that has avatar support. In your theme, you have a choice
126
 
127
  1. Allows you to use the values "original", "large", "medium", or "thumbnail" for your avatar size.
128
  2. Doesn't add a fixed width and height to the image if you use the aforementioned values. This will give you more flexibility to resize the image with CSS.
129
- 3. Optionally adds CSS classes "alignleft", "alignright", or "aligncenter" to position your avatar.
130
- 4. Shows nothing if the user has no WP User Avatar image.
131
- 5. Shows the user's [Gravatar](http://gravatar.com/) avatar or Default Avatar only if "Show Avatars" is enabled in your WP User Avatar settings.
 
132
 
133
  = get_avatar =
134
 
@@ -143,17 +155,9 @@ First, choose a theme that has avatar support. In your theme, you have a choice
143
  = Can I create a custom Default Avatar? =
144
  In your WP User Avatar settings, you can upload your own Default Avatar.
145
 
146
- = Can I insert WP User Avatar directly into a post? =
147
-
148
- You can use the <code>[avatar]</code> shortcode in your posts. It will detect the author of the post or you can specify an author by username. You can specify a size, alignment, and link, but they are optional. For links, you can link to the original image file, attachment page, or a custom URL.
149
-
150
- `[avatar user="admin" size="96" align="left" link="file"]`
151
-
152
- Outputs:
153
 
154
- `<a href="{fileURL}" class="wp-user-avatar-link wp-user-avatar-file">
155
- <img src="{imageURL}" width="96" height="96" class="wp-user-avatar wp-user-avatar-96 alignleft" />
156
- </a>`
157
 
158
  = Can Contributors or Subscribers choose their own WP User Avatar image? =
159
  Yes, if you enable "Allow Contributors & Subscribers to upload avatars" in the WP User Avatar settings. These users will see a slightly different interface because they are allowed only one image upload.
@@ -162,14 +166,14 @@ Yes, if you enable "Allow Contributors & Subscribers to upload avatars" in the W
162
 
163
  Yes, for registered users. Non-registered comment authors will show their [Gravatar](http://gravatar.com/) avatars or Default Avatar.
164
 
165
- = Can I disable all Gravatar avatars? =
166
-
167
- In your WP User Avatar settings, you can select "Disable Gravatar — Use only local avatars" to disable all [Gravatar](http://gravatar.com/) avatars on your site and replace them with your Default Avatar. This will affect your registered users and non-registered comment authors.
168
-
169
  = Will WP User Avatar work with bbPress? =
170
 
171
  Yes!
172
 
 
 
 
 
173
  = Will WP User Avatar work with WordPress Multisite? =
174
 
175
  Yes, however, each site has its own avatar settings. If you set a WP User Avatar image on one site, you have to set it again for different sites in your network.
@@ -178,6 +182,37 @@ Yes, however, each site has its own avatar settings. If you set a WP User Avatar
178
 
179
  For Administrators, WP User Avatar adds a column with avatar thumbnails to your Users list table. If "Show Avatars" is enabled in your WP User Avatar settings, you will see avatars to the left of each username instead of in a new column.
180
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
181
  = What CSS can I use with WP User Avatar? =
182
 
183
  WP User Avatar will add the CSS classes "wp-user-avatar" and "wp-user-avatar-{size}" to your image. If you add an alignment, the corresponding alignment class will be added:
@@ -206,7 +241,7 @@ If you use the <code>[avatar]</code> shortcode, WP User Avatar will add the CSS
206
  * Attachment: wp-user-avatar-attachment
207
  * Custom URL: wp-user-avatar-custom
208
 
209
- `[avatar user="admin" size="96" align="left" link="attachment"]`
210
 
211
  Outputs:
212
 
@@ -219,19 +254,210 @@ Outputs:
219
  * <code>has_wp_user_avatar</code>: checks if the user has a WP User Avatar image
220
  * [See example usage here](http://wordpress.org/extend/plugins/wp-user-avatar/installation/)
221
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
222
  == Screenshots ==
223
 
224
  1. WP User Avatar admin settings.
225
  2. WP User Avatar lets you upload your own Default Avatar.
226
  3. WP User Avatar adds a field to your profile edit page.
227
  4. After you've chosen a WP User Avatar image, you will see the option to remove it.
228
- 5. WP User Avatar adds a button to insert the [avatar] shortcode in the Visual Editor.
229
- 6. Options for the [avatar] shortcode.
230
 
231
  == Changelog ==
232
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
233
  = 1.5.4 =
234
- * Add: Option to enable avatar editing privilege for Subscribers
235
  * Add: Swedish translation
236
  * Update: Move inline JavaScript to wp-user-avatar.js and wp-user-avatar-admin.js
237
  * Update: Load JavaScript in footer
@@ -263,7 +489,7 @@ Outputs:
263
  * Bug Fix: Use wp_die for errors
264
 
265
  = 1.4 =
266
- * Add: Uploader for Subscribers and Contributors
267
  * Add: Media states for avatar images
268
  * Add: Plugin admin settings
269
  * Update: Change support only to WP 3.4+
@@ -323,7 +549,7 @@ Outputs:
323
  = 1.2 =
324
  * Add: Default Avatar setting
325
 
326
- = 1.1.7 =
327
  * Bug Fix: Change update_usermeta to update_user_meta
328
 
329
  = 1.1.6 =
@@ -367,6 +593,10 @@ Outputs:
367
 
368
  == Upgrade Notice ==
369
 
 
 
 
 
370
  = 1.5.3 =
371
  * Notice: WP User Avatar 1.5.3 only supports WordPress 3.5 and above. If you are using an older version of WordPress, please upgrade your version of WordPress first.
372
 
3
  Contributors: bangbay
4
  Donate link: http://siboliban.org/donate
5
  Tags: author image, author photo, author avatar, avatar, bbPress, profile avatar, profile image, user avatar, user image, user photo
6
+ Requires at least: 3.6
7
+ Tested up to: 3.8.1
8
+ Stable tag: 1.8.5
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
13
 
14
  == Description ==
15
 
16
+ WordPress currently only allows you to use custom avatars that are uploaded through [Gravatar](http://gravatar.com/). **WP User Avatar** enables you to use any photo uploaded into your Media Library as an avatar. This means you use the same uploader and library as your posts. No extra folders or image editing functions are necessary.
17
 
18
+ **WP User Avatar** also lets you:
19
 
20
  * Upload your own Default Avatar in your WP User Avatar settings.
21
  * Show the user's [Gravatar](http://gravatar.com/) avatar or Default Avatar if the user doesn't have a WP User Avatar image.
22
  * Disable [Gravatar](http://gravatar.com/) avatars and use only local avatars.
23
+ * Use the <code>[avatar_upload]</code> shortcode to add a standalone uploader to a front page. This uploader is only visible to logged-in users.
24
+ * Use the <code>[avatar]</code> shortcode in your posts. These shortcodes will work with any theme, whether it has avatar support or not.
25
  * Allow Contributors and Subscribers to upload their own avatars.
26
+ * Limit upload file size and image dimensions for Contributors and Subscribers.
27
 
28
  == Installation ==
29
 
33
  4. Click "Update Profile".
34
  5. Upload your own Default Avatar in your WP User Avatar settings (optional). You can also allow Contributors & Subscribers to upload avatars and disable Gravatar.
35
  6. Choose a theme that has avatar support. In your theme, manually replace <code>get_avatar</code> with <code>get_wp_user_avatar</code> or leave <code>get_avatar</code> as-is. [Read about the differences here](http://wordpress.org/extend/plugins/wp-user-avatar/faq/).
36
+ 7. You can also use the <code>[avatar_upload]</code> and <code>[avatar]</code> shortcodes in your posts. These shortcodes will work with any theme, whether it has avatar support or not.
37
 
38
  **Example Usage**
39
 
91
 
92
  **Other Available Functions**
93
 
94
+ = [avatar_upload] shortcode =
95
+
96
+ You can use the <code>[avatar_upload]</code> shortcode to add a standalone uploader to a front page. This uploader is only visible to logged-in users. If you want to integrate the uploader into a profile edit page, see [Other Notes](http://wordpress.org/plugins/wp-user-avatar/other_notes/).
97
+
98
  = [avatar] shortcode =
99
 
100
  You can use the <code>[avatar]</code> shortcode in your posts. It will detect the author of the post or you can specify an author by username. You can specify a size, alignment, and link, but they are optional. For links, you can link to the original image file, attachment page, or a custom URL.
101
 
102
+ `[avatar user="admin" size="medium" align="left" link="file" /]`
103
+
104
+ You can also add a caption to the shortcode:
105
+
106
+ `[avatar user="admin" size="medium" align="left" link="file"]Photo Credit: Your Name[/avatar]`
107
+
108
+ **Note:** If you are using one shortcode without a caption and another shortcode with a caption on the same page, you must close the caption-less shortcode with a forward slash before the closing bracket: <code>[avatar /]</code> instead of <code>[avatar]</code>
109
 
110
  = get_wp_user_avatar_src =
111
 
137
 
138
  1. Allows you to use the values "original", "large", "medium", or "thumbnail" for your avatar size.
139
  2. Doesn't add a fixed width and height to the image if you use the aforementioned values. This will give you more flexibility to resize the image with CSS.
140
+ 3. Allows you to use custom image sizes registered with [<code>add_image_size</code>](http://codex.wordpress.org/Function_Reference/add_image_size) (fixed width and height are added to the image).
141
+ 4. Optionally adds CSS classes "alignleft", "alignright", or "aligncenter" to position your avatar.
142
+ 5. Shows nothing if the user has no WP User Avatar image.
143
+ 6. Shows the user's [Gravatar](http://gravatar.com/) avatar or Default Avatar only if "Show Avatars" is enabled in your WP User Avatar settings.
144
 
145
  = get_avatar =
146
 
155
  = Can I create a custom Default Avatar? =
156
  In your WP User Avatar settings, you can upload your own Default Avatar.
157
 
158
+ = Can I disable all Gravatar avatars? =
 
 
 
 
 
 
159
 
160
+ In your WP User Avatar settings, you can select "Disable Gravatar — Use only local avatars" to disable all [Gravatar](http://gravatar.com/) avatars on your site and replace them with your Default Avatar. This will affect your registered users and non-registered comment authors.
 
 
161
 
162
  = Can Contributors or Subscribers choose their own WP User Avatar image? =
163
  Yes, if you enable "Allow Contributors & Subscribers to upload avatars" in the WP User Avatar settings. These users will see a slightly different interface because they are allowed only one image upload.
166
 
167
  Yes, for registered users. Non-registered comment authors will show their [Gravatar](http://gravatar.com/) avatars or Default Avatar.
168
 
 
 
 
 
169
  = Will WP User Avatar work with bbPress? =
170
 
171
  Yes!
172
 
173
+ = Will WP User Avatar work with BuddyPress? =
174
+
175
+ No, BuddyPress has its own custom avatar functions and WP User Avatar will override only some of them. It's best to use BuddyPress without WP User Avatar.
176
+
177
  = Will WP User Avatar work with WordPress Multisite? =
178
 
179
  Yes, however, each site has its own avatar settings. If you set a WP User Avatar image on one site, you have to set it again for different sites in your network.
182
 
183
  For Administrators, WP User Avatar adds a column with avatar thumbnails to your Users list table. If "Show Avatars" is enabled in your WP User Avatar settings, you will see avatars to the left of each username instead of in a new column.
184
 
185
+ = Can I use the WP User Avatar uploader in a front page? =
186
+
187
+ Yes, you can use the <code>[avatar_upload]</code> shortcode to put a standalone uploader in a front page. This uploader is only visible to logged-in users. If you want to integrate the uploader into a profile edit page, see [Other Notes](http://wordpress.org/plugins/wp-user-avatar/other_notes/).
188
+
189
+ = Can I insert WP User Avatar directly into a post? =
190
+
191
+ You can use the <code>[avatar]</code> shortcode in your posts. It will detect the author of the post or you can specify an author by username. You can specify a size, alignment, and link, but they are optional. For links, you can link to the original image file, attachment page, or a custom URL.
192
+
193
+ `[avatar user="admin" size="96" align="left" link="file" /]`
194
+
195
+ Outputs:
196
+
197
+ `<a href="{fileURL}" class="wp-user-avatar-link wp-user-avatar-file">
198
+ <img src="{imageURL}" width="96" height="96" class="wp-user-avatar wp-user-avatar-96 alignleft" />
199
+ </a>`
200
+
201
+ If you have a caption, the output will be similar to how WordPress adds captions to other images.
202
+
203
+ `[avatar user="admin" size="96" align="left" link="file"]Photo Credit: Your Name[/avatar]`
204
+
205
+ Outputs:
206
+
207
+ `<div style="width: 106px" class="wp-caption alignleft">
208
+ <a href="{fileURL}" class="wp-user-avatar-link wp-user-avatar-file">
209
+ <img src="{imageURL}" width="96" height="96" class="wp-user-avatar wp-user-avatar-96" />
210
+ </a>
211
+ <p class="wp-caption-text">Photo Credit: Your Name</p>
212
+ </div>`
213
+
214
+ **Note:** If you are using one shortcode without a caption and another shortcode with a caption on the same page, you must close the caption-less shortcode with a forward slash before the closing bracket: <code>[avatar /]</code> instead of <code>[avatar]</code>
215
+
216
  = What CSS can I use with WP User Avatar? =
217
 
218
  WP User Avatar will add the CSS classes "wp-user-avatar" and "wp-user-avatar-{size}" to your image. If you add an alignment, the corresponding alignment class will be added:
241
  * Attachment: wp-user-avatar-attachment
242
  * Custom URL: wp-user-avatar-custom
243
 
244
+ `[avatar user="admin" size="96" align="left" link="attachment" /]`
245
 
246
  Outputs:
247
 
254
  * <code>has_wp_user_avatar</code>: checks if the user has a WP User Avatar image
255
  * [See example usage here](http://wordpress.org/extend/plugins/wp-user-avatar/installation/)
256
 
257
+ = There's a call for donations in the WP User Avatar settings. How can I remove it? =
258
+ I've spent countless hours developing this plugin for free. If you're able to give a donation I'd appreciate it, but it's by no means a requirement. You can remove the message by adding this to the <code>functions.php</code> file of your theme:
259
+
260
+ `remove_action('wpua_donation_message', 'wpua_do_donation_message');`
261
+
262
+ == Advanced Settings ==
263
+
264
+ = Add WP User Avatar to your own profile edit page =
265
+
266
+ If you're building your own profile edit page, WP User Avatar is automatically added to the [show_user_profile](http://codex.wordpress.org/Plugin_API/Action_Reference/show_user_profile) and [edit_user_profile](http://codex.wordpress.org/Plugin_API/Action_Reference/show_user_profile) hooks. If you'd rather have WP User Avatar in its own section, you could add another hook:
267
+
268
+ `do_action('edit_user_avatar', $current_user);`
269
+
270
+ Then, to add WP User Avatar to that hook and remove it from the other hooks outside of the administration panel, you would add this code to the <code>functions.php</code> file of your theme:
271
+
272
+ `function my_avatar_filter() {
273
+ // Remove from show_user_profile hook
274
+ remove_action('show_user_profile', array('wp_user_avatar', 'wpua_action_show_user_profile'));
275
+ remove_action('show_user_profile', array('wp_user_avatar', 'wpua_media_upload_scripts'));
276
+
277
+ // Remove from edit_user_profile hook
278
+ remove_action('edit_user_profile', array('wp_user_avatar', 'wpua_action_show_user_profile'));
279
+ remove_action('edit_user_profile', array('wp_user_avatar', 'wpua_media_upload_scripts'));
280
+
281
+ // Add to edit_user_avatar hook
282
+ add_action('edit_user_avatar', array('wp_user_avatar', 'wpua_action_show_user_profile'));
283
+ add_action('edit_user_avatar', array('wp_user_avatar', 'wpua_media_upload_scripts'));
284
+ }
285
+
286
+ // Loads only outside of administration panel
287
+ if(!is_admin()) {
288
+ add_action('init','my_avatar_filter');`
289
+ }`
290
+
291
+ = HTML Wrapper =
292
+
293
+ You can change the HTML wrapper of the WP User Avatar section on your profile edit page by using the functions <code>wpua_before_avatar</code> and <code>wpua_after_avatar</code>. By default, the avatar code is structured like this:
294
+
295
+ `<h3>Avatar</h3>
296
+ <table class="form-table">
297
+ <tr>
298
+ <th><label for="wp_user_avatar">Image</label></th>
299
+ <td>
300
+ <input type="hidden" name="wp-user-avatar" id="wp-user-avatar" value="{attachmentID}" />
301
+ <p id="wpua-add-button">
302
+ <button type="button" class="button" id="wpua-add" name="wpua-add">Edit Image</button>
303
+ </p>
304
+ <p id="wpua-preview">
305
+ <img src="{imageURL}" alt="" />
306
+ Original Size
307
+ </p>
308
+ <p id="wpua-thumbnail">
309
+ <img src="{imageURL}" alt="" />
310
+ Thumbnail
311
+ </p>
312
+ <p id="wpua-remove-button">
313
+ <button type="button" class="button" id="wpua-remove" name="wpua-remove">Default Avatar</button>
314
+ </p>
315
+ <p id="wpua-undo-button">
316
+ <button type="button" class="button" id="wpua-undo" name="wpua-undo">Undo</button>
317
+ </p>
318
+ </td>
319
+ </tr>
320
+ </table>`
321
+
322
+ To strip out the table, you would add the following filters to the <code>functions.php</code> file in your theme:
323
+
324
+ `remove_action('wpua_before_avatar', 'wpua_do_before_avatar');
325
+ remove_action('wpua_after_avatar', 'wpua_do_after_avatar');`
326
+
327
+ To add your own wrapper, you could create something like this:
328
+
329
+ `function my_before_avatar() {
330
+ echo '<div id="my-avatar">';
331
+ }
332
+ add_action('wpua_before_avatar', 'my_before_avatar');
333
+
334
+ function my_after_avatar() {
335
+ echo '</div>';
336
+ }
337
+ add_action('wpua_after_avatar', 'my_after_avatar');`
338
+
339
+ This would output:
340
+
341
+ `<div id="my-avatar">
342
+ <input type="hidden" name="wp-user-avatar" id="wp-user-avatar" value="{attachmentID}" />
343
+ <p id="wpua-add-button">
344
+ <button type="button" class="button" id="wpua-add" name="wpua-add">Edit Image</button>
345
+ </p>
346
+ <p id="wpua-preview">
347
+ <img src="{imageURL}" alt="" />
348
+ Original Size
349
+ </p>
350
+ <p id="wpua-thumbnail">
351
+ <img src="{imageURL}" alt="" />
352
+ Thumbnail
353
+ </p>
354
+ <p id="wpua-remove-button">
355
+ <button type="button" class="button" id="wpua-remove" name="wpua-remove">Default Avatar</button>
356
+ </p>
357
+ <p id="wpua-undo-button">
358
+ <button type="button" class="button" id="wpua-undo" name="wpua-undo">Undo</button>
359
+ </p>
360
+ </div>`
361
+
362
  == Screenshots ==
363
 
364
  1. WP User Avatar admin settings.
365
  2. WP User Avatar lets you upload your own Default Avatar.
366
  3. WP User Avatar adds a field to your profile edit page.
367
  4. After you've chosen a WP User Avatar image, you will see the option to remove it.
 
 
368
 
369
  == Changelog ==
370
 
371
+ = 1.8.5 =
372
+ * Add: Capability check in one function
373
+
374
+ = 1.8.4 =
375
+ * Bug Fix: Set avatar post parent to 0
376
+
377
+ = 1.8.3 =
378
+ * Bug Fix: Prevent attachment insert without image
379
+ * Update: Check for delete_posts capability instead of user role for Subscribers
380
+ * Update: Refactor and clean up
381
+
382
+ = 1.8.2 =
383
+ * Bug Fix: Edit avatar setting
384
+
385
+ = 1.8.1 =
386
+ * Bug Fix: Reattach scripts to profile action
387
+
388
+ = 1.8 =
389
+ * Add: Front page uploader
390
+ * Add: Media Library view of all avatars
391
+ * Bug Fix: Identify public static functions
392
+ * Update: Refactor code into separate classes
393
+ * Update: Translations
394
+
395
+ = 1.7.2 =
396
+ * Bug Fix: Files not committed properly in previous release
397
+
398
+ = 1.7.1 =
399
+ * Update: Error message handling for front pages
400
+
401
+ = 1.7 =
402
+ * Add: Caption for avatar
403
+ * Add: Polish translation
404
+ * Update: Error message handling
405
+
406
+ = 1.6.8 =
407
+ * Bug Fix: Shortcode without user
408
+
409
+ = 1.6.7 =
410
+ * Add: Undo button
411
+ * Bug Fix: Get original avatar
412
+
413
+ = 1.6.6 =
414
+ * Add: Donation message
415
+ * Bug Fix: Die page when image is too large
416
+ * Bug Fix: Resize images uploaded through plugin only
417
+ * Remove: Unused function
418
+ * Update: Refactor JavaScript
419
+
420
+ = 1.6.5 =
421
+ * Bug Fix: Use entire comment object instead of just e-mail address
422
+
423
+ = 1.6.4 =
424
+ * Bug Fix: Correct avatar not showing in widget
425
+ * Update: Check compatibility to 3.7.1
426
+
427
+ = 1.6.3 =
428
+ * Bug Fix: Checkbox value for "Crop avatars to exact dimensions"
429
+
430
+ = 1.6.2 =
431
+ * Bug Fix: Show Default Avatar if attachment doesn't exist
432
+ * Bug Fix: manage_users_custom_column not returning values
433
+
434
+ = 1.6.1 =
435
+ * Bug Fix: Profile not saving without an avatar for Contributors & Subscribers
436
+
437
+ = 1.6.0 =
438
+ * Add: Filters to change profile HTML structure
439
+ * Add: Recognition of sizes registered with add_image_size
440
+ * Add: Resize image options for Contributors & Subscribers
441
+ * Bug Fix: Rerrange CSS class names
442
+
443
+ = 1.5.8 =
444
+ * Bug Fix: Add function exists checks to prevent redeclare errors
445
+ * Bug Fix: Page die if file upload is too big
446
+ * Bug Fix: Upload file with submit
447
+
448
+ = 1.5.7 =
449
+ * Bug Fix: Separate out JavaScript for Contributors & Subscribers
450
+ * Bug Fix: Subscriber uploader not finding error type
451
+
452
+ = 1.5.6 =
453
+ * Update: Use cache for wpua_has_gravatar
454
+
455
+ = 1.5.5 =
456
+ * Bug Fix: Hide "Edit Image" button if Contributors & Subscribers can't edit avatar
457
+ * Bug Fix: Remove edit_posts capability if Subscribers can't edit avatar
458
+
459
  = 1.5.4 =
460
+ * Add: Option to enable avatar editing privilege for Contributors & Subscribers
461
  * Add: Swedish translation
462
  * Update: Move inline JavaScript to wp-user-avatar.js and wp-user-avatar-admin.js
463
  * Update: Load JavaScript in footer
489
  * Bug Fix: Use wp_die for errors
490
 
491
  = 1.4 =
492
+ * Add: Uploader for Contributors & Subscribers
493
  * Add: Media states for avatar images
494
  * Add: Plugin admin settings
495
  * Update: Change support only to WP 3.4+
549
  = 1.2 =
550
  * Add: Default Avatar setting
551
 
552
+ = 1.1.8 =
553
  * Bug Fix: Change update_usermeta to update_user_meta
554
 
555
  = 1.1.6 =
593
 
594
  == Upgrade Notice ==
595
 
596
+ = 1.8 =
597
+ * New Feature: Front page uploader
598
+ * New Feature: Media Library view of all avatars
599
+
600
  = 1.5.3 =
601
  * Notice: WP User Avatar 1.5.3 only supports WordPress 3.5 and above. If you are using an older version of WordPress, please upgrade your version of WordPress first.
602
 
uninstall.php CHANGED
@@ -1,31 +1,36 @@
1
  <?php
2
  /**
3
  * @package WP User Avatar
4
- * @version 1.5.4
5
  */
6
 
7
  // Remove user metadata and options on plugin delete
8
- if(!defined('WP_UNINSTALL_PLUGIN')){
9
  die(__('You are not allowed to call this page directly.'));
10
  }
11
 
12
  global $wpdb, $blog_id, $switched;
13
  $users = get_users();
 
14
  // Remove settings for all sites in multisite
15
- if(is_multisite()){
16
- $blogs = $wpdb->get_results("SELECT * FROM $wpdb->blogs");
17
- foreach($users as $user){
18
- foreach($blogs as $blog){
19
  delete_user_meta($user->ID, $wpdb->get_blog_prefix($blog->blog_id).'user_avatar');
20
  }
21
  }
22
- foreach($blogs as $blog){
23
  switch_to_blog($blog->blog_id);
24
  delete_option('avatar_default_wp_user_avatar');
25
  delete_option('wp_user_avatar_allow_upload');
26
  delete_option('wp_user_avatar_disable_gravatar');
27
  delete_option('wp_user_avatar_edit_avatar');
28
  delete_option('wp_user_avatar_load_scripts');
 
 
 
 
29
  delete_option('wp_user_avatar_tinymce');
30
  delete_option('wp_user_avatar_upload_size_limit');
31
  delete_option('wp_user_avatar_default_avatar_updated');
@@ -33,7 +38,7 @@ if(is_multisite()){
33
  delete_option('wp_user_avatar_users_updated');
34
  }
35
  } else {
36
- foreach($users as $user){
37
  delete_user_meta($user->ID, $wpdb->get_blog_prefix($blog_id).'user_avatar');
38
  }
39
  delete_option('avatar_default_wp_user_avatar');
@@ -41,14 +46,19 @@ if(is_multisite()){
41
  delete_option('wp_user_avatar_disable_gravatar');
42
  delete_option('wp_user_avatar_edit_avatar');
43
  delete_option('wp_user_avatar_load_scripts');
 
 
 
 
44
  delete_option('wp_user_avatar_tinymce');
45
  delete_option('wp_user_avatar_upload_size_limit');
46
  delete_option('wp_user_avatar_default_avatar_updated');
47
  delete_option('wp_user_avatar_media_updated');
48
  delete_option('wp_user_avatar_users_updated');
49
  }
 
50
  // Delete post meta
51
  delete_post_meta_by_key('_wp_attachment_wp_user_avatar');
 
52
  // Reset all default avatars to Mystery Man
53
  update_option('avatar_default', 'mystery');
54
- ?>
1
  <?php
2
  /**
3
  * @package WP User Avatar
4
+ * @version 1.8.5
5
  */
6
 
7
  // Remove user metadata and options on plugin delete
8
+ if(!defined('WP_UNINSTALL_PLUGIN')) {
9
  die(__('You are not allowed to call this page directly.'));
10
  }
11
 
12
  global $wpdb, $blog_id, $switched;
13
  $users = get_users();
14
+
15
  // Remove settings for all sites in multisite
16
+ if(is_multisite()) {
17
+ $blogs = wp_get_sites();
18
+ foreach($users as $user) {
19
+ foreach($blogs as $blog) {
20
  delete_user_meta($user->ID, $wpdb->get_blog_prefix($blog->blog_id).'user_avatar');
21
  }
22
  }
23
+ foreach($blogs as $blog) {
24
  switch_to_blog($blog->blog_id);
25
  delete_option('avatar_default_wp_user_avatar');
26
  delete_option('wp_user_avatar_allow_upload');
27
  delete_option('wp_user_avatar_disable_gravatar');
28
  delete_option('wp_user_avatar_edit_avatar');
29
  delete_option('wp_user_avatar_load_scripts');
30
+ delete_option('wp_user_avatar_resize_crop');
31
+ delete_option('wp_user_avatar_resize_h');
32
+ delete_option('wp_user_avatar_resize_upload');
33
+ delete_option('wp_user_avatar_resize_w');
34
  delete_option('wp_user_avatar_tinymce');
35
  delete_option('wp_user_avatar_upload_size_limit');
36
  delete_option('wp_user_avatar_default_avatar_updated');
38
  delete_option('wp_user_avatar_users_updated');
39
  }
40
  } else {
41
+ foreach($users as $user) {
42
  delete_user_meta($user->ID, $wpdb->get_blog_prefix($blog_id).'user_avatar');
43
  }
44
  delete_option('avatar_default_wp_user_avatar');
46
  delete_option('wp_user_avatar_disable_gravatar');
47
  delete_option('wp_user_avatar_edit_avatar');
48
  delete_option('wp_user_avatar_load_scripts');
49
+ delete_option('wp_user_avatar_resize_crop');
50
+ delete_option('wp_user_avatar_resize_h');
51
+ delete_option('wp_user_avatar_resize_upload');
52
+ delete_option('wp_user_avatar_resize_w');
53
  delete_option('wp_user_avatar_tinymce');
54
  delete_option('wp_user_avatar_upload_size_limit');
55
  delete_option('wp_user_avatar_default_avatar_updated');
56
  delete_option('wp_user_avatar_media_updated');
57
  delete_option('wp_user_avatar_users_updated');
58
  }
59
+
60
  // Delete post meta
61
  delete_post_meta_by_key('_wp_attachment_wp_user_avatar');
62
+
63
  // Reset all default avatars to Mystery Man
64
  update_option('avatar_default', 'mystery');
 
wp-user-avatar.php CHANGED
@@ -1,15 +1,16 @@
1
  <?php
2
  /**
3
  * @package WP User Avatar
4
- * @version 1.5.4
5
  */
 
6
  /*
7
  Plugin Name: WP User Avatar
8
  Plugin URI: http://wordpress.org/plugins/wp-user-avatar/
9
  Description: Use any image from your WordPress Media Library as a custom user avatar. Add your own Default Avatar.
10
  Author: Bangbay Siboliban
11
  Author URI: http://siboliban.org/
12
- Version: 1.5.4
13
  Text Domain: wp-user-avatar
14
  Domain Path: /lang/
15
  */
@@ -19,968 +20,26 @@ if(!defined('ABSPATH')){
19
  @header('Content-Type:'.get_option('html_type').';charset='.get_option('blog_charset'));
20
  }
21
 
22
- // Define paths and variables
23
- define('WPUA_VERSION', ' 1.5.4');
24
  define('WPUA_FOLDER', basename(dirname(__FILE__)));
25
- define('WPUA_ABSPATH', trailingslashit(str_replace('\\', '/', WP_PLUGIN_DIR.'/'.WPUA_FOLDER)));
26
- define('WPUA_URLPATH', trailingslashit(plugins_url(WPUA_FOLDER)));
27
-
28
- // Define global variables
29
- $avatar_default = get_option('avatar_default');
30
- $show_avatars = get_option('show_avatars');
31
- $wpua_allow_upload = get_option('wp_user_avatar_allow_upload');
32
- $wpua_avatar_default = get_option('avatar_default_wp_user_avatar');
33
- $wpua_disable_gravatar = get_option('wp_user_avatar_disable_gravatar');
34
- $wpua_edit_avatar = get_option('wp_user_avatar_edit_avatar');
35
- $wpua_tinymce = get_option('wp_user_avatar_tinymce');
36
- $mustache_original = WPUA_URLPATH.'images/wp-user-avatar.png';
37
- $mustache_medium = WPUA_URLPATH.'images/wp-user-avatar-300x300.png';
38
- $mustache_thumbnail = WPUA_URLPATH.'images/wp-user-avatar-150x150.png';
39
- $mustache_avatar = WPUA_URLPATH.'images/wp-user-avatar-96x96.png';
40
- $mustache_admin = WPUA_URLPATH.'images/wp-user-avatar-32x32.png';
41
- $ssl = is_ssl() ? 's' : "";
42
-
43
- // Check for updates
44
- $wpua_default_avatar_updated = get_option('wp_user_avatar_default_avatar_updated');
45
- $wpua_users_updated = get_option('wp_user_avatar_users_updated');
46
- $wpua_media_updated = get_option('wp_user_avatar_media_updated');
47
-
48
- // Max upload size
49
- if(!function_exists('wp_max_upload_size')){
50
- require_once(ABSPATH.'wp-admin/includes/template.php');
51
- }
52
-
53
- // Server upload size limit
54
- $upload_size_limit = wp_max_upload_size();
55
- // Convert to KB
56
- if($upload_size_limit > 1024){
57
- $upload_size_limit /= 1024;
58
- }
59
- $upload_size_limit_with_units = (int) $upload_size_limit.'KB';
60
-
61
- // User upload size limit
62
- $wpua_user_upload_size_limit = get_option('wp_user_avatar_upload_size_limit');
63
- if($wpua_user_upload_size_limit == 0 || $wpua_user_upload_size_limit > wp_max_upload_size()){
64
- $wpua_user_upload_size_limit = wp_max_upload_size();
65
- }
66
- // Value in bytes
67
- $wpua_upload_size_limit = $wpua_user_upload_size_limit;
68
- // Convert to KB
69
- if($wpua_user_upload_size_limit > 1024){
70
- $wpua_user_upload_size_limit /= 1024;
71
- }
72
- $wpua_upload_size_limit_with_units = (int) $wpua_user_upload_size_limit.'KB';
73
-
74
- // Load add-ons
75
- if((bool) $wpua_tinymce == 1){
76
- include_once(WPUA_ABSPATH.'includes/tinymce.php');
77
- }
78
-
79
- // Load translations
80
- load_plugin_textdomain('wp-user-avatar', "", WPUA_FOLDER.'/lang');
81
-
82
- // Initialize default settings
83
- register_activation_hook(WPUA_ABSPATH.'wp-user-avatar.php', 'wpua_options');
84
-
85
- // Remove subscribers edit_posts capability
86
- register_deactivation_hook(WPUA_ABSPATH.'wp-user-avatar.php', 'wpua_deactivate');
87
-
88
- // Settings saved to wp_options
89
- function wpua_options(){
90
- add_option('avatar_default_wp_user_avatar', "");
91
- add_option('wp_user_avatar_allow_upload', '0');
92
- add_option('wp_user_avatar_disable_gravatar', '0');
93
- add_option('wp_user_avatar_edit_avatar', '1');
94
- add_option('wp_user_avatar_tinymce', '1');
95
- add_option('wp_user_avatar_upload_size_limit', '0');
96
- }
97
- add_action('admin_init', 'wpua_options');
98
-
99
- // Update default avatar to new format
100
- if(empty($wpua_default_avatar_updated)){
101
- function wpua_default_avatar(){
102
- global $avatar_default, $mustache_original, $wpua_avatar_default;
103
- // If default avatar is the old mustache URL, update it
104
- if($avatar_default == $mustache_original){
105
- update_option('avatar_default', 'wp_user_avatar');
106
- }
107
- // If user had an image URL as the default avatar, replace with ID instead
108
- if(!empty($wpua_avatar_default)){
109
- $wpua_avatar_default_image = wp_get_attachment_image_src($wpua_avatar_default, 'medium');
110
- if($avatar_default == $wpua_avatar_default_image[0]){
111
- update_option('avatar_default', 'wp_user_avatar');
112
- }
113
- }
114
- update_option('wp_user_avatar_default_avatar_updated', '1');
115
- }
116
- add_action('admin_init', 'wpua_default_avatar');
117
- }
118
-
119
- // Rename user meta to match database settings
120
- if(empty($wpua_users_updated)){
121
- function wpua_user_meta(){
122
- global $blog_id, $wpdb;
123
- $wpua_metakey = $wpdb->get_blog_prefix($blog_id).'user_avatar';
124
- // If database tables start with something other than wp_
125
- if($wpua_metakey != 'wp_user_avatar'){
126
- $users = get_users();
127
- // Move current user metakeys to new metakeys
128
- foreach($users as $user){
129
- $wpua = get_user_meta($user->ID, 'wp_user_avatar', true);
130
- if(!empty($wpua)){
131
- update_user_meta($user->ID, $wpua_metakey, $wpua);
132
- delete_user_meta($user->ID, 'wp_user_avatar');
133
- }
134
- }
135
- }
136
- update_option('wp_user_avatar_users_updated', '1');
137
- }
138
- add_action('admin_init', 'wpua_user_meta');
139
- }
140
-
141
- // Add media state to existing avatars
142
- if(empty($wpua_media_updated)){
143
- function wpua_media_state(){
144
- global $blog_id, $wpdb;
145
- // Find all users with WPUA
146
- $wpua_metakey = $wpdb->get_blog_prefix($blog_id).'user_avatar';
147
- $wpuas = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->usermeta WHERE meta_key = %s AND meta_value != %d AND meta_value != %d", $wpua_metakey, 0, ""));
148
- foreach($wpuas as $usermeta){
149
- add_post_meta($usermeta->meta_value, '_wp_attachment_wp_user_avatar', $usermeta->user_id);
150
- }
151
- update_option('wp_user_avatar_media_updated', '1');
152
- }
153
- add_action('admin_init', 'wpua_media_state');
154
- }
155
-
156
- // Settings for Subscribers
157
- if((bool) $wpua_allow_upload == 1){
158
- // Allow multipart data in form
159
- function wpua_add_edit_form_multipart_encoding(){
160
- echo ' enctype="multipart/form-data"';
161
- }
162
- add_action('user_edit_form_tag', 'wpua_add_edit_form_multipart_encoding');
163
-
164
- // Check user role
165
- function check_user_role($role, $user_id=null){
166
- global $current_user;
167
- $user = is_numeric($user_id) ? get_userdata($user_id) : $current_user->ID;
168
- if(empty($user)){
169
- return false;
170
- }
171
- return in_array($role, (array) $user->roles);
172
- }
173
-
174
- // Remove menu items
175
- function wpua_subscriber_remove_menu_pages(){
176
- global $current_user;
177
- if(check_user_role('subscriber', $current_user->ID)){
178
- remove_menu_page('edit.php');
179
- remove_menu_page('edit-comments.php');
180
- remove_menu_page('tools.php');
181
- }
182
- }
183
- add_action('admin_menu', 'wpua_subscriber_remove_menu_pages');
184
-
185
- // Remove menu bar items
186
- function wpua_subscriber_remove_menu_bar_items(){
187
- global $current_user, $wp_admin_bar;
188
- if(check_user_role('subscriber', $current_user->ID)){
189
- $wp_admin_bar->remove_menu('comments');
190
- $wp_admin_bar->remove_menu('new-content');
191
- }
192
- }
193
- add_action('wp_before_admin_bar_render', 'wpua_subscriber_remove_menu_bar_items');
194
-
195
- // Remove dashboard items
196
- function wpua_subscriber_remove_dashboard_widgets(){
197
- global $current_user;
198
- if(check_user_role('subscriber', $current_user->ID)){
199
- remove_meta_box('dashboard_quick_press', 'dashboard', 'side');
200
- remove_meta_box('dashboard_recent_drafts', 'dashboard', 'side');
201
- remove_meta_box('dashboard_right_now', 'dashboard', 'normal');
202
- }
203
- }
204
- add_action('wp_dashboard_setup', 'wpua_subscriber_remove_dashboard_widgets');
205
-
206
- // Restrict access to pages
207
- function wpua_subscriber_offlimits(){
208
- global $current_user, $pagenow, $wpua_edit_avatar;
209
- if((bool) $wpua_edit_avatar == 1){
210
- $offlimits = array('edit.php', 'edit-comments.php', 'post-new.php', 'tools.php');
211
- } else {
212
- $offlimits = array('edit.php', 'edit-comments.php', 'post.php', 'post-new.php', 'tools.php');
213
- }
214
- if(check_user_role('subscriber', $current_user->ID)){
215
- if(in_array($pagenow, $offlimits)){
216
- do_action('admin_page_access_denied');
217
- wp_die(__('You do not have sufficient permissions to access this page.'));
218
- }
219
- }
220
- }
221
- add_action('admin_init', 'wpua_subscriber_offlimits');
222
- }
223
-
224
- if((bool) $wpua_allow_upload == 1 && (bool) $wpua_edit_avatar == 1){
225
- // Give subscribers edit_posts capability
226
- function wpua_subscriber_add_cap(){
227
- global $blog_id, $wpdb;
228
- $wp_user_roles = $wpdb->get_blog_prefix($blog_id).'user_roles';
229
- $user_roles = get_option($wp_user_roles);
230
- $user_roles['subscriber']['capabilities']['edit_posts'] = true;
231
- update_option($wp_user_roles, $user_roles);
232
- }
233
- add_action('admin_init', 'wpua_subscriber_add_cap');
234
- }
235
-
236
- // Remove subscribers edit_posts capability
237
- function wpua_subscriber_remove_cap(){
238
- global $blog_id, $wpdb;
239
- $wp_user_roles = $wpdb->get_blog_prefix($blog_id).'user_roles';
240
- $user_roles = get_option($wp_user_roles);
241
- unset($user_roles['subscriber']['capabilities']['edit_posts']);
242
- update_option($wp_user_roles, $user_roles);
243
- }
244
-
245
- // On deactivation
246
- function wpua_deactivate(){
247
- // Remove subscribers edit_posts capability
248
- wpua_subscriber_remove_cap();
249
- // Reset all default avatar to Mystery Man
250
- update_option('avatar_default', 'mystery');
251
- }
252
 
253
  // WP User Avatar
254
- if(!class_exists('wp_user_avatar')){
255
- class wp_user_avatar{
256
- function wp_user_avatar(){
257
- global $current_screen, $current_user, $pagenow, $show_avatars, $wpua_allow_upload, $wpua_upload_size_limit;
258
- // Add WPUA to profile
259
- if(current_user_can('upload_files') || ((bool) $wpua_allow_upload == 1 && is_user_logged_in())){
260
- // For themes that use this function
261
- if(!function_exists('get_current_screen')){
262
- require_once(ABSPATH.'wp-admin/includes/screen.php');
263
- }
264
- // Profile functions and scripts
265
- add_action('show_user_profile', array('wp_user_avatar', 'wpua_action_show_user_profile'));
266
- add_action('edit_user_profile', array($this, 'wpua_action_show_user_profile'));
267
- add_action('personal_options_update', array($this, 'wpua_action_process_option_update'));
268
- add_action('edit_user_profile_update', array($this, 'wpua_action_process_option_update'));
269
- add_action('show_user_profile', array($this, 'wpua_media_upload_scripts'));
270
- add_action('edit_user_profile', array($this, 'wpua_media_upload_scripts'));
271
- // Admin scripts
272
- if($pagenow == 'options-discussion.php' || ($pagenow == 'options-general.php' && isset($_GET['page']) && $_GET['page'] == 'wp-user-avatar')){
273
- add_action('admin_enqueue_scripts', array($this, 'wpua_media_upload_scripts'));
274
- }
275
- // Prefilter upload size
276
- if(!current_user_can('upload_files')){
277
- add_filter('wp_handle_upload_prefilter', array($this, 'wpua_handle_upload_prefilter'), 10, 1);
278
- }
279
- // Admin menu settings
280
- add_action('admin_menu', 'wpua_admin');
281
- add_filter('plugin_action_links', array($this, 'wpua_plugin_settings_links'), 10, 2);
282
- // Hide column in Users table if default avatars are enabled
283
- if((bool) $show_avatars == 0 && is_admin()){
284
- add_filter('manage_users_columns', array($this, 'wpua_add_column'), 10, 1);
285
- add_filter('manage_users_custom_column', array($this, 'wpua_show_column'), 10, 3);
286
- }
287
- }
288
- }
289
-
290
- // Add to edit user profile
291
- function wpua_action_show_user_profile($user){
292
- global $blog_id, $current_user, $post, $show_avatars, $wpdb, $wpua_allow_upload, $wpua_edit_avatar, $wpua_upload_size_limit_with_units;
293
- // Get WPUA attachment ID
294
- $wpua = get_user_meta($user->ID, $wpdb->get_blog_prefix($blog_id).'user_avatar', true);
295
- // Show remove button if WPUA is set
296
- $hide_remove = !has_wp_user_avatar($user->ID) ? ' wpua-hide' : "";
297
- // If avatars are enabled, get original avatar image or show blank
298
- $avatar_medium_src = (bool) $show_avatars == 1 ? wpua_get_avatar_original($user->user_email, 96) : includes_url().'images/blank.gif';
299
- // Check if user has wp_user_avatar, if not show image from above
300
- $avatar_medium = has_wp_user_avatar($user->ID) ? get_wp_user_avatar_src($user->ID, 'medium') : $avatar_medium_src;
301
- // Check if user has wp_user_avatar, if not show image from above
302
- $avatar_thumbnail = has_wp_user_avatar($user->ID) ? get_wp_user_avatar_src($user->ID, 96) : $avatar_medium_src;
303
- // Change text on message based on current user
304
- $profile = ($current_user->ID == $user->ID) ? '&ldquo;'.__('Update Profile').'&rdquo;' : '&ldquo;'.__('Update User').'&rdquo;';
305
- ?>
306
- <?php if(class_exists('bbPress') && bbp_is_edit()) : // Add to bbPress profile with same style ?>
307
- <h2 class="entry-title"><?php _e('Avatar'); ?></h2>
308
- <fieldset class="bbp-form">
309
- <legend><?php _e('Image'); ?></legend>
310
- <?php else : // Add to profile with admin style ?>
311
- <h3><?php _e('Avatar') ?></h3>
312
- <table class="form-table">
313
- <tr>
314
- <th><label for="wp_user_avatar"><?php _e('Image'); ?></label></th>
315
- <td>
316
- <?php endif; ?>
317
- <input type="hidden" name="wp-user-avatar" id="wp-user-avatar" value="<?php echo $wpua; ?>" />
318
- <?php if(current_user_can('upload_files')) : // Button to launch Media uploader ?>
319
- <p><button type="button" class="button" id="wpua-add" name="wpua-add"><?php _e('Edit Image'); ?></button></p>
320
- <?php elseif(!current_user_can('upload_files') && !has_wp_user_avatar($current_user->ID)) : // Upload button ?>
321
- <input name="wp-user-avatar-file" id="wpua-file" type="file" />
322
- <button type="submit" class="button" id="upload-wp-user-avatar" name="upload-wp-user-avatar" value="<?php _e('Upload'); ?>"><?php _e('Upload'); ?></button>
323
- <p>
324
- <?php printf(__('Maximum upload file size: %d%s.'), esc_html($wpua_upload_size_limit_with_units), esc_html('KB')); ?>
325
- <br />
326
- <?php _e('Allowed Files'); ?>: <?php _e('<code>jpg jpeg png gif</code>'); ?>
327
- </p>
328
- <?php elseif((bool) $wpua_edit_avatar == 1 && !current_user_can('upload_files') && has_wp_user_avatar($current_user->ID) && wpua_author($wpua, $current_user->ID)) : // Edit button ?>
329
- <?php $edit_attachment_link = add_query_arg(array('post' => $wpua, 'action' => 'edit'), admin_url('post.php')); ?>
330
- <p><button type="button" class="button" id="wpua-edit" name="wpua-edit" onclick="window.open('<?php echo $edit_attachment_link; ?>', '_self');"><?php _e('Edit Image'); ?></button></p>
331
- <?php endif; ?>
332
- <p id="wpua-preview">
333
- <img src="<?php echo $avatar_medium; ?>" alt="" />
334
- <?php _e('Original Size'); ?>
335
- </p>
336
- <p id="wpua-thumbnail">
337
- <img src="<?php echo $avatar_thumbnail; ?>" alt="" />
338
- <?php _e('Thumbnail'); ?>
339
- </p>
340
- <p><button type="button" class="button<?php echo $hide_remove; ?>" id="wpua-remove" name="wpua-remove"><?php _e('Remove'); ?></button></p>
341
- <p id="wpua-message"><?php printf(__('Click %s to save your changes', 'wp-user-avatar'), $profile); ?></p>
342
- <?php if(class_exists('bbPress') && bbp_is_edit()) : // Add to bbPress profile with same style ?>
343
- </fieldset>
344
- <?php else : // Add to profile with admin style ?>
345
- </td>
346
- </tr>
347
- </table>
348
- <?php endif; ?>
349
- <?php
350
- }
351
-
352
- // Set upload size limit for users without upload_files capability
353
- function wpua_handle_upload_prefilter($file){
354
- global $wpua_upload_size_limit;
355
- $size = $file['size'];
356
- if($size > $wpua_upload_size_limit){
357
- $file['error'] = __('The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.');
358
- }
359
- return $file;
360
- }
361
-
362
- // Update user meta
363
- function wpua_action_process_option_update($user_id){
364
- global $blog_id, $wpdb;
365
- // Check if user has upload_files capability
366
- if(current_user_can('upload_files')){
367
- $wpua_id = isset($_POST['wp-user-avatar']) ? intval($_POST['wp-user-avatar']) : "";
368
- $wpdb->query($wpdb->prepare("DELETE FROM $wpdb->postmeta WHERE meta_key = %s AND meta_value = %d", '_wp_attachment_wp_user_avatar', $user_id));
369
- add_post_meta($wpua_id, '_wp_attachment_wp_user_avatar', $user_id);
370
- update_user_meta($user_id, $wpdb->get_blog_prefix($blog_id).'user_avatar', $wpua_id);
371
- } else {
372
- if(isset($_POST['wp-user-avatar']) && empty($_POST['wp-user-avatar'])){
373
- // Uploads by user
374
- $attachments = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->posts WHERE post_author = %d AND post_type = %s", $user_id, 'attachment'));
375
- foreach($attachments as $attachment){
376
- // Delete attachment if not used by another user
377
- if(!wpua_image($attachment->ID, $user_id)){
378
- wp_delete_post($attachment->ID);
379
- }
380
- }
381
- update_user_meta($user_id, $wpdb->get_blog_prefix($blog_id).'user_avatar', "");
382
- }
383
- // Create attachment from upload
384
- if(isset($_POST['upload-wp-user-avatar']) && $_POST['upload-wp-user-avatar']){
385
- if(!function_exists('wp_handle_upload')){
386
- require_once(ABSPATH.'wp-admin/includes/admin.php');
387
- require_once(ABSPATH.'wp-admin/includes/file.php');
388
- }
389
- $name = $_FILES['wp-user-avatar-file']['name'];
390
- $file = wp_handle_upload($_FILES['wp-user-avatar-file'], array('test_form' => false));
391
- $type = $file['type'];
392
- // Allow only JPG, GIF, PNG
393
- if($file['error'] || !preg_match('/(jpe?g|gif|png)$/i', $type)){
394
- if($file['error']){
395
- wp_die($file['error']);
396
- } else {
397
- wp_die(__('Sorry, this file type is not permitted for security reasons.'));
398
- }
399
- }
400
- // Break out file info
401
- $name_parts = pathinfo($name);
402
- $name = trim(substr($name, 0, -(1 + strlen($name_parts['extension']))));
403
- $url = $file['url'];
404
- $file = $file['file'];
405
- $title = $name;
406
- // Use image exif/iptc data for title if possible
407
- if($image_meta = @wp_read_image_metadata($file)){
408
- if(trim($image_meta['title']) && !is_numeric(sanitize_title($image_meta['title']))){
409
- $title = $image_meta['title'];
410
- }
411
- }
412
- // Construct the attachment array
413
- $attachment = array(
414
- 'guid' => $url,
415
- 'post_mime_type' => $type,
416
- 'post_title' => $title
417
- );
418
- // This should never be set as it would then overwrite an existing attachment
419
- if(isset($attachment['ID'])){
420
- unset($attachment['ID']);
421
- }
422
- // Save the attachment metadata
423
- $attachment_id = wp_insert_attachment($attachment, $file);
424
- if(!is_wp_error($attachment_id)){
425
- require_once(ABSPATH.'wp-admin/includes/image.php');
426
- wp_update_attachment_metadata($attachment_id, wp_generate_attachment_metadata($attachment_id, $file));
427
- $wpdb->query($wpdb->prepare("DELETE FROM $wpdb->postmeta WHERE meta_key = %s AND meta_value = %d", '_wp_attachment_wp_user_avatar', $user_id));
428
- add_post_meta($attachment_id, '_wp_attachment_wp_user_avatar', $user_id);
429
- update_user_meta($user_id, $wpdb->get_blog_prefix($blog_id).'user_avatar', $attachment_id);
430
- }
431
- }
432
- }
433
- }
434
-
435
- // Add button to attach image for WP 3.4 and older
436
- function wpua_add_attachment_field_to_edit($fields, $post){
437
- $image = wp_get_attachment_image_src($post->ID, "medium");
438
- $button = '<button type="button" class="button" id="set-wp-user-avatar-image" name="set-wp-user-avatar-image" onclick="wpuaSetAvatar(\''.$post->ID.'\', \''.$image[0].'\')">'.__('Select Image').'</button>';
439
- $fields['wp-user-avatar'] = array(
440
- 'label' => __('WP User Avatar', 'wp-user-avatar'),
441
- 'input' => 'html',
442
- 'html' => $button
443
- );
444
- return $fields;
445
- }
446
-
447
- // Add settings link on plugin page
448
- function wpua_plugin_settings_links($links, $file){
449
- if(basename($file) == basename(plugin_basename(__FILE__))){
450
- $settings_link = '<a href="'.add_query_arg(array('page' => 'wp-user-avatar'), admin_url('options-general.php')).'">'.__('Settings').'</a>';
451
- $links = array_merge($links, array($settings_link));
452
- }
453
- return $links;
454
- }
455
-
456
- // Add column to Users table
457
- function wpua_add_column($columns){
458
- return $columns + array('wp-user-avatar' => __('WP User Avatar', 'wp-user-avatar'));
459
- }
460
-
461
- // Show thumbnail in Users table
462
- function wpua_show_column($value, $column_name, $user_id){
463
- global $blog_id, $wpdb;
464
- $wpua = get_user_meta($user_id, $wpdb->get_blog_prefix($blog_id).'user_avatar', true);
465
- $wpua_image = wp_get_attachment_image($wpua, array(32,32));
466
- if($column_name == 'wp-user-avatar'){
467
- return $wpua_image;
468
- }
469
- }
470
-
471
- // Media uploader
472
- function wpua_media_upload_scripts($user=""){
473
- global $mustache_admin, $pagenow, $show_avatars, $wpua_upload_size_limit;
474
- wp_enqueue_script('jquery');
475
- if(current_user_can('upload_files')){
476
- wp_enqueue_script('admin-bar');
477
- wp_enqueue_media();
478
- }
479
- wp_enqueue_script('wp-user-avatar', WPUA_URLPATH.'js/wp-user-avatar.js', array('jquery'), WPUA_VERSION, true);
480
- wp_enqueue_style('wp-user-avatar', WPUA_URLPATH.'css/wp-user-avatar.css', "", WPUA_VERSION);
481
- // Admin scripts
482
- if($pagenow == 'options-discussion.php' || ($pagenow == 'options-general.php' && isset($_GET['page']) && $_GET['page'] == 'wp-user-avatar')){
483
- // Size limit slider
484
- wp_enqueue_script('jquery-ui-slider');
485
- wp_enqueue_style('wp-user-avatar-jqueryui', WPUA_URLPATH.'css/jquery.ui.slider.css', "", null);
486
- // Remove/edit settings
487
- $wpua_custom_scripts = array('section' => __('Default Avatar'), 'edit_image' => __('Edit Image'), 'select_image' => __('Select Image'), 'avatar_thumb' => $mustache_admin);
488
- wp_localize_script('wp-user-avatar', 'wpua_custom', $wpua_custom_scripts);
489
- // Settings control
490
- wp_enqueue_script('wp-user-avatar-admin', WPUA_URLPATH.'js/wp-user-avatar-admin.js', array('wp-user-avatar'), WPUA_VERSION, true);
491
- $wpua_admin_scripts = array('upload_size_limit' => $wpua_upload_size_limit, 'max_upload_size' => wp_max_upload_size());
492
- wp_localize_script('wp-user-avatar-admin', 'wpua_admin', $wpua_admin_scripts);
493
- } else {
494
- // User remove/edit settings
495
- $avatar_medium_src = (bool) $show_avatars == 1 ? wpua_get_avatar_original($user->user_email, 96) : includes_url().'images/blank.gif';
496
- $wpua_custom_scripts = array('section' => $user->display_name, 'edit_image' => __('Edit Image'), 'select_image' => __('Select Image'), 'avatar_thumb' => $avatar_medium_src);
497
- wp_localize_script('wp-user-avatar', 'wpua_custom', $wpua_custom_scripts);
498
- }
499
- }
500
- }
501
-
502
- // Returns true if user has Gravatar-hosted image
503
- function wpua_has_gravatar($id_or_email, $has_gravatar=false, $user="", $email=""){
504
- global $ssl;
505
- if(!is_object($id_or_email) && !empty($id_or_email)){
506
- // Find user by ID or e-mail address
507
- $user = is_numeric($id_or_email) ? get_user_by('id', $id_or_email) : get_user_by('email', $id_or_email);
508
- // Get registered user e-mail address
509
- $email = !empty($user) ? $user->user_email : "";
510
- }
511
- // Check if Gravatar image returns 200 (OK) or 404 (Not Found)
512
- if(!empty($email)){
513
- $hash = md5(strtolower(trim($email)));
514
- $gravatar = 'http'.$ssl.'://www.gravatar.com/avatar/'.$hash.'?d=404';
515
- $headers = @get_headers($gravatar);
516
- $has_gravatar = !preg_match("|200|", $headers[0]) ? false : true;
517
- }
518
- return $has_gravatar;
519
- }
520
-
521
- // Returns true if user has wp_user_avatar
522
- function has_wp_user_avatar($id_or_email="", $has_wpua=false, $user="", $user_id=""){
523
- global $blog_id, $wpdb;
524
- if(!is_object($id_or_email) && !empty($id_or_email)){
525
- // Find user by ID or e-mail address
526
- $user = is_numeric($id_or_email) ? get_user_by('id', $id_or_email) : get_user_by('email', $id_or_email);
527
- // Get registered user ID
528
- $user_id = !empty($user) ? $user->ID : "";
529
- }
530
- $wpua = get_user_meta($user_id, $wpdb->get_blog_prefix($blog_id).'user_avatar', true);
531
- $has_wpua = !empty($wpua) ? true : false;
532
- return $has_wpua;
533
- }
534
-
535
- // Replace get_avatar only in get_wp_user_avatar
536
- function wpua_get_avatar_filter($avatar, $id_or_email="", $size="", $default="", $alt=""){
537
- global $avatar_default, $comment, $mustache_admin, $mustache_avatar, $mustache_medium, $mustache_original, $mustache_thumbnail, $post, $wpua_avatar_default, $wpua_disable_gravatar;
538
- // User has WPUA
539
- if(is_object($id_or_email)){
540
- if(!empty($comment->comment_author_email)){
541
- $avatar = get_wp_user_avatar($comment, $size, $default, $alt);
542
- } else {
543
- $avatar = get_wp_user_avatar('unknown@gravatar.com', $size, $default, $alt);
544
- }
545
- } else {
546
- if(has_wp_user_avatar($id_or_email)){
547
- $avatar = get_wp_user_avatar($id_or_email, $size, $default, $alt);
548
- // User has Gravatar and Gravatar is not disabled
549
- } elseif((bool) $wpua_disable_gravatar != 1 && wpua_has_gravatar($id_or_email)){
550
- $avatar = $avatar;
551
- // User doesn't have WPUA or Gravatar and Default Avatar is wp_user_avatar, show custom Default Avatar
552
- } elseif($avatar_default == 'wp_user_avatar'){
553
- // Show custom Default Avatar
554
- if(!empty($wpua_avatar_default)){
555
- // Get image
556
- $wpua_avatar_default_image = wp_get_attachment_image_src($wpua_avatar_default, array($size,$size));
557
- // Image src
558
- $default = $wpua_avatar_default_image[0];
559
- // Add dimensions if numeric size
560
- $dimensions = ' width="'.$wpua_avatar_default_image[1].'" height="'.$wpua_avatar_default_image[2].'"';
561
- $defaultcss = "";
562
- } else {
563
- // Get mustache image based on numeric size comparison
564
- if($size > get_option('medium_size_w')){
565
- $default = $mustache_original;
566
- } elseif($size <= get_option('medium_size_w') && $size > get_option('thumbnail_size_w')){
567
- $default = $mustache_medium;
568
- } elseif($size <= get_option('thumbnail_size_w') && $size > 96){
569
- $default = $mustache_thumbnail;
570
- } elseif($size <= 96 && $size > 32){
571
- $default = $mustache_avatar;
572
- } elseif($size <= 32){
573
- $default = $mustache_admin;
574
- }
575
- // Add dimensions if numeric size
576
- $dimensions = ' width="'.$size.'" height="'.$size.'"';
577
- $defaultcss = ' avatar-default';
578
- }
579
- // Construct the img tag
580
- $avatar = "<img src='".$default."'".$dimensions." alt='".$alt."' class='wp-user-avatar wp-user-avatar-".$size." avatar avatar-".$size." photo'".$defaultcss." />";
581
- }
582
- }
583
- return $avatar;
584
- }
585
- add_filter('get_avatar', 'wpua_get_avatar_filter', 10, 6);
586
-
587
- // Get original avatar, for when user removes wp_user_avatar
588
- function wpua_get_avatar_original($id_or_email, $size="", $default="", $alt=""){
589
- global $avatar_default, $mustache_avatar, $wpua_avatar_default, $wpua_disable_gravatar;
590
- // Remove get_avatar filter only in admin
591
- if(is_admin()){
592
- remove_filter('get_avatar', 'wpua_get_avatar_filter');
593
- }
594
- if((bool) $wpua_disable_gravatar != 1){
595
- // User doesn't have Gravatar and Default Avatar is wp_user_avatar, show custom Default Avatar
596
- if(!wpua_has_gravatar($id_or_email) && $avatar_default == 'wp_user_avatar'){
597
- // Show custom Default Avatar
598
- if(!empty($wpua_avatar_default)){
599
- $wpua_avatar_default_image = wp_get_attachment_image_src($wpua_avatar_default, array($size,$size));
600
- $default = $wpua_avatar_default_image[0];
601
- } else {
602
- $default = $mustache_avatar;
603
- }
604
- } else {
605
- // Get image from Gravatar, whether it's the user's image or default image
606
- $wpua_image = get_avatar($id_or_email, $size);
607
- // Takes the img tag, extracts the src
608
- $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $wpua_image, $matches, PREG_SET_ORDER);
609
- $default = $matches [0] [1];
610
- }
611
- } else {
612
- if(!empty($wpua_avatar_default)){
613
- $wpua_avatar_default_image = wp_get_attachment_image_src($wpua_avatar_default, array($size,$size));
614
- $default = $wpua_avatar_default_image[0];
615
- } else {
616
- $default = $mustache_avatar;
617
- }
618
- }
619
- return $default;
620
- }
621
-
622
- // Find WPUA, show get_avatar if empty
623
- function get_wp_user_avatar($id_or_email="", $size='96', $align="", $alt=""){
624
- global $avatar_default, $blog_id, $comment, $post, $wpdb;
625
- // Checks if comment
626
- if(is_object($id_or_email)){
627
- // Checks if comment author is registered user by user ID
628
- if($comment->user_id != 0){
629
- $id_or_email = $comment->user_id;
630
- // Checks that comment author isn't anonymous
631
- } elseif(!empty($comment->comment_author_email)){
632
- // Checks if comment author is registered user by e-mail address
633
- $user = get_user_by('email', $comment->comment_author_email);
634
- // Get registered user info from profile, otherwise e-mail address should be value
635
- $id_or_email = !empty($user) ? $user->ID : $comment->comment_author_email;
636
- }
637
- $alt = $comment->comment_author;
638
- } else {
639
- if(!empty($id_or_email)){
640
- // Find user by ID or e-mail address
641
- $user = is_numeric($id_or_email) ? get_user_by('id', $id_or_email) : get_user_by('email', $id_or_email);
642
- } else {
643
- // Find author's name if id_or_email is empty
644
- $author_name = get_query_var('author_name');
645
- if(is_author()){
646
- // On author page, get user by page slug
647
- $user = get_user_by('slug', $author_name);
648
- } else {
649
- // On post, get user by author meta
650
- $user_id = get_the_author_meta('ID');
651
- $user = get_user_by('id', $user_id);
652
- }
653
- }
654
- // Set user's ID and name
655
- if(!empty($user)){
656
- $id_or_email = $user->ID;
657
- $alt = $user->display_name;
658
- }
659
- }
660
- // Checks if user has WPUA
661
- $wpua_meta = !empty($id_or_email) ? get_the_author_meta($wpdb->get_blog_prefix($blog_id).'user_avatar', $id_or_email) : "";
662
- // Add alignment class
663
- $alignclass = !empty($align) ? ' align'.$align : "";
664
- // User has WPUA, bypass get_avatar
665
- if(!empty($wpua_meta)){
666
- // Numeric size use size array
667
- $get_size = is_numeric($size) ? array($size,$size) : $size;
668
- // Get image src
669
- $wpua_image = wp_get_attachment_image_src($wpua_meta, $get_size);
670
- // Add dimensions to img only if numeric size was specified
671
- $dimensions = is_numeric($size) ? ' width="'.$wpua_image[1].'" height="'.$wpua_image[2].'"' : "";
672
- // Construct the img tag
673
- $avatar = '<img src="'.$wpua_image[0].'"'.$dimensions.' alt="'.$alt.'" class="wp-user-avatar wp-user-avatar-'.$size.$alignclass.' avatar avatar avatar-'.$size.' photo" />';
674
- } else {
675
- // Get numeric sizes for non-numeric sizes based on media options
676
- if($size == 'original' || $size == 'large' || $size == 'medium' || $size == 'thumbnail'){
677
- $get_size = ($size == 'original') ? get_option('large_size_w') : get_option($size.'_size_w');
678
- } else {
679
- // Numeric sizes leave as-is
680
- $get_size = $size;
681
- }
682
- // User with no WPUA uses get_avatar
683
- $avatar = get_avatar($id_or_email, $get_size, $default="", $alt="");
684
- // Remove width and height for non-numeric sizes
685
- if(!is_numeric($size)){
686
- $avatar = preg_replace("/(width|height)=\'\d*\'\s/", "", $avatar);
687
- $avatar = preg_replace('/(width|height)=\"\d*\"\s/', "", $avatar);
688
- $avatar = str_replace('wp-user-avatar wp-user-avatar-'.$get_size.' ', "", $avatar);
689
- $avatar = str_replace("class='", "class='wp-user-avatar wp-user-avatar-".$size.$alignclass." ", $avatar);
690
- }
691
- }
692
- return $avatar;
693
- }
694
-
695
- // Return just the image src
696
- function get_wp_user_avatar_src($id_or_email, $size="", $align=""){
697
- $wpua_image_src = "";
698
- // Gets the avatar img tag
699
- $wpua_image = get_wp_user_avatar($id_or_email, $size, $align);
700
- // Takes the img tag, extracts the src
701
- if(!empty($wpua_image)){
702
- $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $wpua_image, $matches, PREG_SET_ORDER);
703
- $wpua_image_src = $matches [0] [1];
704
- }
705
- return $wpua_image_src;
706
- }
707
-
708
- // Shortcode
709
- function wpua_shortcode($atts, $content){
710
- global $blog_id, $wpdb;
711
- // Set shortcode attributes
712
- extract(shortcode_atts(array('user' => "", 'size' => '96', 'align' => "", 'link' => "", 'target' => ""), $atts));
713
- // Find user by ID, login, slug, or e-mail address
714
- if(!empty($user)){
715
- $user = is_numeric($user) ? get_user_by('id', $user) : get_user_by('login', $user);
716
- $user = empty($user) ? get_user_by('slug', $user) : $user;
717
- $user = empty($user) ? get_user_by('email', $user) : $user;
718
- }
719
- // Get user ID
720
- $id_or_email = !empty($user) ? $user->ID : "";
721
- // Check if link is set
722
- if(!empty($link)){
723
- // CSS class is same as link type, except for URL
724
- $link_class = $link;
725
- // Open in new window
726
- $target_link = !empty($target) ? ' target="'.$target.'"' : "";
727
- if($link == 'file'){
728
- // Get image src
729
- $image_link = get_wp_user_avatar_src($id_or_email, 'original', $align);
730
- } elseif($link == 'attachment'){
731
- // Get attachment URL
732
- $image_link = get_attachment_link(get_the_author_meta($wpdb->get_blog_prefix($blog_id).'user_avatar', $id_or_email));
733
- } else {
734
- // URL
735
- $image_link = $link;
736
- $link_class = 'custom';
737
- }
738
- // Wrap the avatar inside the link
739
- $avatar = '<a href="'.$image_link.'" class="wp-user-avatar-link wp-user-avatar-'.$link_class.'"'.$target_link.'>'.get_wp_user_avatar($id_or_email, $size, $align).'</a>';
740
- } else {
741
- // Get WPUA as normal
742
- $avatar = get_wp_user_avatar($id_or_email, $size, $align);
743
- }
744
- return $avatar;
745
- }
746
- add_shortcode('avatar', 'wpua_shortcode');
747
-
748
- // Add default avatar
749
- function wpua_add_default_avatar($avatar_list=null){
750
- global $avatar_default, $mustache_admin, $mustache_medium, $wpua_avatar_default, $wpua_disable_gravatar;
751
- // Remove get_avatar filter
752
- remove_filter('get_avatar', 'wpua_get_avatar_filter');
753
- // Set avatar_list variable
754
- $avatar_list = "";
755
- // Set avatar defaults
756
- $avatar_defaults = array(
757
- 'mystery' => __('Mystery Man'),
758
- 'blank' => __('Blank'),
759
- 'gravatar_default' => __('Gravatar Logo'),
760
- 'identicon' => __('Identicon (Generated)'),
761
- 'wavatar' => __('Wavatar (Generated)'),
762
- 'monsterid' => __('MonsterID (Generated)'),
763
- 'retro' => __('Retro (Generated)')
764
- );
765
- // No Default Avatar, set to Mystery Man
766
- if(empty($avatar_default)){
767
- $avatar_default = 'mystery';
768
- }
769
- // Take avatar_defaults and get examples for unknown@gravatar.com
770
- foreach($avatar_defaults as $default_key => $default_name){
771
- $avatar = get_avatar('unknown@gravatar.com', 32, $default_key);
772
- $selected = ($avatar_default == $default_key) ? 'checked="checked" ' : "";
773
- $avatar_list .= "\n\t<label><input type='radio' name='avatar_default' id='avatar_{$default_key}' value='".esc_attr($default_key)."' {$selected}/> ";
774
- $avatar_list .= preg_replace("/src='(.+?)'/", "src='\$1&amp;forcedefault=1'", $avatar);
775
- $avatar_list .= ' '.$default_name.'</label>';
776
- $avatar_list .= '<br />';
777
- }
778
- // Show remove link if custom Default Avatar is set
779
- if(!empty($wpua_avatar_default)){
780
- $avatar_thumb_src = wp_get_attachment_image_src($wpua_avatar_default, array(32,32));
781
- $avatar_thumb = $avatar_thumb_src[0];
782
- $hide_remove = "";
783
- } else {
784
- $avatar_thumb = $mustache_admin;
785
- $hide_remove = ' class="wpua-hide"';
786
- }
787
- // Default Avatar is wp_user_avatar, check the radio button next to it
788
- $selected_avatar = ((bool) $wpua_disable_gravatar == 1 || $avatar_default == 'wp_user_avatar') ? ' checked="checked" ' : "";
789
- // Wrap WPUA in div
790
- $avatar_thumb_img = '<div id="wpua-preview"><img src="'.$avatar_thumb.'" width="32" /></div>';
791
- // Add WPUA to list
792
- $wpua_list = "\n\t<label><input type='radio' name='avatar_default' id='wp_user_avatar_radio' value='wp_user_avatar'$selected_avatar /> ";
793
- $wpua_list .= preg_replace("/src='(.+?)'/", "src='\$1'", $avatar_thumb_img);
794
- $wpua_list .= ' '.__('WP User Avatar', 'wp-user-avatar').'</label>';
795
- $wpua_list .= '<p id="wpua-edit"><button type="button" class="button" id="wpua-add" name="wpua-add">'.__('Edit Image').'</button>';
796
- $wpua_list .= '<a href="#" id="wpua-remove"'.$hide_remove.'>'.__('Remove').'</a></p>';
797
- $wpua_list .= '<input type="hidden" id="wp-user-avatar" name="avatar_default_wp_user_avatar" value="'.$wpua_avatar_default.'">';
798
- $wpua_list .= '<p id="wpua-message">'.sprintf(__('Click %s to save your changes', 'wp-user-avatar'), '&ldquo;'.__('Save Changes').'&rdquo;').'</p>';
799
- if((bool) $wpua_disable_gravatar != 1){
800
- return $wpua_list.'<div id="wp-avatars">'.$avatar_list.'</div>';
801
- } else {
802
- return $wpua_list;
803
- }
804
- }
805
- add_filter('default_avatar_select', 'wpua_add_default_avatar', 10);
806
-
807
- // Add default avatar_default to whitelist
808
- function wpua_whitelist_options($whitelist_options){
809
- $whitelist_options['discussion'][] = 'avatar_default_wp_user_avatar';
810
- return $whitelist_options;
811
- }
812
- add_filter('whitelist_options', 'wpua_whitelist_options', 10);
813
-
814
- // Add media state
815
- function wpua_add_media_state($media_states){
816
- global $post, $wpua_avatar_default;
817
- $is_wpua = get_post_custom_values('_wp_attachment_wp_user_avatar', $post->ID);
818
- if(!empty($is_wpua)){
819
- $media_states[] = __('Avatar');
820
- }
821
- if(!empty($wpua_avatar_default) && ($wpua_avatar_default == $post->ID)){
822
- $media_states[] = __('Default Avatar');
823
- }
824
- return apply_filters('wpua_add_media_state', $media_states);
825
- }
826
- add_filter('display_media_states', 'wpua_add_media_state', 10, 1);
827
-
828
- // Check if image is used as WPUA
829
- function wpua_image($attachment_id, $user_id, $wpua_image=false){
830
- global $wpdb;
831
- $wpua = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = %s AND meta_value != %d", $attachment_id, '_wp_attachment_wp_user_avatar', $user_id));
832
- if(!empty($wpua)){
833
- $wpua_image = true;
834
- }
835
- return $wpua_image;
836
- }
837
-
838
- // Check who owns image
839
- function wpua_author($attachment_id, $user_id, $wpua_author=false){
840
- $attachment = get_post($attachment_id);
841
- if(!empty($attachment) && $attachment->post_author == $user_id){
842
- $wpua_author = true;
843
- }
844
- return $wpua_author;
845
- }
846
-
847
- // Admin page
848
- function wpua_options_page(){
849
- global $show_avatars, $upload_size_limit_with_units, $wpua_allow_upload, $wpua_disable_gravatar, $wpua_edit_avatar, $wpua_tinymce, $wpua_upload_size_limit, $wpua_upload_size_limit_with_units;
850
- // Give subscribers edit_posts capability
851
- if(isset($_GET['settings-updated']) && $_GET['settings-updated'] == 'true' && (empty($wpua_allow_upload) || empty($wpua_edit_avatar))){
852
- wpua_subscriber_remove_cap();
853
- }
854
- $hide_size = (bool) $wpua_allow_upload != 1 ? ' class="wpua-hide"' : "";
855
- ?>
856
- <div class="wrap">
857
- <?php screen_icon(); ?>
858
- <h2><?php _e('WP User Avatar', 'wp-user-avatar'); ?></h2>
859
- <form method="post" action="options.php">
860
- <?php settings_fields('wpua-settings-group'); ?>
861
- <?php do_settings_fields('wpua-settings-group', ""); ?>
862
- <table class="form-table">
863
- <tr valign="top">
864
- <th scope="row"><?php _e('Settings'); ?></th>
865
- <td>
866
- <fieldset>
867
- <legend class="screen-reader-text"><span><?php _e('Settings'); ?></span></legend>
868
- <label for="wp_user_avatar_tinymce">
869
- <input name="wp_user_avatar_tinymce" type="checkbox" id="wp_user_avatar_tinymce" value="1" <?php checked($wpua_tinymce, 1); ?> />
870
- <?php _e('Add avatar button to Visual Editor', 'wp-user-avatar'); ?>
871
- </label>
872
- <br />
873
- <label for="wp_user_avatar_allow_upload">
874
- <input name="wp_user_avatar_allow_upload" type="checkbox" id="wp_user_avatar_allow_upload" value="1" <?php checked($wpua_allow_upload, 1); ?> />
875
- <?php _e('Allow Contributors & Subscribers to upload avatars', 'wp-user-avatar'); ?>
876
- </label>
877
- <br />
878
- <label for="wp_user_avatar_disable_gravatar">
879
- <input name="wp_user_avatar_disable_gravatar" type="checkbox" id="wp_user_avatar_disable_gravatar" value="1" <?php checked($wpua_disable_gravatar, 1); ?> />
880
- <?php _e('Disable Gravatar and use only local avatars', 'wp-user-avatar'); ?>
881
- </label>
882
- </fieldset>
883
- </td>
884
- </tr>
885
- <tr id="wpua-size-limit" valign="top"<?php echo $hide_size; ?>>
886
- <th scope="row">
887
- <label for="wp_user_avatar_upload_size_limit">
888
- <?php _e('Upload Size Limit (only for Contributors & Subscribers)', 'wp-user-avatar'); ?>
889
- </label>
890
- </th>
891
- <td>
892
- <fieldset>
893
- <legend class="screen-reader-text"><span><?php _e('Upload Size Limit (only for Contributors & Subscribers)', 'wp-user-avatar'); ?></span></legend>
894
- <input name="wp_user_avatar_upload_size_limit" type="text" id="wp_user_avatar_upload_size_limit" value="<?php echo $wpua_upload_size_limit; ?>" class="regular-text" />
895
- <span id="wpua-readable-size"><?php echo $wpua_upload_size_limit_with_units; ?></span>
896
- <span id="wpua-readable-size-error"><?php printf(__('%s exceeds the maximum upload size for this site.'), ""); ?></span>
897
- <div id="wpua-slider"></div>
898
- <span class="description"><?php printf(__('Maximum upload file size: %d%s.'), esc_html(wp_max_upload_size()), esc_html(' bytes ('.$upload_size_limit_with_units.')')); ?></span>
899
- <br />
900
- <label for="wp_user_avatar_edit_avatar">
901
- <input name="wp_user_avatar_edit_avatar" type="checkbox" id="wp_user_avatar_edit_avatar" value="1" <?php checked($wpua_edit_avatar, 1); ?> />
902
- <?php _e('Allow users to edit avatars', 'wp-user-avatar'); ?>
903
- </label>
904
- </fieldset>
905
- </td>
906
- </tr>
907
- </table>
908
- <h3 class="title"><?php _e('Avatars'); ?></h3>
909
- <p><?php _e('An avatar is an image that follows you from weblog to weblog appearing beside your name when you comment on avatar enabled sites. Here you can enable the display of avatars for people who comment on your site.'); ?></p>
910
- <table class="form-table">
911
- <tr valign="top">
912
- <th scope="row"><?php _e('Avatar Display'); ?></th>
913
- <td>
914
- <fieldset>
915
- <legend class="screen-reader-text"><span><?php _e('Avatar Display'); ?></span></legend>
916
- <label for="show_avatars">
917
- <input type="checkbox" id="show_avatars" name="show_avatars" value="1" <?php checked($show_avatars, 1); ?> />
918
- <?php _e('Show Avatars'); ?>
919
- </label>
920
- </fieldset>
921
- </td>
922
- </tr>
923
- <tr valign="top">
924
- <th scope="row"><?php _e('Maximum Rating'); ?></th>
925
- <td>
926
- <fieldset>
927
- <legend class="screen-reader-text"><span><?php _e('Maximum Rating'); ?></span></legend>
928
- <?php
929
- $ratings = array(
930
- 'G' => __('G &#8212; Suitable for all audiences'),
931
- 'PG' => __('PG &#8212; Possibly offensive, usually for audiences 13 and above'),
932
- 'R' => __('R &#8212; Intended for adult audiences above 17'),
933
- 'X' => __('X &#8212; Even more mature than above')
934
- );
935
- foreach ($ratings as $key => $rating) :
936
- $selected = (get_option('avatar_rating') == $key) ? 'checked="checked"' : "";
937
- echo "\n\t<label><input type='radio' name='avatar_rating' value='" . esc_attr($key) . "' $selected/> $rating</label><br />";
938
- endforeach;
939
- ?>
940
- </fieldset>
941
- </td>
942
- </tr>
943
- <tr valign="top">
944
- <th scope="row"><?php _e('Default Avatar') ?></th>
945
- <td class="defaultavatarpicker">
946
- <fieldset>
947
- <legend class="screen-reader-text"><span><?php _e('Default Avatar'); ?></span></legend>
948
- <?php _e('For users without a custom avatar of their own, you can either display a generic logo or a generated one based on their e-mail address.'); ?><br />
949
- <?php echo wpua_add_default_avatar(); ?>
950
- </fieldset>
951
- </td>
952
- </tr>
953
- </table>
954
- <?php submit_button(); ?>
955
- </form>
956
- </div>
957
- <?php
958
- }
959
-
960
- // Whitelist settings
961
- function wpua_admin_settings(){
962
- register_setting('wpua-settings-group', 'avatar_rating');
963
- register_setting('wpua-settings-group', 'avatar_default');
964
- register_setting('wpua-settings-group', 'avatar_default_wp_user_avatar', 'intval');
965
- register_setting('wpua-settings-group', 'show_avatars', 'intval');
966
- register_setting('wpua-settings-group', 'wp_user_avatar_tinymce', 'intval');
967
- register_setting('wpua-settings-group', 'wp_user_avatar_allow_upload', 'intval');
968
- register_setting('wpua-settings-group', 'wp_user_avatar_disable_gravatar', 'intval');
969
- register_setting('wpua-settings-group', 'wp_user_avatar_edit_avatar', 'intval');
970
- register_setting('wpua-settings-group', 'wp_user_avatar_upload_size_limit', 'intval');
971
- }
972
-
973
- // Add options page and settings
974
- function wpua_admin(){
975
- add_options_page(__('WP User Avatar', 'wp-user-avatar'), __('WP User Avatar', 'wp-user-avatar'), 'manage_options', 'wp-user-avatar', 'wpua_options_page');
976
- add_action('admin_init', 'wpua_admin_settings');
977
- }
978
-
979
- // Initialize WPUA after other plugins are loaded
980
- function wpua_load(){
981
- global $wpua_instance;
982
- $wpua_instance = new wp_user_avatar();
983
- }
984
- add_action('plugins_loaded', 'wpua_load');
985
- }
986
- ?>
1
  <?php
2
  /**
3
  * @package WP User Avatar
4
+ * @version 1.8.5
5
  */
6
+
7
  /*
8
  Plugin Name: WP User Avatar
9
  Plugin URI: http://wordpress.org/plugins/wp-user-avatar/
10
  Description: Use any image from your WordPress Media Library as a custom user avatar. Add your own Default Avatar.
11
  Author: Bangbay Siboliban
12
  Author URI: http://siboliban.org/
13
+ Version: 1.8.5
14
  Text Domain: wp-user-avatar
15
  Domain Path: /lang/
16
  */
20
  @header('Content-Type:'.get_option('html_type').';charset='.get_option('blog_charset'));
21
  }
22
 
23
+ // Define paths
24
+ define('WPUA_VERSION', '1.8.5');
25
  define('WPUA_FOLDER', basename(dirname(__FILE__)));
26
+ define('WPUA_DIR', plugin_dir_path(__FILE__));
27
+ define('WPUA_INC', WPUA_DIR.'includes'.'/');
28
+ define('WPUA_URL', plugin_dir_url(WPUA_FOLDER).WPUA_FOLDER.'/');
29
+ define('WPUA_INC_URL', WPUA_URL.'includes'.'/');
30
+
31
+ // WordPress includes used in plugin
32
+ require_once(ABSPATH.'wp-admin/includes/file.php');
33
+ require_once(ABSPATH.'wp-admin/includes/image.php');
34
+ require_once(ABSPATH.'wp-admin/includes/media.php');
35
+ require_once(ABSPATH.'wp-admin/includes/screen.php');
36
+ require_once(ABSPATH.'wp-admin/includes/template.php');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
 
38
  // WP User Avatar
39
+ require_once(WPUA_INC.'wpua-globals.php');
40
+ require_once(WPUA_INC.'wpua-functions.php');
41
+ require_once(WPUA_INC.'class-wp-user-avatar.php');
42
+ require_once(WPUA_INC.'class-wp-user-avatar-admin.php');
43
+ require_once(WPUA_INC.'class-wp-user-avatar-shortcode.php');
44
+ require_once(WPUA_INC.'class-wp-user-avatar-subscriber.php');
45
+ require_once(WPUA_INC.'class-wp-user-avatar-update.php');