From da6e0c9051ce6fa381fceea22a965cc7f63335eb Mon Sep 17 00:00:00 2001 From: Graziano Vincini Date: Fri, 5 Dec 2014 11:22:22 +0100 Subject: [PATCH 1/2] User Profile Photo Signed-off-by: Graziano Vincini --- plugins/UserProfilePhoto.php | 194 +++++++++++++++++++++++++++++ resources/css/userprofilephoto.css | 103 +++++++++++++++ resources/js/userprofilephoto.js | 71 +++++++++++ 3 files changed, 368 insertions(+) create mode 100644 plugins/UserProfilePhoto.php create mode 100644 resources/css/userprofilephoto.css create mode 100644 resources/js/userprofilephoto.js diff --git a/plugins/UserProfilePhoto.php b/plugins/UserProfilePhoto.php new file mode 100644 index 0000000..e0872ef --- /dev/null +++ b/plugins/UserProfilePhoto.php @@ -0,0 +1,194 @@ + + * or + * + * + */ + + +// Enqueue scripts and styles +add_action( 'admin_enqueue_scripts', 'cupp_enqueue_scripts_styles' ); +function cupp_enqueue_scripts_styles() { + // Register + wp_register_style( 'cupp_admin_css', AERIA_RESOURCE_URL.'/css/userprofilephoto.css', false, '1.0.0', 'all' ); + wp_register_script( 'cupp_admin_js', AERIA_RESOURCE_URL.'/js/userprofilephoto.js', array('jquery'), '1.0.0', true ); + + // Enqueue + wp_enqueue_style( 'cupp_admin_css' ); + wp_enqueue_script( 'cupp_admin_js' ); +} + +// Show the new image field in the user profile page. +add_action( 'show_user_profile', 'cupp_profile_img_fields' ); +add_action( 'edit_user_profile', 'cupp_profile_img_fields' ); + +function cupp_profile_img_fields( $user ) { + if(!current_user_can('upload_files')) + return false; + + // vars + $cupp_url = get_the_author_meta( 'cupp_meta', $user->ID ); + $cupp_upload_url = get_the_author_meta( 'cupp_upload_meta', $user->ID ); + $cupp_upload_edit_url = get_the_author_meta( 'cupp_upload_edit_meta', $user->ID ); + + if(!$cupp_upload_url){ + $btn_text = 'Upload New Image'; + } else { + $cupp_upload_edit_url = get_home_url().get_the_author_meta( 'cupp_upload_edit_meta', $user->ID ); + $btn_text = 'Change Current Image'; + } + ?> + +
+

+ + + + + + + + +
+ +
+ + +
+ Remove + Edit +
+ + +
+ Remove +
+ +
+ + +
+ +
+ +
+
+ + +
+ + +
+
+ + +
+ +
+ + + +

+
+
+ + + +prefix; + $attachment = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM " . $prefix . "posts WHERE guid RLIKE %s;", $parse_url[1] ) ); + + // Returns null if no attachment is found. + return $attachment[0]; +} + +/** + * Retrieve the appropriate image size + * + * @param $user_id Default: $post->post_author. Will accept any valid user ID passed into this parameter. + * @param $size Default: 'thumbnail'. Accepts all default WordPress sizes and any custom sizes made by the add_image_size() function. + * @return {url} Use this inside the src attribute of an image tag or where you need to call the image url. + */ +function get_cupp_meta( $user_id, $size ) { + + //allow the user to specify the image size + if (!$size){ + $size = 'thumbnail'; // Default image size if not specified. + } + if(!$user_id){ + $user_id = $post->post_author; + } + + // get the custom uploaded image + $attachment_upload_url = esc_url( get_the_author_meta( 'cupp_upload_meta', $user_id ) ); + + // get the external image + $attachment_ext_url = esc_url( get_the_author_meta( 'cupp_meta', $user_id ) ); + $attachment_url = ''; + if($attachment_upload_url){ + $attachment_url = $attachment_upload_url; + } elseif($attachment_ext_url) { + $attachment_url = $attachment_ext_url; + } + + // grabs the id from the URL using Frankie Jarretts function + $attachment_id = get_attachment_image_by_url( $attachment_url ); + + // retrieve the thumbnail size of our image + $image_thumb = wp_get_attachment_image_src( $attachment_id, $size ); + + // return the image thumbnail + return $image_thumb[0]; +} + +?> \ No newline at end of file diff --git a/resources/css/userprofilephoto.css b/resources/css/userprofilephoto.css new file mode 100644 index 0000000..d19032f --- /dev/null +++ b/resources/css/userprofilephoto.css @@ -0,0 +1,103 @@ +/* + Title: 3five Admin CUPP Styles + Author: Vincent Listrani + Description: Styles for WP Admin user page. +*/ +#cupp_container* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +#cupp_container{ + background: #fcfcfc; + padding: 10px; + margin-top: 20px; +} + +/* Current Profile Image Styles */ +#current_img{ + position: relative; + width: 160px; + height: auto; + text-align: right; + margin-bottom: 10px; +} + +.cupp-current-img{ + display: block; + max-width: 150px; + max-height: 150px; + width: 100%; + height: auto; + padding: 4px; + background: #fefefe; + border: 1px solid #e5e5e5; +} + +.edit_options{ + display: block; + -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + opacity: 0; + position: absolute; + top: 0; + left: 0; + max-width: 160px; + width: 100%; + height: 100%; + background-color: #fff; + background-color: rgba(255, 255, 255, 0.25); +} +.edit_options .remove_img, .edit_options .edit_img{ + float: left; + position: relative; + color: #444; + font-size: 13px; + width: 50%; + height: 100%; + text-align: center; + cursor: pointer; + text-decoration: none; +} +.edit_options span{ + display: block; + position: relative; + top: 50%; + margin-top: -10px; +} + +.edit_options .remove_img{ + color: #fff; + background-color: rgb(214, 14, 14); + background-color: rgba(214, 14, 14, 0.50); +} + +.edit_options.single .remove_img{ + width: 100%; +} + +.edit_options .remove_img:hover, .edit_options .remove_img:focus{ + background-color: #ff0000; + background-color: rgba(214, 14, 14, 0.75); +} + +.edit_options .edit_img{ + color: #fff; + background-color: rgb(50, 50, 50); + background-color: rgba(50, 50, 50, 0.50); +} + +.edit_options .edit_img:hover, .edit_options .edit_img:focus{ + background-color: rgb(25, 25, 25); + background-color: rgba(50, 50, 50, 0.75); +} + +/* Radio Button Styles */ +#cupp_options{ + margin-bottom: 10px; +} + +#cupp_external{ + display: none; +} \ No newline at end of file diff --git a/resources/js/userprofilephoto.js b/resources/js/userprofilephoto.js new file mode 100644 index 0000000..0397f06 --- /dev/null +++ b/resources/js/userprofilephoto.js @@ -0,0 +1,71 @@ +/* + * Adapted from: http://mikejolley.com/2012/12/using-the-new-wordpress-3-5-media-uploader-in-plugins/ + * Further modified from PippinsPlugins https://gist.github.com/pippinsplugins/29bebb740e09e395dc06 + */ +jQuery(document).ready(function($){ +// Uploading files +var file_frame; + + jQuery('.cupp_wpmu_button').on('click', function( event ){ + + event.preventDefault(); + + // If the media frame already exists, reopen it. + if ( file_frame ) { + file_frame.open(); + return; + } + + // Create the media frame. + file_frame = wp.media.frames.file_frame = wp.media({ + title: jQuery( this ).data( 'uploader_title' ), + button: { + text: jQuery( this ).data( 'uploader_button_text' ), + }, + multiple: false // Set to true to allow multiple files to be selected + }); + + // When an image is selected, run a callback. + file_frame.on( 'select', function() { + // We set multiple to false so only get one image from the uploader + attachment = file_frame.state().get('selection').first().toJSON(); + + // Do something with attachment.id and/or attachment.url here + // write the selected image url to the value of the #cupp_meta text field + jQuery('#cupp_meta').val(''); + jQuery('#cupp_upload_meta').val(attachment.url); + jQuery('#cupp_upload_edit_meta').val('/wp/wp-admin/post.php?post='+attachment.id+'&action=edit&image-editor'); + jQuery('.cupp-current-img').attr('src', attachment.url); + }); + + // Finally, open the modal + file_frame.open(); + }); + +// Toggle Image Type + jQuery('input[name=img_option]').on('click', function( event ){ + var imgOption = jQuery(this).val(); + + if (imgOption == 'external'){ + jQuery('#cupp_upload').hide(); + jQuery('#cupp_external').show(); + } else if (imgOption == 'upload'){ + jQuery('#cupp_external').hide(); + jQuery('#cupp_upload').show(); + } + + }); + +// Remove Image Function + jQuery('.edit_options').hover(function(){ + jQuery(this).stop(true, true).animate({opacity: 1}, 100); + }, function(){ + jQuery(this).stop(true, true).animate({opacity: 0}, 100); + }); + + jQuery('.remove_img').on('click', function( event ){ + jQuery(this).parent().add('.cupp-current-img').fadeOut('fast', function(){jQuery(this).remove()}); + jQuery('#cupp_upload_meta, #cupp_upload_edit_meta, #cupp_meta').val(''); + }); + +}); \ No newline at end of file From 51596ea711384c14d522c7cbe279a47d1a553ba6 Mon Sep 17 00:00:00 2001 From: Graziano Vincini Date: Fri, 5 Dec 2014 11:26:08 +0100 Subject: [PATCH 2/2] 1.2.0 Signed-off-by: Graziano Vincini --- aeria.php | 4 ++-- metadata.json | 11 ++++------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/aeria.php b/aeria.php index 6a3d4f3..58e361a 100755 --- a/aeria.php +++ b/aeria.php @@ -5,14 +5,14 @@ * Author: Caffeina Srl * Author URI: http://caffeina.co * Plugin URI: https://github.com/CaffeinaLab/aeria - * Version: 1.1.1 + * Version: 1.2.0 */ // Exit if accessed directly if( false === defined('ABSPATH') ) exit; // The Framework version -define('AERIA','1.1.1'); +define('AERIA','1.2.0'); // Store whether or not we're in the admin if( false === defined('IS_ADMIN') ) define( 'IS_ADMIN', is_admin() ); diff --git a/metadata.json b/metadata.json index 923cbf3..4cca3eb 100644 --- a/metadata.json +++ b/metadata.json @@ -4,20 +4,17 @@ "homepage": "http://labs.caffeina.co/tech/aeria", "download_url": "https://github.com/CaffeinaLab/aeria/archive/master.zip", - "version": "1.1.1", + "version": "1.2.0", "requires": "3.5", "tested": "4.0", - "last_updated": "2014-12-04 10:00:00", - "upgrade_notice": "Aeria Branding and Aeria Dashboard", + "last_updated": "2014-12-05 11:00:00", + "upgrade_notice": "[New] User Profile upload photo", "author": "Caffeina", "author_homepage": "http://caffeina.co/", "sections": { - "description": "(Required) Plugin description. Basic HTML can be used in all sections.", - "installation": "(Recommended) Installation instructions.", - "changelog": "(Recommended) Changelog.

This section will be opened by default when the user clicks 'View version XYZ information'.

", - "custom_section": "This is a custom section labeled 'Custom Section'." + "description": "Modular, Fast, Wordpress Framework for advanced theme development.", }, "rating": 100,