| 
									
										
										
										
											2009-05-11 13:45:00 -04:00
										 |  |  | <?php | 
					
						
							|  |  |  | /* | 
					
						
							| 
									
										
										
										
											2009-08-25 18:14:12 -04:00
										 |  |  |  * StatusNet - the distributed open-source microblogging tool | 
					
						
							| 
									
										
										
										
											2009-08-25 18:12:20 -04:00
										 |  |  |  * Copyright (C) 2008, 2009, StatusNet, Inc. | 
					
						
							| 
									
										
										
										
											2009-05-11 13:45:00 -04:00
										 |  |  |  * | 
					
						
							|  |  |  |  * 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/>. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-20 16:06:41 +02:00
										 |  |  | if (!defined('GNUSOCIAL')) { exit(1); } | 
					
						
							| 
									
										
										
										
											2009-05-11 13:45:00 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Table Definition for file_oembed | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-22 17:52:02 -04:00
										 |  |  | class File_oembed extends Managed_DataObject | 
					
						
							| 
									
										
										
										
											2009-05-11 13:45:00 -04:00
										 |  |  | { | 
					
						
							|  |  |  |     public $__table = 'file_oembed';                     // table name
 | 
					
						
							| 
									
										
										
										
											2009-06-22 14:19:41 -07:00
										 |  |  |     public $file_id;                         // int(4)  primary_key not_null
 | 
					
						
							| 
									
										
										
										
											2009-06-23 09:52:31 -07:00
										 |  |  |     public $version;                         // varchar(20)
 | 
					
						
							|  |  |  |     public $type;                            // varchar(20)
 | 
					
						
							| 
									
										
										
										
											2009-08-26 14:53:52 -04:00
										 |  |  |     public $mimetype;                        // varchar(50)
 | 
					
						
							| 
									
										
										
										
											2009-06-23 09:52:31 -07:00
										 |  |  |     public $provider;                        // varchar(50)
 | 
					
						
							| 
									
										
										
										
											2015-02-12 18:18:55 +01:00
										 |  |  |     public $provider_url;                    // varchar(191)   not 255 because utf8mb4 takes more space
 | 
					
						
							| 
									
										
										
										
											2009-06-23 09:52:31 -07:00
										 |  |  |     public $width;                           // int(4)
 | 
					
						
							|  |  |  |     public $height;                          // int(4)
 | 
					
						
							|  |  |  |     public $html;                            // text()
 | 
					
						
							| 
									
										
										
										
											2015-02-12 18:18:55 +01:00
										 |  |  |     public $title;                           // varchar(191)   not 255 because utf8mb4 takes more space
 | 
					
						
							| 
									
										
										
										
											2009-06-23 09:52:31 -07:00
										 |  |  |     public $author_name;                     // varchar(50)
 | 
					
						
							| 
									
										
										
										
											2015-02-12 18:18:55 +01:00
										 |  |  |     public $author_url;                      // varchar(191)   not 255 because utf8mb4 takes more space
 | 
					
						
							|  |  |  |     public $url;                             // varchar(191)   not 255 because utf8mb4 takes more space
 | 
					
						
							| 
									
										
										
										
											2009-06-22 14:19:41 -07:00
										 |  |  |     public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
 | 
					
						
							| 
									
										
										
										
											2009-05-11 13:45:00 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-22 17:52:02 -04:00
										 |  |  |     public static function schemaDef() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return array( | 
					
						
							|  |  |  |             'fields' => array( | 
					
						
							|  |  |  |                 'file_id' => array('type' => 'int', 'not null' => true, 'description' => 'oEmbed for that URL/file'), | 
					
						
							|  |  |  |                 'version' => array('type' => 'varchar', 'length' => 20, 'description' => 'oEmbed spec. version'), | 
					
						
							|  |  |  |                 'type' => array('type' => 'varchar', 'length' => 20, 'description' => 'oEmbed type: photo, video, link, rich'), | 
					
						
							|  |  |  |                 'mimetype' => array('type' => 'varchar', 'length' => 50, 'description' => 'mime type of resource'), | 
					
						
							| 
									
										
										
										
											2015-12-27 12:11:29 +01:00
										 |  |  |                 'provider' => array('type' => 'text', 'description' => 'name of this oEmbed provider'), | 
					
						
							|  |  |  |                 'provider_url' => array('type' => 'text', 'description' => 'URL of this oEmbed provider'), | 
					
						
							| 
									
										
										
										
											2011-08-22 17:52:02 -04:00
										 |  |  |                 'width' => array('type' => 'int', 'description' => 'width of oEmbed resource when available'), | 
					
						
							|  |  |  |                 'height' => array('type' => 'int', 'description' => 'height of oEmbed resource when available'), | 
					
						
							|  |  |  |                 'html' => array('type' => 'text', 'description' => 'html representation of this oEmbed resource when applicable'), | 
					
						
							| 
									
										
										
										
											2015-12-27 12:11:29 +01:00
										 |  |  |                 'title' => array('type' => 'text', 'description' => 'title of oEmbed resource when available'), | 
					
						
							|  |  |  |                 'author_name' => array('type' => 'text', 'description' => 'author name for this oEmbed resource'), | 
					
						
							|  |  |  |                 'author_url' => array('type' => 'text', 'description' => 'author URL for this oEmbed resource'), | 
					
						
							|  |  |  |                 'url' => array('type' => 'text', 'description' => 'URL for this oEmbed resource when applicable (photo, link)'), | 
					
						
							| 
									
										
										
										
											2011-08-22 17:52:02 -04:00
										 |  |  |                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             'primary key' => array('file_id'), | 
					
						
							|  |  |  |             'foreign keys' => array( | 
					
						
							|  |  |  |                 'file_oembed_file_id_fkey' => array('file', array('file_id' => 'id')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-07 09:52:48 +02:00
										 |  |  |     static function _getOembed($url) { | 
					
						
							| 
									
										
										
										
											2010-11-12 17:41:35 -08:00
										 |  |  |         try { | 
					
						
							| 
									
										
										
										
											2015-11-30 02:06:04 +01:00
										 |  |  |             return oEmbedHelper::getObject($url); | 
					
						
							| 
									
										
										
										
											2010-11-12 17:41:35 -08:00
										 |  |  |         } catch (Exception $e) { | 
					
						
							| 
									
										
										
										
											2013-10-29 14:09:00 +01:00
										 |  |  |             common_log(LOG_INFO, "Error during oembed lookup for $url - " . $e->getMessage()); | 
					
						
							| 
									
										
										
										
											2010-11-12 17:41:35 -08:00
										 |  |  |             return false; | 
					
						
							| 
									
										
										
										
											2009-07-15 17:10:36 -04:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-05-13 14:27:32 -04:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-25 02:32:04 +01:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Fetch an entry by using a File's id | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2015-10-01 22:18:33 +02:00
										 |  |  |     static function getByFile(File $file) { | 
					
						
							|  |  |  |         $fo = new File_oembed(); | 
					
						
							|  |  |  |         $fo->file_id = $file->id; | 
					
						
							|  |  |  |         if (!$fo->find(true)) { | 
					
						
							|  |  |  |             throw new NoResultException($fo); | 
					
						
							| 
									
										
										
										
											2015-01-25 02:32:04 +01:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2015-10-01 22:18:33 +02:00
										 |  |  |         return $fo; | 
					
						
							| 
									
										
										
										
											2015-01-25 02:32:04 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-19 22:05:44 +02:00
										 |  |  |     public function getUrl() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return $this->url; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-10 13:39:42 -08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Save embedding info for a new file. | 
					
						
							|  |  |  |      * | 
					
						
							| 
									
										
										
										
											2010-03-10 14:31:29 -08:00
										 |  |  |      * @param object $data Services_oEmbed_Object_* | 
					
						
							| 
									
										
										
										
											2010-03-10 13:39:42 -08:00
										 |  |  |      * @param int $file_id | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2014-04-20 16:06:41 +02:00
										 |  |  |     public static function saveNew($data, $file_id) { | 
					
						
							| 
									
										
										
										
											2009-05-13 14:27:32 -04:00
										 |  |  |         $file_oembed = new File_oembed; | 
					
						
							|  |  |  |         $file_oembed->file_id = $file_id; | 
					
						
							| 
									
										
										
										
											2013-11-10 14:33:45 +01:00
										 |  |  |         if (!isset($data->version)) { | 
					
						
							|  |  |  |             common_debug('DEBUGGING oEmbed: data->version undefined in variable $data: '.var_export($data, true)); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-07-15 17:10:36 -04:00
										 |  |  |         $file_oembed->version = $data->version; | 
					
						
							|  |  |  |         $file_oembed->type = $data->type; | 
					
						
							|  |  |  |         if (!empty($data->provider_name)) $file_oembed->provider = $data->provider_name; | 
					
						
							|  |  |  |         if (!empty($data->provider)) $file_oembed->provider = $data->provider; | 
					
						
							| 
									
										
										
										
											2012-08-11 13:04:42 +02:00
										 |  |  |         if (!empty($data->provider_url)) $file_oembed->provider_url = $data->provider_url; | 
					
						
							| 
									
										
										
										
											2009-07-15 17:10:36 -04:00
										 |  |  |         if (!empty($data->width)) $file_oembed->width = intval($data->width); | 
					
						
							|  |  |  |         if (!empty($data->height)) $file_oembed->height = intval($data->height); | 
					
						
							|  |  |  |         if (!empty($data->html)) $file_oembed->html = $data->html; | 
					
						
							|  |  |  |         if (!empty($data->title)) $file_oembed->title = $data->title; | 
					
						
							|  |  |  |         if (!empty($data->author_name)) $file_oembed->author_name = $data->author_name; | 
					
						
							|  |  |  |         if (!empty($data->author_url)) $file_oembed->author_url = $data->author_url; | 
					
						
							| 
									
										
										
										
											2009-08-26 14:53:52 -04:00
										 |  |  |         if (!empty($data->url)){ | 
					
						
							|  |  |  |             $file_oembed->url = $data->url; | 
					
						
							|  |  |  |             $given_url = File_redirection::_canonUrl($file_oembed->url); | 
					
						
							|  |  |  |             if (! empty($given_url)){ | 
					
						
							| 
									
										
										
										
											2016-03-29 12:13:53 +02:00
										 |  |  |                 try { | 
					
						
							|  |  |  |                     $file = File::getByUrl($given_url); | 
					
						
							| 
									
										
										
										
											2013-11-10 14:33:45 +01:00
										 |  |  |                     $file_oembed->mimetype = $file->mimetype; | 
					
						
							| 
									
										
										
										
											2016-03-29 12:13:53 +02:00
										 |  |  |                 } catch (NoResultException $e) { | 
					
						
							| 
									
										
										
										
											2017-05-01 10:27:21 +02:00
										 |  |  |                     // File_redirection::where argument 'discover' is false to avoid loops
 | 
					
						
							|  |  |  |                     $redir = File_redirection::where($given_url, false); | 
					
						
							| 
									
										
										
										
											2017-05-02 09:07:00 +02:00
										 |  |  |                     if (!empty($redir->file_id)) { | 
					
						
							| 
									
										
										
										
											2015-11-02 05:15:08 +00:00
										 |  |  |                         $file_id = $redir->file_id; | 
					
						
							| 
									
										
										
										
											2009-08-26 14:53:52 -04:00
										 |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2015-10-01 22:18:33 +02:00
										 |  |  |         $result = $file_oembed->insert(); | 
					
						
							|  |  |  |         if ($result === false) { | 
					
						
							|  |  |  |             throw new ServerException('Failed to insert File_oembed data into database!'); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2010-11-12 14:03:08 -08:00
										 |  |  |         if (!empty($data->thumbnail_url) || ($data->type == 'photo')) { | 
					
						
							| 
									
										
										
										
											2013-08-18 13:04:58 +02:00
										 |  |  |             $ft = File_thumbnail::getKV('file_id', $file_id); | 
					
						
							| 
									
										
										
										
											2013-11-10 14:33:45 +01:00
										 |  |  |             if ($ft instanceof File_thumbnail) { | 
					
						
							| 
									
										
										
										
											2010-01-10 13:25:16 -08:00
										 |  |  |                 common_log(LOG_WARNING, "Strangely, a File_thumbnail object exists for new file $file_id", | 
					
						
							|  |  |  |                            __FILE__); | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 File_thumbnail::saveNew($data, $file_id); | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2009-05-13 14:27:32 -04:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-05-11 13:45:00 -04:00
										 |  |  | } |