| 
									
										
										
										
											2011-03-15 14:58:09 -07:00
										 |  |  | <?php | 
					
						
							| 
									
										
										
										
											2019-08-11 04:11:27 +01:00
										 |  |  | // This file is part of GNU social - https://www.gnu.org/software/social
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // GNU social 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.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // GNU social 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 GNU social.  If not, see <http://www.gnu.org/licenses/>.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-15 14:58:09 -07:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Data class to store local search subscriptions | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2019-08-11 04:11:27 +01:00
										 |  |  |  * @category  Plugin | 
					
						
							|  |  |  |  * @package   SearchSubPlugin | 
					
						
							|  |  |  |  * @author    Brion Vibber <brion@status.net> | 
					
						
							|  |  |  |  * @copyright 2011-2019 Free Software Foundation, Inc http://www.fsf.org | 
					
						
							|  |  |  |  * @license   https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later | 
					
						
							| 
									
										
										
										
											2011-03-15 14:58:09 -07:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-11 04:11:27 +01:00
										 |  |  | defined('GNUSOCIAL') || die(); | 
					
						
							| 
									
										
										
										
											2011-03-15 14:58:09 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * For storing the search subscriptions | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2019-08-11 04:11:27 +01:00
										 |  |  |  * @author    Brion Vibber <brion@status.net> | 
					
						
							|  |  |  |  * @copyright 2011-2019 Free Software Foundation, Inc http://www.fsf.org | 
					
						
							|  |  |  |  * @license   https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later | 
					
						
							| 
									
										
										
										
											2011-03-15 14:58:09 -07:00
										 |  |  |  * | 
					
						
							|  |  |  |  * @see      DB_DataObject | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | class SearchSub extends Managed_DataObject | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     public $__table = 'searchsub'; // table name
 | 
					
						
							|  |  |  |     public $search;         // text
 | 
					
						
							|  |  |  |     public $profile_id;  // int -> profile.id
 | 
					
						
							|  |  |  |     public $created;     // datetime
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * The One True Thingy that must be defined and declared. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public static function schemaDef() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return array( | 
					
						
							|  |  |  |             'description' => 'SearchSubPlugin search subscription records', | 
					
						
							|  |  |  |             'fields' => array( | 
					
						
							|  |  |  |                 'search' => array('type' => 'varchar', 'length' => 64, 'not null' => true, 'description' => 'hash search associated with this subscription'), | 
					
						
							|  |  |  |                 'profile_id' => array('type' => 'int', 'not null' => true, 'description' => 'profile ID of subscribing user'), | 
					
						
							|  |  |  |                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             'primary key' => array('search', 'profile_id'), | 
					
						
							|  |  |  |             'foreign keys' => array( | 
					
						
							|  |  |  |                 'searchsub_profile_id_fkey' => array('profile', array('profile_id' => 'id')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             'indexes' => array( | 
					
						
							|  |  |  |                 'searchsub_created_idx' => array('created'), | 
					
						
							| 
									
										
										
										
											2020-07-31 16:12:48 +03:00
										 |  |  |                 'searchsub_profile_id_search_idx' => array('profile_id', 'search'), | 
					
						
							| 
									
										
										
										
											2011-03-15 14:58:09 -07:00
										 |  |  |             ), | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Start a search subscription! | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param profile $profile subscriber | 
					
						
							|  |  |  |      * @param string $search subscribee | 
					
						
							|  |  |  |      * @return SearchSub | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-08-11 04:11:27 +01:00
										 |  |  |     public static function start(Profile $profile, $search) | 
					
						
							| 
									
										
										
										
											2011-03-15 14:58:09 -07:00
										 |  |  |     { | 
					
						
							|  |  |  |         $ts = new SearchSub(); | 
					
						
							|  |  |  |         $ts->search = $search; | 
					
						
							|  |  |  |         $ts->profile_id = $profile->id; | 
					
						
							|  |  |  |         $ts->created = common_sql_now(); | 
					
						
							|  |  |  |         $ts->insert(); | 
					
						
							| 
									
										
										
										
											2011-04-05 18:45:37 -04:00
										 |  |  |         self::blow('searchsub:by_profile:%d', $profile->id); | 
					
						
							| 
									
										
										
										
											2011-03-15 14:58:09 -07:00
										 |  |  |         return $ts; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * End a search subscription! | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param profile $profile subscriber | 
					
						
							|  |  |  |      * @param string $search subscribee | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-08-11 04:11:27 +01:00
										 |  |  |     public static function cancel(Profile $profile, $search) | 
					
						
							| 
									
										
										
										
											2011-03-15 14:58:09 -07:00
										 |  |  |     { | 
					
						
							|  |  |  |         $ts = SearchSub::pkeyGet(array('search' => $search, | 
					
						
							| 
									
										
										
										
											2019-08-11 04:11:27 +01:00
										 |  |  |             'profile_id' => $profile->id)); | 
					
						
							| 
									
										
										
										
											2011-03-15 14:58:09 -07:00
										 |  |  |         if ($ts) { | 
					
						
							|  |  |  |             $ts->delete(); | 
					
						
							| 
									
										
										
										
											2011-04-05 18:45:37 -04:00
										 |  |  |             self::blow('searchsub:by_profile:%d', $profile->id); | 
					
						
							| 
									
										
										
										
											2011-03-15 14:58:09 -07:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2011-04-05 18:45:37 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-11 04:11:27 +01:00
										 |  |  |     public static function forProfile(Profile $profile) | 
					
						
							| 
									
										
										
										
											2011-04-05 18:45:37 -04:00
										 |  |  |     { | 
					
						
							|  |  |  |         $searches = array(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $keypart = sprintf('searchsub:by_profile:%d', $profile->id); | 
					
						
							|  |  |  |         $searchstring = self::cacheGet($keypart); | 
					
						
							| 
									
										
										
										
											2019-08-11 04:11:27 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-07-04 12:49:09 -04:00
										 |  |  |         if ($searchstring !== false) { | 
					
						
							| 
									
										
										
										
											2019-08-11 04:11:27 +01:00
										 |  |  |             if (!empty($searchstring)) { | 
					
						
							|  |  |  |                 $searches = explode(',', $searchstring); | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2011-04-05 18:45:37 -04:00
										 |  |  |         } else { | 
					
						
							|  |  |  |             $searchsub = new SearchSub(); | 
					
						
							|  |  |  |             $searchsub->profile_id = $profile->id; | 
					
						
							| 
									
										
										
										
											2011-07-04 12:49:09 -04:00
										 |  |  |             $searchsub->selectAdd(); | 
					
						
							|  |  |  |             $searchsub->selectAdd('search'); | 
					
						
							| 
									
										
										
										
											2011-04-05 18:45:37 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |             if ($searchsub->find()) { | 
					
						
							| 
									
										
										
										
											2011-07-04 12:49:09 -04:00
										 |  |  |                 $searches = $searchsub->fetchAll('search'); | 
					
						
							| 
									
										
										
										
											2011-04-05 18:45:37 -04:00
										 |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             self::cacheSet($keypart, implode(',', $searches)); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $searches; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2011-03-15 14:58:09 -07:00
										 |  |  | } |