scratch – Blame information for rev 115

Subversion Repositories:
Rev:
Rev Author Line No. Line
115 office 1 <?php
2  
3 ###########################################################################
4 ## Copyright (C) Wizardry and Steamworks 2017 - License: GNU GPLv3 ##
5 ###########################################################################
6  
7 require_once('php/pseudocrypt.php');
8 require_once('php/functions.php');
9 require_once('vendor/autoload.php');
10 require_once('vendor/php-ffmpeg/php-ffmpeg/src/FFMpeg/FFMpeg.php');
11  
12 ### Load configuration.
13 $config = spyc_load_file('config.yaml');
14  
15 ### Open MIME.
16 $finfo = finfo_open(FILEINFO_MIME_TYPE);
17 if (!$finfo) {
18 http_response_code(500);
19 die('Internal server error.');
20 }
21  
22 echo json_encode(
23 array_map(
24 function ($file) use ($config, $finfo) {
25 #### Get the file hash.
26 $fileHash = array_shift(explode('.', $file));
27  
28 #### Build the user path.
29 $userPath = join(
30 DIRECTORY_SEPARATOR,
31 array(
32 $config['STORE_FOLDER'],
33 $file
34 )
35 );
36  
37 #### If the extension is not allowed then skip this file.
38 $fileExtension = pathinfo($userPath, PATHINFO_EXTENSION);
39 if (!isset($fileExtension) ||
40 !in_array(strtoupper($fileExtension),
41 array_map('strtoupper', $config['ALLOWED_FILE_EXTENSIONS']))) {
42 return;
43 }
44  
45 #### Hook for various file extensions.
46 $opengraph = FALSE;
47 switch (strtoupper($fileExtension)) {
48 case "MP4":
49 ### Generate a hash for the preview image.
50 $previewHash = strtolower(
51 PseudoCrypt::hash(
52 preg_replace(
53 '/\D/',
54 '',
55 hash(
56 'sha512',
57 $fileHash
58 )
59 ),
60 $config['ASSET_HASH_SIZE']
61 )
62 );
63  
64 ### Build the user path.
65 $previewFile = join(
66 DIRECTORY_SEPARATOR,
67 array(
68 $config['STORE_FOLDER'],
69 $previewHash
70 )
71 );
72  
73 ### Do not re-create the thumbnail if it already exists.
74 if (file_exists($previewFile.'.'.'jpg')) {
75 break;
76 }
77  
78 ### Extract thumbnail.
79 $ffmpeg = FFMpeg\FFMpeg::create();
80 $video = $ffmpeg->open($userPath);
81 $frame = $video->frame(
82 FFMpeg\Coordinate\TimeCode::fromSeconds(
83 $config['VIDEO_PREVIEW_IMAGE_FRAME_SECOND']
84 )
85 );
86 $frame->save($previewFile.'.'.'jpg');
87 $opengraph = TRUE;
88 break;
89 case "GIF":
90 $opengraph = TRUE;
91 $previewHash = $fileHash;
92 break;
93 default:
94 $previewHash = $fileHash;
95 break;
96 }
97 return array(
98 'url' => $fileHash,
99 'type' => finfo_file($finfo, $userPath),
100 'preview' => $previewHash,
101 'opengraph' => $opengraph
102 );
103 },
104 array_values(
105 array_filter(scandir($config['STORE_FOLDER']),
106 function ($entry) use ($config) {
107 return !is_dir($entry) && filesize(
108 join(
109 DIRECTORY_SEPARATOR,
110 array(
111 $config['STORE_FOLDER'],
112 $entry
113 )
114 )
115 );
116 }
117 )
118 )
119 )
120 );
121  
122 finfo_close($finfo);