aboutsummaryrefslogtreecommitdiff
path: root/actions/avatar/upload.php
diff options
context:
space:
mode:
Diffstat (limited to 'actions/avatar/upload.php')
-rw-r--r--actions/avatar/upload.php55
1 files changed, 55 insertions, 0 deletions
diff --git a/actions/avatar/upload.php b/actions/avatar/upload.php
new file mode 100644
index 000000000..052212e97
--- /dev/null
+++ b/actions/avatar/upload.php
@@ -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);