--- /dev/null
+<?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);
--- /dev/null
+<?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);
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');
'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
*/
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'));
+++ /dev/null
-<?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);
-}
+++ /dev/null
-<?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);
$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>
</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>
--- /dev/null
+<?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>
--- /dev/null
+<?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>