]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
moved the avatar forms and actions into core from profile plugin
authorcash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Sat, 18 Dec 2010 20:15:24 +0000 (20:15 +0000)
committercash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Sat, 18 Dec 2010 20:15:24 +0000 (20:15 +0000)
git-svn-id: http://code.elgg.org/elgg/trunk@7670 36083f99-b078-4883-b0ff-0f9b5a30f544

actions/avatar/crop.php [new file with mode: 0644]
actions/avatar/upload.php [new file with mode: 0644]
engine/lib/users.php
languages/en.php
mod/groups/start.php
mod/profile/actions/cropicon.php [deleted file]
mod/profile/actions/iconupload.php [deleted file]
mod/profile/views/default/profile/editicon.php
views/default/forms/avatar/crop.php [new file with mode: 0644]
views/default/forms/avatar/upload.php [new file with mode: 0644]

diff --git a/actions/avatar/crop.php b/actions/avatar/crop.php
new file mode 100644 (file)
index 0000000..ed5faec
--- /dev/null
@@ -0,0 +1,69 @@
+<?php
+/**
+ * Avatar crop action
+ *
+ */
+
+$guid = get_input('guid');
+$owner = get_entity($guid);
+
+if (!$owner || !($owner instanceof ElggUser) || !$owner->canEdit()) {
+       register_error(elgg_echo('avatar:crop:fail'));
+       forward(REFERER);
+}
+
+$x1 = (int) get_input('x1', 0);
+$y1 = (int) get_input('y1', 0);
+$x2 = (int) get_input('x2', 0);
+$y2 = (int) get_input('y2', 0);
+
+$filehandler = new ElggFile();
+$filehandler->owner_guid = $owner->getGUID();
+$filehandler->setFilename("profile/" . $owner->guid . "master" . ".jpg");
+$filename = $filehandler->getFilenameOnFilestore();
+
+//@todo make this configurable?
+$icon_sizes = array(
+       'topbar' => array('w'=>16, 'h'=>16, 'square'=>TRUE, 'upscale'=>TRUE),
+       'tiny' => array('w'=>25, 'h'=>25, 'square'=>TRUE, 'upscale'=>TRUE),
+       'small' => array('w'=>40, 'h'=>40, 'square'=>TRUE, 'upscale'=>TRUE),
+       'medium' => array('w'=>100, 'h'=>100, 'square'=>TRUE, 'upscale'=>TRUE),
+       'large' => array('w'=>200, 'h'=>200, 'square'=>FALSE, 'upscale'=>FALSE)
+);
+
+// get the images and save their file handlers into an array
+// so we can do clean up if one fails.
+$files = array();
+foreach ($icon_sizes as $name => $size_info) {
+       $resized = get_resized_image_from_existing_file($filename, $size_info['w'], $size_info['h'], $size_info['square'], $x1, $y1, $x2, $y2, $size_info['upscale']);
+
+       if ($resized) {
+               //@todo Make these actual entities.  See exts #348.
+               $file = new ElggFile();
+               $file->owner_guid = $guid;
+               $file->setFilename("profile/{$guid}{$name}.jpg");
+               $file->open('write');
+               $file->write($resized);
+               $file->close();
+               $files[] = $file;
+       } else {
+               // cleanup on fail
+               foreach ($files as $file) {
+                       $file->delete();
+               }
+
+               system_message(elgg_echo('avatar:resize:fail'));
+               forward(REFERER);
+       }
+}
+
+$owner->icontime = time();
+
+$owner->x1 = $x1;
+$owner->x2 = $x2;
+$owner->y1 = $y1;
+$owner->y2 = $y2;
+
+system_message(elgg_echo('avatar:crop:success'));
+
+forward(REFERER);
diff --git a/actions/avatar/upload.php b/actions/avatar/upload.php
new file mode 100644 (file)
index 0000000..052212e
--- /dev/null
@@ -0,0 +1,55 @@
+<?php
+/**
+ * Avatar upload action
+ */
+
+$guid = get_input('guid');
+$owner = get_entity($guid);
+
+if (!$owner || !($owner instanceof ElggUser) || !$owner->canEdit()) {
+       register_error(elgg_echo('avatar:upload:fail'));
+       forward(REFERER);
+}
+
+//@todo make this configurable?
+$icon_sizes = array(
+       'topbar' => array('w'=>16, 'h'=>16, 'square'=>TRUE, 'upscale'=>TRUE),
+       'tiny' => array('w'=>25, 'h'=>25, 'square'=>TRUE, 'upscale'=>TRUE),
+       'small' => array('w'=>40, 'h'=>40, 'square'=>TRUE, 'upscale'=>TRUE),
+       'medium' => array('w'=>100, 'h'=>100, 'square'=>TRUE, 'upscale'=>TRUE),
+       'large' => array('w'=>200, 'h'=>200, 'square'=>FALSE, 'upscale'=>FALSE),
+       'master' => array('w'=>550, 'h'=>550, 'square'=>FALSE, 'upscale'=>FALSE)
+);
+
+// get the images and save their file handlers into an array
+// so we can do clean up if one fails.
+$files = array();
+foreach ($icon_sizes as $name => $size_info) {
+       $resized = get_resized_image_from_uploaded_file('avatar', $size_info['w'], $size_info['h'], $size_info['square'], $size_info['upscale']);
+
+       if ($resized) {
+               //@todo Make these actual entities.  See exts #348.
+               $file = new ElggFile();
+               $file->owner_guid = $guid;
+               $file->setFilename("profile/{$guid}{$name}.jpg");
+               $file->open('write');
+               $file->write($resized);
+               $file->close();
+               $files[] = $file;
+       } else {
+               // cleanup on fail
+               foreach ($files as $file) {
+                       $file->delete();
+               }
+
+               system_message(elgg_echo('avatar:resize:fail'));
+               forward(REFERER);
+       }
+}
+
+$owner->icontime = time();
+if (elgg_trigger_event('profileiconupdate', $owner->type, $owner)) {
+       system_message(elgg_echo("avatar:upload:success"));
+}
+
+forward(REFERER);
index d69461c2b92def41fee65005afc6bc900e5d7988..b9bf2058f963c4da6e3369d1acc1317a0353a3b1 100644 (file)
@@ -1535,6 +1535,9 @@ function users_init() {
        elgg_register_action("useradd", '', 'public');
        elgg_register_action("friends/add");
        elgg_register_action("friends/remove");
+       elgg_register_action('avatar/upload');
+       elgg_register_action('avatar/crop');
+
        //elgg_register_action('friends/addcollection');
        //elgg_register_action('friends/deletecollection');
        //elgg_register_action('friends/editcollection');
index 2d406d3bee499a4941f34eee30eb3d417d4b22f6..2168845b4107db790d82e52bfe8c0c9108830fb3 100644 (file)
@@ -364,6 +364,16 @@ $english = array(
 
        'friendspicker:chararray' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
 
+       'avatar' => 'Avatar',
+       'avatar:create' => 'Create your avatar',
+       'avatar:preview' => 'Preview',
+       'avatar:create:instructions' => 'Click and drag a square below to match how you want your avatar cropped. A preview will appear in the box on the right. When you are happy with the preview, click \'Create your avatar\'. This cropped version will be used throughout the site as your avatar.',
+       'avatar:upload:success' => 'Avatar successfully uploaded',
+       'avatar:upload:fail' => 'Avatar upload failed',
+       'avatar:resize:fail' => 'Resize of the avatar failed',
+       'avatar:crop:success' => 'Cropping the avatar succeeded',
+       'avatar:crop:fail' => 'Avatar cropping failed',
+
 /**
  * Feeds
  */
index aaaaa3f455f89a618fe975948fa29fc81cc844f5..c2b3dc35b5a87c111a90bbc44afe53b2fe752789 100644 (file)
@@ -39,7 +39,7 @@
                elgg_register_action("groups/invite", $CONFIG->pluginspath . "groups/actions/invite.php");
 
                // Add a page owner handler
-               elgg_register_plugin_hook_handler('page_owner', 'system', 'groups_page_owner_handler');
+               //elgg_register_plugin_hook_handler('page_owner', 'system', 'groups_page_owner_handler');
 
                // Add some widgets
                elgg_register_widget_type('a_users_groups',elgg_echo('groups:widget:membership'), elgg_echo('groups:widgets:description'));
diff --git a/mod/profile/actions/cropicon.php b/mod/profile/actions/cropicon.php
deleted file mode 100644 (file)
index c65b5f5..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-/**
- * Elgg profile plugin upload new user icon action
- *
- * @package ElggProfile
- */
-
-$profile_username = get_input('username');
-$profile_owner = get_user_by_username($profile_username);
-
-if (!$profile_owner || !($profile_owner instanceof ElggUser) || !$profile_owner->canEdit()) {
-       register_error(elgg_echo('profile:icon:fail'));
-       forward(REFERER);
-}
-
-$x1 = (int) get_input('x_1',0);
-$y1 = (int) get_input('y_1',0);
-$x2 = (int) get_input('x_2',0);
-$y2 = (int) get_input('y_2',0);
-
-$filehandler = new ElggFile();
-$filehandler->owner_guid = $profile_owner->getGUID();
-$filehandler->setFilename("profile/" . $profile_owner->guid . "master" . ".jpg");
-$filename = $filehandler->getFilenameOnFilestore();
-
-$topbar = get_resized_image_from_existing_file($filename, 16, 16, true, $x1, $y1, $x2, $y2, TRUE);
-$tiny = get_resized_image_from_existing_file($filename, 25, 25, true, $x1, $y1, $x2, $y2, TRUE);
-$small = get_resized_image_from_existing_file($filename, 40, 40, true, $x1, $y1, $x2, $y2, TRUE);
-$medium = get_resized_image_from_existing_file($filename, 100, 100, true, $x1, $y1, $x2, $y2, TRUE);
-$large = get_resized_image_from_existing_file($filename, 550, 550, true, $x1, $y1, $x2, $y2);
-
-if ($tiny !== FALSE && $small !== FALSE && $medium !== FALSE && $large !== FALSE) {
-       $filehandler = new ElggFile();
-       $filehandler->owner_guid = $profile_owner->getGUID();
-       $filehandler->setFilename("profile/" .  $profile_owner->guid . "large.jpg");
-       $filehandler->open("write");
-       $filehandler->write($large);
-       $filehandler->close();
-       $filehandler->setFilename("profile/" .  $profile_owner->guid . "medium.jpg");
-       $filehandler->open("write");
-       $filehandler->write($medium);
-       $filehandler->close();
-       $filehandler->setFilename("profile/" .  $profile_owner->guid . "small.jpg");
-       $filehandler->open("write");
-       $filehandler->write($small);
-       $filehandler->close();
-       $filehandler->setFilename("profile/" .  $profile_owner->guid . "tiny.jpg");
-       $filehandler->open("write");
-       $filehandler->write($tiny);
-       $filehandler->close();
-       $filehandler->setFilename("profile/" .  $profile_owner->guid . "topbar.jpg");
-       $filehandler->open("write");
-       $filehandler->write($topbar);
-       $filehandler->close();
-
-       $profile_owner->x1 = $x1;
-       $profile_owner->x2 = $x2;
-       $profile_owner->y1 = $y1;
-       $profile_owner->y2 = $y2;
-
-       $profile_owner->icontime = time();
-
-       system_message(elgg_echo("profile:icon:uploaded"));
-} else {
-       register_error(elgg_echo("profile:icon:notfound"));
-}
-
-//forward the user back to the upload page to crop
-$url = elgg_get_site_url()."pg/profile/{$profile_owner->username}/edit/icon";
-
-if (isloggedin()) {
-       forward($url);
-}
diff --git a/mod/profile/actions/iconupload.php b/mod/profile/actions/iconupload.php
deleted file mode 100644 (file)
index 546aa0e..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-/**
- * Elgg profile plugin upload new user icon action
- *
- * @package ElggProfile
- */
-
-$profile_username = get_input('username');
-$profile_owner = get_user_by_username($profile_username);
-
-if (!$profile_owner || !($profile_owner instanceof ElggUser) || !$profile_owner->canEdit()) {
-       register_error(elgg_echo('profile:icon:fail'));
-       forward(REFERER);
-}
-
-$profile_owner_guid = $profile_owner->getGUID();
-
-//@todo make this configurable?
-$icon_sizes = array(
-       'topbar' => array('w'=>16, 'h'=>16, 'square'=>TRUE, 'upscale'=>TRUE),
-       'tiny' => array('w'=>25, 'h'=>25, 'square'=>TRUE, 'upscale'=>TRUE),
-       'small' => array('w'=>40, 'h'=>40, 'square'=>TRUE, 'upscale'=>TRUE),
-       'medium' => array('w'=>100, 'h'=>100, 'square'=>TRUE, 'upscale'=>TRUE),
-       'large' => array('w'=>200, 'h'=>200, 'square'=>FALSE, 'upscale'=>FALSE),
-       'master' => array('w'=>550, 'h'=>550, 'square'=>FALSE, 'upscale'=>FALSE)
-);
-
-// get the images and save their file handlers into an array
-// so we can do clean up if one fails.
-$files = array();
-foreach ($icon_sizes as $name => $size_info) {
-       $resized = get_resized_image_from_uploaded_file('profileicon', $size_info['w'], $size_info['h'], $size_info['square'], $size_info['upscale']);
-
-       if ($resized) {
-               //@todo Make these actual entities.  See exts #348.
-               $file = new ElggFile();
-               $file->owner_guid = $profile_owner_guid;
-               $file->setFilename("profile/{$profile_owner_guid}{$name}.jpg");
-               $file->open('write');
-               $file->write($resized);
-               $file->close();
-               $files[] = $file;
-       } else {
-               // cleanup on fail
-               foreach ($files as $file) {
-                       $file->delete();
-               }
-
-               system_message(elgg_echo('profile:icon:notfound'));
-               forward(REFERER);
-       }
-}
-
-$profile_owner->icontime = time();
-if (elgg_trigger_event('profileiconupdate', $profile_owner->type, $profile_owner)) {
-       // pull this out into the river plugin.
-       //add_to_river('river/user/default/profileiconupdate','update',$user->guid,$user->guid);
-       system_message(elgg_echo("profile:icon:uploaded"));
-}
-
-//forward the user back to the upload page to crop
-forward(REFERER);
index 9eeaecb4ae7991799e7f08668e5b1389723328c7..878ec504bf77d85b319ee75bbcaa17a6317dbffc 100644 (file)
@@ -12,8 +12,6 @@
 $currentuser = get_loggedin_user();
 ?>
 <div id="edit_profile_avatar">
-<!-- grab the required js for icon cropping -->
-<script type="text/javascript" src="<?php echo elgg_get_site_url(); ?>mod/profile/views/default/js/jquery.imgareaselect-0.8.min.js"></script>
 
 <p class="margin-top"><?php echo elgg_echo('profile:profilepictureinstructions'); ?></p>
 
@@ -30,112 +28,16 @@ $currentuser = get_loggedin_user();
 </div>
 
 <div id="avatar_upload">
-       <form action="<?php echo elgg_get_site_url(); ?>action/profile/iconupload" method="post" enctype="multipart/form-data">
-       <?php echo elgg_view('input/securitytoken'); ?>
-       <input type="hidden" name="username" value="<?php echo $currentuser->username; ?>" />
-       <p><label><?php echo elgg_echo("profile:editicon"); ?></label><br />
-       
-               <?php
-                       
-                       echo elgg_view("input/file",array('internalname' => 'profileicon'));
-               ?>
-               <br /><input type="submit" class="submit-button" value="<?php echo elgg_echo("upload"); ?>" />
-       </p>
-       </form>
+<?php
+       echo elgg_view_form('avatar/upload', array('enctype' => 'multipart/form-data'), array('entity' => $currentuser));
+?>
 </div>
        
 <div id="avatar_croppingtool"> 
 <label><?php echo elgg_echo('profile:profilepicturecroppingtool'); ?></label><br />
-<p>    
-<?php
 
-    echo elgg_echo("profile:createicon:instructions");
-    
-    //display the current user photo
-     
-    $user_master_image = $currentuser->getIcon('master');
-    
+<?php echo elgg_view_form('avatar/crop', array(), array('entity' => get_loggedin_user()));
 ?>
-</p>
-<script type="text/javascript">
-
-    //function to display a preview of the users cropped section
-    function preview(img, selection) {
-               // catch for the first click on the image
-               if (selection.width == 0 || selection.height == 0) {
-                       return;
-               }
-               
-        var origWidth = $("#user_avatar").width(); //get the width of the users master photo
-        var origHeight = $("#user_avatar").height(); //get the height of the users master photo
-        var scaleX = 100 / selection.width; 
-        var scaleY = 100 / selection.height; 
-        $('#user_avatar_preview > img').css({ 
-            width: Math.round(scaleX * origWidth) + 'px', 
-            height: Math.round(scaleY * origHeight) + 'px', 
-            marginLeft: '-' + Math.round(scaleX * selection.x1) + 'px', 
-            marginTop: '-' + Math.round(scaleY * selection.y1) + 'px' 
-         }); 
-    } 
-        
-    //variables for the newly cropped avatar
-    //var $x1, $y1, $x2, $y2, $w, $h;
-        
-        function selectChange(img, selection){
-           
-           //populate the form with the correct coordinates once a user has cropped their image
-           $('#x_1').val(selection.x1);
-           $('#x_2').val(selection.x2);
-           $('#y_1').val(selection.y1);
-           $('#y_2').val(selection.y2);
-           
-         }     
-         
-        $(document).ready(function () {
-            
-            //get the coordinates from the form
-            /*
-            var x_1 = $('#x_1').val();
-            var x_2 = $('#x_2').val();
-            var y_1 = $('#y_1').val();
-            var y_2 = $('#y_2').val();
-            var w = x_2 - x_1;
-            var h = y_2 - y_1;
-            selection = { x1: x_1, y1: y_1, x2: x_2, y2: y_2, width: w, height: h };
-            */
-            
-            $('<div id="user_avatar_preview"><img src="<?php echo $user_master_image; ?>" /></div>') 
-            .insertAfter($('#user_avatar'));
-            
-            $('<div id="user_avatar_preview_title"><label><?php echo elgg_echo('profile:preview'); ?></label></div>').insertBefore($('#user_avatar_preview'));
-        }); 
-        
-        $(window).load(function () { 
-            
-            //this produces the coordinates
-            $('#user_avatar').imgAreaSelect({ selectionOpacity: 0, onSelectEnd: selectChange });
-            //show the preview
-            $('#user_avatar').imgAreaSelect({ aspectRatio: '1:1', onSelectChange: preview });
-  
-        });
-</script>
-
-<p>
-<img id="user_avatar" src="<?php echo $user_master_image; ?>" alt="<?php echo elgg_echo("profile:icon"); ?>" />
-</p>
-
-<div class="clearfloat"></div>
-
-<form action="<?php echo elgg_get_site_url(); ?>action/profile/cropicon" method="post" />
-       <?php echo elgg_view('input/securitytoken'); ?>
-       <input type="hidden" name="username" value="<?php echo get_loggedin_user()->username; ?>" />
-       <input type="hidden" name="x_1" value="<?php echo get_loggedin_user()->x1; ?>" id="x_1" />
-    <input type="hidden" name="x_2" value="<?php echo get_loggedin_user()->x2; ?>" id="x_2" />
-    <input type="hidden" name="y_1" value="<?php echo get_loggedin_user()->y1; ?>" id="y_1" />
-    <input type="hidden" name="y_2" value="<?php echo get_loggedin_user()->y2; ?>" id="y_2" />
-       <input type="submit" name="submit" value="<?php echo elgg_echo("profile:createicon"); ?>" />
-</form>
 
 </div>
 </div>
diff --git a/views/default/forms/avatar/crop.php b/views/default/forms/avatar/crop.php
new file mode 100644 (file)
index 0000000..1082ab8
--- /dev/null
@@ -0,0 +1,71 @@
+<?php
+/**
+ * Avatar crop form
+ *
+ * @uses $vars['entity']
+ */
+
+$master_image = $vars['entity']->getIcon('master');
+
+?>
+<p>
+       <?php echo elgg_echo("avatar:create:instructions"); ?>
+</p>
+<p>
+       <img id="user_avatar" src="<?php echo $master_image; ?>" alt="<?php echo elgg_echo('avatar'); ?>" />
+</p>
+
+<div class="clearfloat"></div>
+<?php
+$coords = array('x1', 'x2', 'y1', 'y2');
+foreach ($coords as $coord) {
+       echo elgg_view('input/hidden', array('internalname' => $coord, 'value' => $vars['entity']->$coord));
+}
+
+echo elgg_view('input/hidden', array('internalname' => 'guid', 'value' => $vars['entity']->guid));
+
+echo elgg_view('input/submit', array('value' => elgg_echo('avatar:create')));
+
+?>
+<!-- grab the required js for icon cropping -->
+<script type="text/javascript" src="<?php echo elgg_get_site_url(); ?>mod/profile/views/default/js/jquery.imgareaselect-0.8.min.js"></script>
+
+<script type="text/javascript">
+
+       // display a preview of the users cropped section
+       function preview(img, selection) {
+               // catch for the first click on the image
+               if (selection.width == 0 || selection.height == 0) {
+                       return;
+               }
+
+               var origWidth = $("#user_avatar").width(); //get the width of the users master photo
+               var origHeight = $("#user_avatar").height(); //get the height of the users master photo
+               var scaleX = 100 / selection.width;
+               var scaleY = 100 / selection.height;
+               $('#user_avatar_preview > img').css({
+                       width: Math.round(scaleX * origWidth) + 'px',
+                       height: Math.round(scaleY * origHeight) + 'px',
+                       marginLeft: '-' + Math.round(scaleX * selection.x1) + 'px',
+                       marginTop: '-' + Math.round(scaleY * selection.y1) + 'px'
+               });
+       }
+
+       function selectChange(img, selection) {
+               // populate the form with the correct coordinates once a user has cropped their image
+               $('input[name=x1]').val(selection.x1);
+               $('input[name=x2]').val(selection.x2);
+               $('input[name=y1]').val(selection.y1);
+               $('input[name=y2]').val(selection.y2);
+       }
+
+       $(document).ready(function() {
+               $('<div id="user_avatar_preview"><img src="<?php echo $master_image; ?>" /></div>').insertAfter($('#user_avatar'));
+        $('<div id="user_avatar_preview_title"><label><?php echo elgg_echo('avatar:preview'); ?></label></div>').insertBefore($('#user_avatar_preview'));
+
+               // this produces the coordinates
+               $('#user_avatar').imgAreaSelect({ selectionOpacity: 0, onSelectEnd: selectChange });
+               // show the preview
+               $('#user_avatar').imgAreaSelect({ aspectRatio: '1:1', onSelectChange: preview });
+       });
+</script>
diff --git a/views/default/forms/avatar/upload.php b/views/default/forms/avatar/upload.php
new file mode 100644 (file)
index 0000000..733e299
--- /dev/null
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Avatar upload form
+ * 
+ * @uses $vars['entity']
+ */
+
+echo elgg_view('input/hidden', array('internalname' => 'guid', 'value' => $vars['entity']->guid));
+?>
+<p>
+       <label><?php echo elgg_echo("profile:editicon"); ?></label><br />
+       <?php echo elgg_view("input/file",array('internalname' => 'avatar')); ?>
+<br />
+       <?php echo elgg_view('input/submit', array('value' => elgg_echo('upload'))); ?>
+</p>