diff options
Diffstat (limited to 'actions/avatar/upload.php')
| -rw-r--r-- | actions/avatar/upload.php | 62 | 
1 files changed, 62 insertions, 0 deletions
diff --git a/actions/avatar/upload.php b/actions/avatar/upload.php new file mode 100644 index 000000000..0752615e0 --- /dev/null +++ b/actions/avatar/upload.php @@ -0,0 +1,62 @@ +<?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); +} + +if ($_FILES['avatar']['error'] != 0) { +	register_error(elgg_echo('avatar:upload:fail')); +	forward(REFERER); +} + +$icon_sizes = elgg_get_config('icon_sizes'); + +// 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(); +		} + +		register_error(elgg_echo('avatar:resize:fail')); +		forward(REFERER); +	} +} + +// reset crop coordinates +$owner->x1 = 0; +$owner->x2 = 0; +$owner->y1 = 0; +$owner->y2 = 0; + +$owner->icontime = time(); +if (elgg_trigger_event('profileiconupdate', $owner->type, $owner)) { +	system_message(elgg_echo("avatar:upload:success")); + +	$view = 'river/user/default/profileiconupdate'; +	elgg_delete_river(array('subject_guid' => $owner->guid, 'view' => $view)); +	add_to_river($view, 'update', $owner->guid, $owner->guid); +} + +forward(REFERER);  | 
