12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- <?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();
- // ensuring the avatar image exists in the first place
- if (!file_exists($filename)) {
- register_error(elgg_echo('avatar:crop:fail'));
- forward(REFERER);
- }
- $icon_sizes = elgg_get_config('icon_sizes');
- unset($icon_sizes['master']);
- // 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();
- }
- register_error(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'));
- $view = 'river/user/default/profileiconupdate';
- elgg_delete_river(array('subject_guid' => $owner->guid, 'view' => $view));
- elgg_create_river_item(array(
- 'view' => $view,
- 'action_type' => 'update',
- 'subject_guid' => $owner->guid,
- 'object_guid' => $owner->guid,
- ));
- forward(REFERER);
|