WP User Avatar - Version 1.8.4

Version Description

  • Bug Fix: Set avatar post parent to 0
Download this release

Release Info

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

Code changes from version 1.5.4 to 1.8.4

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.4
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.4
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+)#x2F;', 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.4
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>#x2F;', "", $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.4
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.4
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,272 @@
1
+ <?php
2
+ /**
3
+ * Defines all profile and upload settings.
4
+ *
5
+ * @package WP User Avatar
6
+ * @version 1.8.4
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((current_user_can('publish_posts') && current_user_can('upload_files')) || ((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((!current_user_can('publish_posts') && !current_user_can('upload_files'))) {
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, $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((current_user_can('publish_posts') && current_user_can('upload_files'))) {
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((current_user_can('publish_posts') && current_user_can('upload_files'))) : // 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((!current_user_can('publish_posts') && !current_user_can('upload_files')) && !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 && (!current_user_can('publish_posts') && !current_user_can('upload_files')) && 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)#x2F;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((current_user_can('publish_posts') && current_user_can('upload_files'))) {
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)#x2F;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
+
267
+ // Initialize WP_User_Avatar
268
+ function wpua_init() {
269
+ global $wp_user_avatar;
270
+ $wp_user_avatar = new WP_User_Avatar();
271
+ }
272
+ 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.4"}}});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.4
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.4
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.4
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.4
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.4
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_use