File indexing completed on 2024-12-22 05:33:08
0001 <?php /** @noinspection PhpUndefinedFieldInspection */ 0002 0003 /** 0004 * ocs-fileserver 0005 * 0006 * Copyright 2016 by pling GmbH. 0007 * 0008 * This file is part of ocs-fileserver. 0009 * 0010 * ocs-fileserver is free software: you can redistribute it and/or modify 0011 * it under the terms of the GNU Affero General Public License as published by 0012 * the Free Software Foundation, either version 3 of the License, or 0013 * (at your option) any later version. 0014 * 0015 * ocs-fileserver is distributed in the hope that it will be useful, 0016 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0018 * GNU Affero General Public License for more details. 0019 * 0020 * You should have received a copy of the GNU Affero General Public License 0021 * along with Foobar. If not, see <http://www.gnu.org/licenses/>. 0022 **/ 0023 0024 class Media extends BaseController 0025 { 0026 0027 public function getGenres() 0028 { 0029 $clientId = null; 0030 $ownerId = null; 0031 $collectionId = null; 0032 $collectionCategory = null; 0033 $collectionTags = null; // Comma-separated list 0034 $collectionContentId = null; 0035 $fileId = null; 0036 $fileTypes = null; // Comma-separated list 0037 $fileCategory = null; 0038 $fileTags = null; // Comma-separated list 0039 $fileOcsCompatibility = 'all'; 0040 $fileContentId = null; 0041 $artistId = null; 0042 $albumId = null; 0043 $genre = null; 0044 $search = null; // 3 or more strings 0045 $favoriteIds = array(); 0046 $sort = 'name'; 0047 $perpage = $this->appConfig->general['perpage']; 0048 $page = 1; 0049 0050 if (!empty($this->request->client_id)) { 0051 $clientId = $this->request->client_id; 0052 } 0053 if (!empty($this->request->owner_id)) { 0054 $ownerId = $this->request->owner_id; 0055 } 0056 if (!empty($this->request->collection_id)) { 0057 $collectionId = $this->request->collection_id; 0058 } 0059 if (isset($this->request->collection_category)) { 0060 $collectionCategory = $this->request->collection_category; 0061 } 0062 if (isset($this->request->collection_tags)) { 0063 $collectionTags = $this->request->collection_tags; 0064 } 0065 if (isset($this->request->collection_content_id)) { 0066 $collectionContentId = $this->request->collection_content_id; 0067 } 0068 if (!empty($this->request->file_id)) { 0069 $fileId = $this->request->file_id; 0070 } 0071 if (!empty($this->request->file_types)) { 0072 $fileTypes = $this->request->file_types; 0073 } 0074 if (isset($this->request->file_category)) { 0075 $fileCategory = $this->request->file_category; 0076 } 0077 if (isset($this->request->file_tags)) { 0078 $fileTags = $this->request->file_tags; 0079 } 0080 if (!empty($this->request->file_ocs_compatibility)) { 0081 $fileOcsCompatibility = $this->request->file_ocs_compatibility; 0082 } 0083 if (isset($this->request->file_content_id)) { 0084 $fileContentId = $this->request->file_content_id; 0085 } 0086 if (!empty($this->request->artist_id)) { 0087 $artistId = $this->request->artist_id; 0088 } 0089 if (!empty($this->request->album_id)) { 0090 $albumId = $this->request->album_id; 0091 } 0092 if (!empty($this->request->genre)) { 0093 $genre = $this->request->genre; 0094 } 0095 if (!empty($this->request->search)) { 0096 $search = $this->request->search; 0097 } 0098 if (!empty($this->request->client_id) 0099 && !empty($this->request->favoritesby) 0100 ) { 0101 $favoriteIds = $this->_getFavoriteIds( 0102 $this->request->client_id, 0103 $this->request->favoritesby 0104 ); 0105 if (!$favoriteIds) { 0106 $this->response->setStatus(404); 0107 throw new Flooer_Exception('Not found', LOG_NOTICE); 0108 } 0109 } 0110 if (!empty($this->request->sort)) { 0111 $sort = $this->request->sort; 0112 } 0113 if (!empty($this->request->perpage) 0114 && $this->_isValidPerpageNumber($this->request->perpage) 0115 ) { 0116 $perpage = $this->request->perpage; 0117 } 0118 if (!empty($this->request->page) 0119 && $this->_isValidPageNumber($this->request->page) 0120 ) { 0121 $page = $this->request->page; 0122 } 0123 0124 $genres = $this->models->media->getGenres( 0125 $clientId, 0126 $ownerId, 0127 $collectionId, 0128 $collectionCategory, 0129 $collectionTags, 0130 $collectionContentId, 0131 $fileId, 0132 $fileTypes, 0133 $fileCategory, 0134 $fileTags, 0135 $fileOcsCompatibility, 0136 $fileContentId, 0137 $artistId, 0138 $albumId, 0139 $genre, 0140 $search, 0141 $favoriteIds, 0142 $sort, 0143 $perpage, 0144 $page 0145 ); 0146 0147 if (!$genres) { 0148 $this->response->setStatus(404); 0149 throw new Flooer_Exception('Not found', LOG_NOTICE); 0150 } 0151 0152 $this->_setResponseContent('success', $genres); 0153 } 0154 0155 public function getOwners() 0156 { 0157 $clientId = null; 0158 $ownerId = null; 0159 $collectionId = null; 0160 $collectionCategory = null; 0161 $collectionTags = null; // Comma-separated list 0162 $collectionContentId = null; 0163 $fileId = null; 0164 $fileTypes = null; // Comma-separated list 0165 $fileCategory = null; 0166 $fileTags = null; // Comma-separated list 0167 $fileOcsCompatibility = 'all'; 0168 $fileContentId = null; 0169 $artistId = null; 0170 $albumId = null; 0171 $genre = null; 0172 $search = null; // 3 or more strings 0173 $favoriteIds = array(); 0174 $sort = 'name'; 0175 $perpage = $this->appConfig->general['perpage']; 0176 $page = 1; 0177 0178 if (!empty($this->request->client_id)) { 0179 $clientId = $this->request->client_id; 0180 } 0181 if (!empty($this->request->owner_id)) { 0182 $ownerId = $this->request->owner_id; 0183 } 0184 if (!empty($this->request->collection_id)) { 0185 $collectionId = $this->request->collection_id; 0186 } 0187 if (isset($this->request->collection_category)) { 0188 $collectionCategory = $this->request->collection_category; 0189 } 0190 if (isset($this->request->collection_tags)) { 0191 $collectionTags = $this->request->collection_tags; 0192 } 0193 if (isset($this->request->collection_content_id)) { 0194 $collectionContentId = $this->request->collection_content_id; 0195 } 0196 if (!empty($this->request->file_id)) { 0197 $fileId = $this->request->file_id; 0198 } 0199 if (!empty($this->request->file_types)) { 0200 $fileTypes = $this->request->file_types; 0201 } 0202 if (isset($this->request->file_category)) { 0203 $fileCategory = $this->request->file_category; 0204 } 0205 if (isset($this->request->file_tags)) { 0206 $fileTags = $this->request->file_tags; 0207 } 0208 if (!empty($this->request->file_ocs_compatibility)) { 0209 $fileOcsCompatibility = $this->request->file_ocs_compatibility; 0210 } 0211 if (isset($this->request->file_content_id)) { 0212 $fileContentId = $this->request->file_content_id; 0213 } 0214 if (!empty($this->request->artist_id)) { 0215 $artistId = $this->request->artist_id; 0216 } 0217 if (!empty($this->request->album_id)) { 0218 $albumId = $this->request->album_id; 0219 } 0220 if (!empty($this->request->genre)) { 0221 $genre = $this->request->genre; 0222 } 0223 if (!empty($this->request->search)) { 0224 $search = $this->request->search; 0225 } 0226 if (!empty($this->request->client_id) 0227 && !empty($this->request->favoritesby) 0228 ) { 0229 $favoriteIds = $this->_getFavoriteIds( 0230 $this->request->client_id, 0231 $this->request->favoritesby 0232 ); 0233 if (!$favoriteIds) { 0234 $this->response->setStatus(404); 0235 throw new Flooer_Exception('Not found', LOG_NOTICE); 0236 } 0237 } 0238 if (!empty($this->request->sort)) { 0239 $sort = $this->request->sort; 0240 } 0241 if (!empty($this->request->perpage) 0242 && $this->_isValidPerpageNumber($this->request->perpage) 0243 ) { 0244 $perpage = $this->request->perpage; 0245 } 0246 if (!empty($this->request->page) 0247 && $this->_isValidPageNumber($this->request->page) 0248 ) { 0249 $page = $this->request->page; 0250 } 0251 0252 $owners = $this->models->media->getOwners( 0253 $clientId, 0254 $ownerId, 0255 $collectionId, 0256 $collectionCategory, 0257 $collectionTags, 0258 $collectionContentId, 0259 $fileId, 0260 $fileTypes, 0261 $fileCategory, 0262 $fileTags, 0263 $fileOcsCompatibility, 0264 $fileContentId, 0265 $artistId, 0266 $albumId, 0267 $genre, 0268 $search, 0269 $favoriteIds, 0270 $sort, 0271 $perpage, 0272 $page 0273 ); 0274 0275 if (!$owners) { 0276 $this->response->setStatus(404); 0277 throw new Flooer_Exception('Not found', LOG_NOTICE); 0278 } 0279 0280 $this->_setResponseContent('success', $owners); 0281 } 0282 0283 public function getCollections() 0284 { 0285 $clientId = null; 0286 $ownerId = null; 0287 $collectionId = null; 0288 $collectionCategory = null; 0289 $collectionTags = null; // Comma-separated list 0290 $collectionContentId = null; 0291 $fileId = null; 0292 $fileTypes = null; // Comma-separated list 0293 $fileCategory = null; 0294 $fileTags = null; // Comma-separated list 0295 $fileOcsCompatibility = 'all'; 0296 $fileContentId = null; 0297 $artistId = null; 0298 $albumId = null; 0299 $genre = null; 0300 $search = null; // 3 or more strings 0301 $favoriteIds = array(); 0302 $sort = 'name'; 0303 $perpage = $this->appConfig->general['perpage']; 0304 $page = 1; 0305 0306 if (!empty($this->request->client_id)) { 0307 $clientId = $this->request->client_id; 0308 } 0309 if (!empty($this->request->owner_id)) { 0310 $ownerId = $this->request->owner_id; 0311 } 0312 if (!empty($this->request->collection_id)) { 0313 $collectionId = $this->request->collection_id; 0314 } 0315 if (isset($this->request->collection_category)) { 0316 $collectionCategory = $this->request->collection_category; 0317 } 0318 if (isset($this->request->collection_tags)) { 0319 $collectionTags = $this->request->collection_tags; 0320 } 0321 if (isset($this->request->collection_content_id)) { 0322 $collectionContentId = $this->request->collection_content_id; 0323 } 0324 if (!empty($this->request->file_id)) { 0325 $fileId = $this->request->file_id; 0326 } 0327 if (!empty($this->request->file_types)) { 0328 $fileTypes = $this->request->file_types; 0329 } 0330 if (isset($this->request->file_category)) { 0331 $fileCategory = $this->request->file_category; 0332 } 0333 if (isset($this->request->file_tags)) { 0334 $fileTags = $this->request->file_tags; 0335 } 0336 if (!empty($this->request->file_ocs_compatibility)) { 0337 $fileOcsCompatibility = $this->request->file_ocs_compatibility; 0338 } 0339 if (isset($this->request->file_content_id)) { 0340 $fileContentId = $this->request->file_content_id; 0341 } 0342 if (!empty($this->request->artist_id)) { 0343 $artistId = $this->request->artist_id; 0344 } 0345 if (!empty($this->request->album_id)) { 0346 $albumId = $this->request->album_id; 0347 } 0348 if (!empty($this->request->genre)) { 0349 $genre = $this->request->genre; 0350 } 0351 if (!empty($this->request->search)) { 0352 $search = $this->request->search; 0353 } 0354 if (!empty($this->request->client_id) 0355 && !empty($this->request->favoritesby) 0356 ) { 0357 $favoriteIds = $this->_getFavoriteIds( 0358 $this->request->client_id, 0359 $this->request->favoritesby 0360 ); 0361 if (!$favoriteIds) { 0362 $this->response->setStatus(404); 0363 throw new Flooer_Exception('Not found', LOG_NOTICE); 0364 } 0365 } 0366 if (!empty($this->request->sort)) { 0367 $sort = $this->request->sort; 0368 } 0369 if (!empty($this->request->perpage) 0370 && $this->_isValidPerpageNumber($this->request->perpage) 0371 ) { 0372 $perpage = $this->request->perpage; 0373 } 0374 if (!empty($this->request->page) 0375 && $this->_isValidPageNumber($this->request->page) 0376 ) { 0377 $page = $this->request->page; 0378 } 0379 0380 $collections = $this->models->media->getCollections( 0381 $clientId, 0382 $ownerId, 0383 $collectionId, 0384 $collectionCategory, 0385 $collectionTags, 0386 $collectionContentId, 0387 $fileId, 0388 $fileTypes, 0389 $fileCategory, 0390 $fileTags, 0391 $fileOcsCompatibility, 0392 $fileContentId, 0393 $artistId, 0394 $albumId, 0395 $genre, 0396 $search, 0397 $favoriteIds, 0398 $sort, 0399 $perpage, 0400 $page 0401 ); 0402 0403 if (!$collections) { 0404 $this->response->setStatus(404); 0405 throw new Flooer_Exception('Not found', LOG_NOTICE); 0406 } 0407 0408 $this->_setResponseContent('success', $collections); 0409 } 0410 0411 public function getIndex() 0412 { 0413 $clientId = null; 0414 $ownerId = null; 0415 $collectionId = null; 0416 $collectionCategory = null; 0417 $collectionTags = null; // Comma-separated list 0418 $collectionContentId = null; 0419 $fileId = null; 0420 $fileTypes = null; // Comma-separated list 0421 $fileCategory = null; 0422 $fileTags = null; // Comma-separated list 0423 $fileOcsCompatibility = 'all'; 0424 $fileContentId = null; 0425 $artistId = null; 0426 $albumId = null; 0427 $genre = null; 0428 $search = null; // 3 or more strings 0429 $ids = null; // Comma-separated list 0430 $favoriteIds = array(); 0431 $playedTimeperiodBegin = null; // Datetime format 0432 $playedTimeperiodEnd = null; // Datetime format 0433 $sort = 'name'; 0434 $perpage = $this->appConfig->general['perpage']; 0435 $page = 1; 0436 0437 if (!empty($this->request->client_id)) { 0438 $clientId = $this->request->client_id; 0439 } 0440 if (!empty($this->request->owner_id)) { 0441 $ownerId = $this->request->owner_id; 0442 } 0443 if (!empty($this->request->collection_id)) { 0444 $collectionId = $this->request->collection_id; 0445 } 0446 if (isset($this->request->collection_category)) { 0447 $collectionCategory = $this->request->collection_category; 0448 } 0449 if (isset($this->request->collection_tags)) { 0450 $collectionTags = $this->request->collection_tags; 0451 } 0452 if (isset($this->request->collection_content_id)) { 0453 $collectionContentId = $this->request->collection_content_id; 0454 } 0455 if (!empty($this->request->file_id)) { 0456 $fileId = $this->request->file_id; 0457 } 0458 if (!empty($this->request->file_types)) { 0459 $fileTypes = $this->request->file_types; 0460 } 0461 if (isset($this->request->file_category)) { 0462 $fileCategory = $this->request->file_category; 0463 } 0464 if (isset($this->request->file_tags)) { 0465 $fileTags = $this->request->file_tags; 0466 } 0467 if (!empty($this->request->file_ocs_compatibility)) { 0468 $fileOcsCompatibility = $this->request->file_ocs_compatibility; 0469 } 0470 if (isset($this->request->file_content_id)) { 0471 $fileContentId = $this->request->file_content_id; 0472 } 0473 if (!empty($this->request->artist_id)) { 0474 $artistId = $this->request->artist_id; 0475 } 0476 if (!empty($this->request->album_id)) { 0477 $albumId = $this->request->album_id; 0478 } 0479 if (!empty($this->request->genre)) { 0480 $genre = $this->request->genre; 0481 } 0482 if (!empty($this->request->search)) { 0483 $search = $this->request->search; 0484 } 0485 if (!empty($this->request->ids)) { 0486 $ids = $this->request->ids; 0487 } 0488 if (!empty($this->request->client_id) 0489 && !empty($this->request->favoritesby) 0490 ) { 0491 $favoriteIds = $this->_getFavoriteIds( 0492 $this->request->client_id, 0493 $this->request->favoritesby 0494 ); 0495 if (!$favoriteIds) { 0496 $this->response->setStatus(404); 0497 throw new Flooer_Exception('Not found', LOG_NOTICE); 0498 } 0499 } 0500 if (!empty($this->request->played_timeperiod_begin)) { 0501 $playedTimeperiodBegin = $this->request->played_timeperiod_begin; 0502 } 0503 if (!empty($this->request->played_timeperiod_end)) { 0504 $playedTimeperiodEnd = $this->request->played_timeperiod_end; 0505 } 0506 if (!empty($this->request->sort)) { 0507 $sort = $this->request->sort; 0508 } 0509 if (!empty($this->request->perpage) 0510 && $this->_isValidPerpageNumber($this->request->perpage) 0511 ) { 0512 $perpage = $this->request->perpage; 0513 } 0514 if (!empty($this->request->page) 0515 && $this->_isValidPageNumber($this->request->page) 0516 ) { 0517 $page = $this->request->page; 0518 } 0519 0520 $index = $this->models->media->getIndex( 0521 $clientId, 0522 $ownerId, 0523 $collectionId, 0524 $collectionCategory, 0525 $collectionTags, 0526 $collectionContentId, 0527 $fileId, 0528 $fileTypes, 0529 $fileCategory, 0530 $fileTags, 0531 $fileOcsCompatibility, 0532 $fileContentId, 0533 $artistId, 0534 $albumId, 0535 $genre, 0536 $search, 0537 $ids, 0538 $favoriteIds, 0539 $playedTimeperiodBegin, 0540 $playedTimeperiodEnd, 0541 $sort, 0542 $perpage, 0543 $page 0544 ); 0545 0546 if (!$index) { 0547 $this->response->setStatus(404); 0548 throw new Flooer_Exception('Not found', LOG_NOTICE); 0549 } 0550 0551 $this->_setResponseContent('success', $index); 0552 } 0553 0554 public function getMedia() 0555 { 0556 $id = null; 0557 0558 if (!empty($this->request->id)) { 0559 $id = $this->request->id; 0560 } 0561 0562 $media = $this->models->media->getMedia($id); 0563 0564 if (!$media) { 0565 $this->response->setStatus(404); 0566 throw new Flooer_Exception('Not found', LOG_NOTICE); 0567 } 0568 0569 $this->_setResponseContent( 0570 'success', 0571 array('media' => $media) 0572 ); 0573 } 0574 0575 public function headStream() 0576 { 0577 $this->getStream(true); 0578 } 0579 0580 public function getStream($headeronly = false) 0581 { 0582 $id = null; 0583 $userId = null; 0584 0585 if (!empty($this->request->id)) { 0586 $id = $this->request->id; 0587 } 0588 // Disabled for now 0589 //if (!empty($this->request->u)) { 0590 // $userId = $this->request->u; 0591 //} 0592 0593 $media = $this->models->media->$id; 0594 0595 if (!$media) { 0596 $this->response->setStatus(404); 0597 throw new Flooer_Exception('Not found', LOG_NOTICE); 0598 } 0599 0600 $collection = $this->models->collections->{$media->collection_id}; 0601 $file = $this->models->files->{$media->file_id}; 0602 0603 if (!$headeronly && $media->played_ip != $this->server->REMOTE_ADDR) { 0604 $this->models->media->updatePlayedStatus($media->id); 0605 0606 $playedId = $this->models->media_played->generateId(); 0607 $this->models->media_played->$playedId = array( 0608 'client_id' => $media->client_id, 0609 'owner_id' => $media->owner_id, 0610 'collection_id' => $media->collection_id, 0611 'file_id' => $media->file_id, 0612 'media_id' => $media->id, 0613 'user_id' => $userId 0614 ); 0615 0616 } 0617 0618 $this->_sendFile( 0619 $this->appConfig->general['filesDir'] . '/' . $collection->name . '/' . $file->name, 0620 $file->name, 0621 $file->type, 0622 $file->size, 0623 false, 0624 $headeronly 0625 ); 0626 } 0627 0628 public function headCollectionthumbnail() 0629 { 0630 $this->getCollectionthumbnail(true); 0631 } 0632 0633 public function getCollectionthumbnail($headeronly = false) 0634 { 0635 $filepath = $this->appConfig->general['thumbnailsDir'] . '/collection_default.jpg'; 0636 if (isset($this->request->id) 0637 && is_file($this->appConfig->general['thumbnailsDir'] . '/collection_' . $this->request->id . '.jpg') 0638 ) { 0639 $filepath = $this->appConfig->general['thumbnailsDir'] . '/collection_' . $this->request->id . '.jpg'; 0640 } 0641 0642 $this->_sendFile( 0643 $filepath, 0644 basename($filepath), 0645 'image/jpeg', 0646 filesize($filepath), 0647 false, 0648 $headeronly 0649 ); 0650 } 0651 0652 public function postCollectionthumbnail() 0653 { 0654 if (!$this->_isAllowedAccess()) { 0655 $this->response->setStatus(403); 0656 throw new Flooer_Exception('Forbidden', LOG_NOTICE); 0657 } 0658 0659 $id = null; 0660 0661 if (!empty($this->request->id)) { 0662 $id = $this->request->id; 0663 } 0664 0665 $collection = $this->models->collections->$id; 0666 0667 if (!$collection) { 0668 $this->response->setStatus(404); 0669 throw new Flooer_Exception('Not found', LOG_NOTICE); 0670 } 0671 else if ($collection->client_id != $this->request->client_id) { 0672 $this->response->setStatus(403); 0673 throw new Flooer_Exception('Forbidden', LOG_NOTICE); 0674 } 0675 0676 $errors = array(); 0677 if (!isset($_FILES['file'])) { 0678 $errors['file'] = 'Required'; 0679 } 0680 if (!empty($_FILES['file']['error'])) { // 0 = UPLOAD_ERR_OK 0681 $errors['file'] = $_FILES['file']['error']; 0682 } 0683 if (!empty($_FILES['file']['tmp_name'])) { 0684 $finfo = new finfo(FILEINFO_MIME_TYPE); 0685 $type = $finfo->file($_FILES['file']['tmp_name']); 0686 if (strpos($type, 'image/jpeg') === false 0687 && strpos($type, 'image/png') === false 0688 ) { 0689 $errors['file'] = 'Must upload JPEG or PNG image'; 0690 } 0691 } 0692 0693 if ($errors) { 0694 $this->response->setStatus(400); 0695 $this->_setResponseContent( 0696 'error', 0697 array( 0698 'message' => 'Validation error', 0699 'errors' => $errors 0700 ) 0701 ); 0702 return; 0703 } 0704 0705 $image = imagecreatefromstring( 0706 file_get_contents($_FILES['file']['tmp_name']) 0707 ); 0708 0709 if ($image !== false) { 0710 imagejpeg($image, $this->appConfig->general['thumbnailsDir'] . '/collection_' . $id . '.jpg', 75); 0711 imagedestroy($image); 0712 } 0713 0714 $this->_setResponseContent('success'); 0715 } 0716 0717 public function headAlbumthumbnail() 0718 { 0719 $this->getAlbumthumbnail(true); 0720 } 0721 0722 public function getAlbumthumbnail($headeronly = false) 0723 { 0724 $filepath = $this->appConfig->general['thumbnailsDir'] . '/album_default.jpg'; 0725 if (isset($this->request->id) 0726 && is_file($this->appConfig->general['thumbnailsDir'] . '/album_' . $this->request->id . '.jpg') 0727 ) { 0728 $filepath = $this->appConfig->general['thumbnailsDir'] . '/album_' . $this->request->id . '.jpg'; 0729 } 0730 0731 $this->_sendFile( 0732 $filepath, 0733 basename($filepath), 0734 'image/jpeg', 0735 filesize($filepath), 0736 false, 0737 $headeronly 0738 ); 0739 } 0740 0741 public function postAlbumthumbnail() 0742 { 0743 if (!$this->_isAllowedAccess()) { 0744 $this->response->setStatus(403); 0745 throw new Flooer_Exception('Forbidden', LOG_NOTICE); 0746 } 0747 0748 $id = null; 0749 0750 if (!empty($this->request->id)) { 0751 $id = $this->request->id; 0752 } 0753 0754 $mediaAlbum = $this->models->media_albums->$id; 0755 0756 if (!$mediaAlbum) { 0757 $this->response->setStatus(404); 0758 throw new Flooer_Exception('Not found', LOG_NOTICE); 0759 } 0760 else if ($mediaAlbum->client_id != $this->request->client_id) { 0761 $this->response->setStatus(403); 0762 throw new Flooer_Exception('Forbidden', LOG_NOTICE); 0763 } 0764 0765 $errors = array(); 0766 if (!isset($_FILES['file'])) { 0767 $errors['file'] = 'Required'; 0768 } 0769 if (!empty($_FILES['file']['error'])) { // 0 = UPLOAD_ERR_OK 0770 $errors['file'] = $_FILES['file']['error']; 0771 } 0772 if (!empty($_FILES['file']['tmp_name'])) { 0773 $finfo = new finfo(FILEINFO_MIME_TYPE); 0774 $type = $finfo->file($_FILES['file']['tmp_name']); 0775 if (strpos($type, 'image/jpeg') === false 0776 && strpos($type, 'image/png') === false 0777 ) { 0778 $errors['file'] = 'Must upload JPEG or PNG image'; 0779 } 0780 } 0781 0782 if ($errors) { 0783 $this->response->setStatus(400); 0784 $this->_setResponseContent( 0785 'error', 0786 array( 0787 'message' => 'Validation error', 0788 'errors' => $errors 0789 ) 0790 ); 0791 return; 0792 } 0793 0794 $image = imagecreatefromstring( 0795 file_get_contents($_FILES['file']['tmp_name']) 0796 ); 0797 0798 if ($image !== false) { 0799 imagejpeg($image, $this->appConfig->general['thumbnailsDir'] . '/album_' . $id . '.jpg', 75); 0800 imagedestroy($image); 0801 } 0802 0803 $this->_setResponseContent('success'); 0804 } 0805 0806 }