Plugin Directory

Changeset 864355


Ignore:
Timestamp:
02/24/2014 10:37:05 PM (12 years ago)
Author:
bangbay
Message:

Refactor plugin into classes; add Media Library view; add front page uploader.

Location:
wp-user-avatar/trunk
Files:
12 added
1 deleted
18 edited

Legend:

Unmodified
Added
Removed
  • wp-user-avatar/trunk/includes/tinymce/editor_plugin.js

    r841199 r864355  
    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:330,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/extend/plugins/wp-user-avatar/',version:"1.7.2"}}});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"}}});tinymce.PluginManager.add('wpUserAvatar',tinymce.plugins.wpUserAvatar)})();
  • wp-user-avatar/trunk/includes/tinymce/window.php

    r841199 r864355  
    11<?php
    22/**
     3 * TinyMCE modal window.
     4 *
    35 * @package WP User Avatar
    4  * @version 1.7.2
     6 * @version 1.8
    57 */
    68
    7 if(!defined('ABSPATH')){
     9if(!defined('ABSPATH')) {
    810  die(__('You are not allowed to call this page directly.'));
    911  @header('Content-Type:'.get_option('html_type').';charset='.get_option('blog_charset'));
    1012}
    1113?>
    12 <html xmlns="http://www.w3.org/1999/xhtml">
     14<!DOCTYPE html>
     15<html>
    1316<head>
    1417  <title><?php _e('WP User Avatar', 'wp-user-avatar'); ?></title>
     
    1619  <base target="_self" />
    1720  <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>
    1824  <script type="text/javascript" src="<?php echo site_url(); ?>/wp-includes/js/tinymce/tiny_mce_popup.js"></script>
    1925  <script type="text/javascript" src="<?php echo site_url(); ?>/wp-includes/js/tinymce/utils/form_utils.js"></script>
    2026  <script type="text/javascript">
    21     function wpuaInsertAvatar(){
     27    function wpuaInsertAvatar() {
    2228      // Custom shortcode values
    2329      var shortcode, closing_tag;
     
    4450      shortcode = "<p>[avatar" + user_tag + size_tag + align_tag + link_tag + target_tag + closing_tag + "</p>";
    4551
    46       if(window.tinyMCE){
     52      if(window.tinyMCE) {
    4753        window.tinyMCE.execInstanceCommand(window.tinyMCE.activeEditor.id, 'mceInsertContent', false, shortcode);
    4854        tinyMCEPopup.editor.execCommand('mceRepaint');
     
    5157      return;
    5258    }
    53     jQuery(function($){
    54       $('#wp_user_avatar_link').change(function(){
     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() {
    5572        $('#wp_user_avatar_link_external_section').toggle($('#wp_user_avatar_link').val() == 'custom-url');
    5673      });
    57       $('#wp_user_avatar_size').change(function(){
     74      $('#wp_user_avatar_size').change(function() {
    5875        $('#wp_user_avatar_size_number_section').toggle($('#wp_user_avatar_size').val() == 'custom');
    5976      });
     77      $('#wpua-tabs').tabs();
    6078    });
    6179  </script>
    6280  <style type="text/css">
    63     form { background: #fff; border: 1px solid #eee; }
     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; }
    6486    p, h4 { margin: 0; padding: 12px 0 0; }
    6587    h4.center { text-align: center; }
     
    7193</head>
    7294<body id="link" class="wp-core-ui" onload="document.body.style.display='';" style="display:none;">
    73   <form name="wpUserAvatar" action="#">
    74     <p>
    75       <label for="<?php esc_attr_e('wp_user_avatar_user'); ?>"><strong><?php _e('User Name'); ?>:</strong></label>
    76       <select id="<?php esc_attr_e('wp_user_avatar_user'); ?>" name="<?php esc_attr_e('wp_user_avatar_user'); ?>">
    77         <option value=""></option>
    78         <?php $users = get_users(); foreach($users as $user) : ?>
    79           <option value="<?php echo $user->user_login; ?>"><?php echo $user->display_name; ?></option>
    80         <?php endforeach; ?>
    81       </select>
    82     </p>
     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>
    83111
    84     <p>
    85       <label for="<?php esc_attr_e('wp_user_avatar_size'); ?>"><strong><?php _e('Size'); ?>:</strong></label>
    86       <select id="<?php esc_attr_e('wp_user_avatar_size'); ?>" name="<?php esc_attr_e('wp_user_avatar_size'); ?>">
    87         <option value=""></option>
    88         <option value="original"><?php _e('Original Size'); ?></option>
    89         <option value="large"><?php _e('Large'); ?></option>
    90         <option value="medium"><?php _e('Medium'); ?></option>
    91         <option value="thumbnail"><?php _e('Thumbnail'); ?></option>
    92         <option value="custom"><?php _e('Custom'); ?></option>
    93       </select>
    94     </p>
     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>
    95123
    96     <p id="<?php esc_attr_e('wp_user_avatar_size_number_section'); ?>">
    97       <label for="<?php esc_attr_e('wp_user_avatar_size_number'); ?>"><?php _e('Size'); ?></label>
    98       <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="" />
    99     </p>
     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>
    100128
    101     <p>
    102       <label for="<?php esc_attr_e('wp_user_avatar_align'); ?>"><strong><?php _e('Alignment'); ?>:</strong></label>
    103       <select id="<?php esc_attr_e('wp_user_avatar_align'); ?>" name="<?php esc_attr_e('wp_user_avatar_align'); ?>">
    104         <option value=""></option>
    105         <option value="center"><?php _e('Center'); ?></option>
    106         <option value="left"><?php _e('Left'); ?></option>
    107         <option value="right"><?php _e('Right'); ?></option>
    108       </select>
    109     </p>
     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>
    110138
    111     <p>
    112       <label for="<?php esc_attr_e('wp_user_avatar_link'); ?>"><strong><?php _e('Link To'); ?>:</strong></label>
    113       <select id="<?php esc_attr_e('wp_user_avatar_link'); ?>" name="<?php esc_attr_e('wp_user_avatar_link'); ?>">
    114         <option value=""></option>
    115         <option value="file"><?php _e('Image File'); ?></option>
    116         <option value="attachment"><?php _e('Attachment Page'); ?></option>
    117         <option value="custom-url"><?php _e('Custom URL'); ?></option>
    118       </select>
    119     </p>
     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>
    120148
    121     <p id="<?php esc_attr_e('wp_user_avatar_link_external_section'); ?>">
    122       <label for="<?php esc_attr_e('wp_user_avatar_link_external'); ?>"><?php _e('URL'); ?></label>
    123       <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="" />
    124     </p>
     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>
    125153
    126     <p>
    127       <label for="<?php esc_attr_e('wp_user_avatar_target'); ?>"></label>
    128       <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>
    129     </p>
     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>
    130158
    131     <p>
    132       <label for="<?php esc_attr_e('wp_user_avatar_caption'); ?>"><strong><?php _e('Caption'); ?></strong></label>
    133       <textarea cols="36" rows="2" id="<?php esc_attr_e('wp_user_avatar_caption'); ?>" name="<?php esc_attr_e('wp_user_avatar_size'); ?>"></textarea>
    134     </p>
     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>
    135163
    136     <div class="mceActionPanel">
    137       <input type="submit" id="insert" class="button-primary" name="insert" value="<?php _e('Insert into Post'); ?>" onclick="wpuaInsertAvatar();" />
    138     </div>
    139   </form>
     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>
    140180</body>
    141181</html>
  • wp-user-avatar/trunk/js/wp-user-avatar-admin.js

    r839423 r864355  
    1 jQuery(function($){
     1jQuery(function($) {
    22  // Show size info only if allow uploads is checked
    3   $('#wp_user_avatar_allow_upload').change(function(){
     3  $('#wp_user_avatar_allow_upload').change(function() {
    44    $('#wpua-contributors-subscribers').slideToggle($('#wp_user_avatar_allow_upload').is(':checked'));
    55  });
    66  // Show resize info only if resize uploads is checked
    7   $('#wp_user_avatar_resize_upload').change(function(){
     7  $('#wp_user_avatar_resize_upload').change(function() {
    88     $('#wpua-resize-sizes').slideToggle($('#wp_user_avatar_resize_upload').is(':checked'));
    99  });
    1010  // Hide Gravatars if disable Gravatars is checked
    11   $('#wp_user_avatar_disable_gravatar').change(function(){
    12     if($('#wp-avatars').length){
    13       $('#wp-avatars').slideToggle(!$('#wp_user_avatar_disable_gravatar').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'));
    1414      $('#wp_user_avatar_radio').trigger('click');
    15     } else {
    16       $('#wpua-message').show();
    1715    }
    1816  });
     
    2321    max: parseInt(wpua_admin.max_upload_size),
    2422    step: 1,
    25     slide: function(event, ui){
     23    slide: function(event, ui) {
    2624      $('#wp_user_avatar_upload_size_limit').val(ui.value);
    2725      $('#wpua-readable-size').html(Math.floor(ui.value / 1024) + 'KB');
     
    3129  });
    3230  // Update readable size on keyup
    33   $('#wp_user_avatar_upload_size_limit').keyup(function(){
     31  $('#wp_user_avatar_upload_size_limit').keyup(function() {
    3432    var wpuaUploadSizeLimit = $(this).val();
    3533    wpuaUploadSizeLimit = wpuaUploadSizeLimit.replace(/\D/g, '');
  • wp-user-avatar/trunk/js/wp-user-avatar-user.js

    r839423 r864355  
    1 jQuery(function($){
     1jQuery(function($) {
    22  // Add enctype to form with JavaScript as backup
    33  $('#your-profile').attr('enctype', 'multipart/form-data');
     
    77  var wpuaSrc = $('#wpua-preview').find('img').attr('src');
    88  // Remove WP User Avatar
    9   $('body').on('click', '#wpua-remove', function(e){
     9  $('body').on('click', '#wpua-remove', function(e) {
    1010    e.preventDefault();
    1111    $('#wpua-original').remove();
     
    1515    $('#wpua-original').attr('src', wpua_custom.avatar_thumb);
    1616    $('#wp-user-avatar').val("");
    17     $('#wpua-message, #wpua-original, #wpua-undo-button').show();
     17    $('#wpua-original, #wpua-undo-button').show();
    1818    $('#wp_user_avatar_radio').trigger('click');
    1919  });
    2020  // Undo WP User Avatar
    21   $('body').on('click', '#wpua-undo', function(e){
     21  $('body').on('click', '#wpua-undo', function(e) {
    2222    e.preventDefault();
    2323    $('#wpua-original').remove();
    24     $('#wpua-message, #wpua-undo-button').hide();
     24    $('#wpua-undo-button').hide();
    2525    $('#wpua-remove-button, #wpua-thumbnail').show();
    2626    $('#wpua-preview').find('img:first').attr('src', wpuaSrc).show();
  • wp-user-avatar/trunk/js/wp-user-avatar.js

    r839423 r864355  
    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,{}))
     1eval(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,{}))
  • wp-user-avatar/trunk/lang/wp-user-avatar-de_DE.po

    r841199 r864355  
    55msgid ""
    66msgstr ""
    7 "Project-Id-Version: WP User Avatar 1.7.2\n"
     7"Project-Id-Version: WP User Avatar 1.8\n"
    88"Report-Msgid-Bugs-To: http://wordpress.org/plugins/wp-user-avatar/\n"
    9 "PO-Revision-Date: 2014-01-16 00:00-0000\n"
     9"PO-Revision-Date: 2014-02-23 00:00-0000\n"
    1010"Language: de_DE\n"
    1111"Last-Translator: WP User Avatar\n"
     
    1515"Content-Transfer-Encoding: 8bit\n"
    1616
    17 #: wp-user-avatar.php:318
     17#: includes/class-wp-user-avatar-admin.php:175
     18msgid "Donate"
     19msgstr "Spenden"
     20
     21#: includes/wpua-functions.php:279
    1822msgid "Do you like WP User Avatar?"
    1923msgstr "Bist Du mit WP-Benutzer-Avatar zufrieden?"
    2024
    21 #: wp-user-avatar.php:318
     25#: includes/wpua-functions.php:279
    2226msgid "Make a donation."
    2327msgstr "Spenden"
    2428
    25 #: wp-user-avatar.php:411
    26 #: wp-user-avatar.php:925
    27 msgid "Click %s to save your changes"
    28 msgstr "Klicken Sie %s, um Ihre Änderungen zu speichern"
    29 
    30 #: wp-user-avatar.php:536
    31 msgid "Donate"
    32 msgstr "Spenden"
    33 
    34 #: wp-user-avatar.php:999
     29#: includes/wpua-options-page.php:40
    3530msgid "Add avatar button to Visual Editor"
    3631msgstr "Einen Avatar-Knopf zum WYSIWYG-Editor hinzufügen"
    3732
    38 #: wp-user-avatar.php:1005
     33#: includes/wpua-options-page.php:46
    3934msgid "Allow Contributors & Subscribers to upload avatars"
    4035msgstr "Mitarbeiter und Abonnenten erlauben, Avatare hochzuladen"
    4136
    42 #: wp-user-avatar.php:1011
     37#: includes/wpua-options-page.php:52
    4338msgid "Disable Gravatar and use only local avatars"
    4439msgstr "Gravatar deaktivieren und nur lokale Avatare verwenden"
    4540
    46 #: wp-user-avatar.php:1022
    47 #: wp-user-avatar.php:1027
     41#: includes/wpua-options-page.php:63
     42#: includes/wpua-options-page.php:68
    4843msgid "Upload Size Limit"
    4944msgstr "Dateigrößenbeschränkung"
    5045
    51 #: wp-user-avatar.php:1022
    52 #: wp-user-avatar.php:1027
     46#: includes/wpua-options-page.php:63
     47#: includes/wpua-options-page.php:68
    5348msgid "(only for Contributors & Subscribers)"
    5449msgstr "(nur für Mitarbeiter und Abonnenten)"
    5550
    56 #: wp-user-avatar.php:1037
     51#: includes/wpua-options-page.php:78
    5752msgid "Allow users to edit avatars"
    5853msgstr "Benutzer erlauben, Avatare bearbeiten"
    5954
    60 #: wp-user-avatar.php:1043
     55#: includes/wpua-options-page.php:84
    6156msgid "Resize avatars on upload"
    6257msgstr "Resize Avatare beim Upload"
    6358
    64 #: wp-user-avatar.php:1055
     59#: includes/wpua-options-page.php:96
    6560msgid "Crop avatars to exact dimensions"
    6661msgstr "Avatare auf exakte Größe beschneiden"
  • wp-user-avatar/trunk/lang/wp-user-avatar-es_ES.po

    r841199 r864355  
    55msgid ""
    66msgstr ""
    7 "Project-Id-Version: WP User Avatar 1.7.2\n"
     7"Project-Id-Version: WP User Avatar 1.8\n"
    88"Report-Msgid-Bugs-To: http://wordpress.org/plugins/wp-user-avatar/\n"
    9 "PO-Revision-Date: 2014-01-16 00:00-0000\n"
     9"PO-Revision-Date: 2014-02-23 00:00-0000\n"
    1010"Language: es_ES\n"
    1111"Last-Translator: WP User Avatar\n"
     
    1515"Content-Transfer-Encoding: 8bit\n"
    1616
    17 #: wp-user-avatar.php:318
     17#: includes/class-wp-user-avatar-admin.php:175
     18msgid "Donate"
     19msgstr "Donar"
     20
     21#: includes/wpua-functions.php:279
    1822msgid "Do you like WP User Avatar?"
    1923msgstr "¿Está satisfecho con WP-Usuario-Avatar?"
    2024
    21 #: wp-user-avatar.php:318
     25#: includes/wpua-functions.php:279
    2226msgid "Make a donation."
    2327msgstr "Donar"
    2428
    25 #: wp-user-avatar.php:411
    26 #: wp-user-avatar.php:925
    27 msgid "Click %s to save your changes"
    28 msgstr "Haz clic %s para guardar los cambios"
    29 
    30 #: wp-user-avatar.php:536
    31 msgid "Donate"
    32 msgstr "Donar"
    33 
    34 #: wp-user-avatar.php:999
     29#: includes/wpua-options-page.php:40
    3530msgid "Add avatar button to Visual Editor"
    3631msgstr "Añadir botón avatar al editor visual"
    3732
    38 #: wp-user-avatar.php:1005
     33#: includes/wpua-options-page.php:46
    3934msgid "Allow Contributors & Subscribers to upload avatars"
    4035msgstr "Permitir los colaboradores y los suscriptores subir avatares"
    4136
    42 #: wp-user-avatar.php:1011
     37#: includes/wpua-options-page.php:52
    4338msgid "Disable Gravatar and use only local avatars"
    4439msgstr "Desactivar Gravatar y utilizar sólo los avatares locales"
    4540
    46 #: wp-user-avatar.php:1022
    47 #: wp-user-avatar.php:1027
     41#: includes/wpua-options-page.php:63
     42#: includes/wpua-options-page.php:68
    4843msgid "Upload Size Limit"
    4944msgstr "Sube límite de tamaño"
    5045
    51 #: wp-user-avatar.php:1022
    52 #: wp-user-avatar.php:1027
     46#: includes/wpua-options-page.php:63
     47#: includes/wpua-options-page.php:68
    5348msgid "(only for Contributors & Subscribers)"
    5449msgstr "(para colaboradores y suscriptores)"
    5550
    56 #: wp-user-avatar.php:1037
     51#: includes/wpua-options-page.php:78
    5752msgid "Allow users to edit avatars"
    5853msgstr "Permitir a los usuarios editar avatar"
    5954
    60 #: wp-user-avatar.php:1043
     55#: includes/wpua-options-page.php:84
    6156msgid "Resize avatars on upload"
    6257msgstr "Cambiar el tamaño de avatares en carga"
    6358
    64 #: wp-user-avatar.php:1055
     59#: includes/wpua-options-page.php:96
    6560msgid "Crop avatars to exact dimensions"
    6661msgstr "Recortar los avatares a sus dimensiones exactas"
  • wp-user-avatar/trunk/lang/wp-user-avatar-fr_FR.po

    r841199 r864355  
    55msgid ""
    66msgstr ""
    7 "Project-Id-Version: WP User Avatar 1.7.2\n"
     7"Project-Id-Version: WP User Avatar 1.8\n"
    88"Report-Msgid-Bugs-To: http://wordpress.org/plugins/wp-user-avatar/\n"
    9 "PO-Revision-Date: 2014-01-16 00:00-0000\n"
     9"PO-Revision-Date: 2014-02-23 00:00-0000\n"
    1010"Language: fr_FR\n"
    1111"Last-Translator: WP User Avatar\n"
     
    1515"Content-Transfer-Encoding: 8bit\n"
    1616
    17 #: wp-user-avatar.php:318
     17#: includes/class-wp-user-avatar-admin.php:175
     18msgid "Donate"
     19msgstr "Faites un don"
     20
     21#: includes/wpua-functions.php:279
    1822msgid "Do you like WP User Avatar?"
    1923msgstr "Etes-vous satisfait avec WP-Utilisateur-Avatar?"
    2024
    21 #: wp-user-avatar.php:318
     25#: includes/wpua-functions.php:279
    2226msgid "Make a donation."
    2327msgstr "Faites un don"
    2428
    25 #: wp-user-avatar.php:411
    26 #: wp-user-avatar.php:925
    27 msgid "Click %s to save your changes"
    28 msgstr "Cliquez sur %s pour enregistrer vos modifications"
    29 
    30 #: wp-user-avatar.php:536
    31 msgid "Donate"
    32 msgstr "Faites un don"
    33 
    34 #: wp-user-avatar.php:999
     29#: includes/wpua-options-page.php:40
    3530msgid "Add avatar button to Visual Editor"
    3631msgstr "Ajouter le bouton avatar sur l'éditeur visuel"
    3732
    38 #: wp-user-avatar.php:1005
     33#: includes/wpua-options-page.php:46
    3934msgid "Allow Contributors & Subscribers to upload avatars"
    4035msgstr "Permettre aux contributeurs et aux abonnés d'envoyer des avatars"
    4136
    42 #: wp-user-avatar.php:1011
     37#: includes/wpua-options-page.php:52
    4338msgid "Disable Gravatar and use only local avatars"
    4439msgstr "Désactiver Gravatar et utiliser les avatars fournis"
    4540
    46 #: wp-user-avatar.php:1022
    47 #: wp-user-avatar.php:1027
     41#: includes/wpua-options-page.php:63
     42#: includes/wpua-options-page.php:68
    4843msgid "Upload Size Limit"
    4944msgstr "Taille limite d'envoi de fichiers"
    5045
    51 #: wp-user-avatar.php:1022
    52 #: wp-user-avatar.php:1027
     46#: includes/wpua-options-page.php:63
     47#: includes/wpua-options-page.php:68
    5348msgid "(only for Contributors & Subscribers)"
    5449msgstr "(pour contributeurs et abonnés)"
    5550
    56 #: wp-user-avatar.php:1037
     51#: includes/wpua-options-page.php:78
    5752msgid "Allow users to edit avatars"
    5853msgstr "Permettre aux utilisateurs de modifier avatar"
    5954
    60 #: wp-user-avatar.php:1043
     55#: includes/wpua-options-page.php:84
    6156msgid "Resize avatars on upload"
    6257msgstr "Redimensionner avatars lors du téléchargement"
    6358
    64 #: wp-user-avatar.php:1037
     59#: includes/wpua-options-page.php:78
    6560msgid "Crop avatars to exact dimensions"
    6661msgstr "Recadrer les avatars pour parvenir aux dimensions exactes"
  • wp-user-avatar/trunk/lang/wp-user-avatar-pl_PL.po

    r841199 r864355  
    55msgid ""
    66msgstr ""
    7 "Project-Id-Version: WP User Avatar 1.7.2\n"
     7"Project-Id-Version: WP User Avatar 1.8\n"
    88"Report-Msgid-Bugs-To: http://wordpress.org/plugins/wp-user-avatar/\n"
    9 "PO-Revision-Date: 2014-01-16 00:00-0000\n"
     9"PO-Revision-Date: 2014-02-23 00:00-0000\n"
    1010"Language: de_DE\n"
    1111"Last-Translator: WP User Avatar\n"
     
    1515"Content-Transfer-Encoding: 8bit\n"
    1616
    17 #: wp-user-avatar.php:318
     17#: includes/class-wp-user-avatar-admin.php:175
     18msgid "Donate"
     19msgstr "Dotuj"
     20
     21#: includes/wpua-functions.php:279
    1822msgid "Do you like WP User Avatar?"
    1923msgstr "Jesteś zadowolony z Wp User Avatar"
    2024
    21 #: wp-user-avatar.php:318
     25#: includes/wpua-functions.php:279
    2226msgid "Make a donation."
    2327msgstr "Dokonaj dotacji"
    2428
    25 #: wp-user-avatar.php:411
    26 #: wp-user-avatar.php:925
    27 msgid "Click %s to save your changes"
    28 msgstr "Kliknij %s, by zachować ustawienia"
    29 
    30 #: wp-user-avatar.php:536
    31 msgid "Donate"
    32 msgstr "Dotuj"
    33 
    34 #: wp-user-avatar.php:999
     29#: includes/wpua-options-page.php:40
    3530msgid "Add avatar button to Visual Editor"
    3631msgstr "Dodaj przycisk avatara do edytora wizualnego"
    3732
    38 #: wp-user-avatar.php:1005
     33#: includes/wpua-options-page.php:46
    3934msgid "Allow Contributors & Subscribers to upload avatars"
    4035msgstr "Pozwalaj kontrybutorom oraz subskrynentom przesyłać awatary"
    4136
    42 #: wp-user-avatar.php:1011
     37#: includes/wpua-options-page.php:52
    4338msgid "Disable Gravatar and use only local avatars"
    4439msgstr "Wyłącz gravatary i używaj tylko lokalnych awatarów"
    4540
    46 #: wp-user-avatar.php:1022
    47 #: wp-user-avatar.php:1027
     41#: includes/wpua-options-page.php:63
     42#: includes/wpua-options-page.php:68
    4843msgid "Upload Size Limit"
    4944msgstr "Limit wielkości pliku"
    5045
    51 #: wp-user-avatar.php:1022
    52 #: wp-user-avatar.php:1027
     46#: includes/wpua-options-page.php:63
     47#: includes/wpua-options-page.php:68
    5348msgid "(only for Contributors & Subscribers)"
    5449msgstr "(tylko dla subskrynentów i kontrybutorów)"
    5550
    56 #: wp-user-avatar.php:1037
     51#: includes/wpua-options-page.php:78
    5752msgid "Allow users to edit avatars"
    5853msgstr "Pozwalaj użytkownikom edytować awatary"
    5954
    60 #: wp-user-avatar.php:1043
     55#: includes/wpua-options-page.php:84
    6156msgid "Resize avatars on upload"
    6257msgstr "Zmieniaj rozmiar po przesłaniu"
    6358
    64 #: wp-user-avatar.php:1055
     59#: includes/wpua-options-page.php:96
    6560msgid "Crop avatars to exact dimensions"
    6661msgstr "Przytnij awatar do dokładnych rozmiarów"
  • wp-user-avatar/trunk/lang/wp-user-avatar-sv_SE.po

    r841199 r864355  
    55msgid ""
    66msgstr ""
    7 "Project-Id-Version: WP User Avatar 1.7.2\n"
     7"Project-Id-Version: WP User Avatar 1.8\n"
    88"Report-Msgid-Bugs-To: http://wordpress.org/plugins/wp-user-avatar/\n"
    9 "PO-Revision-Date: 2014-01-16 00:00-0000\n"
     9"PO-Revision-Date: 2014-02-23 00:00-0000\n"
    1010"Language: sv_SE\n"
    1111"Last-Translator: Mattias Tengblad <[email protected]>\n"
     
    1515"Content-Transfer-Encoding: 8bit\n"
    1616
    17 #: wp-user-avatar.php:318
     17#: includes/class-wp-user-avatar-admin.php:175
     18msgid "Donate"
     19msgstr "Donera"
     20
     21#: includes/wpua-functions.php:279
    1822msgid "Do you like WP User Avatar?"
    1923msgstr "Är du nöjd med Visningsbild (avatar)?"
    2024
    21 #: wp-user-avatar.php:318
     25#: includes/wpua-functions.php:279
    2226msgid "Make a donation."
    2327msgstr "Donera"
    2428
    25 #: wp-user-avatar.php:411
    26 #: wp-user-avatar.php:925
    27 msgid "Click %s to save your changes"
    28 msgstr "Klicka på %s för att spara dina ändringar"
    29 
    30 #: wp-user-avatar.php:536
    31 msgid "Donate"
    32 msgstr "Donera"
    33 
    34 #: wp-user-avatar.php:999
     29#: includes/wpua-options-page.php:40
    3530msgid "Add avatar button to Visual Editor"
    3631msgstr "Lägg till knapp för avatarer i den visuella redigeraren"
    3732
    38 #: wp-user-avatar.php:1005
     33#: includes/wpua-options-page.php:46
    3934msgid "Allow Contributors & Subscribers to upload avatars"
    4035msgstr "Tillåt medarbetare & prenumeranter att ladda upp avatarer"
    4136
    42 #: wp-user-avatar.php:1011
     37#: includes/wpua-options-page.php:52
    4338msgid "Disable Gravatar and use only local avatars"
    4439msgstr "Inaktivera Gravatar och använd endast lokala avatarer"
    4540
    46 #: wp-user-avatar.php:1022
    47 #: wp-user-avatar.php:1027
     41#: includes/wpua-options-page.php:63
     42#: includes/wpua-options-page.php:68
    4843msgid "Upload Size Limit"
    4944msgstr "Storleksgräns för uppladdningar"
    5045
    51 #: wp-user-avatar.php:1022
    52 #: wp-user-avatar.php:1027
     46#: includes/wpua-options-page.php:63
     47#: includes/wpua-options-page.php:68
    5348msgid "(only for Contributors & Subscribers)"
    5449msgstr "(endast för medarbetare & prenumeranter)"
    5550
    56 #: wp-user-avatar.php:1037
     51#: includes/wpua-options-page.php:78
    5752msgid "Allow users to edit avatars"
    5853msgstr "Tillåt användare att redigera avatarer"
    5954
    60 #: wp-user-avatar.php:1043
     55#: includes/wpua-options-page.php:84
    6156msgid "Resize avatars on upload"
    6257msgstr "Ändra storlek på avatarer på uppladdning"
    6358
    64 #: wp-user-avatar.php:1055
     59#: includes/wpua-options-page.php:96
    6560msgid "Crop avatars to exact dimensions"
    6661msgstr "Beskär avatarer till exakta dimensioner"
  • wp-user-avatar/trunk/readme.txt

    r842810 r864355  
    44Donate link: http://siboliban.org/donate
    55Tags: 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.8
    8 Stable tag: 1.7.2
     6Requires at least: 3.6
     7Tested up to: 3.8.1
     8Stable tag: 1.8
    99License: GPLv2 or later
    1010License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    2121* Show the user's [Gravatar](http://gravatar.com/) avatar or Default Avatar if the user doesn't have a WP User Avatar image.
    2222* 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.
     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.
    2425* Allow Contributors and Subscribers to upload their own avatars.
    2526* Limit upload file size and image dimensions for Contributors and Subscribers.
     
    33345. Upload your own Default Avatar in your WP User Avatar settings (optional). You can also allow Contributors & Subscribers to upload avatars and disable Gravatar.
    34356. 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.
     367. 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.
    3637
    3738**Example Usage**
     
    9091
    9192**Other Available Functions**
     93
     94= [avatar_upload] shortcode =
     95
     96You 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/).
    9297
    9398= [avatar] shortcode =
     
    178183For 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.
    179184
     185= Can I use the WP User Avatar uploader in a front page? =
     186
     187Yes, 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
    180189= Can I insert WP User Avatar directly into a post? =
    181190
     
    261270Then, 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:
    262271
    263 `function my_avatar_filter(){
     272`function my_avatar_filter() {
    264273  // Remove from show_user_profile hook
    265274  remove_action('show_user_profile', array('wp_user_avatar', 'wpua_action_show_user_profile'));
    266   remove_action('show_user_profile', array('wp_user_avatar', 'wpua_media_upload_scripts'));
    267275
    268276  // Remove from edit_user_profile hook
    269277  remove_action('edit_user_profile', array('wp_user_avatar', 'wpua_action_show_user_profile'));
    270   remove_action('edit_user_profile', array('wp_user_avatar', 'wpua_media_upload_scripts'));
    271278
    272279  // Add to edit_user_avatar hook
    273280  add_action('edit_user_avatar', array('wp_user_avatar', 'wpua_action_show_user_profile'));
    274   add_action('edit_user_avatar', array('wp_user_avatar', 'wpua_media_upload_scripts'));
    275281}
     282
    276283// Loads only outside of administration panel
    277 if(!is_admin()){
    278   add_action('plugins_loaded','my_avatar_filter');
     284if(!is_admin()) {
     285  add_action('init','my_avatar_filter');`
    279286}`
    280287
     
    306313        <button type="button" class="button" id="wpua-undo" name="wpua-undo">Undo</button>
    307314      </p>
    308       <p id="wpua-message">
    309         Click &ldquo;Update Profile&rdquo; to save your changes
    310       </p>
    311315    </td>
    312316  </tr>
     
    320324To add your own wrapper, you could create something like this:
    321325
    322 `function my_before_avatar(){
     326`function my_before_avatar() {
    323327  echo '<div id="my-avatar">';
    324328}
    325329add_action('wpua_before_avatar', 'my_before_avatar');
    326330
    327 function my_after_avatar(){
     331function my_after_avatar() {
    328332  echo '</div>';
    329333}
     
    351355    <button type="button" class="button" id="wpua-undo" name="wpua-undo">Undo</button>
    352356  </p>
    353   <p id="wpua-message">
    354     Click &ldquo;Update Profile&rdquo; to save your changes
    355   </p>
    356357</div>`
    357358
     
    3623633. WP User Avatar adds a field to your profile edit page.
    3633644. After you've chosen a WP User Avatar image, you will see the option to remove it.
    364 5. WP User Avatar adds a button to insert the [avatar] shortcode in the Visual Editor.
    365 6. Options for the [avatar] shortcode.
    366365
    367366== Changelog ==
     367
     368= 1.8 =
     369* Add: Front page uploader
     370* Add: Media Library view of all avatars
     371* Bug Fix: Identify public static functions
     372* Update: Refactor code into separate classes
     373* Update: Translations
    368374
    369375= 1.7.2 =
     
    477483
    478484= 1.3.4 =
    479 * Update: Change support only to WP 3.3+ because of jQuery 1.7.2.1 support
     485* Update: Change support only to WP 3.3+ because of jQuery 1.8.1 support
    480486
    481487= 1.3.3 =
     
    524530* Add: Default Avatar setting
    525531
    526 = 1.1.7.2 =
     532= 1.1.8 =
    527533* Bug Fix: Change update_usermeta to update_user_meta
    528534
     
    568574== Upgrade Notice ==
    569575
     576= 1.8 =
     577* New Feature: Front page uploader
     578* New Feature: Media Library view of all avatars
     579
    570580= 1.5.3 =
    571581* 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.
  • wp-user-avatar/trunk/uninstall.php

    r841199 r864355  
    22/**
    33 * @package WP User Avatar
    4  * @version 1.7.2
     4 * @version 1.8
    55 */
    66
    77// Remove user metadata and options on plugin delete
    8 if(!defined('WP_UNINSTALL_PLUGIN')){
     8if(!defined('WP_UNINSTALL_PLUGIN')) {
    99  die(__('You are not allowed to call this page directly.'));
    1010}
     
    1212global $wpdb, $blog_id, $switched;
    1313$users = get_users();
     14
    1415// Remove settings for all sites in multisite
    15 if(is_multisite()){
     16if(is_multisite()) {
    1617  $blogs = $wpdb->get_results("SELECT * FROM $wpdb->blogs");
    17   foreach($users as $user){
    18     foreach($blogs as $blog){
     18  foreach($users as $user) {
     19    foreach($blogs as $blog) {
    1920      delete_user_meta($user->ID, $wpdb->get_blog_prefix($blog->blog_id).'user_avatar');
    2021    }
    2122  }
    22   foreach($blogs as $blog){
     23  foreach($blogs as $blog) {
    2324    switch_to_blog($blog->blog_id);
    2425    delete_option('avatar_default_wp_user_avatar');
     
    3839  }
    3940} else {
    40   foreach($users as $user){
     41  foreach($users as $user) {
    4142    delete_user_meta($user->ID, $wpdb->get_blog_prefix($blog_id).'user_avatar');
    4243  }
     
    5657  delete_option('wp_user_avatar_users_updated');
    5758}
     59
    5860// Delete post meta
    5961delete_post_meta_by_key('_wp_attachment_wp_user_avatar');
     62
    6063// Reset all default avatars to Mystery Man
    6164update_option('avatar_default', 'mystery');
    62 ?>
  • wp-user-avatar/trunk/wp-user-avatar.php

    r842809 r864355  
    22/**
    33 * @package WP User Avatar
    4  * @version 1.7.2
     4 * @version 1.8
    55 */
     6
    67/*
    78Plugin Name: WP User Avatar
     
    1011Author: Bangbay Siboliban
    1112Author URI: http://siboliban.org/
    12 Version: 1.7.2
     13Version: 1.8
    1314Text Domain: wp-user-avatar
    1415Domain Path: /lang/
     
    2021}
    2122
    22 // Define paths and variables
    23 define('WPUA_VERSION', ' 1.7.2');
     23// Define paths
     24define('WPUA_VERSION', '1.8');
    2425define('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)));
     26define('WPUA_DIR', plugin_dir_path(__FILE__));
     27define('WPUA_INC', WPUA_DIR.'includes'.'/');
     28define('WPUA_URL', plugin_dir_url(WPUA_FOLDER).WPUA_FOLDER.'/');
     29define('WPUA_INC_URL', WPUA_URL.'includes'.'/');
    2730
    28 // Include WordPress functions
     31// WordPress includes used in plugin
    2932require_once(ABSPATH.'wp-admin/includes/file.php');
    3033require_once(ABSPATH.'wp-admin/includes/image.php');
     
    3336require_once(ABSPATH.'wp-admin/includes/template.php');
    3437
    35 // Define global variables
    36 $avatar_default = get_option('avatar_default');
    37 $show_avatars = get_option('show_avatars');
    38 $wpua_allow_upload = get_option('wp_user_avatar_allow_upload');
    39 $wpua_avatar_default = get_option('avatar_default_wp_user_avatar');
    40 $wpua_disable_gravatar = get_option('wp_user_avatar_disable_gravatar');
    41 $wpua_edit_avatar = get_option('wp_user_avatar_edit_avatar');
    42 $wpua_resize_crop = get_option('wp_user_avatar_resize_crop');
    43 $wpua_resize_h = get_option('wp_user_avatar_resize_h');
    44 $wpua_resize_upload = get_option('wp_user_avatar_resize_upload');
    45 $wpua_resize_w = get_option('wp_user_avatar_resize_w');
    46 $wpua_tinymce = get_option('wp_user_avatar_tinymce');
    47 $mustache_original = WPUA_URLPATH.'images/wpua.png';
    48 $mustache_medium = WPUA_URLPATH.'images/wpua-300x300.png';
    49 $mustache_thumbnail = WPUA_URLPATH.'images/wpua-150x150.png';
    50 $mustache_avatar = WPUA_URLPATH.'images/wpua-96x96.png';
    51 $mustache_admin = WPUA_URLPATH.'images/wpua-32x32.png';
    52 
    53 // Check for updates
    54 $wpua_default_avatar_updated = get_option('wp_user_avatar_default_avatar_updated');
    55 $wpua_users_updated = get_option('wp_user_avatar_users_updated');
    56 $wpua_media_updated = get_option('wp_user_avatar_media_updated');
    57 
    58 // Server upload size limit
    59 $upload_size_limit = wp_max_upload_size();
    60 // Convert to KB
    61 if($upload_size_limit > 1024){
    62   $upload_size_limit /= 1024;
    63 }
    64 $upload_size_limit_with_units = (int) $upload_size_limit.'KB';
    65 
    66 // User upload size limit
    67 $wpua_user_upload_size_limit = get_option('wp_user_avatar_upload_size_limit');
    68 if($wpua_user_upload_size_limit == 0 || $wpua_user_upload_size_limit > wp_max_upload_size()){
    69   $wpua_user_upload_size_limit = wp_max_upload_size();
    70 }
    71 // Value in bytes
    72 $wpua_upload_size_limit = $wpua_user_upload_size_limit;
    73 // Convert to KB
    74 if($wpua_user_upload_size_limit > 1024){
    75   $wpua_user_upload_size_limit /= 1024;
    76 }
    77 $wpua_upload_size_limit_with_units = (int) $wpua_user_upload_size_limit.'KB';
    78 
    79 // Check for custom image sizes
    80 $all_sizes = array_merge(get_intermediate_image_sizes(), array('original'));
    81 
    82 // Load add-ons
    83 if((bool) $wpua_tinymce == 1){
    84   include_once(WPUA_ABSPATH.'includes/tinymce.php');
    85 }
    86 
    87 // Load translations
    88 load_plugin_textdomain('wp-user-avatar', "", WPUA_FOLDER.'/lang');
    89 
    90 // Initialize default settings
    91 register_activation_hook(WPUA_ABSPATH.'wp-user-avatar.php', 'wpua_options');
    92 
    93 // Remove subscribers edit_posts capability
    94 register_deactivation_hook(WPUA_ABSPATH.'wp-user-avatar.php', 'wpua_deactivate');
    95 
    96 // Settings saved to wp_options
    97 function wpua_options(){
    98   add_option('avatar_default_wp_user_avatar', "");
    99   add_option('wp_user_avatar_allow_upload', '0');
    100   add_option('wp_user_avatar_disable_gravatar', '0');
    101   add_option('wp_user_avatar_edit_avatar', '1');
    102   add_option('wp_user_avatar_resize_crop', '0');
    103   add_option('wp_user_avatar_resize_h', '96');
    104   add_option('wp_user_avatar_resize_upload', '0');
    105   add_option('wp_user_avatar_resize_w', '96');
    106   add_option('wp_user_avatar_tinymce', '1');
    107   add_option('wp_user_avatar_upload_size_limit', '0');
    108 }
    109 add_action('admin_init', 'wpua_options');
    110 
    111 // Update default avatar to new format
    112 if(empty($wpua_default_avatar_updated)){
    113   function wpua_default_avatar(){
    114     global $avatar_default, $mustache_original, $wpua_avatar_default;
    115     // If default avatar is the old mustache URL, update it
    116     if($avatar_default == $mustache_original){
    117       update_option('avatar_default', 'wp_user_avatar');
    118     }
    119     // If user had an image URL as the default avatar, replace with ID instead
    120     if(!empty($wpua_avatar_default)){
    121       $wpua_avatar_default_image = wp_get_attachment_image_src($wpua_avatar_default, 'medium');
    122       if($avatar_default == $wpua_avatar_default_image[0]){
    123         update_option('avatar_default', 'wp_user_avatar');
    124       }
    125     }
    126     update_option('wp_user_avatar_default_avatar_updated', '1');
    127   }
    128   add_action('admin_init', 'wpua_default_avatar');
    129 }
    130 
    131 // Rename user meta to match database settings
    132 if(empty($wpua_users_updated)){
    133   function wpua_user_meta(){
    134     global $blog_id, $wpdb;
    135     $wpua_metakey = $wpdb->get_blog_prefix($blog_id).'user_avatar';
    136     // If database tables start with something other than wp_
    137     if($wpua_metakey != 'wp_user_avatar'){
    138       $users = get_users();
    139       // Move current user metakeys to new metakeys
    140       foreach($users as $user){
    141         $wpua = get_user_meta($user->ID, 'wp_user_avatar', true);
    142         if(!empty($wpua)){
    143           update_user_meta($user->ID, $wpua_metakey, $wpua);
    144           delete_user_meta($user->ID, 'wp_user_avatar');
    145         }
    146       }
    147     }
    148     update_option('wp_user_avatar_users_updated', '1');
    149   }
    150   add_action('admin_init', 'wpua_user_meta');
    151 }
    152 
    153 // Add media state to existing avatars
    154 if(empty($wpua_media_updated)){
    155   function wpua_media_state(){
    156     global $blog_id, $wpdb;
    157     // Find all users with WPUA
    158     $wpua_metakey = $wpdb->get_blog_prefix($blog_id).'user_avatar';
    159     $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, ""));
    160     foreach($wpuas as $usermeta){
    161       add_post_meta($usermeta->meta_value, '_wp_attachment_wp_user_avatar', $usermeta->user_id);
    162     }
    163     update_option('wp_user_avatar_media_updated', '1');
    164   }
    165   add_action('admin_init', 'wpua_media_state');
    166 }
    167 
    168 // Settings for Subscribers
    169 if((bool) $wpua_allow_upload == 1){
    170   // Allow multipart data in form
    171   function wpua_add_edit_form_multipart_encoding(){
    172     echo ' enctype="multipart/form-data"';
    173   }
    174   add_action('user_edit_form_tag', 'wpua_add_edit_form_multipart_encoding');
    175 
    176   // Check user role
    177   function wpua_check_user_role($role, $user_id=null){
    178     global $current_user;
    179     $user = is_numeric($user_id) ? get_userdata($user_id) : $current_user->ID;
    180     if(empty($user)){
    181       return false;
    182     }
    183     return in_array($role, (array) $user->roles);
    184   }
    185 
    186   // Remove menu items
    187   function wpua_subscriber_remove_menu_pages(){
    188     global $current_user;
    189     if(wpua_check_user_role('subscriber', $current_user->ID)){
    190       remove_menu_page('edit.php');
    191       remove_menu_page('edit-comments.php');
    192       remove_menu_page('tools.php');
    193     }
    194   }
    195   add_action('admin_menu', 'wpua_subscriber_remove_menu_pages');
    196 
    197   // Remove menu bar items
    198   function wpua_subscriber_remove_menu_bar_items(){
    199     global $current_user, $wp_admin_bar;
    200     if(wpua_check_user_role('subscriber', $current_user->ID)){
    201       $wp_admin_bar->remove_menu('comments');
    202       $wp_admin_bar->remove_menu('new-content');
    203     }
    204   }
    205   add_action('wp_before_admin_bar_render', 'wpua_subscriber_remove_menu_bar_items');
    206 
    207   // Remove dashboard items
    208   function wpua_subscriber_remove_dashboard_widgets(){
    209     global $current_user;
    210     if(wpua_check_user_role('subscriber', $current_user->ID)){
    211       remove_meta_box('dashboard_quick_press', 'dashboard', 'side');
    212       remove_meta_box('dashboard_recent_drafts', 'dashboard', 'side');
    213       remove_meta_box('dashboard_right_now', 'dashboard', 'normal');
    214     }
    215   }
    216   add_action('wp_dashboard_setup', 'wpua_subscriber_remove_dashboard_widgets');
    217 
    218   // Restrict access to pages
    219   function wpua_subscriber_offlimits(){
    220     global $current_user, $pagenow, $wpua_edit_avatar;
    221     if((bool) $wpua_edit_avatar == 1){
    222       $offlimits = array('edit.php', 'edit-comments.php', 'post-new.php', 'tools.php');
    223     } else {
    224       $offlimits = array('edit.php', 'edit-comments.php', 'post.php', 'post-new.php', 'tools.php');
    225     }
    226     if(wpua_check_user_role('subscriber', $current_user->ID)){
    227       if(in_array($pagenow, $offlimits)){
    228         do_action('admin_page_access_denied');
    229         wp_die(__('You do not have sufficient permissions to access this page.'));
    230       }
    231     }
    232   }
    233   add_action('admin_init', 'wpua_subscriber_offlimits');
    234 }
    235 
    236 if((bool) $wpua_allow_upload == 1 && (bool) $wpua_edit_avatar == 1){
    237   // Give subscribers edit_posts capability
    238   function wpua_subscriber_add_cap(){
    239     global $blog_id, $wpdb;
    240     $wp_user_roles = $wpdb->get_blog_prefix($blog_id).'user_roles';
    241     $user_roles = get_option($wp_user_roles);
    242     $user_roles['subscriber']['capabilities']['edit_posts'] = true;
    243     update_option($wp_user_roles, $user_roles);
    244   }
    245   add_action('admin_init', 'wpua_subscriber_add_cap');
    246 }
    247 
    248 // Remove subscribers edit_posts capability
    249 function wpua_subscriber_remove_cap(){
    250   global $blog_id, $wpdb;
    251   $wp_user_roles = $wpdb->get_blog_prefix($blog_id).'user_roles';
    252   $user_roles = get_option($wp_user_roles);
    253   unset($user_roles['subscriber']['capabilities']['edit_posts']);
    254   update_option($wp_user_roles, $user_roles);
    255 }
    256 
    257 // On deactivation
    258 function wpua_deactivate(){
    259   // Remove subscribers edit_posts capability
    260   wpua_subscriber_remove_cap();
    261   // Reset all default avatar to Mystery Man
    262   update_option('avatar_default', 'mystery');
    263 }
    264 
    265 // Before wrapper for profile
    266 function wpua_before_avatar(){
    267   do_action('wpua_before_avatar');
    268 }
    269 
    270 // After wrapper for profile
    271 function wpua_after_avatar(){
    272   do_action('wpua_after_avatar');
    273 }
    274 
    275 // Before avatar container
    276 function wpua_do_before_avatar(){ ?>
    277   <?php if(class_exists('bbPress') && bbp_is_edit()) : // Add to bbPress profile with same style ?>
    278     <h2 class="entry-title"><?php _e('Avatar'); ?></h2>
    279     <fieldset class="bbp-form">
    280       <legend><?php _e('Image'); ?></legend>
    281   <?php elseif(class_exists('WPUF_Main') && is_page()) : // Add to WP User Frontend profile with same style ?>
    282     <fieldset>
    283       <legend><?php _e('Avatar') ?></legend>
    284       <table class="wpuf-table">
    285         <tr>
    286           <th><label for="wp_user_avatar"><?php _e('Image'); ?></label></th>
    287           <td>
    288   <?php else : // Add to profile with admin style ?>
    289     <h3><?php _e('Avatar') ?></h3>
    290     <table class="form-table">
    291       <tr>
    292         <th><label for="wp_user_avatar"><?php _e('Image'); ?></label></th>
    293         <td>
    294   <?php endif; ?>
    295   <?php
    296 }
    297 
    298 // After avatar container
    299 function wpua_do_after_avatar(){ ?>
    300   <?php if(class_exists('bbPress') && bbp_is_edit()) : // Add to bbPress profile with same style ?>
    301     </fieldset>
    302   <?php elseif(class_exists('WPUF_Main') && is_page()) : // Add to WP User Frontend profile with same style ?>
    303           </td>
    304         </tr>
    305       </table>
    306     </fieldset>
    307   <?php else : // Add to profile with admin style ?>
    308         </td>
    309       </tr>
    310     </table>
    311   <?php endif; ?>
    312   <?php
    313 }
    314 
    315 // Donate message
    316 function wpua_do_donation_message(){ ?>
    317   <div class="updated">
    318     <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>
    319   </div>
    320  <?php
    321 }
    322 
    323 // Filter for the inevitable complaints about the donation message
    324 function wpua_donation_message(){
    325   do_action('wpua_donation_message');
    326 }
    327 
    32838// WP User Avatar
    329 if(!class_exists('wp_user_avatar')){
    330   class wp_user_avatar{
    331     function wp_user_avatar(){
    332       global $current_screen, $current_user, $pagenow, $show_avatars, $wpua_allow_upload, $wpua_resize_upload, $wpua_upload_size_limit;
    333       // Add WPUA to profile
    334       if(current_user_can('upload_files') || ((bool) $wpua_allow_upload == 1 && is_user_logged_in())){
    335         // Profile functions and scripts
    336         add_action('show_user_profile', array('wp_user_avatar', 'wpua_action_show_user_profile'));
    337         add_action('edit_user_profile', array($this, 'wpua_action_show_user_profile'));
    338         add_action('personal_options_update', array($this, 'wpua_action_process_option_update'));
    339         add_action('edit_user_profile_update', array($this, 'wpua_action_process_option_update'));
    340         add_action('show_user_profile', array($this, 'wpua_media_upload_scripts'));
    341         add_action('edit_user_profile', array($this, 'wpua_media_upload_scripts'));
    342         // Admin scripts
    343         if($pagenow == 'options-discussion.php' || ($pagenow == 'options-general.php' && isset($_GET['page']) && $_GET['page'] == 'wp-user-avatar')){
    344           add_action('admin_enqueue_scripts', array($this, 'wpua_media_upload_scripts'));
    345         }
    346         if(!current_user_can('upload_files')){
    347           // Upload errors
    348           add_action('user_profile_update_errors', array($this, 'wpua_upload_errors'), 10, 3);
    349           // Prefilter upload size
    350           add_filter('wp_handle_upload_prefilter', array($this, 'wpua_handle_upload_prefilter'));
    351         }
    352         // Admin menu settings
    353         add_action('admin_menu', 'wpua_admin');
    354         add_filter('plugin_action_links', array($this, 'wpua_action_links'), 10, 2);
    355         add_filter('plugin_row_meta', array($this, 'wpua_row_meta'), 10, 2);
    356         // Hide column in Users table if default avatars are enabled
    357         if((bool) $show_avatars == 0 && is_admin()){
    358           add_filter('manage_users_columns', array($this, 'wpua_add_column'), 10, 1);
    359           add_filter('manage_users_custom_column', array($this, 'wpua_show_column'), 10, 3);
    360         }
    361         // Profile wrappers
    362         add_action('wpua_before_avatar', 'wpua_do_before_avatar');
    363         add_action('wpua_after_avatar', 'wpua_do_after_avatar');
    364         // Donate message
    365         add_action('wpua_donation_message', 'wpua_do_donation_message');
    366       }
    367     }
    368     // Add to edit user profile
    369     public static function wpua_action_show_user_profile($user){
    370       global $blog_id, $current_user, $post, $show_avatars, $wpdb, $wpua_allow_upload, $wpua_edit_avatar, $wpua_upload_size_limit_with_units;
    371       // Get WPUA attachment ID
    372       $wpua = get_user_meta($user->ID, $wpdb->get_blog_prefix($blog_id).'user_avatar', true);
    373       // Show remove button if WPUA is set
    374       $hide_remove = !has_wp_user_avatar($user->ID) ? ' wpua-hide' : "";
    375       // If avatars are enabled, get original avatar image or show blank
    376       $avatar_medium_src = (bool) $show_avatars == 1 ? wpua_get_avatar_original($user->user_email, 96) : includes_url().'images/blank.gif';
    377       // Check if user has wp_user_avatar, if not show image from above
    378       $avatar_medium = has_wp_user_avatar($user->ID) ? get_wp_user_avatar_src($user->ID, 'medium') : $avatar_medium_src;
    379       // Check if user has wp_user_avatar, if not show image from above
    380       $avatar_thumbnail = has_wp_user_avatar($user->ID) ? get_wp_user_avatar_src($user->ID, 96) : $avatar_medium_src;
    381       // Change text on message based on current user
    382       $profile = ($current_user->ID == $user->ID) ? '&ldquo;'.__('Update Profile').'&rdquo;' : '&ldquo;'.__('Update User').'&rdquo;';
    383     ?>
    384       <?php do_action('wpua_before_avatar'); ?>
    385       <input type="hidden" name="wp-user-avatar" id="wp-user-avatar" value="<?php echo $wpua; ?>" />
    386       <?php if(current_user_can('upload_files')) : // Button to launch Media uploader ?>
    387         <p id="wpua-add-button"><button type="button" class="button" id="wpua-add" name="wpua-add"><?php _e('Edit Image'); ?></button></p>
    388       <?php elseif(!current_user_can('upload_files') && !has_wp_user_avatar($current_user->ID)) : // Upload button ?>
    389         <p id="wpua-upload-button">
    390           <input name="wpua-file" id="wpua-file" type="file" />
    391           <button type="submit" class="button" id="wpua-upload" name="submit" value="<?php _e('Upload'); ?>"><?php _e('Upload'); ?></button>
    392         </p>
    393         <p id="wpua-upload-messages">
    394           <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>
    395           <span id="wpua-allowed-files"><?php _e('Allowed Files'); ?>: <?php _e('<code>jpg jpeg png gif</code>'); ?></span>
    396         </p>
    397       <?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 ?>
    398         <?php $edit_attachment_link = add_query_arg(array('post' => $wpua, 'action' => 'edit'), admin_url('post.php')); ?>
    399         <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>
    400       <?php endif; ?>
    401       <p id="wpua-preview">
    402         <img src="<?php echo $avatar_medium; ?>" alt="" />
    403         <?php _e('Original Size'); ?>
    404       </p>
    405       <p id="wpua-thumbnail">
    406         <img src="<?php echo $avatar_thumbnail; ?>" alt="" />
    407         <?php _e('Thumbnail'); ?>
    408       </p>
    409       <p id="wpua-remove-button" class="<?php echo $hide_remove; ?>"><button type="button" class="button" id="wpua-remove" name="wpua-remove"><?php _e('Default Avatar'); ?></button></p>
    410       <p id="wpua-undo-button"><button type="button" class="button" id="wpua-undo" name="wpua-undo"><?php _e('Undo'); ?></button></p>
    411       <p id="wpua-message"><?php printf(__('Click %s to save your changes', 'wp-user-avatar'), $profile); ?></p>
    412       <?php do_action('wpua_after_avatar'); ?>
    413     <?php
    414     }
    415 
    416     // Add upload error messages
    417     function wpua_upload_errors($errors, $update, $user){
    418       global $wpua_upload_size_limit;
    419       if($update && !empty($_FILES['wpua-file'])){
    420         $size = $_FILES['wpua-file']['size'];
    421         $type = $_FILES['wpua-file']['type'];
    422         // Allow only JPG, GIF, PNG
    423         if(!empty($type) && !preg_match('/(jpe?g|gif|png)$/i', $type)){
    424           $errors->add('wpua_file_type', __('This file is not an image. Please try another.'));
    425         }
    426         // Upload size limit
    427         if(!empty($size) && $size > $wpua_upload_size_limit){
    428           $errors->add('wpua_file_size', __('Memory exceeded. Please try another smaller file.'));
    429         }
    430       }
    431     }
    432 
    433     // Set upload size limit for users without upload_files capability
    434     function wpua_handle_upload_prefilter($file){
    435       global $wpua_upload_size_limit;
    436       $size = $file['size'];
    437       if(!empty($size) && $size > $wpua_upload_size_limit){
    438         function wpua_file_size_error($errors, $update, $user){
    439           $errors->add('wpua_file_size', __('Memory exceeded. Please try another smaller file.'));
    440         }
    441         add_action('user_profile_update_errors', 'wpua_file_size_error', 10, 3);
    442         return null;
    443       }
    444       return $file;
    445     }
    446 
    447     // Update user meta
    448     function wpua_action_process_option_update($user_id){
    449       global $blog_id, $wpdb, $wpua_resize_crop, $wpua_resize_h, $wpua_resize_upload, $wpua_resize_w;
    450       // Check if user has upload_files capability
    451       if(current_user_can('upload_files')){
    452         $wpua_id = isset($_POST['wp-user-avatar']) ? intval($_POST['wp-user-avatar']) : "";
    453         $wpdb->query($wpdb->prepare("DELETE FROM $wpdb->postmeta WHERE meta_key = %s AND meta_value = %d", '_wp_attachment_wp_user_avatar', $user_id));
    454         add_post_meta($wpua_id, '_wp_attachment_wp_user_avatar', $user_id);
    455         update_user_meta($user_id, $wpdb->get_blog_prefix($blog_id).'user_avatar', $wpua_id);
    456       } else {
    457         // Remove attachment info if avatar is blank
    458         if(isset($_POST['wp-user-avatar']) && empty($_POST['wp-user-avatar'])){
    459           // Uploads by user
    460           $attachments = $wpdb->get_results($wpdb->prepare("SELECT $wpdb->posts.ID FROM $wpdb->posts, $wpdb->postmeta WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id AND $wpdb->posts.post_author = %d AND $wpdb->posts.post_type = %s AND $wpdb->postmeta.meta_key = %s AND $wpdb->postmeta.meta_value = $wpdb->posts.post_author", $user_id, 'attachment', '_wp_attachment_wp_user_avatar'));
    461           foreach($attachments as $attachment){
    462             // Delete attachment if not used by another user
    463             if(!wpua_image($attachment->ID, $user_id)){
    464               wp_delete_attachment($attachment->ID);
    465             }
    466           }
    467           update_user_meta($user_id, $wpdb->get_blog_prefix($blog_id).'user_avatar', "");
    468         }
    469         // Create attachment from upload
    470         if(isset($_POST['submit']) && $_POST['submit'] && !empty($_FILES['wpua-file'])){
    471           $name = $_FILES['wpua-file']['name'];
    472           $file = wp_handle_upload($_FILES['wpua-file'], array('test_form' => false));
    473           $type = $_FILES['wpua-file']['type'];
    474           if(!empty($type) && preg_match('/(jpe?g|gif|png)$/i', $type)){
    475             // Resize uploaded image
    476             if((bool) $wpua_resize_upload == 1){
    477               // Original image
    478               $uploaded_image = wp_get_image_editor($file['file']);
    479               // Check for errors
    480               if(!is_wp_error($uploaded_image)){
    481                 // Resize image
    482                 $uploaded_image->resize($wpua_resize_w, $wpua_resize_h, $wpua_resize_crop);
    483                 // Save image
    484                 $resized_image = $uploaded_image->save($file['file']);
    485               }
    486             }
    487             // Break out file info
    488             $name_parts = pathinfo($name);
    489             $name = trim(substr($name, 0, -(1 + strlen($name_parts['extension']))));
    490             $url = $file['url'];
    491             $file = $file['file'];
    492             $title = $name;
    493             // Use image exif/iptc data for title if possible
    494             if($image_meta = @wp_read_image_metadata($file)){
    495               if(trim($image_meta['title']) && !is_numeric(sanitize_title($image_meta['title']))){
    496                 $title = $image_meta['title'];
    497               }
    498             }
    499             // Construct the attachment array
    500             $attachment = array(
    501               'guid'           => $url,
    502               'post_mime_type' => $type,
    503               'post_title'     => $title,
    504               'post_content'   => ""
    505             );
    506             // This should never be set as it would then overwrite an existing attachment
    507             if(isset($attachment['ID'])){
    508               unset($attachment['ID']);
    509             }
    510             // Save the attachment metadata
    511             $attachment_id = wp_insert_attachment($attachment, $file);
    512             if(!is_wp_error($attachment_id)){
    513               wp_update_attachment_metadata($attachment_id, wp_generate_attachment_metadata($attachment_id, $file));
    514               $wpdb->query($wpdb->prepare("DELETE FROM $wpdb->postmeta WHERE meta_key = %s AND meta_value = %d", '_wp_attachment_wp_user_avatar', $user_id));
    515               add_post_meta($attachment_id, '_wp_attachment_wp_user_avatar', $user_id);
    516               update_user_meta($user_id, $wpdb->get_blog_prefix($blog_id).'user_avatar', $attachment_id);
    517             }
    518           }
    519         }
    520       }
    521     }
    522 
    523     // Add actions links on plugin page
    524     function wpua_action_links($links, $file){
    525       if(basename($file) == basename(plugin_basename(__FILE__))){
    526         $settings_link = '<a href="'.add_query_arg(array('page' => 'wp-user-avatar'), admin_url('options-general.php')).'">'.__('Settings').'</a>';
    527         $links = array_merge($links, array($settings_link));
    528       }
    529       return $links;
    530     }
    531 
    532     // Add row meta on plugin page
    533     function wpua_row_meta($links, $file){
    534       if(basename($file) == basename(plugin_basename(__FILE__))){
    535         $support_link = '<a href="http://wordpress.org/support/plugin/wp-user-avatar" target="_blank">'.__('Support Forums').'</a>';
    536         $donate_link = '<a href="http://siboliban.org/donate" target="_blank">'.__('Donate', 'wp-user-avatar').'</a>';
    537         $links = array_merge($links, array($support_link, $donate_link));
    538       }
    539       return $links;
    540     }
    541 
    542     // Add column to Users table
    543     function wpua_add_column($columns){
    544       return $columns + array('wp-user-avatar' => __('WP User Avatar', 'wp-user-avatar'));
    545     }
    546 
    547     // Show thumbnail in Users table
    548     function wpua_show_column($value, $column_name, $user_id){
    549       global $blog_id, $wpdb;
    550       $wpua = get_user_meta($user_id, $wpdb->get_blog_prefix($blog_id).'user_avatar', true);
    551       $wpua_image = wp_get_attachment_image($wpua, array(32,32));
    552       if($column_name == 'wp-user-avatar'){ $value = $wpua_image; }
    553       return $value;
    554     }
    555 
    556     // Media uploader
    557     public static function wpua_media_upload_scripts($user=""){
    558       global $mustache_admin, $pagenow, $show_avatars, $wpua_upload_size_limit;
    559       wp_enqueue_script('jquery');
    560       if(current_user_can('upload_files')){
    561         wp_enqueue_script('admin-bar');
    562         wp_enqueue_media();
    563         wp_enqueue_script('wp-user-avatar', WPUA_URLPATH.'js/wp-user-avatar.js', array('jquery','media-editor'), WPUA_VERSION, true);
    564       } else {
    565         wp_enqueue_script('wp-user-avatar', WPUA_URLPATH.'js/wp-user-avatar-user.js', array('jquery'), WPUA_VERSION, true);
    566       }
    567       wp_enqueue_style('wp-user-avatar', WPUA_URLPATH.'css/wp-user-avatar.css', "", WPUA_VERSION);
    568       // Admin scripts
    569       if($pagenow == 'options-discussion.php' || ($pagenow == 'options-general.php' && isset($_GET['page']) && $_GET['page'] == 'wp-user-avatar')){
    570         // Size limit slider
    571         wp_enqueue_script('jquery-ui-slider');
    572         wp_enqueue_style('wp-user-avatar-jqueryui', WPUA_URLPATH.'css/jquery.ui.slider.css', "", null);
    573         // Remove/edit settings
    574         $wpua_custom_scripts = array('section' => __('Default Avatar'), 'edit_image' => __('Edit Image'), 'select_image' => __('Select Image'), 'avatar_thumb' => $mustache_admin);
    575         wp_localize_script('wp-user-avatar', 'wpua_custom', $wpua_custom_scripts);
    576         // Settings control
    577         wp_enqueue_script('wp-user-avatar-admin', WPUA_URLPATH.'js/wp-user-avatar-admin.js', array('wp-user-avatar'), WPUA_VERSION, true);
    578         $wpua_admin_scripts = array('upload_size_limit' => $wpua_upload_size_limit, 'max_upload_size' => wp_max_upload_size());
    579         wp_localize_script('wp-user-avatar-admin', 'wpua_admin', $wpua_admin_scripts);
    580       } else {
    581         // User remove/edit settings
    582         $avatar_medium_src = (bool) $show_avatars == 1 ? wpua_get_avatar_original($user->user_email, 96) : includes_url().'images/blank.gif';
    583         $wpua_custom_scripts = array('section' => $user->display_name, 'edit_image' => __('Edit Image'), 'select_image' => __('Select Image'), 'avatar_thumb' => $avatar_medium_src);
    584         wp_localize_script('wp-user-avatar', 'wpua_custom', $wpua_custom_scripts);
    585       }
    586     }
    587   }
    588 
    589   // Returns true if user has Gravatar-hosted image
    590   function wpua_has_gravatar($id_or_email, $has_gravatar=false, $user="", $email=""){
    591     if(!is_object($id_or_email) && !empty($id_or_email)){
    592       // Find user by ID or e-mail address
    593       $user = is_numeric($id_or_email) ? get_user_by('id', $id_or_email) : get_user_by('email', $id_or_email);
    594       // Get registered user e-mail address
    595       $email = !empty($user) ? $user->user_email : "";
    596     }
    597     // Check if Gravatar image returns 200 (OK) or 404 (Not Found)
    598     $hash = md5(strtolower(trim($email)));
    599     $gravatar = 'http://www.gravatar.com/avatar/'.$hash.'?d=404';
    600     $data = wp_cache_get($hash);
    601     if(false === $data){
    602       $response = wp_remote_head($gravatar);
    603       $data = is_wp_error($response) ? 'not200' : $response['response']['code'];
    604       wp_cache_set($hash, $data, $group="", $expire=60*5);
    605     }
    606     $has_gravatar = ($data == '200') ? true : false;
    607     return $has_gravatar;
    608   }
    609 
    610   // Returns true if user has wp_user_avatar
    611   function has_wp_user_avatar($id_or_email="", $has_wpua=false, $user="", $user_id=""){
    612     global $blog_id, $wpdb;
    613     if(!is_object($id_or_email) && !empty($id_or_email)){
    614       // Find user by ID or e-mail address
    615       $user = is_numeric($id_or_email) ? get_user_by('id', $id_or_email) : get_user_by('email', $id_or_email);
    616       // Get registered user ID
    617       $user_id = !empty($user) ? $user->ID : "";
    618     }
    619     $wpua = get_user_meta($user_id, $wpdb->get_blog_prefix($blog_id).'user_avatar', true);
    620     $has_wpua = !empty($wpua) && wp_attachment_is_image($wpua) ? true : false;
    621     return $has_wpua;
    622   }
    623 
    624   // Replace get_avatar only in get_wp_user_avatar
    625   function wpua_get_avatar_filter($avatar, $id_or_email="", $size="", $default="", $alt=""){
    626     global $avatar_default, $mustache_admin, $mustache_avatar, $mustache_medium, $mustache_original, $mustache_thumbnail, $post, $wpua_avatar_default, $wpua_disable_gravatar;
    627     // User has WPUA
    628     if(is_object($id_or_email)){
    629       if(!empty($id_or_email->comment_author_email)){
    630         $avatar = get_wp_user_avatar($id_or_email, $size, $default, $alt);
    631       } else {
    632         $avatar = get_wp_user_avatar('[email protected]', $size, $default, $alt);
    633       }
    634     } else {
    635       if(has_wp_user_avatar($id_or_email)){
    636         $avatar = get_wp_user_avatar($id_or_email, $size, $default, $alt);
    637       // User has Gravatar and Gravatar is not disabled
    638       } elseif((bool) $wpua_disable_gravatar != 1 && wpua_has_gravatar($id_or_email)){
    639         $avatar = $avatar;
    640       // User doesn't have WPUA or Gravatar and Default Avatar is wp_user_avatar, show custom Default Avatar
    641       } elseif($avatar_default == 'wp_user_avatar'){
    642         // Show custom Default Avatar
    643         if(!empty($wpua_avatar_default) && wp_attachment_is_image($wpua_avatar_default)){
    644           // Get image
    645           $wpua_avatar_default_image = wp_get_attachment_image_src($wpua_avatar_default, array($size,$size));
    646           // Image src
    647           $default = $wpua_avatar_default_image[0];
    648           // Add dimensions if numeric size
    649           $dimensions = ' width="'.$wpua_avatar_default_image[1].'" height="'.$wpua_avatar_default_image[2].'"';
    650         } else {
    651           // Get mustache image based on numeric size comparison
    652           if($size > get_option('medium_size_w')){
    653             $default = $mustache_original;
    654           } elseif($size <= get_option('medium_size_w') && $size > get_option('thumbnail_size_w')){
    655             $default = $mustache_medium;
    656           } elseif($size <= get_option('thumbnail_size_w') && $size > 96){
    657             $default = $mustache_thumbnail;
    658           } elseif($size <= 96 && $size > 32){
    659             $default = $mustache_avatar;
    660           } elseif($size <= 32){
    661             $default = $mustache_admin;
    662           }
    663           // Add dimensions if numeric size
    664           $dimensions = ' width="'.$size.'" height="'.$size.'"';
    665         }
    666         // Construct the img tag
    667         $avatar = '<img src="'.$default.'"'.$dimensions.' alt="'.$alt.'" class="avatar avatar-'.$size.' wp-user-avatar wp-user-avatar-'.$size.' photo avatar-default" />';
    668       }
    669     }
    670     return $avatar;
    671   }
    672   add_filter('get_avatar', 'wpua_get_avatar_filter', 10, 6);
    673 
    674   // Get original avatar, for when user removes wp_user_avatar
    675   function wpua_get_avatar_original($id_or_email, $size="", $default="", $alt=""){
    676     global $avatar_default, $mustache_avatar, $wpua_avatar_default, $wpua_disable_gravatar;
    677     // Remove get_avatar filter
    678     remove_filter('get_avatar', 'wpua_get_avatar_filter');
    679     if((bool) $wpua_disable_gravatar != 1){
    680       // User doesn't have Gravatar and Default Avatar is wp_user_avatar, show custom Default Avatar
    681       if(!wpua_has_gravatar($id_or_email) && $avatar_default == 'wp_user_avatar'){
    682         // Show custom Default Avatar
    683         if(!empty($wpua_avatar_default) && wp_attachment_is_image($wpua_avatar_default)){
    684           $wpua_avatar_default_image = wp_get_attachment_image_src($wpua_avatar_default, array($size,$size));
    685           $default = $wpua_avatar_default_image[0];
    686         } else {
    687           $default = $mustache_avatar;
    688         }
    689       } else {
    690         // Get image from Gravatar, whether it's the user's image or default image
    691         $wpua_image = get_avatar($id_or_email, $size);
    692         // Takes the img tag, extracts the src
    693         $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $wpua_image, $matches, PREG_SET_ORDER);
    694         $default = !empty($matches) ? $matches [0] [1] : "";
    695       }
    696     } else {
    697       if(!empty($wpua_avatar_default) && wp_attachment_is_image($wpua_avatar_default)){
    698         $wpua_avatar_default_image = wp_get_attachment_image_src($wpua_avatar_default, array($size,$size));
    699         $default = $wpua_avatar_default_image[0];
    700       } else {
    701         $default = $mustache_avatar;
    702       }
    703     }
    704     // Enable get_avatar filter
    705     add_filter('get_avatar', 'wpua_get_avatar_filter', 10, 6);
    706     return $default;
    707   }
    708 
    709   // Find WPUA, show get_avatar if empty
    710   function get_wp_user_avatar($id_or_email="", $size='96', $align="", $alt="", $email='[email protected]'){
    711     global $all_sizes, $avatar_default, $blog_id, $post, $wpdb, $_wp_additional_image_sizes;
    712     // Checks if comment
    713     if(is_object($id_or_email)){
    714       // Checks if comment author is registered user by user ID
    715       if($id_or_email->user_id != 0){
    716         $email = $id_or_email->user_id;
    717       // Checks that comment author isn't anonymous
    718       } elseif(!empty($id_or_email->comment_author_email)){
    719         // Checks if comment author is registered user by e-mail address
    720         $user = get_user_by('email', $id_or_email->comment_author_email);
    721         // Get registered user info from profile, otherwise e-mail address should be value
    722         $email = !empty($user) ? $user->ID : $id_or_email->comment_author_email;
    723       }
    724       $alt = $id_or_email->comment_author;
    725     } else {
    726       if(!empty($id_or_email)){
    727         // Find user by ID or e-mail address
    728         $user = is_numeric($id_or_email) ? get_user_by('id', $id_or_email) : get_user_by('email', $id_or_email);
    729       } else {
    730         // Find author's name if id_or_email is empty
    731         $author_name = get_query_var('author_name');
    732         if(is_author()){
    733           // On author page, get user by page slug
    734           $user = get_user_by('slug', $author_name);
    735         } else {
    736           // On post, get user by author meta
    737           $user_id = get_the_author_meta('ID');
    738           $user = get_user_by('id', $user_id);
    739         }
    740       }
    741       // Set user's ID and name
    742       if(!empty($user)){
    743         $email = $user->ID;
    744         $alt = $user->display_name;
    745       }
    746     }
    747     // Checks if user has WPUA
    748     $wpua_meta = get_the_author_meta($wpdb->get_blog_prefix($blog_id).'user_avatar', $email);
    749     // Add alignment class
    750     $alignclass = !empty($align) && ($align == 'left' || $align == 'right' || $align == 'center') ? ' align'.$align : ' alignnone';
    751     // User has WPUA, bypass get_avatar
    752     if(!empty($wpua_meta)){
    753       // Numeric size use size array
    754       $get_size = is_numeric($size) ? array($size,$size) : $size;
    755       // Get image src
    756       $wpua_image = wp_get_attachment_image_src($wpua_meta, $get_size);
    757       // Add dimensions to img only if numeric size was specified
    758       $dimensions = is_numeric($size) ? ' width="'.$wpua_image[1].'" height="'.$wpua_image[2].'"' : "";
    759       // Construct the img tag
    760       $avatar = '<img src="'.$wpua_image[0].'"'.$dimensions.' alt="'.$alt.'" class="avatar avatar-'.$size.' wp-user-avatar wp-user-avatar-'.$size.$alignclass.' photo" />';
    761     } else {
    762       // Check for custom image sizes
    763       if(in_array($size, $all_sizes)){
    764         if(in_array($size, array('original', 'large', 'medium', 'thumbnail'))){
    765           $get_size = ($size == 'original') ? get_option('large_size_w') : get_option($size.'_size_w');
    766         } else {
    767           $get_size = $_wp_additional_image_sizes[$size]['width'];
    768         }
    769       } else {
    770         // Numeric sizes leave as-is
    771         $get_size = $size;
    772       }
    773       // User with no WPUA uses get_avatar
    774       $avatar = get_avatar($email, $get_size, $default="", $alt="");
    775       // Remove width and height for non-numeric sizes
    776       if(in_array($size, array('original', 'large', 'medium', 'thumbnail'))){
    777         $avatar = preg_replace('/(width|height)=\"\d*\"\s/', "", $avatar);
    778         $avatar = preg_replace("/(width|height)=\'\d*\'\s/", "", $avatar);
    779       }
    780       $str_replacemes = array('wp-user-avatar ', 'wp-user-avatar-'.$get_size.' ', 'wp-user-avatar-'.$size.' ', 'avatar-'.$get_size, 'photo');
    781       $str_replacements = array("", "", "", 'avatar-'.$size, 'wp-user-avatar wp-user-avatar-'.$size.$alignclass.' photo');
    782       $avatar = str_replace($str_replacemes, $str_replacements, $avatar);
    783     }
    784     return $avatar;
    785   }
    786 
    787   // Return just the image src
    788   function get_wp_user_avatar_src($id_or_email, $size="", $align=""){
    789     $wpua_image_src = "";
    790     // Gets the avatar img tag
    791     $wpua_image = get_wp_user_avatar($id_or_email, $size, $align);
    792     // Takes the img tag, extracts the src
    793     if(!empty($wpua_image)){
    794       $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $wpua_image, $matches, PREG_SET_ORDER);
    795       $wpua_image_src = !empty($matches) ? $matches [0] [1] : "";
    796     }
    797     return $wpua_image_src;
    798   }
    799 
    800   // Shortcode
    801   function wpua_shortcode($atts, $content=null){
    802     global $all_sizes, $blog_id, $post, $wpdb;
    803     // Set shortcode attributes
    804     extract(shortcode_atts(array('user' => "", 'size' => '96', 'align' => "", 'link' => "", 'target' => ""), $atts));
    805     // Find user by ID, login, slug, or e-mail address
    806     if(!empty($user)){
    807       $user = is_numeric($user) ? get_user_by('id', $user) : get_user_by('login', $user);
    808       $user = empty($user) ? get_user_by('slug', $user) : $user;
    809       $user = empty($user) ? get_user_by('email', $user) : $user;
    810     } else {
    811       // Find author's name if id_or_email is empty
    812       $author_name = get_query_var('author_name');
    813       if(is_author()){
    814         // On author page, get user by page slug
    815         $user = get_user_by('slug', $author_name);
    816       } else {
    817         // On post, get user by author meta
    818         $user_id = get_the_author_meta('ID');
    819         $user = get_user_by('id', $user_id);
    820       }
    821     }
    822     // Numeric sizes leave as-is
    823     $get_size = $size;
    824     // Check for custom image sizes if there are captions
    825     if(!empty($content)){
    826       if(in_array($size, $all_sizes)){
    827         if(in_array($size, array('original', 'large', 'medium', 'thumbnail'))){
    828           $get_size = ($size == 'original') ? get_option('large_size_w') : get_option($size.'_size_w');
    829         } else {
    830           $get_size = $_wp_additional_image_sizes[$size]['width'];
    831         }
    832       }
    833     }
    834     // Get user ID
    835     $id_or_email = !empty($user) ? $user->ID : '[email protected]';
    836     // Check if link is set
    837     if(!empty($link)){
    838       // CSS class is same as link type, except for URL
    839       $link_class = $link;
    840       if($link == 'file'){
    841         // Get image src
    842         $link = get_wp_user_avatar_src($id_or_email, 'original');
    843       } elseif($link == 'attachment'){
    844         // Get attachment URL
    845         $link = get_attachment_link(get_the_author_meta($wpdb->get_blog_prefix($blog_id).'user_avatar', $id_or_email));
    846       } else {
    847         // URL
    848         $link_class = 'custom';
    849       }
    850       // Open in new window
    851       $target_link = !empty($target) ? ' target="'.$target.'"' : "";
    852       // Wrap the avatar inside the link
    853       $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>';
    854     } else {
    855       $html = get_wp_user_avatar($id_or_email, $get_size, $align);
    856     }
    857     // Check if caption is set
    858     if(!empty($content)){
    859       // Get attachment ID
    860       $wpua = get_user_meta($id_or_email, $wpdb->get_blog_prefix($blog_id).'user_avatar', true);
    861       // Clean up caption
    862       $content = trim($content);
    863       $content = preg_replace('/\r|\n/', "", $content);
    864       $content = preg_replace('/<\/p><p>/', "", $content, 1);
    865       $content = preg_replace('/<\/p><p>$/', "", $content);
    866       $content = str_replace('</p><p>', "<br /><br />", $content);
    867       $avatar = do_shortcode(image_add_caption($html, $wpua, $content, $title, $align, $link, $get_size, $alt));
    868     } else {
    869       $avatar = $html;
    870     }
    871     return $avatar;
    872   }
    873   add_shortcode('avatar', 'wpua_shortcode');
    874 
    875   // Add default avatar
    876   function wpua_add_default_avatar($avatar_list=null){
    877     global $avatar_default, $mustache_admin, $mustache_medium, $wpua_avatar_default, $wpua_disable_gravatar;
    878     // Remove get_avatar filter
    879     remove_filter('get_avatar', 'wpua_get_avatar_filter');
    880     // Set avatar_list variable
    881     $avatar_list = "";
    882     // Set avatar defaults
    883     $avatar_defaults = array(
    884       'mystery' => __('Mystery Man'),
    885       'blank' => __('Blank'),
    886       'gravatar_default' => __('Gravatar Logo'),
    887       'identicon' => __('Identicon (Generated)'),
    888       'wavatar' => __('Wavatar (Generated)'),
    889       'monsterid' => __('MonsterID (Generated)'),
    890       'retro' => __('Retro (Generated)')
    891     );
    892     // No Default Avatar, set to Mystery Man
    893     if(empty($avatar_default)){
    894       $avatar_default = 'mystery';
    895     }
    896     // Take avatar_defaults and get examples for [email protected]
    897     foreach($avatar_defaults as $default_key => $default_name){
    898       $avatar = get_avatar('[email protected]', 32, $default_key);
    899       $selected = ($avatar_default == $default_key) ? 'checked="checked" ' : "";
    900       $avatar_list .= "\n\t<label><input type='radio' name='avatar_default' id='avatar_{$default_key}' value='".esc_attr($default_key)."' {$selected}/> ";
    901       $avatar_list .= preg_replace("/src='(.+?)'/", "src='\$1&amp;forcedefault=1'", $avatar);
    902       $avatar_list .= ' '.$default_name.'</label>';
    903       $avatar_list .= '<br />';
    904     }
    905     // Show remove link if custom Default Avatar is set
    906     if(!empty($wpua_avatar_default) && wp_attachment_is_image($wpua_avatar_default)){
    907       $avatar_thumb_src = wp_get_attachment_image_src($wpua_avatar_default, array(32,32));
    908       $avatar_thumb = $avatar_thumb_src[0];
    909       $hide_remove = "";
    910     } else {
    911       $avatar_thumb = $mustache_admin;
    912       $hide_remove = ' class="wpua-hide"';
    913     }
    914     // Default Avatar is wp_user_avatar, check the radio button next to it
    915     $selected_avatar = ((bool) $wpua_disable_gravatar == 1 || $avatar_default == 'wp_user_avatar') ? ' checked="checked" ' : "";
    916     // Wrap WPUA in div
    917     $avatar_thumb_img = '<div id="wpua-preview"><img src="'.$avatar_thumb.'" width="32" /></div>';
    918     // Add WPUA to list
    919     $wpua_list = "\n\t<label><input type='radio' name='avatar_default' id='wp_user_avatar_radio' value='wp_user_avatar'$selected_avatar /> ";
    920     $wpua_list .= preg_replace("/src='(.+?)'/", "src='\$1'", $avatar_thumb_img);
    921     $wpua_list .= ' '.__('WP User Avatar', 'wp-user-avatar').'</label>';
    922     $wpua_list .= '<p id="wpua-edit"><button type="button" class="button" id="wpua-add" name="wpua-add">'.__('Edit Image').'</button>';
    923     $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>';
    924     $wpua_list .= '<input type="hidden" id="wp-user-avatar" name="avatar_default_wp_user_avatar" value="'.$wpua_avatar_default.'">';
    925     $wpua_list .= '<p id="wpua-message">'.sprintf(__('Click %s to save your changes', 'wp-user-avatar'), '&ldquo;'.__('Save Changes').'&rdquo;').'</p>';
    926     if((bool) $wpua_disable_gravatar != 1){
    927       return $wpua_list.'<div id="wp-avatars">'.$avatar_list.'</div>';
    928     } else {
    929       return $wpua_list;
    930     }
    931   }
    932   add_filter('default_avatar_select', 'wpua_add_default_avatar', 10);
    933 
    934   // Add default avatar_default to whitelist
    935   function wpua_whitelist_options($whitelist_options){
    936     $whitelist_options['discussion'][] = 'avatar_default_wp_user_avatar';
    937     return $whitelist_options;
    938   }
    939   add_filter('whitelist_options', 'wpua_whitelist_options', 10);
    940 
    941   // Add media state
    942   function wpua_add_media_state($media_states){
    943     global $post, $wpua_avatar_default;
    944     $is_wpua = get_post_custom_values('_wp_attachment_wp_user_avatar', $post->ID);
    945     if(!empty($is_wpua)){
    946       $media_states[] = __('Avatar');
    947     }
    948     if(!empty($wpua_avatar_default) && ($wpua_avatar_default == $post->ID)){
    949       $media_states[] = __('Default Avatar');
    950     }
    951     return apply_filters('wpua_add_media_state', $media_states);
    952   }
    953   add_filter('display_media_states', 'wpua_add_media_state', 10, 1);
    954 
    955   // Check if image is used as WPUA
    956   function wpua_image($attachment_id, $user_id, $wpua_image=false){
    957     global $wpdb;
    958     $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));
    959     if(!empty($wpua)){
    960       $wpua_image = true;
    961     }
    962     return $wpua_image;
    963   }
    964 
    965   // Check who owns image
    966   function wpua_author($attachment_id, $user_id, $wpua_author=false){
    967     $attachment = get_post($attachment_id);
    968     if(!empty($attachment) && $attachment->post_author == $user_id){
    969       $wpua_author = true;
    970     }
    971     return $wpua_author;
    972   }
    973 
    974   // Admin page
    975   function wpua_options_page(){
    976     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_tinymce, $wpua_upload_size_limit, $wpua_upload_size_limit_with_units;
    977     // Give subscribers edit_posts capability
    978     if(isset($_GET['settings-updated']) && $_GET['settings-updated'] == 'true' && (empty($wpua_allow_upload) || empty($wpua_edit_avatar))){
    979       wpua_subscriber_remove_cap();
    980     }
    981     $hide_size = (bool) $wpua_allow_upload != 1 ? ' style="display:none;"' : "";
    982     $hide_resize = (bool) $wpua_resize_upload != 1 ? ' style="display:none;"' : "";
    983   ?>
    984     <div class="wrap">
    985       <?php screen_icon(); ?>
    986       <h2><?php _e('WP User Avatar', 'wp-user-avatar'); ?></h2>
    987       <form method="post" action="<?php echo admin_url('options.php'); ?>">
    988         <?php settings_fields('wpua-settings-group'); ?>
    989         <?php do_settings_fields('wpua-settings-group', ""); ?>
    990         <?php do_action('wpua_donation_message'); ?>
    991         <table class="form-table">
    992           <tr valign="top">
    993             <th scope="row"><?php _e('Settings'); ?></th>
    994             <td>
    995               <fieldset>
    996                 <legend class="screen-reader-text"><span><?php _e('Settings'); ?></span></legend>
    997                 <label for="wp_user_avatar_tinymce">
    998                   <input name="wp_user_avatar_tinymce" type="checkbox" id="wp_user_avatar_tinymce" value="1" <?php checked($wpua_tinymce, 1); ?> />
    999                   <?php _e('Add avatar button to Visual Editor', 'wp-user-avatar'); ?>
    1000                 </label>
    1001               </fieldset>
    1002               <fieldset>
    1003                 <label for="wp_user_avatar_allow_upload">
    1004                   <input name="wp_user_avatar_allow_upload" type="checkbox" id="wp_user_avatar_allow_upload" value="1" <?php checked($wpua_allow_upload, 1); ?> />
    1005                   <?php _e('Allow Contributors & Subscribers to upload avatars', 'wp-user-avatar'); ?>
    1006                 </label>
    1007               </fieldset>
    1008               <fieldset>
    1009                 <label for="wp_user_avatar_disable_gravatar">
    1010                   <input name="wp_user_avatar_disable_gravatar" type="checkbox" id="wp_user_avatar_disable_gravatar" value="1" <?php checked($wpua_disable_gravatar, 1); ?> />
    1011                   <?php _e('Disable Gravatar and use only local avatars', 'wp-user-avatar'); ?>
    1012                 </label>
    1013               </fieldset>
    1014             </td>
    1015           </tr>
    1016         </table>
    1017         <div id="wpua-contributors-subscribers"<?php echo $hide_size; ?>>
    1018           <table class="form-table">
    1019             <tr valign="top">
    1020               <th scope="row">
    1021                 <label for="wp_user_avatar_upload_size_limit">
    1022                   <?php _e('Upload Size Limit', 'wp-user-avatar'); ?> <?php _e('(only for Contributors & Subscribers)', 'wp-user-avatar'); ?>
    1023                 </label>
    1024               </th>
    1025               <td>
    1026                 <fieldset>
    1027                   <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>
    1028                   <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" />
    1029                   <span id="wpua-readable-size"><?php echo $wpua_upload_size_limit_with_units; ?></span>
    1030                   <span id="wpua-readable-size-error"><?php printf(__('%s exceeds the maximum upload size for this site.'), ""); ?></span>
    1031                   <div id="wpua-slider"></div>
    1032                   <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>
    1033                 </fieldset>
    1034                 <fieldset>
    1035                   <label for="wp_user_avatar_edit_avatar">
    1036                     <input name="wp_user_avatar_edit_avatar" type="checkbox" id="wp_user_avatar_edit_avatar" value="1" <?php checked($wpua_edit_avatar, 1); ?> />
    1037                     <?php _e('Allow users to edit avatars', 'wp-user-avatar'); ?>
    1038                   </label>
    1039                 </fieldset>
    1040                 <fieldset>
    1041                   <label for="wp_user_avatar_resize_upload">
    1042                     <input name="wp_user_avatar_resize_upload" type="checkbox" id="wp_user_avatar_resize_upload" value="1" <?php checked($wpua_resize_upload, 1); ?> />
    1043                     <?php _e('Resize avatars on upload', 'wp-user-avatar'); ?>
    1044                   </label>
    1045                 </fieldset>
    1046                 <fieldset id="wpua-resize-sizes"<?php echo $hide_resize; ?>
    1047                   <br />
    1048                   <br />
    1049                   <label for="wp_user_avatar_resize_w"><?php _e('Width'); ?></label>
    1050                   <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" />
    1051                   <label for="wp_user_avatar_resize_h"><?php _e('Height'); ?></label>
    1052                   <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" />
    1053                   <br />
    1054                   <input name="wp_user_avatar_resize_crop" type="checkbox" id="wp_user_avatar_resize_crop" value="1" <?php checked('1', $wpua_resize_crop); ?> />
    1055                   <label for="wp_user_avatar_resize_crop"><?php _e('Crop avatars to exact dimensions', 'wp-user-avatar'); ?></label>
    1056                 </fieldset>
    1057               </td>
    1058             </tr>
    1059           </table>
    1060         </div>
    1061         <h3 class="title"><?php _e('Avatars'); ?></h3>
    1062         <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>
    1063         <table class="form-table">
    1064           <tr valign="top">
    1065           <th scope="row"><?php _e('Avatar Display'); ?></th>
    1066           <td>
    1067             <fieldset>
    1068               <legend class="screen-reader-text"><span><?php _e('Avatar Display'); ?></span></legend>
    1069               <label for="show_avatars">
    1070               <input type="checkbox" id="show_avatars" name="show_avatars" value="1" <?php checked($show_avatars, 1); ?> />
    1071               <?php _e('Show Avatars'); ?>
    1072               </label>
    1073             </fieldset>
    1074             </td>
    1075           </tr>
    1076           <tr valign="top">
    1077             <th scope="row"><?php _e('Maximum Rating'); ?></th>
    1078             <td>
    1079               <fieldset>
    1080                 <legend class="screen-reader-text"><span><?php _e('Maximum Rating'); ?></span></legend>
    1081                 <?php
    1082                   $ratings = array(
    1083                     'G' => __('G &#8212; Suitable for all audiences'),
    1084                     'PG' => __('PG &#8212; Possibly offensive, usually for audiences 13 and above'),
    1085                     'R' => __('R &#8212; Intended for adult audiences above 17'),
    1086                     'X' => __('X &#8212; Even more mature than above')
    1087                   );
    1088                   foreach ($ratings as $key => $rating) :
    1089                     $selected = (get_option('avatar_rating') == $key) ? 'checked="checked"' : "";
    1090                     echo "\n\t<label><input type='radio' name='avatar_rating' value='" . esc_attr($key) . "' $selected/> $rating</label><br />";
    1091                   endforeach;
    1092                 ?>
    1093               </fieldset>
    1094             </td>
    1095           </tr>
    1096           <tr valign="top">
    1097             <th scope="row"><?php _e('Default Avatar') ?></th>
    1098             <td class="defaultavatarpicker">
    1099               <fieldset>
    1100                 <legend class="screen-reader-text"><span><?php _e('Default Avatar'); ?></span></legend>
    1101                 <?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 />
    1102                 <?php echo wpua_add_default_avatar(); ?>
    1103               </fieldset>
    1104             </td>
    1105           </tr>
    1106         </table>
    1107         <?php submit_button(); ?>
    1108       </form>
    1109     </div>
    1110     <?php
    1111   }
    1112 
    1113   // Whitelist settings
    1114   function wpua_admin_settings(){
    1115     register_setting('wpua-settings-group', 'avatar_rating');
    1116     register_setting('wpua-settings-group', 'avatar_default');
    1117     register_setting('wpua-settings-group', 'avatar_default_wp_user_avatar', 'intval');
    1118     register_setting('wpua-settings-group', 'show_avatars', 'intval');
    1119     register_setting('wpua-settings-group', 'wp_user_avatar_tinymce', 'intval');
    1120     register_setting('wpua-settings-group', 'wp_user_avatar_allow_upload', 'intval');
    1121     register_setting('wpua-settings-group', 'wp_user_avatar_disable_gravatar', 'intval');
    1122     register_setting('wpua-settings-group', 'wp_user_avatar_edit_avatar', 'intval');
    1123     register_setting('wpua-settings-group', 'wp_user_avatar_resize_crop', 'intval');
    1124     register_setting('wpua-settings-group', 'wp_user_avatar_resize_h', 'intval');
    1125     register_setting('wpua-settings-group', 'wp_user_avatar_resize_upload', 'intval');
    1126     register_setting('wpua-settings-group', 'wp_user_avatar_resize_w', 'intval');
    1127     register_setting('wpua-settings-group', 'wp_user_avatar_upload_size_limit', 'intval');
    1128   }
    1129 
    1130   // Add options page and settings
    1131   function wpua_admin(){
    1132     add_options_page(__('WP User Avatar', 'wp-user-avatar'), __('WP User Avatar', 'wp-user-avatar'), 'manage_options', 'wp-user-avatar', 'wpua_options_page');
    1133     add_action('admin_init', 'wpua_admin_settings');
    1134   }
    1135 
    1136   // Initialize WPUA after other plugins are loaded
    1137   function wpua_load(){
    1138     global $wpua_instance;
    1139     $wpua_instance = new wp_user_avatar();
    1140   }
    1141   add_action('plugins_loaded', 'wpua_load');
    1142 }
    1143 
    1144 ?>
     39require_once(WPUA_INC.'wpua-globals.php');
     40require_once(WPUA_INC.'wpua-functions.php');
     41require_once(WPUA_INC.'class-wp-user-avatar.php');
     42require_once(WPUA_INC.'class-wp-user-avatar-admin.php');
     43require_once(WPUA_INC.'class-wp-user-avatar-shortcode.php');
     44require_once(WPUA_INC.'class-wp-user-avatar-subscriber.php');
     45require_once(WPUA_INC.'class-wp-user-avatar-update.php');
Note: See TracChangeset for help on using the changeset viewer.