| 
									
										
										
										
											2009-05-25 13:13:38 -04:00
										 |  |  | <?php | 
					
						
							|  |  |  | /** | 
					
						
							| 
									
										
										
										
											2009-08-25 18:12:20 -04:00
										 |  |  |  * StatusNet, the distributed open-source microblogging tool | 
					
						
							| 
									
										
										
										
											2009-05-25 13:13:38 -04:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Show notice attachments | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * PHP version 5 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * LICENCE: This program is free software: you can redistribute it and/or modify | 
					
						
							|  |  |  |  * it under the terms of the GNU Affero General Public License as published by | 
					
						
							|  |  |  |  * the Free Software Foundation, either version 3 of the License, or | 
					
						
							|  |  |  |  * (at your option) any later version. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  |  * GNU Affero General Public License for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You should have received a copy of the GNU Affero General Public License | 
					
						
							|  |  |  |  * along with this program.  If not, see <http://www.gnu.org/licenses/>. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category  Personal | 
					
						
							| 
									
										
										
										
											2009-08-25 18:12:20 -04:00
										 |  |  |  * @package   StatusNet | 
					
						
							| 
									
										
										
										
											2009-08-25 18:19:04 -04:00
										 |  |  |  * @author    Evan Prodromou <evan@status.net> | 
					
						
							| 
									
										
										
										
											2009-08-25 18:12:20 -04:00
										 |  |  |  * @copyright 2008-2009 StatusNet, Inc. | 
					
						
							| 
									
										
										
										
											2009-05-25 13:13:38 -04:00
										 |  |  |  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 | 
					
						
							| 
									
										
										
										
											2009-08-25 18:16:46 -04:00
										 |  |  |  * @link      http://status.net/ | 
					
						
							| 
									
										
										
										
											2009-05-25 13:13:38 -04:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 12:57:46 +02:00
										 |  |  | if (!defined('GNUSOCIAL')) { exit(1); } | 
					
						
							| 
									
										
										
										
											2009-05-25 13:13:38 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Show notice attachments | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category Personal | 
					
						
							| 
									
										
										
										
											2009-08-25 18:12:20 -04:00
										 |  |  |  * @package  StatusNet | 
					
						
							| 
									
										
										
										
											2009-08-25 18:19:04 -04:00
										 |  |  |  * @author   Evan Prodromou <evan@status.net> | 
					
						
							| 
									
										
										
										
											2009-05-25 13:13:38 -04:00
										 |  |  |  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 | 
					
						
							| 
									
										
										
										
											2009-08-25 18:16:46 -04:00
										 |  |  |  * @link     http://status.net/ | 
					
						
							| 
									
										
										
										
											2009-05-25 13:13:38 -04:00
										 |  |  |  */ | 
					
						
							|  |  |  | class Attachment_thumbnailAction extends AttachmentAction | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2014-04-21 11:35:42 +02:00
										 |  |  |     protected $thumb_w = null;  // max width
 | 
					
						
							|  |  |  |     protected $thumb_h = null;  // max height
 | 
					
						
							| 
									
										
										
										
											2014-04-21 20:39:28 +02:00
										 |  |  |     protected $thumb_c = null;  // crop?
 | 
					
						
							| 
									
										
										
										
											2014-04-21 11:35:42 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-25 11:23:04 +01:00
										 |  |  |     protected function doPreparation() | 
					
						
							| 
									
										
										
										
											2009-07-01 16:24:22 -07:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2015-01-25 11:23:04 +01:00
										 |  |  |         parent::doPreparation(); | 
					
						
							| 
									
										
										
										
											2014-04-21 11:35:42 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-21 20:39:28 +02:00
										 |  |  |         $this->thumb_w = $this->int('w'); | 
					
						
							|  |  |  |         $this->thumb_h = $this->int('h'); | 
					
						
							|  |  |  |         $this->thumb_c = $this->boolean('c'); | 
					
						
							| 
									
										
										
										
											2009-07-01 16:24:22 -07:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-25 11:23:04 +01:00
										 |  |  |     public function showPage() | 
					
						
							| 
									
										
										
										
											2009-05-25 13:13:38 -04:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2014-04-21 11:35:42 +02:00
										 |  |  |         // Returns a File_thumbnail object or throws exception if not available
 | 
					
						
							| 
									
										
										
										
											2014-06-17 11:54:05 +02:00
										 |  |  |         try { | 
					
						
							| 
									
										
										
										
											2019-06-25 23:20:17 +01:00
										 |  |  |             $file = $this->attachment->getThumbnail($this->thumb_w, $this->thumb_h, $this->thumb_c)->getFile(); | 
					
						
							| 
									
										
										
										
											2014-06-17 11:54:05 +02:00
										 |  |  |         } catch (UseFileAsThumbnailException $e) { | 
					
						
							| 
									
										
										
										
											2019-06-25 23:20:17 +01:00
										 |  |  |             // With this exception, the file exists locally
 | 
					
						
							|  |  |  |             $file = $e->file; | 
					
						
							| 
									
										
										
										
											2014-06-17 11:54:05 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2015-01-25 02:24:41 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-25 23:20:17 +01:00
										 |  |  |         if (!$file->isLocal()) { | 
					
						
							|  |  |  |             // Not locally stored, redirect to the URL the file came from
 | 
					
						
							|  |  |  |             // Don't use getURL because it can give us a local URL, which we don't want
 | 
					
						
							|  |  |  |             common_redirect($file->url, 302); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $filepath = $this->attachment->getPath(); | 
					
						
							|  |  |  |             $filename = MediaFile::getDisplayName($file); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             // Disable errors, to not mess with the file contents (suppress errors in case access to this
 | 
					
						
							|  |  |  |             // function is blocked, like in some shared hosts). Automatically reset at the end of the
 | 
					
						
							|  |  |  |             // script execution, and we don't want to have any more errors until then, so don't reset it
 | 
					
						
							|  |  |  |             @ini_set('display_errors', 0); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             header("Content-Description: File Transfer"); | 
					
						
							|  |  |  |             header("Content-Type: {$file->mimetype}"); | 
					
						
							|  |  |  |             header("Content-Disposition: inline; filename=\"{$filename}\""); | 
					
						
							|  |  |  |             header('Expires: 0'); | 
					
						
							|  |  |  |             header('Content-Transfer-Encoding: binary'); | 
					
						
							|  |  |  |             $filesize = $this->file->size; | 
					
						
							|  |  |  |             // 'if available', it says, so ensure we have it
 | 
					
						
							|  |  |  |             if (empty($filesize)) { | 
					
						
							|  |  |  |                 $filesize = filesize($this->attachment->filename); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             header("Content-Length: {$filesize}"); | 
					
						
							|  |  |  |             // header('Cache-Control: private, no-transform, no-store, must-revalidate');
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $ret = @readfile($filepath); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if ($ret === false || $ret !== $filesize) { | 
					
						
							|  |  |  |                 common_log(LOG_ERR, "The lengths of the file as recorded on the DB (or on disk) for the file " . | 
					
						
							|  |  |  |                            "{$filepath}, with id={$this->attachment->id} differ from what was sent to the user."); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-05-25 13:13:38 -04:00
										 |  |  |     } | 
					
						
							|  |  |  | } |