/var/www/hkosl.com/kwokfai/libraries/elFinder-2.1.32/php/plugins/AutoRotate/plugin.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<?php
/**
 * elFinder Plugin AutoRotate
 *
 * Auto rotation on file upload of JPEG file by EXIF Orientation.
 *
 * ex. binding, configure on connector options
 *    $opts = array(
 *        'bind' => array(
 *            'upload.presave' => array(
 *                'Plugin.AutoRotate.onUpLoadPreSave'
 *            )
 *        ),
 *        // global configure (optional)
 *        'plugin' => array(
 *            'AutoRotate' => array(
 *                'enable'         => true,       // For control by volume driver
 *                'quality'        => 95,         // JPEG image save quality
 *                'offDropWith'    => null        // To disable it if it is dropped with pressing the meta key
 *                                                // Alt: 8, Ctrl: 4, Meta: 2, Shift: 1 - sum of each value
 *                                                // In case of using any key, specify it as an array
 *            )
 *        ),
 *        // each volume configure (optional)
 *        'roots' => array(
 *            array(
 *                'driver' => 'LocalFileSystem',
 *                'path'   => '/path/to/files/',
 *                'URL'    => 'http://localhost/to/files/'
 *                'plugin' => array(
 *                    'AutoRotate' => array(
 *                        'enable'         => true,       // For control by volume driver
 *                        'quality'        => 95,         // JPEG image save quality
 *                        'offDropWith'    => null        // To disable it if it is dropped with pressing the meta key
 *                                                        // Alt: 8, Ctrl: 4, Meta: 2, Shift: 1 - sum of each value
 *                                                        // In case of using any key, specify it as an array
 *                    )
 *                )
 *            )
 *        )
 *    );
 *
 * @package elfinder
 * @author Naoki Sawada
 * @license New BSD
 */
class elFinderPluginAutoRotate extends elFinderPlugin {

    public function 
__construct($opts) {
        
$defaults = array(
            
'enable'         => true,       // For control by volume driver
            
'quality'        => 95,         // JPEG image save quality
            
'offDropWith'    => null        // To disable it if it is dropped with pressing the meta key
                                            // Alt: 8, Ctrl: 4, Meta: 2, Shift: 1 - sum of each value
                                            // In case of using any key, specify it as an array
        
);

        
$this->opts array_merge($defaults$opts);

    }

    public function 
onUpLoadPreSave(&$thash, &$name$src$elfinder$volume) {
        
$opts $this->getCurrentOpts($volume);
        
        if (! 
$this->iaEnabled($opts)) {
            return 
false;
        }
        
        
$imageType null;
        
$srcImgInfo null;
        if (
extension_loaded('fileinfo') && function_exists('mime_content_type')) {
            
$mime mime_content_type($src);
            if (
substr($mime05) !== 'image') {
                return 
false;
            }
        }
        if (
extension_loaded('exif') && function_exists('exif_imagetype')) {
            
$imageType exif_imagetype($src);
        } else {
            
$srcImgInfo getimagesize($src);
            if (
$srcImgInfo === false) {
                return 
false;
            }
            
$imageType $srcImgInfo[2];
        }
        
        
// check target image type
        
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);
    }
}