<?php
 class elFinderPluginAutoRotate extends elFinderPlugin {
 public function __construct($opts) {
 $defaults = array( 'enable' => true, 'quality' => 95, 'offDropWith' => null, 'disableWithContentSaveId' => true );
 $this->opts = array_merge($defaults, $opts);
 }
 public function onUpLoadPreSave(&$thash, &$name, $src, $elfinder, $volume) {
 $opts = $this->getCurrentOpts($volume);
 if (!$this->iaEnabled($opts, $elfinder)) {
 return false;
 }
 $imageType = null;
 $srcImgInfo = null;
 if (extension_loaded('fileinfo') && function_exists('mime_content_type')) {
 $mime = mime_content_type($src);
 if (substr($mime, 0, 5) !== 'image') {
 return false;
 }
 }
 if (extension_loaded('exif') && function_exists('exif_imagetype')) {
 $imageType = exif_imagetype($src);
 if ($imageType === false) {
 return false;
 }
 }
 else {
 $srcImgInfo = getimagesize($src);
 if ($srcImgInfo === false) {
 return false;
 }
 $imageType = $srcImgInfo[2];
 }
 if ($imageType !== IMAGETYPE_JPEG) {
 return false;
 }
 if (!$srcImgInfo) {
 $srcImgInfo = getimagesize($src);
 }
 return $this->rotate($volume, $src, $srcImgInfo, $opts['quality']);
 }
 private function rotate($volume, $src, $srcImgInfo, $quality) {
 if (!function_exists('exif_read_data')) {
 return false;
 }
 $degree = 0;
 $exif = exif_read_data($src);
 if ($exif && !empty($exif['Orientation'])) {
 switch ($exif['Orientation']) {
 case 8: $degree = 270;
 break;
 case 3: $degree = 180;
 break;
 case 6: $degree = 90;
 break;
 }
 }
 $opts = array( 'degree' => $degree, 'jpgQuality' => $quality, 'checkAnimated' => true );
 return $volume->imageUtil('rotate', $src, $opts);
 }
 }
 